Refactoring object-oriented frameworks
Refactoring object-oriented frameworks
Refactoring: improving the design of existing code
Refactoring: improving the design of existing code
Transitioning legacy assets to a product line architecture
ESEC/FSE-7 Proceedings of the 7th European software engineering conference held jointly with the 7th ACM SIGSOFT international symposium on Foundations of software engineering
Experimentation in software engineering: an introduction
Experimentation in software engineering: an introduction
Design and use of software architectures: adopting and evolving a product-line approach
Design and use of software architectures: adopting and evolving a product-line approach
Concern graphs: finding and describing concerns using structural program dependencies
Proceedings of the 24th International Conference on Software Engineering
Playing Detective: Reconstructing Software Architecture from Available Evidence
Automated Software Engineering
Reverse Engineering and Design Recovery: A Taxonomy
IEEE Software
Software Reflexion Models: Bridging the Gap between Design and Implementation
IEEE Transactions on Software Engineering
Object-oriented modeling with ADORA
Information Systems - The 13th international conference on advanced information systems engineering (CAiSE*01)
MAP - Mining Architectures for Product Line Evaluations
WICSA '01 Proceedings of the Working IEEE/IFIP Conference on Software Architecture
A comparison of methods for locating features in legacy software
Journal of Systems and Software
Mining and Managing Software Assets
STEP '02 Proceedings of the 10th International Workshop on Software Technology and Engineering Practice
Refactoring to Patterns
IEEE Transactions on Software Engineering
Evidence-Based Software Engineering
Proceedings of the 26th International Conference on Software Engineering
Requirements engineering paper classification and evaluation criteria: a proposal and a discussion
Requirements Engineering
Software Evolution and Feedback: Theory and Practice
Software Evolution and Feedback: Theory and Practice
Seamless development of software product lines
GPCE '07 Proceedings of the 6th international conference on Generative programming and component engineering
Software Product Lines in Action: The Best Industrial Practice in Product Line Engineering
Software Product Lines in Action: The Best Industrial Practice in Product Line Engineering
Applying Systematic Reviews to Diverse Study Types: An Experience Report
ESEM '07 Proceedings of the First International Symposium on Empirical Software Engineering and Measurement
Developing search strategies for detecting relevant experiments
Empirical Software Engineering
Refactoring Generics in JAVA: A Case Study on Extract Method
CSMR '10 Proceedings of the 2010 14th European Conference on Software Maintenance and Reengineering
Using mapping studies as the basis for further research - A participant-observer case study
Information and Software Technology
A systematic review of software architecture evolution research
Information and Software Technology
Reference-based search strategies in systematic reviews
EASE'09 Proceedings of the 13th international conference on Evaluation and Assessment in Software Engineering
Systematic mapping studies in software engineering
EASE'08 Proceedings of the 12th international conference on Evaluation and Assessment in Software Engineering
A taxonomy of software product line reengineering
Proceedings of the Eighth International Workshop on Variability Modelling of Software-Intensive Systems
Hi-index | 0.00 |
Software product lines (SPLs) are used in industry to develop families of similar software systems. Legacy systems, either highly configurable or with a story of versions and local variations, are potential candidates for reconfiguration as SPLs using reengineering techniques. Existing SPLs can also be restructured using specific refactorings to improve their internal quality. Although many contributions (including industrial experiences) can be found in the literature, we lack a global vision covering the whole life cycle of an evolving product line. This study aims to survey existing research on the reengineering of legacy systems into SPLs and the refactoring of existing SPLs in order to identify proven approaches and pending challenges for future research in both subfields. We launched a systematic mapping study to find as much literature as possible, covering the diverse terms involved in the search string (restructuring, refactoring, reengineering, etc. always connected with SPLs) and filtering the papers using relevance criteria. The 74 papers selected were classified with respect to several dimensions: main focus, research and contribution type, academic or industrial validation if included, etc. We classified the research approaches and analyzed their feasibility for use in industry. The results of the study indicate that the initial works focused on the adaptation of generic reengineering processes to SPL extraction. Starting from that foundation, several trends have been detected in recent research: the integrated or guided reengineering of (typically object-oriented) legacy code and requirements; specific aspect-oriented or feature-oriented refactoring into SPLs, and more recently, refactoring for the evolution of existing product lines. A majority of papers include academic or industrial case studies, though only a few are based on quantitative data. The degree of maturity of both subfields is different: Industry examples for the reengineering of the legacy system subfield are abundant, although more evaluation research is needed to provide better evidence for adoption in industry. Product line evolution through refactoring is an emerging topic with some pending challenges. Although it has recently received some attention, the theoretical foundation is rather limited in this subfield and should be addressed in the near future. To sum up, the main contributions of this work are the classification of research approaches as well as the analysis of remaining challenges, open issues, and research opportunities.