CSCI-6961/ECSE-6780: Software Engineering II • • • • • • Class: Mondays and Thursdays 4-5:20 pm, Carnegie 201 Instructor: Ana Milanova Email: milanova@cs.rpi.edu Office: Lally Hall 314 Phone: 518-276-6887 Office hours: Wednesdays 12-2pm, or by appointment • Web: www.cs.rpi.edu/~milanova/csci6961/ • Syllabus: www.cs.rpi.edu/~milanova/csci6961/syllabus.html What is Software Engineering II? • Catalog: Current techniques in software engineering with topics selected from economics, reusability, reliable software, program analysis, reverse engineering, CASE tools, automatic code generation, and project management techniques. • Our focus: Program analysis and its applications to software engineering, especially towards techniques and tools for improving software quality and reliability Program Analysis • Program analysis is a technique that reasons about the run-time behavior of the program – Static program analysis – reasoning is done statically, before program execution – Dynamic program analysis – reasoning is done dynamically, during program execution • We will focus on static program analysis – Traditional application – compiler optimization – New application – software engineering tools, especially tools for improving software quality and reliability Software Quality and Reliability • Development – – – – Requirements Analysis Domain Analysis Design Implementation Only about 5 to 10% of cost! – Testing/Validation • Maintenance – Enhancements – Bug fixes – Etc. DEPLOYMENT/ RELEASE 90 to 95% of cost! Economic Impact • National Institute of Standards and Technology study – On CNN.com – April 27th, 2003 – “Last year, a study commissioned by the National Institute of Standards and Technology found that software errors cost the U.S. economy $59.5 billion annually, or about 0.6 percent of the gross domestic product. More than half the costs are borne by software users, the rest by developers and vendors.” Beyond Dollar Costs • “Software Engineering: Report on a Conference Sponsored by the NATO Science Committee, Brussels, NATO Scientific Affairs Division,” 1968, p. 121 – An error in an aircraft design program contributed to several serious air crashes • “Software and its Impact: A Quantitative Assessment,” by B.W. Boehm, Datamation, 19(5), 48-59 (1973) – Errors in medical software have caused deaths Expectations • Can’t we expect software to execute correctly? • Carefully made programs – 5 faults/1000 LOC – 5000 faults/1M LOC • Windows XP has about 45M LOC – 45 x 5000 = 225,000 Goals of the Course • Learn about techniques for testing and validation – Software testing --- systematic execution of the software • Learn/review fundamentals of testing – Static program analysis --- track flow of control and data without execution of the software • Learn some theory of program analysis, learn about applications of program analysis towards testing and validation • Traditional static program analysis (data-flow analysis) – Dynamic program analysis --- track flow of control and data during execution of the software Syllabus • Course Material – Static Program Analysis – Fundamentals of Software Testing – Dynamic Program Analysis • Expected Work – – – – Project (50%) Midterm (20%) Homework (15%) Presentation of a research paper (15%) • Textbooks Prerequisites • SD&D/Software Engineering I • Java – Helpful to know, but other OO programming will work too • You will need a UNIX account on the CS system for the class project – Let me know if you don’t have one Testing: Decades of Experience Test Case Test case Generation (can be automated) Executes the software. Software Under Test Output No Good Coverage? Yes Validation (can be automated) Limitations of Testing • Not enough! • Kinds of bugs difficult to reveal with testing – Resource leakage bugs • Buffer overflows • Memory leaks – Concurrency related bugs • Data races • Atomicity violations • Deadlocks Static Program Analysis: Recently Static Analysis Tool Specification --what bugs to look for? (optional) Software Under Check Examines the source code, without execution. Warnings Examine warnings and fix bugs A Growing Area… • Microsoft – investment in static analysis tools for C/C++ with good results • IBM – less, mostly in the J2EE area (some tools are available through the Eclipse project). • NASA, US Navy • Successful companies with hundreds, even thousands of clients Our class, once again: techniques for improving software quality and reliability • Static program analysis (data-flow analysis) – Theory, applications and tools • Fundamentals of software testing – Review testing techniques, apply data-flow analysis in testing • Dynamic analysis – Applications and tools. Some Notable Software Bugs… • A collection of notable software bugs – Thanks to Atif Memon, University of Maryland Mars Climate Orbiter • Purpose: to relay signals from the Mars Polar Lander once it reached the surface • Disaster: smashed into the planet instead of reaching a safe orbit • Why: Software bug – failure to convert English measures to metric values • $165M Shooting Down of Airbus 300 • • • • • 1988 USS Vincennes shot down an Airbus 300 Mistook the Airbus 300 for an F-14 290 people dead Why: Software bug --- cryptic and misleading output displayed by the tracking software THERAC-25 Radiation Therapy • THERAC-25, a computer controlled radiation-therapy machine • 1986: two cancer patients at the East Texas Cancer Center in Tyler received fatal radiation overdoses • Why: Software bug --- a race condition (i.e., miscoordination between concurrent tasks) London Ambulance Service • London Ambulance Service Computer Aided Dispatch (LASCAD) • Purpose: automate many of the humanintensive processes of manual dispatch associated with ambulance service – Functions: Call tracking • Failure of the London Ambulance Service on 26 and 27 November 1992 “Nice of You to Turn Up” • Load increased • Emergencies accumulated • System made incorrect allocations – More than one ambulance being sent to the same incident – The closest vehicle was not chosen for the emergency • At 23:00 on November 28 the LAS eventually went to a back-up procedure after at least 20 patients die More… • “The development of software for ballistic-missile defense,” by H. Lin, Scientific American, vol. 253, no. 6 (Dec. 1995), p. 48 – An Air New Zealand airliner crashed into an Antarctic mountain – North American Aerospace Defense Command reported that the US was under missile attack; traced to faulty computer software that generated incorrect signals – Manned space capsule Gemini V missed its landing point by 100 miles More • “Ghost in the Machine,” Time Magazine, Jan. 29, 1990. p. 58 – Dallas/Fort Worth air-traffic system began spitting out gibberish in the Fall of 1989 and controllers had to track planes on paper • Software Reliability: Principles and Practice, p. 25, by G. J. Myers – Apollo 8 spacecraft erased part of the computer’s memory – Eighteen errors were detected during the 10day flight of Apollo 14 More… – An error in a single FORTRAN statement resulted in the loss of the first American probe to Venus – An Airbus 320 crashes at an air show – A China Airlines Airbus A300 crashes on April 26, 1994 killing 264 – Ariane 5 satellite launcher malfunction was caused by a faulty software exception routine More… • CNN.com – A poorly programmed ground-based warning system was partly responsible for the 1997 Korean Air crash in Guam that killed 228 people – Faulty software in anti-lock brakes forced the recall of 39,000 trucks and tractors and 6,000 school buses in 2000 • AND MANY MORE OF COURSE…