Today software is often developed as a set of related products that are derived from a common infrastructure, a so-called software product line. A major issue in product line engineering is the continuous evolution of the product line as all products are intimately connected and the total lifetime of a product line is longer than that of any of its derived products. In this project, we will study long-living software product lines and their continuous evolution with a specific focus on embedded systems and in particular industry automation systems. In these domains, variability is often implemented statically through preprocessor directives or dynamically through setting configuration variables at initialization time or later at runtime. Despite their relevance, these variability techniques are still only insufficiently researched. We will develop techniques to check the integrity of a product line implementation whenever it is changed during its evolution. That is, as opposed to most other work on the analysis of product lines, the focus will not be on the analysis of one particular version of a product line, but on the difference introduced when modifying a product line. The project will combine reverse engineering, program analysis, and formal product line analysis to discover the introduction of flaws through evolutionary changes. These flaws often arise from unintended side effects of evolution activities related to a feature. The project will take a comprehensive approach, taking into account maintenance actions related to the variability model as well as implementation changes and also from combinations of both.
Funding Body: DFG