Towards a Principle-based Classification of Structural Design Smells

Fred Brooks in his book "The Mythical Man Month" describes how the inherent properties of software (i.e. complexity, conformity, change- ability, and invisibility) make its design an "essential" diculty. Good design practices are fundamental requisites to address this diculty. One such good practice is that a software designer should be aware of and address "design smells" that can manifest as a result of his design decisions. However, our study of the vast literature on object-oriented design smells reveals the lack of an eective organization of smells that could better guide a designer in understanding and addressing potential issues in his design. In order to address this gap, we have adopted a novel approach to classify and catalog a number of recurring structural design smells based on how they violate key object oriented (OO) design principles. To evaluate the usefulness of our design smell catalog, we first asked Siemens CT DC AA architects to use it to identify design smells in their projects, and later elicited feedback from them about their experience. The feedback received indicates that these architects found the catalog to be very useful. In this paper, we present our catalog, classification, and naming scheme for design smells and also highlight several interesting observations and insights that result from our work.

[1]  Oscar Nierstrasz,et al.  Object-oriented reengineering patterns , 2004, Proceedings. 26th International Conference on Software Engineering.

[2]  Martin Hitz,et al.  Measuring Product Attributes of Object-Oriented Systems , 1995, ESEC.

[3]  Oscar Nierstrasz,et al.  Generating a catalog of unanticipated schemas in class hierarchies using Formal Concept Analysis , 2010, Inf. Softw. Technol..

[4]  Clemens A. Szyperski,et al.  Import is Not Inheritance - Why We Need Both: Modules and Classes , 1992, ECOOP.

[5]  Pierre Poulin,et al.  Visualization-based analysis of quality for large-scale software systems , 2005, ASE.

[6]  Paul A. Johnson,et al.  Reusability through fine‐grain inheritance , 1992, Softw. Pract. Exp..

[7]  Holger Eichelberger,et al.  Nice class diagrams admit good design? , 2003, SoftVis '03.

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

[9]  Victor R. Basili,et al.  A Validation of Object-Oriented Design Metrics as Quality Indicators , 1996, IEEE Trans. Software Eng..

[10]  Dirk Riehle,et al.  Pattern Languages of Program Design 3 , 1997 .

[11]  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.

[12]  Foutse Khomh,et al.  IDS: An Immune-Inspired Approach for the Detection of Software Design Smells , 2010, 2010 Seventh International Conference on the Quality of Information and Communications Technology.

[13]  Avinash C. Kak,et al.  API-Based and Information-Theoretic Metrics for Measuring the Quality of Software Modularization , 2007 .

[14]  M. D. Penta,et al.  An Exploratory Study of the Impact of Antipatterns on Software Changeability , 2009 .

[15]  Jochen Kreimer,et al.  Adaptive Detection of Design Flaws , 2005, LDTA@ETAPS.

[16]  Peter Coad Analysis & design OOA & OOD: a continuum of representation , 1991 .

[17]  Ward Cunningham,et al.  The WyCash portfolio management system , 1992, OOPSLA '92.

[18]  Bjarne Stroustrup,et al.  C++ Programming Language , 1986, IEEE Softw..

[19]  Leon Moonen,et al.  Java quality assurance by detecting code smells , 2002, Ninth Working Conference on Reverse Engineering, 2002. Proceedings..

[20]  Frank Simon,et al.  Code-Quality-Management - technische Qualität industrieller Softwaresysteme transparent und vergleichbar gemacht , 2006 .

[21]  簡聰富,et al.  物件導向軟體之架構(Object-Oriented Software Construction)探討 , 1989 .

[22]  James M. Armstrong,et al.  Uses and abuses of inheritance , 1994, Softw. Eng. J..

[23]  Brian Foote,et al.  Designing Reusable Classes , 2001 .

[24]  Avinash C. Kak,et al.  API-Based and Information-Theoretic Metrics for Measuring the Quality of Software Modularization , 2007, IEEE Transactions on Software Engineering.

[25]  David Chenho Kung,et al.  Object-oriented architecture measures , 1999, Proceedings of the 32nd Annual Hawaii International Conference on Systems Sciences. 1999. HICSS-32. Abstracts and CD-ROM of Full Papers.

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

[27]  Jens Dietrich,et al.  Barriers to Modularity - An Empirical Study to Assess the Potential for Modularisation of Java Programs , 2010, QoSA.

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

[29]  Peter Sommerlad,et al.  Non-software examples of PoSA patterns , 1998, OOPSLA Addendum.

