Measuring and improving code quality in highly configurable software systems
Creators: name: Fenske, Wolfram
Publisher: name: Universitäts- und Landesbibliothek Sachsen-Anhalt
Year: 2020
Subjects: subject: Software engineering
subject: 005.1

description: Highly conﬁgurable software systems (also known as software product lines) are software systems that can be conﬁgured to fulﬁll multiple sets of requirements. To achieve this conﬁgurability, the code base of highly conﬁgurable software systems must be variable, so that well-deﬁned pieces of the implementation can be selectively compiled into a given product or left out of it. In this thesis, I have investigated how variability at the implementation level af-fects the quality of the code base. Speciﬁcally, I argue that variability adds new design challenges that assessments of internal quality should take into account. To this end, I propose variability-aware code smells, an adaptation of the well-known code smell idea that treats variability as a ﬁrst class concept. I show that such smells exist in the wild and present evidence that they negatively aﬀect software development. Moreover, I propose a concept and tool support to detect variability-aware code smells in C programs that use preprocessor directives (a. k. a. #ifdefs) as the variability mechanism. Preprocessor-based variability is widely used but also often criticized as a cause for hard-to-understand code and subtle bugs. For this reason, I analyzed the impact of preprocessor-based variability, ﬁnding that it has no systematic eﬀect on maintainability in terms of the frequency or extent of code changes. In addition to studying the eﬀect of variability on code smells, this thesis also ad-dresses the eﬀect of variability on a closely related topic, refactoring. To this end, I created a taxonomy of reengineering activities for highly conﬁgurable software sys-tems and classiﬁed existing work according to this taxonomy. Moreover, I propose two variant-preserving refactorings for reducing code replication in highly conﬁg-urable software systems, and embed these refactorings in a novel process to migrate product families that were created through clone-and-own to a software product line. In summary, this thesis contributes new insights into the impact of variability at the implementation level. It demonstrates how diﬀerent design choices for imple-menting variability can have either positive or negative eﬀects on important aspects of software development, such as understandability or maintainability. Moreover, it presents novel evidence that static source code conﬁgurability based on C prepro-cessor directives does not increase code change proneness. Finally, this thesis adds clarity to future discussions about refactoring techniques for highly conﬁgurable software systems and contributes new refactorings to improve the code quality such systems.
description: Hoch-konﬁgurierbare Software-Systeme (auch bekannt als Software-Produktlinien) sind Software-Systeme, die konﬁguriert werden können, um unterschiedlichen An-forderungen gerecht zu werden. Um diese Konﬁgurierbarkeit zu erreichen muss die Code-Basis hoch-konﬁgurierbarer Software-Systeme variabel sein, sodass beim Kom-pilieren eines gegebenen Produkts wohldeﬁnierte Teile der Implementierung selektiv ein- oder ausgeschlossen werden können. In der vorliegenden Doktorarbeit habe ich untersucht, wie Variabilität auf der Imple-mentierungsebene die Qualität der Code-Basis beeinﬂusst. Im Speziellen behaupte ich, dass Variabilität neue Herausforderungen für den Entwurf mit sich bringt, die bei der Bewertung der internen Qualität berücksichtigt werden sollten. Zu diesem Zweck schlage ich variabilitätsgewahre Code Smells vor, eine Adaptierung der bekan-nten Code-Smell-Idee, welche Variabilität in den Mittelpunkt der Betrachtung rückt. Ich zeige, dass derartige Smells in realen Software-Projekten vorkommen und bringe Belege dafür vor, dass sie die Software-Entwicklung negativ beeinﬂussen. Des Weit-eren stelle ich ein Konzept und Werkzeugunterstützung vor, um variabilitätsgewahre Code-Smells in C-Programmen, die Präprozessordirektiven (sogenannte #ifdefs) als Variabilitätsmechanismus nutzen, zu detektieren. Präprozessor-basierte Varia-bilität ist weit verbreitet, wird aber auch häuﬁg als Ursache schwer verständlichen Codes und subtiler Bugs kritisiert. Aus diesem Grund habe ich die Auswirkung von Präprozessor-basierter Variabilität untersucht, mit dem Ergebnis, dass keine systematischen Auswirkungen auf die Wartbarkeit im Sinne von häuﬁgeren oder umfangreicheren änderungen vorliegen. Zuzüglich zur Untersuchung der Auswirkungen von Variabilität auf Code-Smells adressiert diese Doktorarbeit die Auswirkungen von Variabilität auf ein eng ver-wandtes Thema, Refactoring. Zu diesem Zweck habe ich eine Taxonomie von Reengineering-Aktivitäten für hoch-konﬁgurierbare Software-Systeme erstellt und bestehende Arbeiten gemäß dieser Taxonomie klassiﬁziert. Weiterhin schlage ich variantentreue Refactorings zur Reduktion von Code-Replikation vor und bette diese Refactorings in einen neuartigen Prozess ein, mit dessen Hilfe Produktfamilien, die durch Clone-and-Own entstanden sind, in eine Software-Produktlinie überführt wer-den. Zusammenfassend liefert diese Doktorarbeit neue Erkenntnisse zum Einﬂuss von Variabilität auf die Implementierungsebene. Sie zeigt, wie unterschiedliche Entschei-dungen bei der Implementierung von Variabilität sowohl positive als auch negative Auswirkungen auf wichtige Aspekte der Software-Entwicklung, wie zum Beispiel Verständlichkeit oder Wartbarkeit, haben können. Zusätzlich liefert sie neue Belege, dass statische Quellcode-Konﬁgurierbarkeit basierend auf C-Präprozessordirektiven die Änderungsanfälligkeit nicht erhöht. Abschließend erleichtert diese Doktorar-beit zukünftige Diskussionen über Refactoring-Techniken für hoch-konﬁgurierbare Software-Systeme und steuert neue Refactorings bei, um die Code-Qualität solcher Systeme zu verbessern.