Empirical evidence of code decay: A systematic mapping study

Code decay is a gradual process that negatively impacts the quality of a software system. Developers need trusted measurement techniques to evaluate whether their systems have decayed. The research aims to find what is currently known about code decay detection techniques and metrics used to evaluate decay. We performed a systematic mapping study to determine which techniques and metrics have been empirically evaluated. A review protocol was developed and followed to identify 30 primary studies with empirical evidence of code decay. We categorized detection techniques into two broad groups: human-based and metric-based approaches. We describe the attributes of each approach and distinguish features of several subcategories of both high-level groups. A tabular overview of code decay metrics is also presented. We exclude studies that do not use time (i.e., do not use evaluation of multiple software versions) as a factor when evaluating code decay. This limitation serves to focus the review. We found that coupling metrics are the most widely used at identifying code decay. Researchers use various terms to define code decay, and we recommend additional research to operationalize the terms to provide more consistent analysis.

[1]  Arie van Deursen,et al.  A Lightweight Sanity Check for Implemented Architectures , 2010, IEEE Software.

[2]  Yann-Gaël Guéhéneuc,et al.  ADvISE: Architectural Decay in Software Evolution , 2012, 2012 16th European Conference on Software Maintenance and Reengineering.

[3]  Claes Wohlin,et al.  Experimentation in Software Engineering , 2012, Springer Berlin Heidelberg.

[4]  Martin Höst,et al.  Tracking degradation in software product lines through measurement of design rule violations , 2002, SEKE '02.

[5]  Domenico Cotroneo,et al.  Is software aging related to software metrics? , 2010, 2010 IEEE Second International Workshop on Software Aging and Rejuvenation.

[6]  David Notkin,et al.  Software Reflexion Models: Bridging the Gap between Design and Implementation , 2001, IEEE Trans. Software Eng..

[7]  Daniela Cruzes,et al.  Are all code smells harmful? A study of God Classes and Brain Classes in the evolution of three open source systems , 2010, 2010 IEEE International Conference on Software Maintenance.

[8]  Dietmar Pfahl,et al.  Reporting Experiments in Software Engineering , 2008, Guide to Advanced Empirical Software Engineering.

[9]  Radu Marinescu,et al.  Detecting design flaws via metrics in object-oriented systems , 2001, Proceedings 39th International Conference and Exhibition on Technology of Object-Oriented Languages and Systems. TOOLS 39.

[10]  Michael W. Godfrey,et al.  Secrets from the Monster: Extracting Mozilla’s Software Architecture , 2000 .

[11]  Richard Torkar,et al.  Software fault prediction metrics: A systematic literature review , 2013, Inf. Softw. Technol..

[12]  Dalton Serey Guerrero,et al.  On the Evolutionary Nature of Architectural Violations , 2012, 2012 19th Working Conference on Reverse Engineering.

[13]  Audris Mockus,et al.  Does Code Decay? Assessing the Evidence from Change Management Data , 2001, IEEE Trans. Software Eng..

[14]  A. von Mayrhauser,et al.  Code decay analysis of legacy software through successive releases , 1999, 1999 IEEE Aerospace Conference. Proceedings (Cat. No.99TH8403).

[15]  Tore Dybå,et al.  Empirical studies of agile software development: A systematic review , 2008, Inf. Softw. Technol..

[16]  Tracy Hall,et al.  A Systematic Literature Review on Fault Prediction Performance in Software Engineering , 2012, IEEE Transactions on Software Engineering.

[17]  Mikael Lindvall,et al.  Does the code match the design? A process for architecture evaluation , 2002, International Conference on Software Maintenance, 2002. Proceedings..

[18]  Per Runeson,et al.  Guidelines for conducting and reporting case study research in software engineering , 2009, Empirical Software Engineering.

[19]  Lorin Hochstein,et al.  Combating architectural degeneration: a survey , 2005, Inf. Softw. Technol..

[20]  Nenad Medvidovic,et al.  On the Impact of Aspect-Oriented Code Smells on Architecture Modularity: An Exploratory Study , 2011, 2011 Fifth Brazilian Symposium on Software Components, Architectures and Reuse.

[21]  Forrest Shull,et al.  Building empirical support for automated code smell detection , 2010, ESEM '10.

