Software system defect content prediction from development process and product characteristics
Ellis Horowitz, Allen P. Nikora · 1998
Society has become increasingly dependent on software controlled systems (e.g., banking systems, nuclear power station control systems, and air traffic control systems). These systems have been growing in complexity--the number of lines of source code in the Space Shuttle, for instance, is estimated to be 10 million, and the number of lines of source code that will fly aboard Space Station Alpha has been estimated to be up to 100 million. As we become more dependent on software systems, and as they grow more complex, it becomes necessary to develop new methods to ensure that the systems perform reliably. One important aspect of ensuring reliability is being able to measure and predict the system's reliability accurately. The techniques currently being applied in the software industry are largely confined to the application of software reliability models during test. These are statistical models that take as their input failure history data (i.e., time since last failure, or number of failures discovered in an interval), and produce estimates of system reliability and failure intensity. To better control a system's quality, we need the ability to measure the system's reliability prior to test, when it is possible to influence the development process and change the system's structure. We develop a model for predicting the rate at which defects are inserted into a system, using measured changes in a system's structure and development process as predictors, and show how to: (1) Estimate the number of residual defects in any module at any time. (2) Determine whether additional resources should be allocated to finding and repairing defects in a module. In order to calibrate the model and estimate the number of remaining defects in a system, it is necessary to accurately identify and count the number of defects that have been introduced into a system. We develop a set of rules that can be used to count the number of defects that are present in the system, based on observed changes that have been made to the system as a result of repair actions.