Product Metrics for Automatic Identification of "Bad Smell" Design Problems in Java Source-Code

Refactoring can have a direct influence on reducing the cost of software maintenance through changing the internal structure of the source-code to improve the overall design that helps the present and future programmers evolve and understand a system. Bad smells are a set of design problems with refactoring identified as a solution. Locating these bad smells has been described as more a human intuition than an exact science. This paper addresses the issue of identifying the characteristics of a bad smell through the use of a set of software metrics. Then by using a pre-defined set of interpretation rules to interpret the software metric results applied to Java source-code, the software engineer can be provided with significant guidance as to the location of bad smells. These issues are addressed in a number of ways. Firstly, a precise definition of bad smells is given from the informal descriptions given by the originators Fowler and Beck. The characteristics of the bad smells have been used to define a set of measurements and interpretation rules for a subset of the bad smells. A prototype tool has been implemented to enable the evaluation of the interpretation rules in two case studies.

[1]  D. Scott Sink,et al.  Productivity management : planning, measurement and evaluation, control, and improvement , 1985 .

[2]  John Brant,et al.  The Refactoring Browser , 1998, ECOOP Workshops.

[3]  Alain Abran,et al.  LIME: a three-dimensional software performance measurement model for project management , 2000 .

[4]  Alexander Chatzigeorgiou,et al.  Evaluating object-oriented designs with link analysis , 2004, Proceedings. 26th International Conference on Software Engineering.

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

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

[7]  Cleveland Augustine Gibbon,et al.  Heuristics for object-oriented design , 1997 .

[8]  Kent L. Beck,et al.  Extreme programming explained - embrace change , 1990 .

[9]  Alain Abran,et al.  QEST nD: n-dimensional extension and generalisation of a software performance measurement model , 2002 .

[10]  Ronald A. Radice,et al.  Software Engineering: An Industrial Approach , 1988 .

[11]  Tom Mens,et al.  A survey of software refactoring , 2004, IEEE Transactions on Software Engineering.

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

[13]  Capers Jones,et al.  Software Project Management Practices: Failure Versus Success © , 2004 .

[14]  Alain Abran,et al.  Multidimensional Software Performance Measurement Models: A Tetrahedron-based Design , 1999 .

[15]  Alain Abran,et al.  A quality factor for software , 1999 .

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

[17]  Alain Abran,et al.  R-LIME : improving the risk dimension in the LIME model , 2006 .

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

[19]  Alain Abran,et al.  A multidimensional performance model for consolidating balanced scorecards , 2003 .

[20]  Radu Marinescu,et al.  Quantifying the quality of object-oriented design: the factor-strategy model , 2004, 11th Working Conference on Reverse Engineering.