Lecture Date: Friday, November 11
Software is everywhere, and therefor when software fails, it can have an impact on your life. From something as simple as having to reboot your phone or computer to something much more serious like the phone or electric grid going down... or Netflix...
How might a software failure affect you? What things might affect your day-to-day life?
Famous Software Failures
- (1997) Ariane 5 explosion: Exception-handling bug forced self-destruct on maiden flight (64-bit to 16-bit conversion), causing $370 millions
- (1999) NASA’s Mars lander: Crashed due to a unit integration fault
- (2003) Northeast blackout: The alarm system in the energy management system failed due to a software error and operators were not informed of the power overload in the system – affected 40 million people in 8 US states, 10 million people in Ontario, Canada
- (2012) Knight Capital’s trading software: Faults in a new trading algorithm causes $440 millions
- (2014) Dropbox’s outage was due to a fault in a maintenance script
- (2016) Information lost after clicking the back button while using TurboTax web software
We have already discussed failures. A failure is incorrect behavior with respect to the requirements or other descriptions of the expected behavior. We looked at three different categories of failures:
- syntax - a problem with the code you wrote such that the system doesn't even run
- runtime - a problem with the code such that it crashes upon execution
- logical - a problem with the code in that it doesn't "do what it is supposed to"
The "problems" mentioned in these definitions are called faults or more commonly bugs. Mistakes by the program lead to leaving faults in the code, which turn into errors upon execution that can lead to failures in the system.
Testing is the process of finding input values that exercise the various parts of your code to ensure there are no faults and that no failures occur. It's important to note that it is (in general) difficult at best to find all of the faults in a system. We are trying to improve the quality of the system and reduce overall software development costs.
When do you test and how much do you test? Who does the testing?
Let's consider some simple examples!