Abstract:
In dieser Dissertation formalisieren und analysieren wir die Konsistenzerhaltung verschiedener Artefakte zur Beschreibung eines Softwaresystems durch die Kopplung von Transformationen zwischen diesen und unterstützen sie mit geeigneten Methoden.
Für die Entwicklung eines Softwaresystems nutzen Entwickler:innen und weitere Beteiligte verschiedene Sprachen, oder allgemein Werkzeuge, zur Beschreibung unterschiedlicher Belange. Meist stellt Programmcode das zentrale Artefakt dar, welches jedoch, implizit oder explizit, durch Spezifikationen von Architektur, Deployment, Anforderungen und anderen ergänzt wird. ... mehrNeben der Programmiersprache verwenden die Beteiligten weitere Sprachen zur Spezifikation dieser Artefakte, beispielsweise die UML für Modelle des objektorientierten Entwurfs oder der Architektur, den OpenAPI-Standard für Schnittstellen-Definitionen, oder Docker für Deployment-Spezifikationen. Zur Erstellung eines funktionsfähigen Softwaresystems müssen diese Artefakte das System einheitlich und widerspruchsfrei darstellen. Beispielsweise müssen Dienst-Schnittstellen in allen Artefakten einheitlich repräsentiert sein. Wir sagen, die Artefakte müssen konsistent sein.
In der modellgetriebenen Entwicklung werden solche verschiedenen Artefakte allgemein Modelle genannt und bereits als wesentliche zentrale Entwicklungsbestandteile genutzt, um auch Teile des Programmcodes aus ihnen abzuleiten. Dies betrifft beispielsweise die Softwareentwicklung für Fahrzeuge. Zur Konsistenzerhaltung der Modelle werden oftmals Transformationen eingesetzt, die nach Änderungen eines Modells die anderen Modelle anpassen. Die bisherige Forschung beschränkt sich auf Transformationen zur Konsistenzerhaltung zweier Modelle und die projektspezifische Kombination von Transformationen zur Konsistenzerhaltung mehrerer Modelle. Ein systematischer Entwicklungsprozess, in dem einzelne Transformationen unabhängig entwickelt und in verschiedenen Kontexten modular wiederverwendet werden können, wird hierdurch jedoch nicht unterstützt.
In dieser Dissertation erforschen wir, wie Entwickler:innen mehrere Transformationen zu einem Netzwerk kombinieren können, welches die Transformationen in einer geeigneten Reihenfolge ausführen kann, sodass abschließend alle Modelle konsistent zueinander sind. Dies geschieht unter der Annahme, dass einzelne Transformationen zwischen zwei Sprachen unabhängig voneinander entwickelt werden und daher nicht aufeinander abgestimmt werden können. Unsere Beiträge unterteilen sich in die Untersuchung der Korrektheit einer solchen Kombination von Transformationen zu einem Netzwerk und die Optimierung von Qualitätseigenschaften solcher Netzwerke.
Wir diskutieren und definieren zunächst einen adäquaten Korrektheitsbegriff, welcher drei Anforderungen impliziert. Diese umfassen eine Synchronisations-Eigenschaft für die einzelnen Transformationen, eine Kompatibilitäts-Eigenschaft für das Transformationsnetzwerk, sowie das Finden einer geeigneten Ausführungsreihenfolge der Transformationen, einer Orchestrierung. Wir stellen ein Konstruktionsverfahren für Transformationen vor, mit welchem die Synchronisations-Eigenschaft basierend auf einer formal bewiesenen Eigenschaft erfüllt wird. Für dieses zeigen wir Vollständigkeit und Angemessenheit mit einer fallstudienbasierten empirischen Evaluation in der Domäne der komponentenbasierten Softwareentwicklung. Wir definieren die Eigenschaft der Kompatibilität von Transformationen, für welche wir ein formales und bewiesen korrektes Analyseverfahren vorschlagen und eine praktische Realisierung ableiten, deren Anwendbarkeit wir in Fallstudien nachweisen. Schlussendlich definieren wir das Orchestrierungsproblem zum Finden einer Orchestrierung, die zu konsistenten Modelle führt wann immer solch eine Orchestrierung existiert. Wir beweisen die Unentscheidbarkeit dieses Problems und diskutieren, dass eine Einschränkung des Problems, um Entscheidbarkeit zu erreichen, die Anwendbarkeit unpraktikabel beschränken würde. Daher schlagen wir einen Algorithmus vor, der das Problem konservativ behandelt. Er findet eine Orchestrierung unter bestimmten, wohldefinierten Bedingungen und terminiert andernfalls mit einem Fehler. Wir beweisen die Korrektheit des Algorithmus und eine Eigenschaft, die das Finden der Ursache im Fehlerfall unterstützt. Zusätzlich kategorisieren wir Fehler, die auftreten können falls ein Netzwerk den definierten Korrektheitsbegriff nicht erfüllt. Daraus leiten wir mittels den bereits genannten Fallstudien ab, dass die meisten potentiellen Fehler per Konstruktion mit den in dieser Arbeit vorgeschlagenen Ansätzen vermieden werden können.
Zur Untersuchung von Qualitätseigenschaften eines Netzwerkes von Transformationen klassifizieren wir zunächst relevante Eigenschaften, sowie den Effekt verschiedener Typen von Netzwerktopologien auf diese. Hierbei zeigt sich, dass insbesondere Korrektheit und Wiederverwendbarkeit im Widerspruch stehen, sodass die Wahl der Netzwerktopologie ein Abwägen bei der Optimierung dieser Eigenschaften erfordert. Wir leiten hieraus ein Konstruktionsverfahren für Transformationsnetzwerke ab, welches die Notwendigkeit einer Abwägung zwischen den Qualitätseigenschaften abmildert und, unter gewissen Voraussetzungen, Korrektheit per Konstruktion gewährleistet. Wir unterstützen den Entwicklungsprozess für diesen Ansatz mithilfe einer spezialisierten Spezifikationssprache. Während die Verminderung der Notwendigkeit einer Abwägung zwischen Qualitätseigenschaften durch den Ansatz per Konstruktion erreicht wird, zeigen wir die Erreichbarkeit der Voraussetzungen und die Vorteile der vorgeschlagenen Sprache in einer empirischen Evaluation mithilfe der Fallstudie aus der komponentenbasierten Softwareentwicklung.
Die Beiträge dieser Dissertation unterstützen sowohl Forscher:innen als auch Transformationsentwickler:innen und Transformationsanwender:innen bei der Analyse und Konstruktion von Netzwerken von Transformationen. Sie stellen für Forscher:innen und Transformationsentwickler:innen systematisches Wissen über die Korrektheit und weitere Qualitätseigenschaften solcher Netzwerke bereit. Sie zeigen insbesondere welche Teile dieser Eigenschaften per Konstruktion erreicht werden können, welche per Analyse validiert werden können, und welche Fehler unvermeidbar bei der Ausführung erwartet werden müssen. Zusätzlich zu diesen Einsichten stellen wir konkrete, praktisch nutzbare Verfahren bereit, mit denen Transformationsentwickler:innen und Transformationsanwender:innen korrekte, modular wiederverwendbare Netzwerke konstruieren, analysieren und ausführen können.
Abstract (englisch):
In this thesis, we formalize and analyze how to preserve consistency between multiple artifacts describing the same software system through the combination of transformations between them and support it with appropriate methods.
During the development of a software system, the developers and further stakeholders employ multiple languages or, in general, tools to describe different concerns. Code often represents the central artifact, which is, however, implicitly or explicitly complemented by specifications of the architecture, deployment, requirements and others. In addition to the programming language, further languages are used to specify these artifacts, such as the UML for object-oriented design or architecture models, the OpenAPI standard for interface definitions, or Docker for deployment specifications. ... mehrTo achieve a functional software system, all these artifacts must depict a uniform, non-contradicting specification of the whole system. Interfaces of services must, for example, be represented in all these artifacts uniformly. We say that the artifacts have to be consistent.
In model-driven software development, such artifacts are denoted as models and represent central units of the development process, from which also at least parts of the program code can be derived. This is, for example, already applied in automotive software development. A common means to preserve consistency between models are transformations, which adapt the other models after one of them was changed. Existing research is restricted to transformations that preserve consistency between pairs of models or to project-specific combinations of transformations to preserve consistency of multiple models. A systematic development process that enables the independent development of transformations and their modular reuse in different contexts is, however, not yet supported.
In this thesis, we research how developers can combine multiple transformations to a network that is able to execute these transformations in an order such that all resulting models are consistent. To this end, we assume that each transformation between two languages is developed independently and that the transformations cannot be aligned with each other. Our contributions are separated into those concerning the correctness of such a combination of transformations to a network and those concerning the optimization of quality properties of such a network.
We first derive and precisely define an appropriate notion of correctness for transformation networks. It induces three specific requirements, which are a synchronization property of the single transformations, a compatibility property of a network of transformations, and finding an appropriate orchestration, i.e., an execution order of the transformations. We propose a construction approach for transformations to fulfill the synchronization property with existing transformation specification languages on a formally proven property. For this approach, we show completeness and appropriateness with a case-study-based empirical evaluation in the domain of component-based software engineering. We formally define compatibility of transformations, for which we propose a formal analysis, which is proven correct, and derive a practical analysis, whose applicability we demonstrate with case studies. Finally, we define the orchestration problem of finding an orchestration that delivers consistent models whenever such an orchestration exists. We prove undecidability of that problem and discuss that restrictions to achieve its decidability will likely limit practical applicability. For that reason, we propose an algorithm that conservatively approaches the problem. It guarantees to deliver an orchestration under specific, well-defined conditions and otherwise indicates an error. We prove correctness of the algorithm and a property that supports finding the cause whenever the algorithm fails. Additionally, we categorize errors that can occur if a transformation network does not fulfill the defined correctness notion, from which we derive by means of the mentioned case studies that most potential errors can be avoided by construction with the approaches that we propose in this thesis.
The investigation of quality properties of transformation networks is based on a classification of relevant properties and of the effects of different types of network topologies on them. It reveals that especially correctness and reusability are contradictory, thus the selection of a network topology induces a trade-off between these properties. We derive a construction approach for transformation networks that mitigates the necessary trade-off decision and, under specific assumptions, guarantees correctness by construction. We support the development process for this approach with a specialized specification language. While trade-off mitigation is given by construction of the approach, we show achievability of the assumptions and benefits of the proposed language in an empirical evaluation using the case study from component-based software engineering.
The contributions of this thesis support researchers as well as transformation developers and users of transformations in analyzing and constructing networks of transformations. They depict systematic knowledge about correctness and further quality properties of transformation networks for researchers and transformation developers. In particular, they show precisely which parts of these properties can be achieved by construction, which can be validated by analysis, and which errors must inevitably be expected during execution. Along with these insights, we provide concrete, practically applicable approaches for the construction, analysis and execution of correct and modularly reusable transformation networks, from which developers and users of transformation networks both benefit.