About 50% of all defects are introduced during programming, the phase in which actual
coding takes place. Whereas just 15% of all errors are detected in the initial design stages,
most errors are found during testing. At the start of unit testing, which is oriented to
discovering defects in the individual software modules that make up the system, a defect
density of about 20 defects per 1000 lines of (uncommented) code is typical. This has
been reduced to about 6 defects per 1000 code lines at the start of system testing, where
a collection of such modules that constitutes a real product is tested. On launching a new
software release, the typical accepted software defect density is about one defect per 1000
lines of code lines.
Errors are typically concentrated in a few software modules – about half of the modules
are defect free, and about 80% of the defects arise in a small fraction (about 20%) of
the modules – and often occur when interfacing modules. The repair of errors that are
detected prior to testing can be done rather economically. The repair cost significantly
increases from about $ 1000 (per error repair) in unit testing to a maximum of about
$ 12,500 when the defect is demonstrated during system operation only. It is of vital
importance to seek techniques that find defects as early as possible in the software design
process: the costs to repair them are substantially lower, and their influence on the rest
of the design is less substantial.
The Ariane-5 launch on June 4, 1996; it crashed 36 seconds after the launch
due to a conversion of a 64-bit floating point into a 16-bit integer value.