All software has defects and perfection would be difficult and expensive to achieve. Some defects are recurring and some are undetected for many years. It is important to understand that software defects are symptoms of other problems such as process deficiencies or inadequate management or oversight. Defects may also be the acceptable result of risk mitigation and cost management decisions. In other words, management made a choice to limit testing and allow for the possibility of defects.
Identifying and fixing defects is difficult, disruptive, and expensive. Preventing defects is much more cost effective. In order to prevent defects, we need to anticipate them and implement processes and management techniques to prevent them. How do we do this?
- Obtain agreement on the definition and types of defects. Examples: If code is confusing and inefficient but it provides the desired capability, is it defective? ITIL refers to “Fitness for Purpose” and “Fitness for Use”. The ISO 9126 software quality standards provide additional criteria.
- For each defect type, determine the likelihood of defects and the expected impacts.
- Identify preventative mechanisms for each type of defect which include code review and testing
- Track defects and the reason the defect occurred and communicate the information to participants so they can learn to anticipate and prevent defects
- Define rules for developing applications that are specific to each type of technology. This will improve standardization and avoid high-risk development techniques.