Refactoring a legacy component for reuse in a software product line: a case study

Product lines are a promising approach to improve conceptually the productivity of the software development process and thus to reduce both the cost and time of developing and maintaining increasingly complex systems. An important issue in the adoption of the product-line approach is the migration of legacy software components, which have not been designed for reuse, systematically into reusable product-line components. This article describes activities performed to improve systematically the design and implementation of an existing software component in order to reuse it in a software product line. The activities are embedded in the application of Fraunhofer PuLSE™-DSSA—an approach for defining domain-specific software architectures (DSSA) and product-line architectures. The component under investigation is the so-called Image Memory Handler (IMH), which is used in Ricoh's current products of office appliances such as copier machines, printers, and multi-functional peripherals. It is responsible for controlling memory usage and compressing and decompressing image data. Improvement of both the component's design and implementation are based on a systematic analysis and focused on increasing maintainability and reusability and hence suitability for use in a product line. As a result of the analysis and refactoring activities, the documentation and implementation of the component has been considerably improved as shown by quantitative data collected at the end of the activities. Despite a number of changes to the code, the external behavior of the component has been preserved without significantly affecting the performance. Copyright © 2006 John Wiley & Sons, Ltd.

[1]  Arie van Deursen,et al.  An evaluation of clone detection techniques for crosscutting concerns , 2004, 20th IEEE International Conference on Software Maintenance, 2004. Proceedings..

[2]  John D. McGregor,et al.  Calculating ROI for software product lines , 2004, IEEE Software.

[3]  H. D. Rombach,et al.  THE EXPERIENCE FACTORY , 1999 .

[4]  Elizabeth Burd,et al.  Evaluating clone detection tools for use during preventative maintenance , 2002, Proceedings. Second IEEE International Workshop on Source Code Analysis and Manipulation.

[5]  Klaus Schmid,et al.  PuLSE: a methodology to develop software product lines , 1999, SSR '99.

[6]  Barbara Paech,et al.  Component-based product line engineering with UML , 2001, Addison Wesley object technology series.

[7]  Michael W. Godfrey,et al.  Aiding comprehension of cloning through categorization , 2004 .

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

[9]  Matthias Rieger,et al.  Effective Clone Detection Without Language Barriers , 2005 .

[10]  Diomidis Spinellis,et al.  Global Analysis and Transformations in Preprocessed Languages , 2003, IEEE Trans. Software Eng..

[11]  Stéphane Ducasse,et al.  A language independent approach for detecting duplicated code , 1999, Proceedings IEEE International Conference on Software Maintenance - 1999 (ICSM'99). 'Software Maintenance for Business Change' (Cat. No.99CB36360).

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

[13]  Dirk Muthig,et al.  A case study in refactoring a legacy component for reuse in a product line , 2005, 21st IEEE International Conference on Software Maintenance (ICSM'05).

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

[15]  K. Beck,et al.  Extreme Programming Explained , 2002 .

[16]  Charles W. Butler,et al.  Design complexity measurement and testing , 1989, CACM.

[17]  Dennis L. Brandt,et al.  Quality measures in design: finding problems before coding , 1990, SOEN.

[18]  Joachim Bayer,et al.  View based software documentation , 2004 .

[19]  Marvin V. Zelkowitz,et al.  Software Process Improvement in the NASA Software Engineering Laboratory , 1994 .

[20]  Ralph E. Johnson,et al.  Refactoring C with conditional compilation , 2003, 18th IEEE International Conference on Automated Software Engineering, 2003. Proceedings..

[21]  Don S. Batory,et al.  Evolving object-oriented designs with refactorings , 1999, 14th IEEE International Conference on Automated Software Engineering.

[22]  Colin Atkinson,et al.  Model-Driven Product Line Architectures , 2002, SPLC.

[23]  Philippe Kruchten,et al.  The 4+1 View Model of Architecture , 1995, IEEE Softw..

[24]  Anas N. Al-Rabadi,et al.  A comparison of modified reconstructability analysis and Ashenhurst‐Curtis decomposition of Boolean functions , 2004 .

[25]  Victor R. Basili,et al.  Software process evolution at the SEL , 1994, IEEE Software.

[26]  Rick Kazman,et al.  The architecture tradeoff analysis method , 1998, Proceedings. Fourth IEEE International Conference on Engineering of Complex Computer Systems (Cat. No.98EX193).

[27]  Paul Clements,et al.  Software product lines - practices and patterns , 2001, SEI series in software engineering.

[28]  Ralph E. Johnson,et al.  A Refactoring Tool for Smalltalk , 1997, Theory Pract. Object Syst..

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

[30]  David M. Weiss,et al.  Software Product-Line Engineering: A Family-Based Software Development Process , 1999 .

[31]  Don Roberts,et al.  Practical analysis for refactoring , 1999 .

[32]  William F. Opdyke,et al.  Refactoring object-oriented frameworks , 1992 .