The goal of any software development is to produce high quality software that provides value to customers and meets their expectation. To meet the goal the software should be as defect free as possible. A Software defect is a deficiency in software that causes it to perform unexpectedly. Defects can be introduced during any stage of the development cycle. The cost of a problem found late in the development process can be significant. Industry studies have shown that a defect that costs 1x to fix in design could cost 100x to fix after the software is released. Clearly, everyone - from product designers to product developers and product stakeholders - will benefit if the development team can prevent defects early rather than discovering and fixing them later. In most cases software defects result from mistakes made by people (i.e. Human error). Rather than relying on testing to find software defects after they are introduced, defect prevention techniques focus on preventing the introduction of defects in the first place.
Software defect rates can be addressed at various levels. The first level is detection. This is the most common approach to improving software quality. Test the software until all the discoverable defects are found and fixed Using static analysis tools, automated test cases, Functional testing, boundary testing, low-memory tests, code inspection, and end user beta testing are all effective techniques. These methods can identify defects where they exist but do little or nothing to prevent a similar defect from recurring elsewhere.
The next level of software quality improvement is achieved through Defect Analysis. At this level, time is spent analyzing previously discovered defects to look for trends and insights into how they occurred and why they were not detected earlier. Examples of defect analysis techniques are defect classification using defect taxonomies, root cause analysis (RCA), and stochastic modeling.
The most effective level of quality improvement efforts is prevention. At this level, specific techniques are used to proactively identify and eliminate potential defects. Examples of defect prevention techniques are failure modes and effects analysis (FMEA), fault tree analysis (FTA) and use of the Prevention tab
If a project is on a tight schedule or budget, the project manager must decide if it is more effective to ask senior engineers to invest their time in analyzing bugs and developing preventions or to have them write new features and fix existing bugs in the current product to accelerate the ship date. This creates a dilemma: make your boss happy by meeting a project deadline with some defects, or make the project stakeholders and users happy by preventing defects at the expense of missed deadlines and extra resource investments. Because software projects are typically rewarded upon completion, project managers usually choose the short-term view and opt for completing the current effort before investing in long-term quality improvement techniques.
A detection organization typically is in constant “fire drill” mode just trying to find and address all defects, whereas a prevention organization is typically more optimistic, focused on the future, and deliberate in its approach to improving quality.
Defect prevention increases the organization’s profitability:
Although a company may understand the concepts of budget and headcount, often it does not know the cost of repairing defects at various phases in the development process or the actual lifetime cost of a software feature. According to a National Institute of Standards and Technology (NIST) report, 80 percent of development costs are spent identifying and fixing defects, and the cost of inadequate testing, as defined by NIST, is estimated to be as high as $60 billion per year.