[22]  Santonu Sarkar,et al.  Discovery of architectural layers and measurement of layering violations in source code , 2009, J. Syst. Softw..

[23]  Mikael Lindvall,et al.  Avoiding architectural degeneration: an evaluation process for software architecture , 2002, Proceedings Eighth IEEE Symposium on Software Metrics.

[24]  Philip M. Johnson,et al.  Generalizing fault contents from a few classes , 2007, ESEM 2007.

[25]  Clemente Izurieta,et al.  Object oriented design pattern decay: a taxonomy , 2010, ESEM '10.

[26]  Mehwish Riaz,et al.  Architectural Decay during Continuous Software Evolution and Impact of 'Design for Change' on Software Architecture , 2009, FGIT-ASEA.

[27]  Tore Dybå,et al.  Strength of evidence in systematic reviews in software engineering , 2008, ESEM '08.

[28]  Alessandro F. Garcia,et al.  On the Relevance of Code Anomalies for Identifying Architecture Degradation Symptoms , 2012, 2012 16th European Conference on Software Maintenance and Reengineering.

[29]  Pearl Brereton,et al.  Performing systematic literature reviews in software engineering , 2006, ICSE.

[30]  Alexander L. Wolf,et al.  Acm Sigsoft Software Engineering Notes Vol 17 No 4 Foundations for the Study of Software Architecture , 2022 .

[31]  Oliver Ciupke,et al.  Automatic detection of design problems in object-oriented reengineering , 1999, Proceedings of Technology of Object-Oriented Languages and Systems - TOOLS 30 (Cat. No.PR00278).

[32]  Nenad Medvidovic,et al.  Identifying Architectural Bad Smells , 2009, 2009 13th European Conference on Software Maintenance and Reengineering.

[33]  Foutse Khomh,et al.  Tracking Design Smells: Lessons from a Study of God Classes , 2009, 2009 16th Working Conference on Reverse Engineering.

[34]  Lorin Hochstein,et al.  Diagnosing architectural degeneration , 2003, 28th Annual NASA Goddard Software Engineering Workshop, 2003. Proceedings..

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

[36]  Pearl Brereton,et al.  Using mapping studies as the basis for further research - A participant-observer case study , 2011, Inf. Softw. Technol..

[37]  Mika Mäntylä,et al.  Bad smells - humans as code critics , 2004, 20th IEEE International Conference on Software Maintenance, 2004. Proceedings..

[38]  Foutse Khomh,et al.  An Exploratory Study of the Impact of Code Smells on Software Change-proneness , 2009, 2009 16th Working Conference on Reverse Engineering.

[39]  Martin Fowler,et al.  Refactoring - Improving the Design of Existing Code , 1999, Addison Wesley object technology series.

[40]  Adrian Trifu,et al.  Diagnosing design problems in object oriented systems , 2005, 12th Working Conference on Reverse Engineering (WCRE'05).

[41]  James M. Bieman,et al.  How Software Designs Decay: A Pilot Study of Pattern Evolution , 2007, First International Symposium on Empirical Software Engineering and Measurement (ESEM 2007).

[42]  Jan Bosch,et al.  Design erosion: problems and causes , 2002, J. Syst. Softw..

[43]  Stéphane Ducasse,et al.  Using history information to improve design flaws detection , 2004, Eighth European Conference on Software Maintenance and Reengineering, 2004. CSMR 2004. Proceedings..

[44]  Zude Li,et al.  A Case Study of Measuring Degeneration of Software Architectures from a Defect Perspective , 2011, 2011 18th Asia-Pacific Software Engineering Conference.

[45]  Aiko Fallas Yamashita,et al.  Do code smells reflect important maintainability aspects? , 2012, 2012 28th IEEE International Conference on Software Maintenance (ICSM).

[46]  Yuanfang Cai,et al.  Detecting software modularity violations , 2011, 2011 33rd International Conference on Software Engineering (ICSE).

[47]  Muhammad Ali Babar,et al.  Assessing architectural drift in commercial software development: a case study , 2011, Softw. Pract. Exp..

[48]  Daniela Cruzes,et al.  The evolution and impact of code smells: A case study of two open source systems , 2009, 2009 3rd International Symposium on Empirical Software Engineering and Measurement.