Reliability Models
Software reliability models are used to assess a software product's reliability or to estimate the number of latent defects when it is available to the customers. Such an estimate is important for two reasons: (1) as an objective statement of the quality of the product and (2) for resource planning for the software maintenance phase. The criterion variable under study is the number of defects (or defect rate normalized to lines of code or function points) in specified time intervals (weeks, months, etc.), or the time between failures . Reliability models can be broadly classified into two categories: static models and dynamic models (Conte et al., 1986). A static model uses other attributes of the project or program modules to estimate the number of defects in the software. A dynamic model, usually based on statistical distributions, uses the current development defect patterns to estimate end-product reliability. A static model of software quality estimation has the following general form:
where the dependent variable y is the defect rate or the number of defects, and the independent variables x i are the attributes of the product, the project, or the process through which the product is developed. They could be size , complexity, skill level, count of decisions, and other meaningful measurements. The error term is e (because models don't completely explain the behavior of the dependent variable).
Estimated coefficients of the independent variables in the formula are based on data from previous products. For the current product or project, the values of the independent variables are measured, then plugged into the formula to derive estimates of the dependent variable ”the product defect rate or number of defects.
Static models are static in the sense that the estimated coefficients of their parameters are based on a number of previous projects. The product or project of interest is treated as an additional observation in the same population of previous projects. In contrast, the parameters of the dynamic models are estimated based on multiple data points gathered to date from the product of interest; therefore, the resulting model is specific to the product for which the projection of reliability is attempted.
Observation and experience shows that static models are generally less superior than dynamic models when the unit of analysis is at the product level and the purpose is to estimate product-level reliability. Such modeling is better for hypothesis testing (to show that certain project attributes are related to better quality or reliability) than for estimation of reliability. When the unit of analysis is much more granular, such as at the program module level, the static models can be powerful ”not for product-level reliability estimates, but for providing clues to software engineers on how to improve the quality of their design and implementation. The complexity metrics and models are good examples of this type of modeling, and in Chapter 11 we discuss this topic in more detail.
Dynamic software reliability models, in turn , can be classified into two categories: those that model the entire development process and those that model the back-end testing phase. The former is represented by the Rayleigh model. The latter is represented by the exponential model and other reliability growth models, which are the subject of Chapter 8. A common denominator of dynamic models is that they are expressed as a function of time in development or its logical equivalent (such as development phase).