Study of metrics and practices for improving object oriented software quality

Modern software systems are large and complex products, consisting in thousands lines of code, developed, often in a distributed environment, by dozens of developers and produced through an industrial process, usu- ally with short time to market. To manage such kind of complexity and to keep the development process under control measurements and metrics are required. The present thesis collects the outcomes of the research the author carried on in the field of software metrics during the three years of the Ph.D. studies. Software metrics are used to measure various aspects of software development, including software features, processes execution, developers' efforts, software quality, just to name a few. The first part of the present thesis reports the results of the studies performed on product metrics, with the final goal of helping software engineers better manage the programmers efforts and particularly to assess software quality dur- ing software development. The second part of this dissertation presents the outcomes of the research aimed at shedding some light on the effec- tiveness and impact of some development practices on software systems. To perform these studies I used a novel approach, based on the concept of complex network. Complex networks are in fact one of the best can- didates to represent software systems, enabling researchers to obtain a deeper knowledge of the structure and evolution of a software system. We found some meaningful statistical correlations between network metrics and software properties. Both the theoretical framework and the reported findings might, in principle, have a practical application to assist software engineers dealing with specific development tasks, like bug discovery or refactoring.

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

[2]  Ralph Johnson,et al.  design patterns elements of reusable object oriented software , 2019 .

[3]  Georgios Gousios,et al.  The GHTorent dataset and tool suite , 2013, 2013 10th Working Conference on Mining Software Repositories (MSR).

[4]  Alberto Sillitti,et al.  Does Refactoring Improve Reusability? , 2006, ICSR.

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

[6]  Andrew P. Black,et al.  How We Refactor, and How We Know It , 2012, IEEE Trans. Software Eng..

