In this paper we present recent developments in reverse engineering variability for block-based data-flow models.
MOTIVATIONModel-based languages, such as MATLAB/Simulink, AS-CET, or SCADE, are common means to model continuous data flow between different components of systems (e.g., between control units). Model-driven development with these languages is often applied for development in domains with high complexity (e.g., the automotive sector) [2]. The functionality of the developed components is represented by atomic function blocks, provided by the languages' libraries. These blocks can exchange data via connections between their inand outports, which also define the block interfaces. Most model-based languages also provide hierarchic blocks, which allow to decompose a model into different hierarchy levels. By using these blocks, the development starts at a very basic level and the created solution is refined with each added hierarchy level. This approach reduces the complexity further, because problems can be handled in a stepwise manner.As the development of complex systems is a tedious and expensive task, new models with similar, but differing functionality are often created by copying an existing model and modifying it to satisfy changed requirements [2,3]. This socalled clone-and-own approach includes deletions, additions and modifications of blocks, interfaces, and connections. As an increasing number of related models evolve from the existing software system, several issues arise. For example, testing the growing number of model variants is very expensive, because common parts are tested repeatedly. Applying bug fixes becomes a tedious task, since developers need to check each of the model variants to fix the error for the whole model family. In addition, updating the different variants to new versions turns into a complex and expensive task, because the different variants might have been modified when they were created from the initial model, such that updates might not be directly applicable. Because of these issues, it is crucial to identify the commonalities and differences between models and store this information in a way that developers understand and can easily use for their work.Family mining analyzes the created model family to identify and store the information about the variability between its product variants. The contribution of the FaMine approach is the automatic analysis of commonalities and differences of related models. The obtained information allows us to create family models, which store the information about the commonalities and differences of the software family. This information allows developers to get a better understanding of the variability between the compared models, which helps with many development tasks, such as testing, debugging, and maintenance.
BACKGROUNDCzarnecki et al. distinguish between problem space and solution space of software families [1]. The problem space specifies features, that can be used to solve a specific problem without giving any implementation d...