Let’s visit twenty one interesting historical software failures. The idea is to analyze each failure and consider what lessons it taught, and which forms of defect prevention or defect removal might have prevented the problems. Because the failures in this section are famous and information has been published about them, they are a useful set of historical data points for retrospective quality analysis.
Among the many forms of defect prevention and removal methods are the following in alphabetical order:
- Acceptance testing
- Automated code static analysis for common languages
- Automated text static analysis for requirements and design
- Beta testing with clients
- Code inspections
- Component testing
- Design inspections
- Debugging tools
- Function testing
- Mathematical test case design based on design of experiments
- Pair programming
- Peer reviews
- Performance testing
- Proofs of correctness
- Quality function deployment (QFD)
- Regression testing
- Requirements inspections
- Requirements modeling
- Risk-based testing
- Security testing
- Subroutine testing
- Supply-chain testing
- System testing
- Unit testing
- Usability testing