Das Konzept der Abstraktion ist das Fundament der Weiterentwicklung in der Informatik. Komplexe Konzepte und Techniken werden auf einer Abstraktionsebene zusammengefasst, auf der aufbauend weitere Techniken entstehen können. Die Geschichte der Programmiersprachen ist dabei keine Ausnahme. Die Assemblersprache ist eine Abstraktion binärer Maschinenbefehle, wodurch diese für den Menschen einfacher interpretierbar werden. Bis in die Neunziger mussten Benutzern Speicher manuell bereitstellen und wieder freigeben eine Aufgabe die moderne Sprachen automatisch bewerkstelligen. Modellgetriebene Softwareentwicklung, englisch Model-Driven Engineering (MDE), ist eine Methodik der Softwareentwicklung, in der Modelle das zentrale Element darstellen und das Abstraktionslevel über jenes von Programmiersprachen heben. Softwaresysteme, die mittels Modellen beschrieben werden, haben gewisse Vorteile: sie sind einfacher zu verstehen, sind wenn sich das zugrunde liegende System ändert leichter zu warten und können übersetzt werden, um anschließend auf verschieden Plattformen eingesetzt zu werden. Letztere Aufgabe wird mittels Modelltransformationen und Codegeneratoren durchgeführt. UML ist eine weit verbreitete, standardisierte Modellierungssprache. Sie wird genutzt um die Struktur und das Verhalten von Systemen zu beschreiben. Die Transformation von Systemen, die mittels UML beschrieben sind, zu ausführbarem Code, war lange eine mühselige Aufgabe. Das Fehlen einer formalen Semantik für UML, die angibt wie UML Modell zu interpretieren sind, erforderte es von Entwickler von Codegeneratoren eine individuellen Interpretationen der Bedeutung von Modellierungskonzepten vorzunehmen. Dieser Umstand änderte sich mit der Veröffentlich des fUML-Standards im Jahr 2011. Dieser Standard definiert die formale Semantik für einer Teilmenge von UML, bestehend aus Konzepten von Klassen- und Aktivitätsdiagrammen, sowie der UML Action Language. Gemeinsam mit dem fUML Standard wurde eine virtuelle Maschine eingeführt, mit der Benutzer fUML-konforme Modelle ausführen können. Das erste Ziel dieser Diplomarbeit ist die Erarbeitung und Implementierung eines Codegenerators, der aus fUML-konformen Modellen ausführbaren Code erzeugt. Die wichtigste Anforderung ist dabei, dass sich die Ausführung des erzeugten Codes äquivalent zum fUML Modell verhält, von dem er generiert wurde. Das zweite Ziel ist die Entwicklung einer Komponente, die die Korrektheit des generierten Codes verifiziert. Dies soll durch einen Vergleich der Ausführung des generierten Codes mit der Ausführung des ursprünglichen Modells durch die virtuelle Maschine erfolgen. Beide Ziele streben an, eine wichtige Funktionalität von MDE für fUML bereitzustellen: das automatische Transformieren von einer höheren Abstraktionsstufe zu einer niedrigeren. Dadurch soll eine höhere Produktivität und Effizienz beim Arbeiten mit fUML erreicht werden.
de
The concept of abstraction is the foundation of the evolution of computer science. Complex concepts and techniques are composed to a level of abstraction on which new techniques can be built. The evolution of programming languages is no exception. The assembly language was an abstraction of binary machine code instructions, making them interpretable by humans. Up to the nineties, many programming languages required the user to manually allocate and deallocate memory - a task that is carried out by all modern languages without the knowledge of the user. Model-driven engineering (MDE) is a software development methodology that introduces models as the central element, raising the level of abstraction beyond programming languages. Software systems described by the means of modeling languages have certain advantages: they are easier to understand, better to maintain as the described system changes over time, and they can be translated to be used on different target platforms. The latter is carried out by model transformations and code generators. UML is a standardized modeling language that is widely used to express the structure and behavior of systems. The transformation of systems described by means of UML concepts into executable code has been a tedious task for many years. This is because of the lack of formal semantics, which specify how models that conform to the abstract syntax of the modeling language have to be interpreted, which required the developers of code generators to rely on individual interpretations of the meaning of the modeling concepts. This circumstance was addressed with the fUML standard published in 2011. It covers the formal specification of the semantics of a subset of UML consisting of class modeling, activity modeling and action language concepts. Along with the standard, a conforming virtual machine was introduced that allows the user to execute fUML compliant models. However, up until today, no code generator compliant to fUML has been develped impeding the automated generation of implementation artifacts from fUML models for different target platforms. The first goal of this thesis is to elaborate and implement a code generation approach that generates executable code from fUML compliant models. The main requirement of the generator is to produce code that, when executed, behaves equivalent to the fUML model from which it was generated. The second goal of this thesis is to develop a component that verifies the correctness of the code generated from an input model by comparing its execution to the execution of the model carried out by the fUML virtual machine. Both goals aim to provide support for one of the key features of MDE for fUML: the automated transformation from a higher level of abstraction to a lower level. Thereby, an increase in productivity and efficiency for users of fUML shall be achieved.