Unveiling and reasoning about co-change dependencies

Product flexibility is one of the expected benefits of a modular design, and thus "it should be possible to make drastic changes to a module without changing others." Accordingly, the data available on version control systems might help software architects to reason about some quality attributes of the modular decomposition of a system. In this paper we investigate the impact of co-change dependencies into system stability, that is, the potential ripple effect that might occur during maintenance tasks. Here we use (a) Design Structure Matrices (DSMs) for visualizing dependencies motivated by assets’ co-change and (b) two metrics for estimating system stability: Propagation Cost of Changes and Clustered Cost of a Decomposition. We conducted a comprehensive study about co-change dependencies and their effects on system stability, considering the change history of six open-source Java systems: Derby, Eclipse UI, Eclipse JDT, Hadoop, Geronimo, and Lucene; and one relevant financial systems of the Brazilian Government (SIOP). We evaluated two distinct situations: first considering only the static dependencies of each system and then considering both static and co-change dependencies of each system. There is a significant impact of the co-change dependencies on the stability measurements for Derby, Hadoop, Lucene, and SIOP. This result suggests that the modular decomposition of these systems does not resemble their change history. Accordingly, our findings provide empirical evidence that the common approach for reasoning about the modular decomposition, which often uses only static dependencies, hides important details about the costs of maintenance tasks.

[1]  Martin P. Robillard,et al.  The Emergent Structure of Development Tasks , 2005, ECOOP.

[2]  Letha H. Etzkorn,et al.  An empirical study of object-oriented system evolution , 2000, Inf. Softw. Technol..

[3]  Andreas Zeller,et al.  Mining Version Histories to Guide Software Changes , 2004 .

[4]  T. A. Wiggerts,et al.  Using clustering algorithms in legacy systems remodularization , 1997, Proceedings of the Fourth Working Conference on Reverse Engineering.

[5]  D. L. Parnas,et al.  On the criteria to be used in decomposing systems into modules , 1972, Software Pioneers.

[6]  Marco Tulio Valente,et al.  Remodularization analysis using semantic clustering , 2014, 2014 Software Evolution Week - IEEE Conference on Software Maintenance, Reengineering, and Reverse Engineering (CSMR-WCRE).

[7]  Harald C. Gall,et al.  Detection of logical coupling based on product release history , 1998, Proceedings. International Conference on Software Maintenance (Cat. No. 98CB36272).

[8]  Fabian Beck,et al.  On the impact of software evolution on software clustering , 2012, Empirical Software Engineering.

[9]  Márcio Ribeiro,et al.  A design rule language for aspect-oriented programming , 2013, J. Syst. Softw..

[10]  Tyson R. Browning,et al.  Design Structure Matrix Methods and Applications , 2012 .

[11]  Mohammad Alshayeb,et al.  An empirical study of system design instability metric and design evolution in an agile software process , 2005, J. Syst. Softw..

[12]  Marcelo de Almeida Maia,et al.  Co-change Clusters: Extraction and Application on Assessing Software Modularity , 2015, LNCS Trans. Aspect Oriented Softw. Dev..

[13]  Onaiza Maqbool,et al.  Hierarchical Clustering for Software Architecture Recovery , 2007, IEEE Transactions on Software Engineering.

[14]  Ali Almossawi,et al.  Visualizing Ambiguity in an Era of Data Abundance and Very Large Software Systems , 2015 .

[15]  Kim B. Clark,et al.  Design Rules: The Power of Modularity Volume 1 , 1999 .

[16]  Alan MacCormack,et al.  Exploring the Structure of Complex Software Designs: An Empirical Study of Open Source and Proprietary Code , 2006, Manag. Sci..

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

[18]  Kim B. Clark,et al.  Design Rules: The Power of Modularity , 2000 .

[19]  Chris F. Kemerer,et al.  A Metrics Suite for Object Oriented Design , 2015, IEEE Trans. Software Eng..

[20]  William G. Griswold,et al.  The structure and value of modularity in software design , 2001, ESEC/FSE-9.

[21]  Spiros Mancoridis,et al.  On the automatic modularization of software systems using the Bunch tool , 2006, IEEE Transactions on Software Engineering.

[22]  Nicolas Anquetil,et al.  Experiments with clustering as a software remodularization method , 1999, Sixth Working Conference on Reverse Engineering (Cat. No.PR00303).

[23]  Steven Muegge,et al.  Measuring Modularity in Open Source Code Bases , 2009 .

[24]  Stephen S. Yau,et al.  Design Stability Measures for Software Maintenance , 1985, IEEE Transactions on Software Engineering.

[25]  Sushil Krishna Bajracharya,et al.  Assessing Aspect Modularizations Using Design Structure Matrix and Net Option Value , 2006, LNCS Trans. Aspect Oriented Softw. Dev..

[26]  Sushil Krishna Bajracharya,et al.  An analysis of modularity in aspect oriented design , 2005, AOSD '05.

[27]  Apostolos Ampatzoglou,et al.  The Effect of GoF Design Patterns on Stability: A Case Study , 2015, IEEE Transactions on Software Engineering.