An Empirical Study of Design Degradation: How Software Projects Get Worse Over Time

Author(s): Iftekhar Ahmed, Umme Ayda Mannan, Rahul Gopinath, Carlos Jensen
Venue: International Symposium on Empirical Software Engineering and Measurement
Date: 2015

Type of Experiement: Case Study
Sample Size: 220
Class/Experience Level: Professional
Participant Selection: Open Source Github Projects
Data Collection Method: Project Artifact(s)


Initially 500 projects written in Java were randomly selected from Github for the analysis. After removing too small projects and projects with short lifespans the final set contained 220 projects. The researchers used a set of software tools to detect potential code smells within the individual projects and then categorized the code smells into the following categories: Bloater, Object oriented abusers, Coupler, Dispensable, Encapsulators and Others. The paper than describes various presentations of the data including week-wise comparison of a project’s smelliness to the smelliest project, a breakdown of the commits that introduces, removed, or did not add code smell and which developers introduced code smell and which removed them, and week-wise normalized code smell against test case count.

The research found concluded with a few interesting remarks of are listed here. The rate in which code smell grew was monotonic throughout the 200 weeks observed, in fact that over the course of the life of open source projects new smells were introduced faster than then they were resolved. An expected observation was that core developers introduced more smells and removed more smells than non-core developers. However, non-core developers resolved more smells than they introduced unlike the core developers. Lastly, the results that there was no statistically significant correlation between the number of test cases and code smell count, thus a project’s testedness was is not an indicator of design quality.