Does Code Decay? Assessing the Evidence from Change Management Data

A central feature of the evolution of large software systems is that change-which is necessary to add new functionality, accommodate new hardware, and repair faults-becomes increasingly difficult over time. We approach this phenomenon, which we term code decay, scientifically and statistically. We define code decay and propose a number of measurements (code decay indices) on software and on the organizations that produce it, that serve as symptoms, risk factors, and predictors of decay. Using an unusually rich data set (the fifteen-plus year change history of the millions of lines of software for a telephone switching system), we find mixed, but on the whole persuasive, statistical evidence of code decay, which is corroborated by developers of the code. Suggestive indications that perfective maintenance can retard code decay are also discussed.

[1]  Audris Mockus,et al.  On Measurement and Analysis of Software Changes , 1999 .

[2]  Matthew P. Wand,et al.  Kernel Smoothing , 1995 .

[3]  Leon J. Osterweil,et al.  Proceedings of the 16th international conference on Software engineering , 1994, ICSE 1994.

[4]  Shari Lawrence Pfleeger,et al.  Status Report on Software Measurement , 1997, IEEE Softw..

[5]  Walt Scacchi,et al.  Understanding Software Maintenance Work , 1987, IEEE Transactions on Software Engineering.

[6]  Audris Mockus,et al.  Inferring change effort from configuration management databases , 1998, Proceedings Fifth International Software Metrics Symposium. Metrics (Cat. No.98TB100262).

[7]  Niclas Ohlsson,et al.  Predicting Fault-Prone Software Modules in Telephone Switches , 1996, IEEE Trans. Software Eng..

[8]  Harvey P. Siy,et al.  Parallel changes in large scale software development: an observational case study , 1998, TSEM.

[9]  Ron Weber,et al.  Some factors affecting program repair maintenance: an empirical study , 1983, CACM.

[10]  J. Marron,et al.  SiZer for Exploration of Structures in Curves , 1999 .

[11]  Meir M. Lehman,et al.  Program evolution: processes of software change , 1985 .

[12]  Victor R. Basili,et al.  Software errors and complexity: an empirical investigation0 , 1984, CACM.

[13]  Walt Scacchi,et al.  Managing Software Engineering Projects: A Social Analysis , 1984, IEEE Transactions on Software Engineering.

[14]  E. Burton Swanson,et al.  The dimensions of maintenance , 1976, ICSE '76.

[15]  Thomas Ball,et al.  Software Visualization in the Large , 1996, Computer.

[16]  David Lorge Parnas,et al.  Software aging , 1994, Proceedings of 16th International Conference on Software Engineering.

[17]  Graham J. Wills NicheWorks—Interactive Visualization of Very Large Graphs , 1999 .

[18]  Graham J. Wills,et al.  NicheWorks - Interactive Visualization of Very Large Graphs , 1997, GD.

[19]  Horst Zuse,et al.  Software complexity: Measures and methods , 1990 .

[20]  Jianqing Fan,et al.  Local polynomial modelling and its applications , 1994 .

[21]  Victor R. Basili,et al.  Software errors and complexity: an empirical investigation , 1993 .

[22]  Harvey P. Siy,et al.  Predicting Fault Incidence Using Software Change History , 2000, IEEE Trans. Software Eng..

[23]  Victor R. Basili,et al.  A Methodology for Collecting Valid Software Engineering Data , 1984, IEEE Transactions on Software Engineering.

[24]  Meir M. Lehman,et al.  A Model of Large Program Development , 1976, IBM Syst. J..

[25]  James Stephen Marron,et al.  ADAPTING TO A NEW ENVIRONMENT: How A Legacy Software Organization Copes With Volatility and Change , 1998 .