Design Patterns and Change Proneness: An Examination of Five Evolving Systems

Author(s): James M. Bieman, Greg Straw, Huxia Wange, P. Willard Munger, Roger T. Alexander
Venue: Ninth International Software Metrics Symposium
Date: 2003

Type of Experiement: Case Study
Sample Size: 4


Type of Projects: commercial, open source
Number of Versions: 7 - 17
Language: Java
Size of Projects: medium(24,000 LOC) to large( 753,000 LOC)
Metrics: class size, level inheritance participation, pattern participation, number of modifications per class
Independent Variables: class size, level of inheritance, pattern participation
Dependent Variables: number of changes
Design Patterns Analyzed: Adaptor, Builder, Command, Creator, Factory Method, Filter, Iterator, Singleton, State, Strategy, Visitor
Pattern Identification: Manual

Threats to validity
Construct Validity: difficulty of changes,
Content Validity: metrics for design quality and changes
Internal: pattern identification,
External: lack of generality in class-size vs. number of changes relationship, and pattern roles vs. number of changes relationship.

Software Domain: real-time embedded systems, development environments (IDEs),

In this study the authors goal try discover relationships between design context of classes and the amount of changes applied to them during maintenance. Four software systems are studied starting from their initial versions and analyzing changes made in each subsequent version. Two of these are commercial systems, while the other two are open source projects. The results are compared against a previous study that analyzed only one piece of software. Similar hypotheses are made as in the previous study: Larger classes are more change prone, classes that participate in design patterns don't change as much as other classes.

The results disprove the first hypotheses, the graphs indicate that the first three systems analyzed do not show any relationship between size and number of changes. Only one open source system indicates a somewhat strong indication that larger size causes more changes. This is opposite of the results obtained in the previous study. Such results suggest that class size does not predict changes. The second hypotheses is supported by the results, which is consistent with the previous study. Classes that were part of patterns were more prone to changes in three of the four systems. However one open source system had the opposite results.

I think that the manual collection of patterns can be a big threat, since developers are not very likely to document design patterns. However, I liked that this study analyzed both commercial and open source software which I think increases its external validity, since conditions for development and maintenance in the two types of software are different. Also I liked the large variety of design patterns that appeared in studied software. I agree with the authors that more research needs to be done into the cause of the changes, since these could be the main determining factors in how the software is changed.