[30]  Roy H. Campbell,et al.  Monitoring compliance of a software system with its high-level design models , 1996, Proceedings of IEEE 18th International Conference on Software Engineering.

[31]  Mika Mäntylä,et al.  A taxonomy and an initial empirical study of bad smells in code , 2003, International Conference on Software Maintenance, 2003. ICSM 2003. Proceedings..

[32]  Gabriela Beatriz Arévalo,et al.  High-level views in object-oriented systems using formal concept analysis , 2004 .

[33]  Robert C. Martin Agile Software Development, Principles, Patterns, and Practices , 2002 .

[34]  Rudolf Ramler,et al.  Common Findings and Lessons Learned from Software Architecture and Design Analysis , 2005 .

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

[36]  William E. Lorensen,et al.  Object-Oriented Modeling and Design , 1991, TOOLS.

[37]  Yuanfang Cai,et al.  Detecting software modularity violations , 2011, 2011 33rd International Conference on Software Engineering (ICSE).

[38]  Carl G. Davis,et al.  A Hierarchical Model for Object-Oriented Design Quality Assessment , 2002, IEEE Trans. Software Eng..

[39]  B. J. Ferro Castro,et al.  Pattern-Oriented Software Architecture: A System of Patterns , 2009 .

[40]  Dirk Beyer,et al.  Efficient relational calculation for software analysis , 2005, IEEE Transactions on Software Engineering.

[41]  Cláudia Maria Lima Werner,et al.  Object Oriented Design Expertise Reuse: An Approach Based on Heuristics, Design Patterns and Anti-patterns , 2000, ICSR.

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

[43]  Brian Berenbach,et al.  The evaluation of large, complex UML analysis and design models , 2004, Proceedings. 26th International Conference on Software Engineering.

[44]  Rob Pooley,et al.  UML Specification and Correction of Object-Oriented Anti-patterns , 2009, 2009 Fourth International Conference on Software Engineering Advances.

[45]  Alexandre Bergel,et al.  Software metric for Java and C++ practices (Workpackage 1.1) , 2010 .

[46]  Thomas J. Mowbray,et al.  AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis , 1998 .

[47]  Radu Marinescu,et al.  Measurement and Quality in Object-Oriented Design , 2005, ICSM.

[48]  Timothy A. Budd,et al.  An introduction to object-oriented programming , 1991 .

[49]  Alistair Cockburn,et al.  Agile Software Development , 2001 .

[50]  Oliver Ciupke,et al.  Automatic detection of design problems in object-oriented reengineering , 1999, Proceedings of Technology of Object-Oriented Languages and Systems - TOOLS 30 (Cat. No.PR00278).

[51]  Adrian Trifu,et al.  Diagnosing design problems in object oriented systems , 2005, 12th Working Conference on Reverse Engineering (WCRE'05).

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

[53]  Tom Mens,et al.  Future trends in software evolution metrics , 2001, IWPSE '01.

[54]  Foutse Khomh Patterns and quality of object-oriented software systems , 2010 .

[55]  Jens Dietrich,et al.  On the Detection of High-Impact Refactoring Opportunities in Programs , 2010, ArXiv.

[56]  Wouter Joosen,et al.  A Generalization and Solution to the Common Ancestor Dilemma Problem in Delegation-Based Object Systems , 2004 .

[57]  Matthias Hauswirth,et al.  The Beauty and the Beast: Separating Design from Algorithm , 2011, ECOOP.

[58]  Grady Booch,et al.  Object-oriented analysis and design with applications, third edition , 2007, SOEN.

[59]  Harald C. Gall,et al.  Improving evolvability through refactoring , 2005, MSR.

[60]  Joshua Kerievsky,et al.  Refactoring to Patterns , 2004, XP/Agile Universe.

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

[62]  Michele Lanza,et al.  Object-Oriented Metrics in Practice - Using Software Metrics to Characterize, Evaluate, and Improve the Design of Object-Oriented Systems , 2006 .

[63]  Javier Garzas Object-Oriented Design Knowledge: Principles, Heuristics and Best Practices , 2006 .

[64]  Yoshikazu Ueda,et al.  Detecting Defects in Object Oriented Designs Using Design Metrics , 2006, JCKBSE.

[65]  Abraham Bernstein,et al.  Mining Software Repositories with iSPAROL and a Software Evolution Ontology , 2007, Fourth International Workshop on Mining Software Repositories (MSR'07:ICSE Workshops 2007).

[66]  Meilir Page-Jones,et al.  Fundamentals of object-oriented design in UML , 1999 .