Abstract:
A method, apparatus, and computer-readable medium for predicting the fault-proneness of code units (files, modules, packages, and the like) of large-scale, long-lived software systems. The method collects information about the code units and the development process from previous releases, and formats this information for input to an analysis stage. The tool then performs a statistical regression analysis on the collected data, and formulates a model to predict fault counts for code units of the current and future releases. Finally, the method computes an expected fault count for each code unit in the current release by applying the formulated model to data from the current release. The expected fault counts are used to rank the release units in descending order of fault-proneness so that debugging efforts and resources can be optimized.

Description:
BACKGROUND OF THE INVENTION 
       [0001]    The present invention relates to an automated fault prediction tool and, more particularly, to an automated tool for identifying the files of a software system most likely to contain faults. 
         [0002]    Large systems have hundreds or thousands of files, and testers frequently have little guidance to help determine which units should be most thoroughly tested. Previous work in fault prediction attempted to classify files as either fault-prone or not fault-prone. More particularly, this previous work involved making predictions using different models ranging from a simple Line-of-Code (LOC) model to customized binary tree and linear regression models. Not surprisingly, the custom models invariably predicted faults more accurately than the simple model. However, development of customized models requires substantial time and analytic effort, as well as statistical expertise. 
         [0003]    There is, therefore, a need in the art for a new, more sophisticated model that yields more accurate predictions than the earlier LOC model, but which nonetheless can be fully automated, thereby eliminating or reducing the analytical effort and statistical expertise associated with customized models. In particular, there is a need in the art for an automated tool for testers and developers to identify the files most likely to be problematic in the future. 
       SUMMARY OF THE INVENTION 
       [0004]    As a result, the present invention provides a software tool for predicting the fault-proneness of files (code units, modules, packages, etc) of large-scale, long-lived software systems. In contrast to prior art models, the present tool ranks files in decreasing order of their potential fault-proneness, thereby enabling testers to focus their efforts on the files most likely to contain faults in current and future releases. Predictions can also help solve the problem faced by developers of deciding which files need to be completely rewritten or replaced. 
         [0005]    The tool includes at least three components:
       Component 1. Data extraction: Collects information about the file and the development process from previous releases, and formats it for input to the analysis stage;   Component 2. Data analysis: Performs a statistical regression analysis on the collected data, and formulates a model to predict fault counts for the current and future releases; and   Component 3. Model application: Computes an expected fault count for each unit of the current release, by applying the formulated model to data of the current release. The expected fault counts are used to rank the release&#39;s units in descending order of fault-proneness.       
 
         [0009]    By using the tool&#39;s predictions to gain insight into the parts of the system most likely to contain faults, testers can concentrate their efforts on those parts, and perform more thorough and more effective testing in a given amount of time than would otherwise be possible. The tool&#39;s predictions can also be used by system developers to isolate parts of the system that are chronically fault-prone. This information can be used to guide decisions about which parts of the system should be rewritten, or discarded and redesigned. 
         [0010]    A method of ranking software texts based on predicted faults associated therewith in accordance with the present invention, which incorporates some of the preferred features, includes calculating values of coefficients associated with a first set of equations, calculating values of fault counts using a second set of equations, and ranking the second set of software texts based on the values of fault counts associated with the second set of equations. The first set of equations includes values of feature vectors associated with a first set of software texts, and the first set of equations includes values of fault counts associated with the first set of software texts. The calculated values of fault counts is associated with a second set of texts, the second set of equations includes the calculated values of the coefficients associated with the first set of equations and values of feature vectors associated with the second set of texts, and the first and second sets of equations are based on an algorithm. 
         [0011]    The values of coefficients associated with the first set of equations may be calculated using a statistical regression model, and the statistical regression model may include at least one of a negative binomial regression model and a Poisson model. At least one of the first set of software texts may be a prior version of at least one of the second set of software texts, and at least one of the first and second sets of software texts may be at least one of written in a computer programming language and be an electronically stored text file. 
         [0012]    The feature vectors may include at least one of the programming language in which a software text is written, a quantity of defects found in a version of a software text associated with a prior release, a quantity of changes made to a software text during at least one prior release, a quantity of successive prior releases for which a software text had a prior version, a fraction of a duration of a release for which a version of a software text existed, and a quantity derived from any predictive features using at least one of scaling, quantization, linear combination, and application of transcendental functions. The method may also include grouping the first set of software texts by time into an ordered series of at least one release, and assigning the second set of software texts to a separate, most recent, release in the ordered series to define the feature vectors. 
         [0013]    An apparatus adapted to rank software texts based on predicted faults associated therewith in accordance with the present invention, which incorporates some of the preferred features, includes a computing device. The computing device calculates values of coefficients associated with a first set of equations. The first set of equations includes values of feature vectors associated with a first set of software texts, and the first set of equations includes values of fault counts associated with the first set of software texts. The computing device calculates values of fault counts using a second set of equations. The calculated values of fault counts are associated with a second set of texts, the second set of equations including the calculated values of the coefficients associated with the first set of equations and values of feature vectors associated with the second set of texts. The first and second sets of equations are based on an algorithm, and the computing device ranks the second set of software texts based on the values of fault counts associated with the second set of equations. 
         [0014]    A computer-readable medium in accordance with the present invention, which incorporates some of the preferred features, includes instructions, wherein execution of the instructions by at least one computing device ranks software texts based on predicted faults associated therewith by calculating values of coefficients associated with a first set of equations, calculating values of fault counts using a second set of equations, and ranking the second set of software texts based on the values of fault counts associated with the second set of equations. The first set of equations includes values of feature vectors associated with a first set of software texts, and the first set of equations includes values of fault counts associated with the first set of software texts. The calculated values of fault counts are associated with a second set of texts, and the second set of equations includes the calculated values of the coefficients associated with the first set of equations and values of feature vectors associated with the second set of texts. The first and second sets of equations are based on an algorithm. 
         [0015]    Other objects and features of the present invention will become apparent from the following detailed description considered in conjunction with the accompanying drawings. It is to be understood, however, that the drawings are designed as an illustration only and not as a definition of the limits of the invention. 
     
    
     
       BRIEF DESCRIPTION OF THE DRAWING 
         [0016]      FIG. 1  is a top level flow chart for the automated tool of the present invention. 
       
    
    
     DETAILED DESCRIPTION OF THE INVENTION 
       [0017]    Referring to  FIG. 1 , the tool of the present invention includes a File Feature Extractor  10 , a Statistical Regression Model Builder  20 , and a Fault Rate Predictor  30 . The File Feature Extractor  10  receives as input a set of Analysis Parameters  40  and historical data from the Historic Records Database  50  for the Software to be Analyzed, and thereafter outputs a set of File Features for the Predictive Releases  60 , and a set of File Features for the Release to Predict  70 . The Model Builder  20  takes the sets of File Features for the Predictive Releases  60  and constructs a Statistical Regression Model  80  including a set of numeric coefficients. The Fault Rate Predictor  30  then applies the Statistical Regression Model  80  to the File Features of the Release to Predict  70  to produce a Relative File Fault Count Prediction  90 . 
         [0018]    The sets of file features  60 ,  70  that can be extracted by the File Feature Extractor  10  depend on what information has been retained in the Historic Records Database  50 . There are a number of available commercial products that maintain such databases. These products are typically referred to as “source code control systems”, “software configuration management systems” or “version management systems”. “Software texts” as referred to herein is intended to include anything that could be construed as software, including, but not limited to source code, configuration files, executable specifications, and formal grammars. 
         [0019]    In one preferred embodiment, the information in the Historic Records Database  50  is maintained in a manner which partitions the history of a software project into a sequence of “releases” (a.k.a. generics or versions) where each such release spans a time interval of the order of months and involves some set of code changes (typically to add new features to the software, to modify existing features, or to make corrections to existing code), and a testing or field deployment process where faults in the software are identified and corrected and where each release generally builds upon the preceding one. In addition, the information in the Historic Records Database  50  is preferably maintained in a manner which allows the system to determine, for each such release, when the release began (release-start-time), when it ended (release-end-time), and what files belonged to the release. 
         [0020]    Finally, the information in the Historic Records Database  50  is preferably maintained such that it can be used to determine, for each such file in each such release, the name of the file, when it was first added to the release (or when it was inherited from the previous release), how many lines were in the file when it was first added to the release (or inherited), how many changes were made to the file during the release, and how many of these changes were in response to faults being identified in the software. 
         [0021]    An example of such a database would be that maintained by Alcatel-Lucent&#39;s Sablime® Configuration Management System. In a large project with a long history, there is likely to be missing or inaccurate data in the database. Although this does not prevent use of the present tool, it does potentially reduce the accuracy of the outputted results. Typical reasons for this missing or inaccurate data include changes, over time, of the system used to track faults and changes (replacement of the records database), changes in how faults were distinguished from other changes to files, and importation of files with a long existing history from outside the project as new files in the project being analyzed. 
         [0022]    In one preferred embodiment, the File Feature Extractor  10  reads a pre-selected set of Analysis Parameters  40 , which includes the following:
       i) the location of the Historic Records Database;   ii) the list of releases making up the history of the software project (i.e., the project releases, rel[0], rel[1], . . . , rel[n]);   iii) the release, from the above list, for which a prediction is to be made (i.e., the Release to Predict, rel[P]);   iv) the set of other releases, from the list, that are to be used to make the prediction (typically all or some of the releases prior to the Release to Predict, rel[0], rel[1], . . . , rel[P−1], (collectively referred to as the Predictive Releases);   v) the criteria used in the Historic Records Database to indicate that a change to a file was in response to an identified fault; and   vi) the set of file name suffixes indicating source code to be analyzed, for example, “c”, “.C”, “.pC”, “.ctl”, “.sql”, “.env”, “.cfg”, “.java”, “pl” (as opposed to image files, presentations, or other material that is not a potential source of faults or is not in the form of lines of written text).       
 
         [0029]    The File Feature Extractor  10  then extracts from the Historic Records Database  50  information for each file with one of the specified file name suffixes (a “selected file”) in a release from the list of releases making up the history of the project. Files added to the release at or after the start of the succeeding release are not considered. In one preferred embodiment, this information includes one or more of the following:
       a) the identifier of the release (release-name);   b) the name of the file (file-name);   c) the number of changes to the file during the release as a result of faults (faults);   d) the number of changes to the file during the previous release as a result of fault corrections or 0 if the file was new with this release (prior faults);   e) the number of changes to the file during the previous release (for all reasons, not just due to faults) or 0 if the file was new with this release (prior changes);   f) the number of changes to the file during the release prior to the previous release (again, for all reasons) or 0 if the file was new with the previous release (prior changes)   g) the number of lines of text in the file when it was first added to the release (LOC);   h) the number of consecutive previous releases to which the file belonged (age);   i) the moment when the file was added to the release (add-time); and/or   j) for files inherited from a previous release, the add-time is equal to the start time of this release (release-start-time).       
 
         [0040]    The File Feature Extractor  10  then computes a feature vector for each selected file in a project release as follows:
       1) New File: assign a value of “1” if the “age” of the file is 0, otherwise assign a value of “0”;   2) Age=1: assign a value of “1” if the “age” of the file is 1, otherwise assign a value of “0”;   3) Age=2-4: assign a value of “1” if the “age” of the file is 2, 3, or 4, otherwise assign a value of “0”; and   4) Programming language: assign a value of “1” to the variable that corresponds to the file name suffix       
 
         [0045]    Next, the File Feature Extractor  10  preferably performs one or more of the following operations:
       calculating the natural logarithm of the fraction of the release&#39;s duration that the file belonged to the release: (ln((release-end-time—file-add-time)/(release-end-time—release-start-time);   calculating the natural logarithm of the number of thousand-lines of text in the file when it was first added to the release or “0” if the number of lines is 0: ln(max(file-lines, 0.001));   calculating the square root of the number of changes in the previous release: sqrt(file-prev-chgs);   calculating the square root of the number of changes in the release before that: sqrt(file-prev-prev-chgs);   calculating the square root of the number of changes due to faults in the previous release: sqrt(file-prev-faults); and   assigning a value of “1” if release-name=rel[i], for each integer i: 0&lt;i&lt;P to provide an “in release i” feature, otherwise assigning a value of “0”. (This will produce one less feature than there are releases used for prediction).       
 
         [0052]    It is contemplated herein that additional features (depending on the application) may be used to “fine tune” the predictive output of the tool. For example, the set of file types assigned features may be varied for environments using different sets of programming languages. 
         [0053]    The File Feature Extractor  10  then produces the table of File Features for Predictive Releases  60  which includes (for each of the selected files in each of the predictive releases) the file-faults and the above feature vector for that selected file in that predictive release. In addition, the File Feature Extractor  10  produces the table of File Features for the Release To Predict  70  which includes (for each of the selected files in the Release To Predict) the file name and the feature vector for that selected file in the Release To Predict. 
         [0054]    Next, the Statistical Regression Model Builder  20  takes the table of File Features for Predictive Releases  60  and uses it to build a Statistical Regression Model  80  which includes a vector of coefficients, including a coefficient for each of the above features, and a “dispersion parameter”. 
         [0055]    The Fault Rate Predictor  30  then takes the table of File Features for the Release To Predict  70  and the Statistical Regression Model  80  and, for each selected file in the predicted release, computes a relative number of predicted faults. Methods for computing predicted values from feature values and regression models are also well known in the art and described in statistical literature, and software implementing these methods is typically provided as part of the same packages that contain regression model builders. Finally, the Fault Rate Predictor linearly scales the predictions so that they total 100 (yielding expected percentages of faults), sorts the files in descending order of their percentages and reports this as the Relative File Fault Count Prediction  90 . 
         [0056]    In particular, the present invention provides an algorithm establishing a relationship between selected file features and predicted fault counts, such algorithm including a plurality of coefficients and a plurality of feature vectors representing data derived from the file(s) of a prior release(s). An example of such an algorithm is set forth below: 
         [0000]    
       
         
           
             
               
                 
                   K 
                   0 
                 
                 + 
                 
                   
                     K 
                     1 
                   
                    
                   
                     ( 
                     
                       log 
                        
                       
                         ( 
                         KLOC 
                         ) 
                       
                     
                     ) 
                   
                 
                 + 
                 
                   
                     K 
                     2 
                   
                    
                   
                     ( 
                     New 
                     ) 
                   
                 
                 + 
                 
                   
                     K 
                     3 
                   
                    
                   
                     ( 
                     
                       Age 
                       = 
                       1 
                     
                     ) 
                   
                 
                 + 
                 
                   
                     K 
                     4 
                   
                    
                   
                     ( 
                     
                       Age 
                       = 
                       
                         2 
                          
                         
                             
                         
                          
                         to 
                          
                         
                             
                         
                          
                         4 
                       
                     
                     ) 
                   
                 
                 + 
                 
                   
                     K 
                     5 
                   
                    
                   
                     ( 
                     
                       Log 
                        
                       
                         ( 
                         Exposure 
                         ) 
                       
                     
                     ) 
                   
                 
                 + 
                 
                   
                     K 
                     6 
                   
                    
                   
                     ( 
                     
                       
                         prior 
                          
                         
                             
                         
                          
                         changes 
                       
                     
                     ) 
                   
                 
                 + 
                 
                   
                     K 
                     7 
                   
                    
                   
                     ( 
                     
                       
                         prior 
                          
                         
                             
                         
                          
                         prior 
                          
                         
                             
                         
                          
                         changes 
                       
                     
                     ) 
                   
                 
                 + 
                 
                   
                     K 
                     8 
                   
                    
                   
                     ( 
                     
                       
                         prior 
                          
                         
                             
                         
                          
                         faults 
                       
                     
                     ) 
                   
                 
                 + 
                 
                   
                     K 
                     Pi 
                   
                    
                   
                     ( 
                     
                       L 
                       Pi 
                     
                     ) 
                   
                 
               
               = 
               
                 Linear 
                  
                 
                     
                 
                  
                 Combo 
               
             
             , 
           
         
       
     
         [0000]    wherein K 0  is a constant selected to represent an axis intercept, K i  are coefficients, the terms in parentheses are the feature vectors which are derived from data associated with a particular file, each L Pi  is a variable corresponding to the i th  particular programming language (Pi) used in the releases, each K Pi  is a coefficient derived for language Pi, and the Linear Combo is the inverse natural log of the predicted fault count. The natural log of the predicted fault count is used to compress the range. 
         [0057]    In order for a fault prediction tool to be widely usable by software developers and testers, it should require little or no user expertise in data mining, data analysis, or statistics, and should require minimal human intervention and manual overhead. Accordingly, the tool of the present invention can be integrated with automated data extraction tools, resulting in a tool that can be easily applied to predict fault-proneness for many types of large software systems. 
         [0058]    Many of today&#39;s software systems use commercially available, integrated version control/change management systems. Any change made to the software system must be documented in a modification request (MR). 
         [0059]    The present tool bases predictions on objectively assessable factors obtainable from the MRs and the version control system. These include file size; whether the file was new to the system in the sense that this is the first release in which it appeared; whether the file contained faults in earlier releases, and if so, how many; how many changes were made to the file in previous releases; and the programming language used to implement the file. 
         [0060]    The data extraction part of the fault prediction tool should perform its tasks without human intervention. In one preferred embodiment, a common table-driven script that can be parameterized for each system is implemented. A generalized tool to perform the data extraction is also preferably implemented. This thus provides the back-end of the automated fault-proneness prediction system in accordance with the present invention. 
         [0061]    Of course, it is quite possible that other development projects will use different modification request systems, with different data storage formats. For each such change management system encountered, a different back-end to the data extraction tool can be built so that practitioners will only have to select the MR system used and the appropriate databases will be accessed to extract the needed data. In each case, the extracted data will provide the information needed by the prediction portion of the tool in a uniform format. 
       EXAMPLE 1 
       [0062]    This example describes use of the tool for a particular system. Data from 35 releases covering approximately nine years of field experience was analyzed. During that period, the number of executable files grew from 354 at the end of Release 1 to 668 at the end of Release 35, and the LOC grew to approximately 500,000. Intervals between releases generally ranged from three to five months, with the main exceptions being after Releases 1 (8.5 months), 2 (56 days) and 3 (40 days). 
         [0063]    Each release after the first one included a combination of files that were new in the current release and others that existed in the previous release. New files might be added at any point during the lifetime of a release. Because files added early in a release had more chance to be tested and therefore more opportunity for faults to be detected, a variable called “Exposure” was defined, which is the fraction of the release for which a new file existed. The Exposure variable was set to 1 for all files that existed in the previous release. 
         [0064]    Ten different languages contributed executable files to this system. At the last release, the most frequently used languages included C++ (28%), C++ with embedded SQL (28%), pure SQL (12%), CTL (data-loading scripts for SQL, 12%), and SH (6%). 
         [0065]    MRs can be submitted for various reasons, including to report a system failure or problem, to request a maintenance update, or to request the addition of new functionality. In some change management systems, the standard MR form will not have a field that explicitly states the reason for its creation. In such cases, alternate means must be used to characterize MRs that represent faults. One such means is to define a “fault” MR as one that is submitted during certain stages of the software process, for example system test, end-to-end test, operations readiness test, user acceptance test, or customer usage. This example rule captures those MRs that are investigated and must be resolved following system integration, and provides a fairly close approximation to the MRs that are created because of an actual fault in the system. One fault is counted for each change made to an individual executable file in response to a fault MR. Therefore, if a given fault MR causes N different files to be changed, that is counted as N distinct faults. 
         [0066]    Counted in this way, a total of 1545 faults was spread across the 35 releases. With the exceptions of four releases with fewer than 8 faults each, there were at least 18 faults during each release. The vast majority of all faults were encountered during an internal testing phase, prior to the software&#39;s release to customers. 
         [0067]    MRs also provided information about the total number of changes to executable files during each release for reasons other than to fix faults. These might include planned enhancements, such as the addition of new features required for specific releases in the original requirements or specification document. Unplanned enhancements are also distinguished from faults and counted as changes but not faults. These might represent new features or functionalities added to the system that were not originally envisioned by the requirements writers. Changes of this sort are especially common in systems that have very long lifetimes, as new technology becomes feasible, and competitors&#39; software systems provide new features. 
         [0068]    For this example, negative binomial regression was used to model the number of faults in a file during a specific release. The unit of analysis is the combination of a file and release. That means that each file contributes as many observations to a regression as the number of eligible releases for which it existed. Negative Binomial Regression models are well known in the art and described in statistical literature. Construction of the model typically uses a successive approximation technique maximizing a log-likelihood function. 
         [0069]    Negative binomial regression models the logarithm of the expected number of faults as a linear combination of the explanatory variables. Specifically, the expected number of faults equals γie β′x , where the random variable γi has a gamma distribution with mean  1  and variance σ 2 ≧0. The variance σ 2 , known as the “dispersion parameter”, is included to account for greater variance in the fault counts than would be expected from a Poisson distribution. 
         [0070]    In accordance with the present invention, model parameters are estimated by maximum likelihood. Once a model has been estimated, predicted numbers of faults are computed for every file in the next release, to prioritize files for purposes of testing and to alert developers that it might be desirable to rearchitect certain files. 
         [0071]    The present tool uses a pre-specified model, whose coefficients are to be estimated from data for the current system. Although this alternative requires fitting negative binomial regression models at each release, it can also be automated. The coefficients to predict Release N are based on a model fit to Releases 2 to (N−1). The set of variables used are: log(KLOC); dummy variables for New files (Age=0), Age=1, and Age=2-4 (where applicable), with Age &gt;4 as the reference set; the logarithm of Exposure; the square roots of changes in the prior release, changes in the prior prior release, and faults in the prior release; dummy variables for selected programming languages; and dummy variables for all but one release. To reduce the potential of overfitting for less prevalent programming languages, the model includes only those languages with a cumulative total of 20,000 LOC (20 KLOC) across releases, with an average of at least 2 KLOC per release in recent releases. This allowed dummy variables for files written in C or C++ immediately and for four additional languages after a few releases. 
         [0000]    
       
         
               
             
               
               
               
               
             
               
               
               
               
             
           
               
                 TABLE 1 
               
             
             
               
                   
               
               
                 Coefficients after Release 20 
               
             
          
           
               
                   
                 Variable 
                 Symbol 
                 Coefficient 
               
               
                   
                   
               
             
          
           
               
                   
                 Log(KLOC) 
                 K 1   
                 .519 
               
               
                   
                 New file 
                 K 2   
                 1.865 
               
               
                   
                 Age = 1 
                 K 3   
                 .918 
               
               
                   
                 Age = 2-4 
                 K 4   
                 .355 
               
               
                   
                 Log(Exposure) 
                 K 5   
                 1.117 
               
               
                   
                 (Prior Changes) 1/2   
                 K 6   
                 .441 
               
               
                   
                 (Prior Prior Changes) 1/2   
                 K 7   
                 .323 
               
               
                   
                 (Prior Faults) 1/2   
                 K 8   
                 .387 
               
               
                   
                 C++ 
                 K 9   
                 −1.260 
               
               
                   
                 C++ with SQL 
                 K 10   
                 −.555 
               
               
                   
                 m4 
                 K 11   
                 .389 
               
               
                   
                 SQL 
                 K 12   
                 −.162 
               
               
                   
                 C 
                 K 13   
                 −∞ 
               
               
                   
                 CTL 
                 K 14   
                 .207 
               
               
                   
                   
               
             
          
         
       
     
         [0072]    Table 1 displays the results of negative binomial regressions, fit to data through Release 20 (i.e., for predicting Release 21). The table omits results for the intercept and the dummy variables for releases, because those specific coefficients provide little, if any, insight about how the models would perform for other systems. Across releases, the estimated coefficients go up and down without any clear pattern. Excluding the programming language dummy variables, all the coefficients were statistically significant in the anticipated direction. The value of “−∞” in the row for C reflects the fact that no faults occurred through Release 20 for any files written in that language. “m4” is a special-purpose scripting language used in this particular system. 
         [0000]    
       
         
               
             
               
               
               
             
           
               
                 TABLE 2 
               
             
             
               
                   
               
               
                 Percentage of Faults in Top 20% of Files 
               
             
          
           
               
                   
                   
                 Percent of Faults 
               
               
                   
                   
                 in Predicted 
               
               
                   
                 Release Number 
                 Top 20% of Files 
               
               
                   
                   
               
               
                   
                 2-5 
                  55* 
               
               
                   
                  6-10 
                 78 
               
               
                   
                 11-15 
                 71 
               
               
                   
                 16-20 
                 84 
               
               
                   
                 21-25 
                 89 
               
               
                   
                 26-30 
                 90 
               
               
                   
                 31-35 
                 92 
               
               
                   
                 Mean % of Faults, 
                   81.3* 
               
               
                   
                 Releases 3-35 
               
               
                   
                   
               
               
                   
                 *Starting with Release 3. 
               
             
          
         
       
     
         [0073]    Table 2 summarizes prediction results for the system presented in this example. Using groups of five releases, we report the percentage of faults contained in the top 20% of files. The summary row shows the mean value over releases 3 through 35. 
         [0074]    The results for the present Model (the pre-specified model) demonstrate that at least 80% of the faults on average were pre-selected. The model tended to improve over time as the amount of training data increased. 
         [0075]    As discussed herein, the present model may be fully automated. In addition, the results from this model are comparable to those previously obtained using customized models. 
       EXAMPLE 2 
       [0076]    This example illustrates the calculations used to compute fault predictions for a current release of a multi-release piece of software. In this regard, the raw data values set forth in Table 3 are fictional, and are intended for illustrative purposes only. The derived data values of Table 3 are calculated/determined from the raw data values. 
         [0077]    The Linear Combo set forth in the Output Section of Table 3 is determined from the linear combination of the derived data values in accordance with the following algorithm: 
         [0000]    
       
         
           
             
               
                 K 
                 0 
               
               + 
               
                 
                   K 
                   1 
                 
                  
                 
                   ( 
                   
                     log 
                      
                     
                       ( 
                       KLOC 
                       ) 
                     
                   
                   ) 
                 
               
               + 
               
                 
                   K 
                   2 
                 
                  
                 
                   ( 
                   New 
                   ) 
                 
               
               + 
               
                 
                   K 
                   3 
                 
                  
                 
                   ( 
                   
                     Age 
                     = 
                     1 
                   
                   ) 
                 
               
               + 
               
                 
                   K 
                   4 
                 
                  
                 
                   ( 
                   
                     Age 
                     = 
                     
                       2 
                        
                       
                           
                       
                        
                       to 
                        
                       
                           
                       
                        
                       4 
                     
                   
                   ) 
                 
               
               + 
               
                 
                   K 
                   5 
                 
                  
                 
                   ( 
                   
                     Log 
                      
                     
                       ( 
                       Exposure 
                       ) 
                     
                   
                   ) 
                 
               
               + 
               
                 
                   K 
                   6 
                 
                  
                 
                   ( 
                   
                     
                       prior 
                        
                       
                           
                       
                        
                       changes 
                     
                   
                   ) 
                 
               
               + 
               
                 
                   K 
                   7 
                 
                  
                 
                   ( 
                   
                     
                       prior 
                        
                       
                           
                       
                        
                       prior 
                        
                       
                           
                       
                        
                       changes 
                     
                   
                   ) 
                 
               
               + 
               
                 
                   K 
                   8 
                 
                  
                 
                   ( 
                   
                     
                       prior 
                        
                       
                           
                       
                        
                       faults 
                     
                   
                   ) 
                 
               
               + 
               
                 
                   K 
                   9 
                 
                  
                 
                   ( 
                   
                     C 
                     ++ 
                   
                   ) 
                 
               
               + 
               
                 
                   K 
                   10 
                 
                  
                 
                   ( 
                   
                     
                       C 
                       ++ 
                     
                      
                     
                       w 
                       / 
                       SQL 
                     
                   
                   ) 
                 
               
               + 
               
                 
                   K 
                   11 
                 
                  
                 
                   ( 
                   
                     M 
                     4 
                   
                   ) 
                 
               
               + 
               
                 
                   K 
                   12 
                 
                  
                 
                   ( 
                   SQL 
                   ) 
                 
               
               + 
               
                 
                   K 
                   13 
                 
                  
                 
                   ( 
                   C 
                   ) 
                 
               
               + 
               
                 
                   K 
                   14 
                 
                  
                 
                   ( 
                   CTL 
                   ) 
                 
               
             
             = 
             
               Linear 
                
               
                   
               
                
               Combo 
             
           
         
       
     
         [0000]    
       
         
               
               
             
               
               
               
               
               
               
               
               
             
               
               
               
               
               
               
               
               
               
               
               
             
               
               
             
               
               
               
               
               
             
               
               
               
               
               
               
               
               
               
               
               
               
             
           
               
                 TABLE 3 
               
               
                   
               
             
             
               
                 Raw Data Values 
                   
               
             
          
           
               
                   
                   
                   
                   
                 Prior 
                   
                   
                 Derived Data Values 
               
             
          
           
               
                 File 
                   
                   
                 Prior 
                 Prior 
                 Prior 
                   
                 Log 
                   
                   
                   
               
               
                 Num. 
                 LOC 
                 Age 
                 Changes 
                 Changes 
                 Faults 
                 File Type 
                 (KLOC) 
                 New 
                 Age = 1 
                 Age = 2-4 
               
               
                   
               
               
                 1 
                 160 
                 0 
                 0 
                 0 
                 0 
                 m4 
                 −0.80 
                 1 
                 0 
                 0 
               
               
                 2 
                 312 
                 1 
                 3 
                 0 
                 2 
                 SQL 
                 −0.51 
                 0 
                 1 
                 0 
               
               
                 3 
                 400 
                 3 
                 0 
                 2 
                 0 
                 m4 
                 −0.40 
                 0 
                 0 
                 1 
               
               
                 4 
                 60 
                 9 
                 4 
                 0 
                 2 
                 SQL 
                 −1.22 
                 0 
                 0 
                 0 
               
               
                 5 
                 1430 
                 7 
                 0 
                 0 
                 0 
                 CTL 
                 −0.16 
                 0 
                 0 
                 0 
               
               
                 6 
                 227 
                 0 
                 0 
                 0 
                 0 
                 C++ 
                 −0.64 
                 1 
                 0 
                 0 
               
               
                 7 
                 125 
                 2 
                 1 
                 4 
                 0 
                 C++ 
                 −0.90 
                 0 
                 0 
                 1 
               
               
                 8 
                 61 
                 9 
                 0 
                 0 
                 0 
                 HTML 
                 −1.21 
                 0 
                 0 
                 0 
               
               
                 9 
                 755 
                 9 
                 0 
                 2 
                 0 
                 C++ 
                 −0.12 
                 0 
                 0 
                 0 
               
               
                 10  
                 56 
                 6 
                 0 
                 0 
                 0 
                 C 
                 −1.25 
                 0 
                 0 
                 0 
               
               
                   
               
             
          
           
               
                 Derived Data Values 
                   
               
             
          
           
               
                   
                   
                 SQRT 
                   
                 Output 
               
             
          
           
               
                   
                 SQRT 
                 Prior 
                 SQRT 
                   
                 C++ 
                   
                   
                   
                   
                   
                 Predicted 
               
               
                 Log 
                 Prior 
                 Prior 
                 Prior 
                   
                 w/ 
                   
                   
                   
                   
                 Linear 
                 Fault 
               
               
                 (exposure) 
                 Changes 
                 Changes 
                 Faults 
                 C++ 
                 SQL 
                 m4 
                 SQL 
                 C 
                 CTL 
                 Combo 
                 Count 
               
               
                   
               
               
                 — 
                 0.00 
                 0.00 
                 0.00 
                 0 
                 0 
                 1 
                 0 
                 0 
                 0 
                 0.341 
                 1.406 
               
               
                 — 
                 1.73 
                 0.00 
                 1.41 
                 0 
                 0 
                 0 
                 1 
                 0 
                 0 
                 0.305 
                 1.356 
               
               
                 — 
                 0.00 
                 1.41 
                 0.00 
                 0 
                 0 
                 1 
                 0 
                 0 
                 0 
                 −0.506 
                 0.603 
               
               
                 — 
                 2.00 
                 0.00 
                 1.41 
                 0 
                 0 
                 0 
                 1 
                 0 
                 0 
                 −0.867 
                 0.420 
               
               
                 — 
                 0.00 
                 0.00 
                 0.00 
                 0 
                 0 
                 0 
                 0 
                 0 
                 1 
                 −1.212 
                 0.297 
               
               
                 — 
                 0.00 
                 0.00 
                 0.00 
                 1 
                 0 
                 0 
                 0 
                 0 
                 0 
                 −1.229 
                 0.293 
               
               
                 — 
                 1.00 
                 2.00 
                 0.00 
                 1 
                 0 
                 0 
                 0 
                 0 
                 0 
                 −1.787 
                 0.168 
               
               
                 — 
                 0.00 
                 0.00 
                 0.00 
                 0 
                 0 
                 0 
                 0 
                 0 
                 0 
                 −2.130 
                 0.119 
               
               
                 — 
                 0.00 
                 1.41 
                 0.00 
                 1 
                 0 
                 0 
                 0 
                 0 
                 0 
                 −2.367 
                 0.094 
               
               
                 — 
                 0.00 
                 0.00 
                 0.00 
                 0 
                 0 
                 0 
                 0 
                 1 
                 0 
                 −22.150 
                 0.000 
               
               
                   
               
             
          
         
       
     
         [0078]    For purposes of this example, the values of K 1 -K 14  from Table 1 have been inserted into the algorithm. The y-intercept K 0  has been assigned a value of −1.50, although the actual value of such number is not relevant to the overall ordering of the files. The coefficient of “−20.000” was used for “C” to represent the functional equivalent of minus infinity. Finally, the Log(exposure) was excluded from the calculation because old files for which predictions were derived were assumed to have equal exposure. In this regard, Table 3 does not include any values for Log(exposure). 
         [0079]    In practice, the values for K 1 -K 14  are determined by inserting data from earlier releases (including the mentioned feature vectors and actual fault counts) into the algorithm and using a binomial regression needed to solve for K 1 -K 14 . Having solved for K 1 -K 14  based upon data and values from earlier releases, these coefficients are then inserted into the algorithm, together with the derived values for the feature vectors of the files from the new release, to solve for Predicted Fault Count. 
         [0080]    It will be appreciated that the present invention has been described herein with reference to certain preferred or exemplary embodiments. The preferred or exemplary embodiments described herein may be modified, changed, added to or deviated from without departing from the intent, spirit and scope of the present invention, and it is intended that all such additions, modifications, amendment and/or deviations be included within the scope of the following claims.