Hierarchical Clustering Based Automatic Refactorings Detection

The structure of software systems is subject of many changes during the systems lifecycle. A continuous improvement of the software systems structure can be made using refactoring, that assures a clean and easy to maintain software structure. In this paper we are focusing on the problem of restructuring object oriented software systems using hierarchical clustering. We propose two hierachical clustering based algorithms which takes an existing software and reassembles it using clustering, in order to obtain a better design, suggesting the needed refactorings. We evaluate the proposed algorithms using the open source case study JHotDraw and a real software system, providing a comparison with previous approaches.

[1]  Chung-Horng Lung,et al.  Program restructuring through clustering techniques , 2004 .

[2]  José De Jesús Rubio Avila,et al.  The clustering algorithm for nonlinear system identification , 2008 .

[3]  Nicolas Anquetil,et al.  Extracting concepts from file names; a new file clustering criterion , 1998, Proceedings of the 20th International Conference on Software Engineering.

[4]  Emden R. Gansner,et al.  Bunch: a clustering tool for the recovery and maintenance of software system structures , 1999, Proceedings IEEE International Conference on Software Maintenance - 1999 (ICSM'99). 'Software Maintenance for Business Change' (Cat. No.99CB36360).

[5]  Emden R. Gansner,et al.  Using automatic clustering to produce high-level system organizations of source code , 1998, Proceedings. 6th International Workshop on Program Comprehension. IWPC'98 (Cat. No.98TB100242).

[6]  C. Lewerentz,et al.  Metrics based refactoring , 2001, Proceedings Fifth European Conference on Software Maintenance and Reengineering.

[7]  Colin Fyfe,et al.  A novel construction of connectivity graphs for clustering and visualization , 2008 .

[8]  Eleni Stroulia,et al.  Refactoring Detection based on UMLDiff Change-Facts Queries , 2006, 2006 13th Working Conference on Reverse Engineering.

[9]  Wei-Hua Hao,et al.  A deflected grid-based algorithm for clustering analysis , 2008 .

[10]  Anil K. Jain,et al.  Data clustering: a review , 1999, CSUR.

[11]  Martin Fowler,et al.  Refactoring - Improving the Design of Existing Code , 1999, Addison Wesley object technology series.

[12]  Victor R. Basili,et al.  System Structure Analysis: Clustering with Data Bindings , 1985, IEEE Transactions on Software Engineering.

[13]  Richard C. Holt,et al.  ACCD: an algorithm for comprehension-driven clustering , 2000, Proceedings Seventh Working Conference on Reverse Engineering.

[14]  Tom DeMarco,et al.  Structured Analysis and System Specification (Reprint) , 2002, Software Pioneers.

[15]  James M. Bieman,et al.  Measuring Design-Level Cohesion , 1998, IEEE Trans. Software Eng..

[16]  Song C. Choi,et al.  Extracting and restructuring the design of large systems , 1990, IEEE Software.

[17]  Jan Wloka,et al.  Tool-Supported Discovery and Refactoring of Structural Weaknesses in Code , 2002 .

[18]  Chung-Horng Lung,et al.  Software architecture recovery and restructuring through clustering techniques , 1998, ISAW '98.

[19]  Ladan Tahvildari,et al.  A metric-based approach to enhance design quality through meta-pattern transformations , 2003, Seventh European Conference onSoftware Maintenance and Reengineering, 2003. Proceedings..

[20]  Robert W. Schwanke,et al.  Cross references are features , 1989, SCM.

[21]  Arie van Deursen,et al.  Refactoring test code , 2001 .

[22]  Johannes Stammel,et al.  Search-based determination of refactorings for improving the class structure of object-oriented systems , 2006, GECCO.

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

[24]  James M. Neighbors,et al.  Finding reusable software components in large systems , 1996, Proceedings of WCRE '96: 4rd Working Conference on Reverse Engineering.

[25]  Richard C. Holt,et al.  MoJo: a distance metric for software clusterings , 1999, Sixth Working Conference on Reverse Engineering (Cat. No.PR00303).

[26]  Istvan Gergely Czibula,et al.  Improving Systems Design Using a Clustering Approach , 2006 .

[27]  R. W. Schwanke,et al.  An Intelligent Tool For Reengineering Software Modularity , 1991, ICSE 1991.