Configuration-aware Program Analysis for Maintenance and Evolution in Industrial Software Product Lines

Florian Angerer


Abstract

Due to increased market demands for highly customized solutions, software systems are often organized as software product lines (SPLs) where individual solutions are created from a common code base. SPLs support managing common functionality relevant for most customers while still allowing to provide specific extensions for particular needs. Software development in SPLs, however, results in new challenges regarding software development processes and tool support. Specifically, the many possible variants and versions calling for effective variability management. Supporting this variability in the software, however, leads to increased design complexity and maintenance effort.

This thesis presents static program analysis methods and tool support considering the variability and the configuration in SPLs. Based on a representation of program dependencies in the form of a conditional system dependence graph (CSDG), which also encodes the configuration options of a SPL, it introduces methods supporting different maintenance and evolution scenarios in the SPL context. The inactive code detection method allows to automatically identify code in a product, which is inactive due to the specific product configuration. Further, a method for interprocedural and configuration-aware change impact analysis (CA-CIA) allows determining possibly impacted products when changing source code of a SPL and also supports engineers who are adapting specific product variants after an initial configuration.

The methods presented in this thesis particularly focus on the delayed variability principle that allows performing configuration-aware program analysis for software systems using load-time configuration options. So far, research has focused on compile-time variability that allows to generate software products by including or excluding program code. However, load-time variability also imposes new challenges for developing, testing, and analyzing variable software systems. Therefore, a comparative experiment has been conducted to compare the well-established lifted analysis approach to the delayed variability approach. Results show that the delayed variability approach is significantly faster but in some cases sacrifices precision for performance.

Kurzfassung

Um die hohen Anforderungen des Software Markts erfüllen zu können, werden immer häufiger Software Produktlinien (SPLs) eingesetzt, welche es erlauben individuelle Lösungen aus vorhandenen Bausteinen zu erstellen. Dabei verwaltet eine SPL Basisfunktionen die für einen Großteil der Kunden benötigt werden wobei eben noch spezielle Lösungen ergänzt werden können. Die Vorteile von SPLs wurden vielfach gezeigt, aber durch diese vergleichsweise junge Art von Softwareorganisation entstehen auch neue Herausforderungen, die den Entwicklungsprozess und die Entwicklungswerkzeuge betreffen. Um genau zu sein, die Unzahl an möglichen Produktvarianten bringt einen höheren Aufwand bei Entwurf und Wartung mit sich und Entwickler benötigen Unterstützung bei diesen Aufgaben.

Diese Arbeit stellt daher statische Programmanalysemethoden und Werkzeuge vor, welche Variabilität bzw. Konfiguration in Software Produktlinien unterstützen. Dafür wird eine Datenstruktur namens Conditional System Dependence Graph (CSDG) verwendet, welcher alle Daten- und Kontrollabhängigkeiten im Programm repräsentiert und auch die Variabilität abbildet. Die erste Methode verwendet den CSDG um inaktiven Source Code von konkreten Produktvarianten automatisch zu erkennen. Der zweite Ansatz erlaubt es eine globale Auswirkungsanalyse für Änderungen durchzuführen, wobei die Variabilität des Programms berücksichtigt wird. Dieser Ansatz ist im speziellen dafür gedacht, Entwickler bei der Wartung der Produktlinie und bei der Adaptierung von Varianten zu unterstützen.

Die vorgestellten Methoden verwenden das Delayed Variability Analyseprinzip um Programmanalyse unter der Berücksichtigung von Konfiguration durchzuführen, wobei speziell auf Konfigurationsoptionen die beim Programmstart geladen werden, abgezielt wird. Das ist auch der wesentliche Unterschied zu bestehenden Ansätzen, die als Lifted Analysis bezeichnet werden und sich meist auf Konfiguration während der Übersetzungszeit konzentrieren. Da es aber Überschneidungen bei den Ansätzen gibt, präsentiert diese Arbeit auch einen Vergleich zwischen den Ansätzen für Konfiguration zum Programmstart und zur Übersetzungszeit. Die Ergebnisse zeigen einen deutlichen Geschwindigkeitsvorteil für Delayed Variability, jedoch zum Preis von Genauigkeit.


PhD thesis, Johannes Kepler University Linz, January 2017

Download als pdf