Experience report: How do structural dependencies influence change propagation? An empirical study

Real world object-oriented systems are composed of hundreds or even thousands of classes that are structurally interconnected in many different ways. In this highly complex scenario, it is unclear how changes propagate. Given the high maintenance cost brought by change propagation, these questions become particularly relevant in practice. In this paper, we set out to investigate the influence of structural dependencies on change propagation. We historically analyzed thousands of code snapshots coming from 4 open-source Java projects of different sizes and domains. Our results indicated that, in general, it is more likely that two artifacts will not co-change just because one depends on the other. However, the rate with which an artifact co-changes with another is higher when the former structurally depends on the latter. This rate becomes higher if we track down dependencies to the low-level entities that are changed in commits. This implies, for instance, that developers should be aware of dependencies on methods that are added or changed, as these dependencies tend to propagate changes more often. Finally, we also found several cases where software changes could not be justified using structural dependencies, meaning that co-changes might be induced by other subtler kinds of relationships.

[1]  Andreas Zeller,et al.  How history justifies system architecture (or not) , 2003, Sixth International Workshop on Principles of Software Evolution, 2003. Proceedings..

[2]  Václav Rajlich,et al.  A model for change propagation based on graph rewriting , 1997, 1997 Proceedings International Conference on Software Maintenance.

[3]  Thomas Zimmermann,et al.  Preprocessing CVS Data for Fine-Grained Analysis , 2004, MSR.

[4]  Fred P. Brooks,et al.  The Mythical Man-Month , 1975, Reliable Software.

[5]  Richard C. Holt,et al.  Predicting change propagation in software systems , 2004, 20th IEEE International Conference on Software Maintenance, 2004. Proceedings..

[6]  Grady Booch,et al.  Object-oriented analysis and design with applications (2nd ed.) , 1993 .

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

[8]  Frank Schweitzer,et al.  The Link between Dependency and Cochange: Empirical Evidence , 2012, IEEE Transactions on Software Engineering.

[9]  Vineet Sinha,et al.  Using dependency models to manage complex software architecture , 2005, OOPSLA '05.

[10]  Robert C. Martin,et al.  Agile Principles, Patterns, and Practices in C# (Robert C. Martin) , 2006 .

[11]  Glenford J. Myers,et al.  Structured Design , 1974, IBM Syst. J..

[12]  Marco Aurélio Gerosa,et al.  On the Interplay between Structural and Logical Dependencies in Open-Source Software , 2011, 2011 25th Brazilian Symposium on Software Engineering.

[13]  Harald C. Gall,et al.  Fine-grained analysis of change couplings , 2005, Fifth IEEE International Workshop on Source Code Analysis and Manipulation (SCAM'05).

[14]  Niklaus Wirth,et al.  Program development by stepwise refinement , 1971, CACM.

[15]  P. Kidwell,et al.  The mythical man-month: Essays on software engineering , 1996, IEEE Annals of the History of Computing.

[16]  Ahmed E. Hassan,et al.  Supporting software evolution using adaptive change propagation heuristics , 2008, 2008 IEEE International Conference on Software Maintenance.

[17]  Houari A. Sahraoui,et al.  Learning dependency-based change impact predictors using independent change histories , 2015, Inf. Softw. Technol..

[18]  Robert S. Arnold,et al.  Software Change Impact Analysis , 1996 .

[19]  Craig Larman,et al.  Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development (3rd Edition) , 1997 .

[20]  Meilir Page-Jones Comparing techniques by means of encapsulation and connascence , 1992, CACM.

[21]  Grady Booch,et al.  Object-Oriented Analysis and Design with Applications , 1990 .

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

[23]  Brian Randell,et al.  Software engineering : report on a conference sponsored by the NATO Science Committee, Garmisch, Germany, 7th to 11th October 1968 , 1969 .