Computer-Aided Extraction of Software Components

In a software project, outsourcing the development of a particular functionality, reusing a part in another software, or handing-over a part of the code to a new team member requires the extraction of an independent subset of the software—a component. This paper describes and analyzes the process of extracting such a component. We introduce an automated approach based on optimizing the cut between the new component and the remaining system. A visual development tool implements our approach and interactively supports the extraction. Finally, we look at the results of a thinking aloud user study and discuss the lessons learned about the extraction tool as well as the extraction process.

[1]  Markus Dahm,et al.  Byte Code Engineering , 1999, Java-Informations-Tage.

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

[3]  Arie van Deursen,et al.  Splitting a large software repository for easing future software evolution—an industrial experience report , 2009, CSMR 2009.

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

[5]  Yaser Ghanam,et al.  A Survey Paper on Software Architecture Visualization , 2008 .

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

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

[8]  Frank Tip,et al.  Extracting library-based Java applications , 2003, CACM.

[9]  Giuseppe Visaggio,et al.  Extracting Reusable Funtions by Flow Graph-Based Program Slicing , 1997, IEEE Trans. Software Eng..

[10]  Thomas H. Cormen,et al.  Introduction to algorithms [2nd ed.] , 2001 .

[11]  Kozo Sugiyama,et al.  Visualization of structural information: automatic drawing of compound digraphs , 1991, IEEE Trans. Syst. Man Cybern..

[12]  Onaiza Maqbool,et al.  Hierarchical Clustering for Software Architecture Recovery , 2007, IEEE Transactions on Software Engineering.

[13]  Gail C. Murphy,et al.  Conceptual module querying for software reengineering , 1998, Proceedings of the 20th International Conference on Software Engineering.

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

[15]  Hironori Washizaki,et al.  Automated Extract Component Refactoring , 2003, XP.

[16]  Guy Melançon,et al.  Software components capture using graph clustering , 2003, 11th IEEE International Workshop on Program Comprehension, 2003..

[17]  Clayton Lewis,et al.  TASK-CENTERED USER INTERFACE DESIGN A Practical Introduction , 2006 .

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

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

[20]  J. Henkel,et al.  CatchUp! Capturing and replaying refactorings to support API evolution , 2005, Proceedings. 27th International Conference on Software Engineering, 2005. ICSE 2005..

[21]  Jianjun Zhao,et al.  A slicing-based approach to extracting reusable software architectures , 2000, Proceedings of the Fourth European Conference on Software Maintenance and Reengineering.

[22]  Rainer Koschke An incremental semi-automatic method for component recovery , 1999, Sixth Working Conference on Reverse Engineering (Cat. No.PR00303).

[23]  Audris Mockus,et al.  Globalization by Chunking: A Quantitative Approach , 2001, IEEE Softw..

[24]  George L. Nemhauser,et al.  Min-cut clustering , 1993, Math. Program..