Program restructuring through clustering techniques

Program restructuring is a key method for improving the quality of ill-structured programs, thereby increasing the understandability and reducing the maintenance cost. It is a challenging task and a great deal of research is still ongoing. This work presents an approach to program restructuring at the function level, based on clustering techniques with cohesion as the major concern. Clustering has been widely used to group related entities together. The approach focuses on automated support for identifying ill-structured or low-cohesive functions and providing heuristic advice in both the development and evolution phases. A new similarity measure is defined and studied intensively. The approach is applied to restructure a real industrial program. The empirical observations show that the heuristic advice provided by the approach can help software designers make better decision of why and how to restructure a program. Specific source code level software metrics are presented to demonstrate the value of the approach.

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

[2]  Chung-Horng Lung,et al.  Applications of clustering techniques to software partitioning, recovery and restructuring , 2004, J. Syst. Softw..

[3]  H. Charles Romesburg,et al.  Cluster analysis for researchers , 1984 .

[4]  Arun Lakhotia,et al.  Restructuring functions with low cohesion , 1999, Sixth Working Conference on Reverse Engineering (Cat. No.PR00303).

[5]  T. A. Wiggerts,et al.  Using clustering algorithms in legacy systems remodularization , 1997, Proceedings of the Fourth Working Conference on Reverse Engineering.

[6]  R. S. Arnold,et al.  Software restructuring , 1989, Proc. IEEE.

[7]  Richard C. Holt,et al.  Software botryology. Automatic clustering of software systems , 1998, Proceedings Ninth International Workshop on Database and Expert Systems Applications (Cat. No.98EX130).

[8]  Brian Everitt,et al.  Cluster analysis , 1974 .

[9]  James M. Bieman,et al.  Using design abstractions to visualize, quantify, and restructure software , 1998, J. Syst. Softw..

[10]  Nicolas Anquetil,et al.  Comparative study of clustering algorithms and abstract representations for software remodularisation , 2003 .

[11]  Vijay Srinivasan,et al.  RSVP-TE: Extensions to RSVP for LSP Tunnels , 2001, RFC.

[12]  Robert W. Schwanke,et al.  An intelligent tool for re-engineering software modularity , 1991, [1991 Proceedings] 13th International Conference on Software Engineering.

[13]  Arun Lakhotia Rule-based approach to computing module cohesion , 1993, Proceedings of 1993 15th International Conference on Software Engineering.

[14]  Arun Lakhotia,et al.  A Unified Framework For Expressing Software Subsystem Classification Techniques , 1997, J. Syst. Softw..

[15]  William C. Chu,et al.  Software restructuring by enforcing localization and information hiding , 1992, Proceedings Conference on Software Maintenance 1992.

[16]  James M. Bieman,et al.  A quantitative framework for software restructuring , 1999 .

[17]  Spiros Mancoridis,et al.  Comparing the decompositions produced by software clustering algorithms using similarity measurements , 2001, Proceedings IEEE International Conference on Software Maintenance. ICSM 2001.

[18]  Hausi A. Müller,et al.  A reverse-engineering approach to subsystem structure identification , 1993, J. Softw. Maintenance Res. Pract..

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

[20]  Arun Lakhotia,et al.  Restructuring programs by tucking statements into functions , 1998, Inf. Softw. Technol..

[21]  Harpal S. Dhama Quantitative models of cohesion and coupling in software , 1995, J. Syst. Softw..

[22]  R. Braden,et al.  Resource reSer Vation Protocol (RSVP) , 1997 .

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

[24]  Eric C. Rosen,et al.  Multiprotocol Label Switching Architecture , 2001, RFC.

[25]  Hyeon Soo Kim,et al.  Restructuring Programs through Program Slicing , 1994, Int. J. Softw. Eng. Knowl. Eng..

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

[27]  James M. Bieman,et al.  Measuring Functional Cohesion , 1994, IEEE Trans. Software Eng..

[28]  Shari Lawrence Pfleeger,et al.  Software Metrics : A Rigorous and Practical Approach , 1998 .

[29]  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).

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

[31]  Roger S. Pressman,et al.  Software Engineering: A Practitioner's Approach , 1982 .

[32]  Peter H. A. Sneath,et al.  Numerical Taxonomy: The Principles and Practice of Numerical Classification , 1973 .

[33]  John C. Munson,et al.  Software Engineering Measurement , 2003 .

[34]  Sandro Morasca,et al.  Property-Based Software Engineering Measurement , 1996, IEEE Trans. Software Eng..

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

[36]  Hausi A. Müller,et al.  Understanding Software Systems Using Reverse Engineering Technology , 1994, COODBSE.

[37]  James H. Cross,et al.  Reverse engineering and design recovery: a taxonomy , 1990, IEEE Software.

[38]  Chung-Horng Lung,et al.  Using Clustering Technique to Restructure Programs , 2004, Software Engineering Research and Practice.