[7]  Audris Mockus,et al.  Refactoring for changeability: a way to go? , 2005, 11th IEEE International Software Metrics Symposium (METRICS'05).

[8]  Ewan D. Tempero,et al.  How Do Java Programs Use Inheritance? An Empirical Study of Inheritance in Java Software , 2008, ECOOP.

[9]  M E J Newman,et al.  Finding and evaluating community structure in networks. , 2003, Physical review. E, Statistical, nonlinear, and soft matter physics.

[10]  R. Ferrer i Cancho,et al.  Scale-free networks from optimal design , 2002, cond-mat/0204344.

[11]  Gábor Csárdi,et al.  The igraph software package for complex network research , 2006 .

[12]  Michele Marchesi,et al.  Refactoring and its Relationship with Fan-in and Fan-out: An Empirical Study , 2012, 2012 16th European Conference on Software Maintenance and Reengineering.

[13]  Susan Hunston,et al.  Corpora in Applied Linguistics , 2002 .

[14]  Richard C. Holt,et al.  The top ten list: dynamic fault prediction , 2005, 21st IEEE International Conference on Software Maintenance (ICSM'05).

[15]  Santo Fortunato,et al.  Community detection in graphs , 2009, ArXiv.

[16]  Christopher R. Myers,et al.  Software systems as complex networks: structure, function, and evolvability of software collaboration graphs , 2003, Physical review. E, Statistical, nonlinear, and soft matter physics.

[17]  Sergi Valverde,et al.  Hierarchical Small Worlds in Software Architecture , 2003 .

[18]  Ahmed E. Hassan,et al.  A Case Study of Bias in Bug-Fix Datasets , 2010, 2010 17th Working Conference on Reverse Engineering.

[19]  Lian Wen,et al.  Software Systems as Complex Networks , 2007, 6th IEEE International Conference on Cognitive Informatics.

[20]  Ian H. Witten,et al.  The New Zealand Digital Library Project , 1996, D Lib Mag..

[21]  Rachel Harrison,et al.  Experimental assessment of the effect of inheritance on the maintainability of object-oriented systems , 2000, J. Syst. Softw..

[22]  Johnny Wei-Bing Lin Why Python Is the Next Wave in Earth Sciences Computing , 2012 .

[23]  M E J Newman,et al.  Fast algorithm for detecting community structure in networks. , 2003, Physical review. E, Statistical, nonlinear, and soft matter physics.

[24]  Miryung Kim,et al.  Template-based reconstruction of complex refactorings , 2010, 2010 IEEE International Conference on Software Maintenance.

[25]  Benjamin H. Good,et al.  Performance of modularity maximization in practical contexts. , 2009, Physical review. E, Statistical, nonlinear, and soft matter physics.

[26]  Diomidis Spinellis,et al.  Refactoring--Does It Improve Software Quality? , 2007, Fifth International Workshop on Software Quality (WoSQ'07: ICSE Workshops 2007).

[27]  Giancarlo Succi,et al.  A stochastic model of software maintenance and its implications on extreme programming processes , 2000 .

[28]  Yann-Gaël Guéhéneuc,et al.  DECOR: A Method for the Specification and Detection of Code and Design Smells , 2010, IEEE Transactions on Software Engineering.

[29]  Tibor Gyimóthy,et al.  Empirical validation of object-oriented metrics on open source software for fault prediction , 2005, IEEE Transactions on Software Engineering.

[30]  William F. Opdyke,et al.  Refactoring object-oriented frameworks , 1992 .

[31]  Claus Lewerentz,et al.  Metrics Based Refactoring , 2001, CSMR.

[32]  William C. Wake,et al.  Refactoring Workbook , 2003 .

[33]  M E J Newman,et al.  Community structure in social and biological networks , 2001, Proceedings of the National Academy of Sciences of the United States of America.

[34]  Itay Maman,et al.  Micro patterns in Java code , 2005, OOPSLA '05.

[35]  Mauricio A. Saca Refactoring improving the design of existing code , 2017, 2017 IEEE 37th Central America and Panama Convention (CONCAPAN XXXVII).

[36]  Michele Marchesi,et al.  A modified Yule process to model the evolution of some object-oriented system properties , 2011, Inf. Sci..

[37]  Harvey P. Siy,et al.  Predicting Fault Incidence Using Software Change History , 2000, IEEE Trans. Software Eng..

[38]  Michele Marchesi,et al.  Parameter-based refactoring and the relationship with fan-in/fan-out coupling , 2012, J. Object Technol..

[39]  Ewan D. Tempero,et al.  What Programmers Do with Inheritance in Java , 2013, ECOOP.

[40]  Mark Lorenz,et al.  Object-oriented software metrics - a practical guide , 1994 .

[41]  Witold Pedrycz,et al.  An Empirical Exploration of the Distributions of the Chidamber and Kemerer Object-Oriented Metrics Suite , 2004, Empirical Software Engineering.

[42]  Duncan J. Watts,et al.  Collective dynamics of ‘small-world’ networks , 1998, Nature.

[43]  Miryung Kim,et al.  Ref-Finder: a refactoring reconstruction tool based on logic query templates , 2010, FSE '10.

[44]  G. A. Kohring,et al.  Complex Dependencies in Large Software Systems , 2009, Adv. Complex Syst..

[45]  Elaine J. Weyuker,et al.  Predicting the location and number of faults in large software systems , 2005, IEEE Transactions on Software Engineering.

[46]  Marko Bajec,et al.  Community structure of complex software systems: Analysis and applications , 2011, ArXiv.

[47]  Sharon L. Milgram,et al.  The Small World Problem , 1967 .

[48]  George Loizou,et al.  Code smell eradication and associated refactoring , 2008 .

[49]  Takeo Imai,et al.  A quantitative evaluation of maintainability enhancement by refactoring , 2002, International Conference on Software Maintenance, 2002. Proceedings..

[50]  Norman E. Fenton,et al.  Quantitative Analysis of Faults and Failures in a Complex Software System , 2000, IEEE Trans. Software Eng..

[51]  Mark E. J. Newman,et al.  The Structure and Function of Complex Networks , 2003, SIAM Rev..

[52]  Ron Sanchez,et al.  Modularity, flexibility, and knowledge management in product and organization design , 1996 .

[53]  Nachiappan Nagappan,et al.  Predicting defects using network analysis on dependency graphs , 2008, 2008 ACM/IEEE 30th International Conference on Software Engineering.

[54]  Hongyu Zhang On the Distribution of Software Faults , 2008, IEEE Transactions on Software Engineering.

[55]  Jing Li,et al.  The Qualitas Corpus: A Curated Collection of Java Code for Empirical Studies , 2010, 2010 Asia Pacific Software Engineering Conference.

[56]  Jun Hu,et al.  Complex Network Thinking in Software Engineering , 2008, 2008 International Conference on Computer Science and Software Engineering.

[57]  Carlo A. Furia,et al.  A Comparative Study of Programming Languages in Rosetta Code , 2014, 2015 IEEE/ACM 37th IEEE International Conference on Software Engineering.

[58]  Michele Marchesi,et al.  Entropy of the degree distribution and object-oriented software quality , 2012, 2012 3rd International Workshop on Emerging Trends in Software Metrics (WETSoM).

[59]  Niclas Ohlsson,et al.  Predicting Fault-Prone Software Modules in Telephone Switches , 1996, IEEE Trans. Software Eng..

[60]  Shari Lawrence Pfleeger,et al.  Towards a Framework for Software Measurement Validation , 1995, IEEE Trans. Software Eng..