An empirical study of cycles among classes in Java

Advocates of the design principle avoid cyclic dependencies among modules have argued that cycles are detrimental to software quality attributes such as understandability, testability, reusability, buildability and maintainability, yet folklore suggests such cycles are common in real object-oriented systems. In this paper we present the first significant empirical study of cycles among the classes of 78 open- and closed-source Java applications. We find that, of the applications comprising enough classes to support such a cycle, about 45% have a cycle involving at least 100 classes and around 10% have a cycle involving at least 1,000 classes. We present further empirical evidence to support the contention these cycles are not due to intrinsic interdependencies between particular classes in a domain. Finally, we attempt to gauge the strength of connection among the classes in a cycle using the concept of a minimum edge feedback set.

[1]  Arthur J. Riel,et al.  Object-Oriented Design Heuristics , 1996 .

[2]  John Stuart Lakos,et al.  Large-Scale C++ Software Design , 1996 .

[3]  Nor Laily Hashim,et al.  Test order for class-based integration testing of Java applications , 2005, Fifth International Conference on Quality Software (QSIC'05).

[4]  David Lorge Parnas,et al.  Review of David L. Parnas' "Designing Software for Ease of Extension and Contraction" , 2004 .

[5]  Xuemin Lin,et al.  A Fast and Effective Heuristic for the Feedback Arc Set Problem , 1993, Inf. Process. Lett..

[6]  Guy L. Steele,et al.  Java Language Specification, Second Edition: The Java Series , 2000 .

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

[8]  Terry A. McKee,et al.  OOPSLA '89 Conference proceedings on Object-oriented programming systems, languages and applications , 1989 .

[9]  Clemens A. Szyperski,et al.  Component software - beyond object-oriented programming, 2nd Edition , 2002, Addison-Wesley component software series.

[10]  Clemens A. Szyperski,et al.  Component software - beyond object-oriented programming , 2002 .

[11]  David Chenho Kung,et al.  Class Firewall, Test Order, and Regression Testing of Object-Oriented Programs , 1995, J. Object Oriented Program..

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

[13]  Michael Stepp,et al.  An empirical study of Java bytecode programs , 2007, Softw. Pract. Exp..

[14]  Mario Winter,et al.  Managing Object-Oriented Integration and Regression Testing , 1999, ArXiv.

[15]  Edward Yourdon,et al.  Object-oriented analysis (2nd ed.) , 1991 .

[16]  Grady Booch,et al.  Object-Oriented Design with Applications , 1990 .

[17]  Joseph W. Yoder,et al.  Big Ball of Mud , 1997 .

[18]  Lionel C. Briand,et al.  A Unified Framework for Coupling Measurement in Object-Oriented Systems , 1999, IEEE Trans. Software Eng..

[19]  Anne H. Soukhanov,et al.  The american heritage dictionary of the english language , 1992 .

[20]  Ewan D. Tempero,et al.  Jooj: Real-Time Support For Avoiding Cyclic Dependencies , 2007, ACSC.

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

[22]  Ewan D. Tempero,et al.  Understanding the shape of Java software , 2006, OOPSLA '06.

[23]  Jens Palsberg,et al.  Encapsulating objects with confined types , 2001, TOPL.

[24]  Grady Booch,et al.  Object Solutions: Managing the Object-Oriented Project , 1995 .

[25]  Bertrand Meyer Object success - a manager's guide to object orientation, its impact on the corporation, and its u , 1995 .

[26]  Standard Glossary of Software Engineering Terminology , 1990 .

[27]  Paul Clements,et al.  Software architecture in practice , 1999, SEI series in software engineering.

[28]  Jonathan L. Gross,et al.  Handbook of graph theory , 2007, Discrete mathematics and its applications.

[29]  John Vlissides,et al.  Proceedings of the 16th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications , 2001, OOPSLA 2001.

[30]  David Chenho Kung,et al.  Developing an object-oriented software testing and maintenance environment , 1995, CACM.

[31]  Glenford J. Myers,et al.  Structured Design , 1999, IBM Syst. J..

[32]  Robert V. Binder,et al.  Testing Object-Oriented Systems: Models, Patterns, and Tools , 1999 .

[33]  Frank Yellin,et al.  The Java Virtual Machine Specification , 1996 .

[34]  Alfred Strohmeier,et al.  Incremental Test Selection for Specification-Based Unit Testing of Object-Oriented Software Based on Formal Specifications , 1997 .

[35]  Gill Smith,et al.  Object-oriented analysis , 1988, WADAS '88.

[36]  Dewayne E. Perry,et al.  Metrics and laws of software evolution-the nineties view , 1997, Proceedings Fourth International Software Metrics Symposium.

[37]  Lionel C. Briand,et al.  An Investigation of Graph-Based Class Integration Test Order Strategies , 2003, IEEE Trans. Software Eng..

[38]  Edwin Hautus,et al.  IMPROVING JAVA SOFTWARE THROUGH PACKAGE STRUCTURE ANALYSIS , 2002 .

[39]  Niklaus Wirth,et al.  A Plea for Lean Software , 1995, Computer.

[40]  Steven Skiena,et al.  The Algorithm Design Manual , 2020, Texts in Computer Science.

[41]  Martin Fowler Reducing Coupling , 2001, IEEE Softw..

[42]  Ewan D. Tempero,et al.  Identifying refactoring opportunities by identifying dependency cycles , 2006, ACSC.

[43]  Guy L. Steele,et al.  The Java Language Specification , 1996 .

[44]  David Notkin,et al.  Using C++ Templates to Implement Role-Based Designs , 1996, ISOTAS.

[45]  David Chenho Kung,et al.  Design recovery for software testing of object-oriented programs , 1993, [1993] Proceedings Working Conference on Reverse Engineering.

[46]  Alexander Sverdlov Review of David L. Parnas' "Designing Software for Ease of Extension and Contraction" , 2004 .

[47]  KungDavid,et al.  Developing an object-oriented software testing and maintenance environment , 1995 .

[48]  Chris F. Kemerer,et al.  Towards a metrics suite for object oriented design , 2017, OOPSLA '91.

[49]  Edsger W. Dijkstra,et al.  The structure of the “THE”-multiprogramming system , 1968, CACM.

[50]  David Lorge Parnas Why Software Jewels Are Rare , 1996, Computer.

[51]  Stefan Jungmayr Identifying test-critical dependencies , 2002, International Conference on Software Maintenance, 2002. Proceedings..

[52]  Hayden Melton,et al.  On the usage and usefulness of OO design principles , 2006, OOPSLA '06.