EXtracting Product Lines from vAriaNTs (EXPLANT)

Software product lines (SPLs) promote strategic reuse and support variability in a systematic way. In practice, however, the need for reuse and variability has often been satisfied by copying programs and adapting them as needed — the clone-and-own approach. The result is a family of cloned product variants that is hard to maintain in the long term. This project aims at consolidating such cloned product families into a well-structured, modular software product line. Guided by code-clone detection, architectural analyses, and domain knowledge, the consolidation process is semi-automatic and stepwise. Each step constitutes a small, semantics-preserving transformation of the code, the feature model or both. These semantics-preserving transformations are called variant-preserving refactorings.

Material for: A Taxonomy of Software Product Line Reengineering

Published in Proceedings of the Eighth International Workshop on Variability Modelling of Software-Intensive Systems (VaMoS'14)

This literature survey presents part of the related work for the EXPLANT project. In particular, we differentiate between different kinds of refactoring in the context of SPL engineering and provide definitions for the three main types of SPL refactoring. Moreover, we classify existing work on SPL refactoring. One of the main conclusions of this classification is that so far, little work has addressed the implementation-level aspects of migrating multiple> cloned product variants to an SPL.

Abstract

In the context of single software systems, refactoring is commonly accepted to be the process of restructuring an existing body of code in order to improve its internal structure without changing its external behavior. This process is vital to the maintenance and evolution of software systems.

Software product line engineering is a paradigm for the construction and customization of large-scale software systems. As systems grow in complexity and size, maintaining a clean structure becomes arguably more important. However, product line literature uses the term "refactoring" for such a wide range of reengineering activities that it has become difficult to see how these activities pertain to maintenance and evolution and how they are related.

We improve this situation in the following way: i) We identify the dimensions along which product line reengineering occurs. ii) We derive a taxonomy that distinguishes and relates these reengineering activities. iii) We propose definitions for the three main branches of this taxonomy. iv) We classify a corpus of existing work.

The paper only shows small excerpts of our proposed taxonomy. Here is the figure of the full taxonomy as a PDF.

Publications