13.08.2013 Aufrufe

INSTITUT F¨UR INFORMATIK Automatisierte Modell-Co-Evolution ...

INSTITUT F¨UR INFORMATIK Automatisierte Modell-Co-Evolution ...

INSTITUT F¨UR INFORMATIK Automatisierte Modell-Co-Evolution ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>INSTITUT</strong> FÜR <strong>INFORMATIK</strong><br />

DER LUDWIG–MAXIMILIANS–UNIVERSITÄT MÜNCHEN<br />

Diplomarbeit<br />

<strong>Automatisierte</strong><br />

<strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />

bei der modellgetriebenen<br />

Entwicklung<br />

von<br />

Rich Internet Applications<br />

Olena Ivanyushyna


<strong>INSTITUT</strong> FÜR <strong>INFORMATIK</strong><br />

DER LUDWIG–MAXIMILIANS–UNIVERSITÄT MÜNCHEN<br />

Diplomarbeit<br />

<strong>Automatisierte</strong><br />

<strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />

bei der modellgetriebenen<br />

Entwicklung<br />

von<br />

Rich Internet Applications<br />

Olena Ivanyushyna<br />

Aufgabensteller: Prof. Dr. Martin Wirsing<br />

Betreuer: Dr. Nora Koch<br />

Abgabetermin: 31. Mai 2012


Hiermit versichere ich, dass ich die vorliegende Diplomarbeit selbständig verfasst und<br />

keine anderen als die angegebenen Quellen und Hilfsmittel verwendet habe.<br />

München, den 30. März 2012<br />

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .<br />

(Unterschrift der Kandidatin)


Abstract<br />

Die Rich Internet Applications(RIAs) bilden eine neue Art der Webanwendungen, welche die<br />

Grenzen der traditionellen Web Anwendungen sehr stark erweitern. Die Reichhaltigkeit der<br />

graphischen Schnittstelle und die Anwenderfreundlichkeit sind aus dem heutigen Internet<br />

nicht mehr weg zu denken. Die RIAs bieten eine Vielzahl von Vorteilen der herkömmlichen<br />

Webanwendungen und der Desktop-Anwendungen, werden mit fortgeschrittenen Webtechnologien<br />

umgesetzt und verfügen über eine Vielfalt von benutzerfreundlichen interaktiven<br />

Möglichkeiten.<br />

Mit der UML-based Web Engineering (UWE) Methodologie 1 kann man bereits RIAs modellieren.<br />

Für die <strong>Modell</strong>ierung wird ein UWE-Profil als leichtgewichtiger Erweiterungsmechanismus<br />

des UML Metamodells eingesetzt. Am UWE-Profil wurden in den letzten Jahren<br />

viele Änderungen vorgenommen. Neue Elemente, die RIA-spezifisch sind, wurden zum Profil<br />

hinzugefügt; eine Einbettung der Design Patterns wurde erarbeitet; die Sicherheitsaspekte<br />

wurden in das UWE-Profil integriert. Die <strong>Evolution</strong> des UWE-Profils brachte die Notwendigkeit<br />

der Anpassung der bereits existierenden UWE-<strong>Modell</strong>e mit sich, um ihre Konformität<br />

mit dem neuen, weiterentwickelten UWE-Profil herzustellen. Solche Anpassung wird <strong>Modell</strong>-<br />

<strong>Co</strong>-<strong>Evolution</strong> genannt. Die <strong>Modell</strong>e stehen im Fokus der modellgetriebenen Entwicklung,<br />

somit spielt die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> eine gravierende Rolle. Auf diesem Gebiet der modellgetriebenen<br />

Entwicklung wird aktuell sehr intensiv geforscht und nach Lösungsansätzen für<br />

die <strong>Co</strong>-<strong>Evolution</strong>-Problematik gesucht.<br />

Die vorliegende Arbeit stellt Vorschläge für die Umsetzung der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> vor. Diese<br />

Vorschläge garantieren die Herstellung der Konsistenz der existierenden UWE-<strong>Modell</strong>e. Es<br />

wird aus der Metamodell-<strong>Evolution</strong> die benötigte <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> abgeleitet. Durch eine<br />

Automatisierung dieses Prozesses ist die Eindeutigkeit der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>-Strategie<br />

gewährleistet. Über die Problematik des Automatisierungsgrades der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>-<br />

Anpassungsschritte für unterschiedliche Metamodelländerungstypen wird im Rahmen dieser<br />

Arbeit ausführlich diskutiert.<br />

Ein transformativer Ansatz zur automatisierten <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> der UWE-<strong>Modell</strong>e<br />

wurde erarbeitet. Eine Erweiterung des Eclipse-basierten <strong>Modell</strong>ierungswerkzeug Topcased<br />

(Toolkit in OPen source for Critical Applications & SystEms Development) durch das Plugin<br />

UWEclipse stellt eine Plattform für die <strong>Modell</strong>ierung von RIAs bereit. Der in dieser Arbeit<br />

umgesetzte transformative Ansatz wird später im Rahmen des UWEclipse integriert.<br />

1 http://uwe.pst.ifi.lmu.de<br />

vii


Inhaltsverzeichnis<br />

1 Einleitung 1<br />

1.1 Problemstellung der Arbeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2<br />

1.2 Lösungsansatz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3<br />

1.3 Gliederung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3<br />

2 Grundlagen und verwendeten Technologien 5<br />

2.1 Rich Internet Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />

2.2 Model Driven Architecture (MDA) . . . . . . . . . . . . . . . . . . . . . . . . 6<br />

2.2.1 Ziele der MDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />

2.2.2 Metamodell der Grundbegriffe der MDA . . . . . . . . . . . . . . . . . 7<br />

2.2.3 Durch MDA spezifizierte <strong>Modell</strong>e . . . . . . . . . . . . . . . . . . . . . 9<br />

2.3 Die <strong>Modell</strong>ierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />

2.3.1 Die Unified Modeling Language (UML). UML Profile . . . . . . . . . 10<br />

2.3.2 Die Meta <strong>Modell</strong>ierung und die Meta Object Facility (MOF) . . . . . 11<br />

2.3.3 Die Object <strong>Co</strong>nstraint Language (OCL) . . . . . . . . . . . . . . . . . 12<br />

2.4 Die Query View Transformations (QVT) . . . . . . . . . . . . . . . . . . . . . 13<br />

2.5 Das Eclipse Modeling Framework (EMF) . . . . . . . . . . . . . . . . . . . . 13<br />

2.5.1 Metamodellierung mit Ecore Tools . . . . . . . . . . . . . . . . . . . . 14<br />

2.5.2 Die Eclipse UML2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />

2.6 Die UWE Methodologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />

2.6.1 UWE Metamodell und UWE Profil . . . . . . . . . . . . . . . . . . . . 15<br />

2.6.2 Die Separation of <strong>Co</strong>ncerns . . . . . . . . . . . . . . . . . . . . . . . . 15<br />

2.6.3 MagicUWE - UWE Plug-in für MagicDraw . . . . . . . . . . . . . . . 15<br />

3 Die <strong>Modell</strong>evolution und die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> 17<br />

3.1 Was bringt die <strong>Modell</strong>-<strong>Evolution</strong> mit sich . . . . . . . . . . . . . . . . . . . . 18<br />

3.1.1 Die Relationstypen zwischen dem Metamodell und den <strong>Modell</strong>ierungsartefakten<br />

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />

3.2 Die Klassifizierung der Metamodelländerungen . . . . . . . . . . . . . . . . . 20<br />

3.2.1 Illustratives Beispiel für Metamodell-<strong>Evolution</strong> . . . . . . . . . . . . . 20<br />

3.2.2 Die additiven Änderungen eines Metamodells . . . . . . . . . . . . . . 23<br />

3.2.3 Die subtraktiven Änderungen eines Metamodells . . . . . . . . . . . . 24<br />

3.2.4 Die Updates an einem Metamodell . . . . . . . . . . . . . . . . . . . . 25<br />

3.2.5 Die Klassifizierung von Metamodelländerungen anhand der korrupten<br />

bzw. der non-korrupten Effekte auf existierende <strong>Modell</strong>e . . . . . . . . 25<br />

3.3 Die Transformation-<strong>Co</strong>-<strong>Evolution</strong> . . . . . . . . . . . . . . . . . . . . . . . . . 26<br />

3.4 <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> der UWE-Präsentationsmodelle . . . . . . . . . . . . . . 27<br />

viii


Inhaltsverzeichnis<br />

3.4.1 Die Metamodelldifferenzen zwischen UWE-Metamodellversion 1.7 und<br />

der Version 1.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27<br />

3.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />

4 <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz 33<br />

4.1 Der fundamentale Aufbau von Transformationsskript in der relationalen QVT-<br />

Sprache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33<br />

4.2 Die relationalen Transformationen. Eine Formale Darstellung der Konzepte . 36<br />

4.2.1 Die Transformationen . . . . . . . . . . . . . . . . . . . . . . . . . . . 37<br />

4.2.2 Die Relationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38<br />

4.2.3 Die Domänen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39<br />

4.2.4 Die when- und where-Klauseln . . . . . . . . . . . . . . . . . . . . . . 41<br />

4.2.5 Object Template Expressions und Inline-Objekterzeugung . . . . . . . 42<br />

4.3 Transformationen zur automatisierten <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> basierend auf UWE-<br />

Metamodellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45<br />

4.3.1 Signatur der Transformation . . . . . . . . . . . . . . . . . . . . . . . 45<br />

4.3.2 Die Identifizierung der Relationen . . . . . . . . . . . . . . . . . . . . 45<br />

4.3.3 Die Relation für das Paket . . . . . . . . . . . . . . . . . . . . . . . . 48<br />

4.3.4 Die Relationen für die PresentationClass und deren Subklassen . . . . 49<br />

4.3.5 Die Relationen für einfache UI-Elemente . . . . . . . . . . . . . . . . . 52<br />

4.3.6 Die Relation mapForm . . . . . . . . . . . . . . . . . . . . . . . . . . . 53<br />

4.3.7 Die Relation mapAnchored<strong>Co</strong>l . . . . . . . . . . . . . . . . . . . . . . 55<br />

4.3.8 Die Relation mapProperty . . . . . . . . . . . . . . . . . . . . . . . . . 56<br />

4.4 Die Durchführung der Transformationen mit dem mediniQVT-Tool . . . . . . 57<br />

4.5 Ein Beispiel für metamodellbasierte <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> . . . . . . . . . . . 59<br />

4.5.1 Die Durchführung der Transformation an dem Adressbuch-<strong>Modell</strong> . . 59<br />

4.5.2 Die Konfiguration einer Transformation in mediniQVT . . . . . . . . . 61<br />

4.6 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62<br />

5 Integration des UWE-Profil-basierten transformativen Ansatzes in die UWE<br />

Toolumgebung 63<br />

5.1 Anpassung der metamodellbasierten Transformation für UWE-<strong>Modell</strong>e . . . . 63<br />

5.1.1 Der Zugriff auf die angewendeten UWE-Stereotypen . . . . . . . . . . 64<br />

5.1.2 Die neu angepasste Transformation . . . . . . . . . . . . . . . . . . . . 65<br />

5.1.3 Die Relation für die PresentationClass . . . . . . . . . . . . . . . . . . 68<br />

5.2 Wahl der Toolumgebung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71<br />

5.3 Die Anforderungsanalyse für die Integration des transformativen Ansatzes . . 73<br />

5.3.1 Die funktionalen Anforderungen . . . . . . . . . . . . . . . . . . . . . 73<br />

5.3.2 Die nicht-funktionalen Anforderungen . . . . . . . . . . . . . . . . . . 74<br />

5.4 Die Anwendungsfälle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76<br />

5.4.1 Das UseCase ” Die Transformation für ein <strong>Modell</strong> durchführen“ . . . . 76<br />

5.4.2 Das UseCase ” Die <strong>Modell</strong>differenzen anzeigen lassen“ . . . . . . . . . 77<br />

5.4.3 Das UseCase ” Die Konformität eines <strong>Modell</strong>s zu seinem Metamodell<br />

prüfen“ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77<br />

5.5 Die zusammengesetzte Toolumgebung . . . . . . . . . . . . . . . . . . . . . . 78<br />

5.5.1 Das mediniQVT-Tool . . . . . . . . . . . . . . . . . . . . . . . . . . . 78<br />

5.5.2 Das EMF-<strong>Co</strong>mpare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80<br />

ix


Inhaltsverzeichnis<br />

5.6 Beispiel der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> für UWE-<strong>Modell</strong>e mit angewendetem UWE-<br />

Profil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83<br />

6 Die Zusammenfassung und der Ausblick 87<br />

6.1 Die Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87<br />

6.2 Der Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88<br />

A Darstellung der Metamodelle 91<br />

A.1 Erstellung von Metamodellen in Ecore-Format . . . . . . . . . . . . . . . . . 92<br />

A.2 Ein Generator-<strong>Modell</strong> aus Ecore-<strong>Modell</strong>en erstellen . . . . . . . . . . . . . . . 96<br />

A.3 Erstellung der Metamodelle in Form von Eclipse-Plug-ins . . . . . . . . . . . 98<br />

A.4 Das Deployment der Metamodell-Eclipse-Plug-ins . . . . . . . . . . . . . . . . 99<br />

A.5 <strong>Modell</strong>e basierend auf Metamodellen erstellen . . . . . . . . . . . . . . . . . . 101<br />

B Transformationsskript mapUWEversion 103<br />

Abbildungsverzeichnis 112<br />

Tabellenverzeichnis 113<br />

Listings 115<br />

Liste der Definitionen 117<br />

Literaturverzeichnis 119<br />

x


1. Einleitung<br />

So vielfältig die Einsatzbereiche für Rich Internet Applications sind, so umfangreich sind<br />

die Möglichkeiten, RIAs zu implementieren. Inzwischen gibt es bereits eine ganze Reihe von<br />

Technologien, Frameworks und konkreter Techniken, die genutzt werden können, um RIAs zu<br />

erstellen. Die rasante Entwicklung dieser Techniken bewirkt, dass immer neue User-Interface-<br />

Elemente und Interaktionsmöglichkeiten für den Benutzer bei der Entwicklung der RIAs zur<br />

Hilfe stehen.<br />

Im Bereich der modelgetriebenen Webentwicklung dagegen entwickeln sich erst seit kurzem<br />

faszinierende Forschungsgebiete und neue methodologische Ansätze zur modelgetriebenen<br />

Entwicklung von Rich Internet Applications, die sich zu einem großen Teil noch in frühen<br />

Entwicklungsphasen befinden. Hier werden derzeit aktiv die <strong>Modell</strong>ierungstechniken und<br />

Tools für die <strong>Modell</strong>ierung von Rich Internet Applications erweitert und angepasst. Es werden<br />

immer neue Erkenntnisse auf dem Fachgebiet der RIAs gemacht, so dass interessante<br />

Forschungsteilgebiete entstehen, die sich z.B. auf die Adaptivität der RIAs oder auf die<br />

neue Sicherheitsaspekte der RIAs beziehen oder die Integration der Anforderungsanalyse<br />

in den Entwurf erlauben. Es entstehen RIA-spezifische ” design pattern“, welche die ” best<br />

practices“ Lösungen für den Entwurf von RIAs wiedergeben und in die Metamodelle für die<br />

<strong>Modell</strong>ierung integriert werden können.<br />

Die Erarbeitung solcher <strong>Modell</strong>ierungstechniken soll mit der Entwicklung des Fachgebietes,<br />

als auch mit dem technischen Fortschritt mithalten können. Diese Tatsache bewirkt, dass<br />

für die <strong>Modell</strong>ierung eingesetzte Metamodelle einem schnell voranschreitenden <strong>Evolution</strong>sprozesses<br />

unterliegen.<br />

Die UML-based Web Engineering (UWE) Methodologie wird kontinuierlich weiterentwickelt.<br />

Die grundlegende Idee von UWE ist das Fachgebiet der Entwicklung von RIAs mithilfe einer<br />

Domain Specific Language (DSL) eindeutig zu beschreiben, um basierend auf dieser DSL<br />

ein UML Profil zu definieren, das auf das Fachgebiet der RIAs zugeschnitten ist. Somit<br />

wird mit Hilfe einer UML Erweiterung in Form dieses Profils die <strong>Modell</strong>ierung von RIAs<br />

mit der weitverbreitesten objektorientierten <strong>Modell</strong>ierungssprache der Welt ermöglicht. Wie<br />

das Fachgebiet ändert sich ebenfalls die UWE Methodologie. Es existiert eine Anzahl an<br />

Versionen des UWE-Profils und des UWE-Metamodells, diese sind wie z.B. die Version 1.7<br />

und die Version 1.8 auf der UWE-Seite 1 zu finden. Die <strong>Evolution</strong> des UWE-Profils erfordert<br />

bei jeder Verabschiedung einer neuen Profilversion die Anpassung der existierenden UWE-<br />

<strong>Modell</strong>e, da Inkonsistenzen wegen des Konformitätsverlustes der existierenden <strong>Modell</strong>e zu<br />

dem neuen Profil entstehen.<br />

1 http://uwe.pst.ifi.lmu.de/publicationsMetamodelAndProfile.html<br />

1


1. Einleitung<br />

1.1. Problemstellung der Arbeit<br />

Im Bereich der modellgetriebenen Webentwicklung besteht eine immer größer werdende Not<br />

an Techniken zur automatisierten <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Die Metamodell-<strong>Evolution</strong> stellt eine<br />

Bedrohung dar für die Anwendbarkeit der modellgetriebenen Entwicklung in Fachgebieten,<br />

die von Veränderungen stark geprägt sind. Zu solchen Fachgebieten zählen die RIAs. Das<br />

Problem wird durch die Inkompatibilitäten zwischen Metamodellversionen verursacht. Dies<br />

bewirkt, dass die <strong>Modell</strong>e, welche mit der älteren Metamodellversion konform gehen, wegen<br />

der Nicht-Konformität zur neueren Version angepasst werden müssen. Eine Annäherung an<br />

die Lösung dieses Problems ist die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> von <strong>Modell</strong>en mit ihrem jeweiligen<br />

Metamodell. Um die unterschiedlichen Deutungen des Begriffes der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> zu<br />

vermeiden, wird an dieser Stelle die Definition dafür eingeführt.<br />

Definition 1. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />

Unter <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> wird eine Anpassung der existierenden <strong>Modell</strong>e<br />

verstanden, die wegen der <strong>Evolution</strong> des zugrundeliegenden Metamodells<br />

durchgeführt werden muss. Die Anpassung bewirkt, dass diese <strong>Modell</strong>e mit<br />

dem neuen geänderten Metamodell konform gehen.<br />

Für die Metamodell-<strong>Evolution</strong> gibt es unterschiedliche Gründe: zum einen können neue<br />

Design-Lösungen für besseres Verständnis der Metamodelle die Metamodelländerungen bewirken.<br />

Zum anderen werden Metamodelle aufgrund der schnellen Entwicklung des Fachgebietes<br />

geändert. Das Hinzufügen der Design Pattern oder der ” best practices“ Lösungen kann<br />

der Metamodell-<strong>Evolution</strong> zugrunde liegen. Deswegen sollten die existierenden <strong>Modell</strong>e an<br />

diese Änderungen angepasst werden ohne dass sie ihre Gültigkeit verlieren. Nach der Metamodelländerung<br />

müssen alle <strong>Modell</strong>e die vor dieser Änderung erstellt wurden, mit angepasst<br />

werden, damit sie zu dem neuen Metamodell konform sind.<br />

Wie die Metamodell-<strong>Evolution</strong> wird die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> üblicherweise manuell durchgeführt.<br />

Dies ist eine sehr fehleranfällige Aufgabe, die zu einer Inkonsistenz zwischen dem<br />

Metamodell und den dazugehörigen <strong>Modell</strong>en führen kann. Die <strong>Modell</strong>ierer und Entwickler<br />

müssen all die betroffenen <strong>Modell</strong>e sorgfältig untersuchen, um mühsam die zu Inkonsistenzen<br />

führenden Elemente zu entdecken und später die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> schrittweise manuell<br />

durchzuführen. Dies ist an sich eine fehleranfällige und ohne Automatisierung ziemlich langweilige,<br />

monotone und vor allem zeitaufwendige Aufgabe. Zusätzliche Schwierigkeit bereitet<br />

die Tatsache, dass keine eindeutige Weise der <strong>Modell</strong>elementenanpassung verfügbar ist. Dies<br />

liegt daran, dass die <strong>Modell</strong>gültigkeit durch verschiedene Migrationsstrategien wieder hergestellt<br />

werden kann, d. h. verschiedene Anpassungen können aus der Metamodell-<strong>Evolution</strong><br />

abgeleitet werden. Dies wiederspricht aufgrund von Mehrdeutigkeit dem Grundprinzip der<br />

formalen <strong>Modell</strong>e. Aufgrund dieser schwerwiegenden Problematik, die bei der Entwicklung<br />

der Rich Internet Applications im Wege steht, muss eine Vorgehensweise für eine automatisierte<br />

<strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> entwickelt werden.<br />

2


1.2. Lösungsansatz<br />

1.2. Lösungsansatz<br />

In erster Linie soll diese Arbeit einen Einblick in die aktuellen Forschungstrends des Gebiets<br />

der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> gewähren. Es soll eine Diskussion über alle möglichen Szenarien für<br />

die Metamodelländerungen und deren Auswirkungen auf die existierenden <strong>Modell</strong>e erfolgen.<br />

Aus entstandenen Szenarien sollen Erkenntnisse erarbeitet werden, welche die Anpassung<br />

der Metamodellinstanzen vorschreiben, welche die Inkonsistenz des <strong>Modell</strong>s in Bezug auf<br />

das neue Metamodell beseitigt. Anhand der Auswirkung der Metamodelländerungen auf die<br />

<strong>Modell</strong>e sollte bestimmt werden, ob eine Automatisierung der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> stattfinden<br />

kann.<br />

Die UWE-Metamodelle in zwei ausgewählten unterschiedlichen Versionen sollen auf Differenzen<br />

überprüft werden. Die erkannten Metamodelländerungen sollen zusammengefasst<br />

werden. Für jede solche Änderung soll die Strategie zur <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> beschrieben<br />

werden. Aus den gewonnenen Erkenntnissen soll ein transformativer <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />

Ansatz für UWE-<strong>Modell</strong>e praktisch umgesetzt werden.<br />

Anschließend soll eine Anforderungsanalyse für die Integrationsmöglichkeiten in die Toolumgebung<br />

der UWE-Methodologie durchgeführt werden. Zu guter Letzt soll ein Integrationsweg<br />

ausgewählt und umgesetzt werden.<br />

1.3. Gliederung<br />

Im Kapitel 2 werden die Grundlagen und die verwendete Technologien erläutert. Innerhalb<br />

dieses Kapitels wird auf die zentralen Begrifflichkeiten dieser Arbeit angegangen. Angefangen<br />

mit der Definition der Rich Internet Applications, den grundlegenden Begriffen aus dem Bereich<br />

der <strong>Modell</strong> Driven Architecture bis hin zu einem Überblick über die aktuellen Ansätze<br />

zur modellgetriebenen Entwicklung von RIAs.<br />

Im Kapitel 3 wird eine Einführung in den Bereich der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> geboten. Es<br />

wird anhand der aktuellen Forschung eine umfassende Diskussion über die Metamodell-<br />

<strong>Evolution</strong> gegeben. Die Metamodelländerungen werden in ihrem vollen Umfang beschrieben<br />

und zu jeder solchen Änderung eine umfangreiche Beschreibung der <strong>Co</strong>-<strong>Evolution</strong>s-Schritte<br />

aufgezeichnet. Darüber hinaus wird eine Typologie der Änderungen in Bezug auf ihre Auswirkungen<br />

auf existierende Metamodellinstanzen vorgestellt. Zwei verschiedenen Versionen<br />

eines UWE-Metamodellausschnittes werden in Bezug auf die durch die UWE-Metamodell-<br />

<strong>Evolution</strong> entstandenen Differenzen untersucht. Eine Strategie wird für eine automatisierte<br />

<strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> für die betrachtete Metamodellversionen vorgeschlagen und detailliert<br />

beschrieben.<br />

Im Kapitel 4 wird diese Strategie mithilfe der <strong>Modell</strong>transformationen umgesetzt. Zuerst<br />

werden die formalen Konzepte der für die Transformationen ausgewählten relationalen QVT-<br />

Sprache beschrieben. Anschließend werden die konkreten Transformationen für die Durchführung<br />

der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> für UWE-Präsentationsmodell vorgestellt.<br />

Nachdem die Machbarkeit der Transformationen in Kapitel 4 illustriert wurde, werden im<br />

darauf anschließenden Kapitel 5 einige Überlegungen zu der Integration des transforma-<br />

3


1. Einleitung<br />

tiven Ansatzes in die UWE-Toolumgebung erläutert, angefangen bei der Diskussion über<br />

die Integrationsmöglichkeiten des transformativen Ansatzes in die UWE-Methodologie, gefolgt<br />

von einer Anwendungsfallanalyse, bis hin zu einem konkreten Integrationsvorschlag.<br />

Der Vorschlag wird für die Integration in das Eclipse-basierte UWEclipse-Tool[22], das eine<br />

Toolumgebung für die <strong>Modell</strong>ierung der UWE-<strong>Modell</strong>e bereitstellt, detailliert beschrieben.<br />

Infolgedessen wird eine Anpassung der in Kapitel 4 vorgestellten <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>-<br />

Transformationen vorgenommen und der Einsatz des EMF<strong>Co</strong>mpare-Tools für die <strong>Modell</strong>differenzenrepräsentation<br />

dargestellt.<br />

Anschließend werden in dem Kapitel die erreichten Ergebnisse resümiert und ein Ausblick<br />

für die Zukunft und die Verbesserungsmöglichkeiten des vorgestellten <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>-<br />

Ansatzes gegeben.<br />

4


2. Grundlagen und verwendeten Technologien<br />

In den folgenden Unterkapiteln werden die Grundlagen der modellgetriebenen Entwicklung<br />

von Rich Internet Applications vorgestellt und die für die vorliegende Arbeit relevante Begriffe<br />

wie ” Rich Internet Application“ und einige weitere Begriffe aus dem Bereich der Model<br />

Driven Architecture (MDA) definiert.<br />

2.1. Rich Internet Applications<br />

In den letzten Jahren hat der neue Begriff der Rich Internet Applications eine weite Verbreitung<br />

gefunden. In unterschiedlichen Quellen wurden die RIAs lange mithilfe deren Eigenschaften<br />

beschrieben. Eine umfassende Definition wurde in der Veröffentlichung ” Rich<br />

Internet Application. State-of-the-Art“[13] vorgeschlagen. Diese Definition wird im Rahmen<br />

dieser Arbeit als Grundbegriff für die RIAs eingeführt.<br />

Definition 2. Rich Internet Applications<br />

” Rich Internet Applications (RIAs) are web applications, which use data that<br />

can be processed both by the server and the client. Furthermore, the data exchange<br />

takes place in an asynchronous way so that the client stays responsive<br />

while continuously recalculating or updating parts of the user interface. On<br />

the client, RIAs provide a similar look-and-feel as desktop applications and<br />

the word rich“ means particularly the difference to the earlier generation of<br />

”<br />

web applications. RIAs are basically characterized by a variety of interactive<br />

operating controls, the possibility of on-/offline use of the application, and<br />

the transparent usage of the client and server computing power and of the<br />

network connection..“[13]<br />

Zu den wichtigsten Eigenschaften von RIAs gehört die asynchrone Kommunikation, wobei<br />

nicht nur ganze Internetseiten übertragen werden, sondern bestimmten Teile der Webseiten<br />

aktualisiert werden. Eine kennzeichnende Eigenschaft der RIAs ist die Reichhaltigkeit und die<br />

Benutzerfreundlichkeit der graphischen Oberfläche, die in nichts den Desktop-Anwendungen<br />

nachsteht.<br />

Die wachsende Verbreitung der RIAs bedingt die neuen Trends im Bereich der modellgetriebenen<br />

Webentwicklung. Neue Techniken und Ansätze, die später zum Teil erläutert werden,<br />

ermöglichen bereits die <strong>Modell</strong>ierung der RIAs.<br />

5


2. Grundlagen und verwendeten Technologien<br />

2.2. Model Driven Architecture (MDA)<br />

Model Driven Architecture (MDA) wurde von der OMG (Object Management Group) im<br />

Jahr 2000 als neues Softwareentwicklungs-Paradigma vorgestellt. Die MDA spezifiziert die<br />

Richtlinien für die Ausführung des modellgetriebenen Prozesses. Die OMG hat eine Reihe<br />

von Standards veröffentlicht, welche die Umsetzung des modellgetriebenen Vorgehens vorantreiben<br />

sollen. Zu diesen Standards gehören unter anderem die UML (Unified Modeling<br />

Language), die MOF(Meta Object Facility), die OCL (Object <strong>Co</strong>nstraint Language), das<br />

XMI (XML Metadata Interchange) und die QVT (Query Views Transformations). Über diese<br />

wird in dem Kapitel 2.3 ein Überblick verschafft.<br />

Die MDA verfolgt das Ziel, die Spezifikation von Software-Systemen unabhängig von ihrer<br />

technischen Realisierung zu ermöglichen. Damit wird die Komplexität bestehender Entwicklungstechnologien<br />

verborgen und eine weitgehend plattformunabhängige <strong>Modell</strong>ierung<br />

erzielt. Der Fokus wird somit auf die Fachlichkeit gelegt. Als Basismodellierungssprache wird<br />

die UML eingesetzt. Die MDA definiert verschiedene Abstraktionsebenen auf denen <strong>Modell</strong>e<br />

spezifiziert werden können. Genaue Erläuterungen zu diesem Thema sind im Kapitel 2.2.3<br />

zu finden.<br />

Der Grundgedanke der MDA besteht darin, den Fokus von der Implementierung auf die<br />

<strong>Modell</strong>ierung zu verlegen. Dabei soll die Überführung der <strong>Modell</strong>e von abstrakten zu plattformabhängigen<br />

<strong>Modell</strong>en, automatisiert unter dem Einsatz von <strong>Modell</strong>transformationen<br />

verlaufen. Somit kann das MDA-Entwicklungsprozess aus mehreren Iterationen bestehen,<br />

wobei bei jeder Iteration eine <strong>Modell</strong>ierungsaktivität von Transformationen gefolgt wird.<br />

Ein weiterer Grundgedanke befasst sich mit der Unterstützung von Domain Specific Languages<br />

(DSL). Laut Gruhn, Pieper und Röttgers wird unter dem Begriff Domäne in diesem<br />

Zusammenhang in dem Buch [10] ganz allgemein ein Wissensbereich bzw. ein Problemraum<br />

verstanden. Somit stellt die DSL ein weiteres Konzept zur Vereinfachung komplexer Sachverhalte<br />

dar. Als Beispiel für eine graphische DSL dient die Entity-Relationship <strong>Modell</strong> für<br />

die Darstellung eines Datenbankschemas für die Domäne der Datenbankrepräsentation dar.<br />

So legt die MDA die Richtlinien für die Erstellung eigener <strong>Modell</strong>ierungssprachen fest, die<br />

auf eine Domäne zugeschnitten sind.[10]<br />

Im nächsten Kapitel werden die Ziele der MDA erläutert.<br />

2.2.1. Ziele der MDA<br />

<strong>Modell</strong>getriebene Entwicklung verfolgt folgende Ziele:[10] [20]<br />

6<br />

• Die Effizienzsteigerung und die Reduzierung des Entwicklungsaufwands:<br />

– Durch Abstraktion<br />

– Durch Automatisierung der Vorgänge mithilfe Werkzeugunterstützung<br />

– Durch Wiederverwendung (Patterns, DSL)<br />

• Die Systemintegration und die Interoperabilität:


2.2. Model Driven Architecture (MDA)<br />

– Durch die Trennung der Fachlichkeit und der Technologie wird die Identifizierung<br />

der Schnittstellen vereinfacht und somit die Austauschbarkeit und die Wiederverwendbarkeit<br />

der Komponenten und so die Modularität der Anwendungen<br />

gewährleistet<br />

• Qualitätsverbesserung:<br />

– Durch den Einsatz der formalen <strong>Modell</strong>e und Transformationen<br />

– Durch eine wohl definierte Architektur<br />

– Durch die Trennung der Fachlichkeit von den technischen Details<br />

– Durch die Konservierung der Fachlichkeit und des Expertenwissens in <strong>Modell</strong>en<br />

• Portabilität:<br />

– Durch eine einfache Migration auf neue Technologien unter Verwendung passenden<br />

Transformationen aus dem PIM (<strong>Co</strong>mputational Independent Model) in das<br />

PSM (Platform Independent Model), wobei die Fachlichkeit erhalten bleibt<br />

• Domänen-Orientierung<br />

– Durch die Spezifikationen einer DSL lassen sich Zusammenhalte schneller beschreiben<br />

– Durch den hohen Grad der Formalisierung<br />

– Durch das hohe Abstraktionsniveaus und eindeutige Semantik<br />

– Durch die Wiederverwendung der erstellten domänenspezifischen <strong>Modell</strong>en<br />

Im Weiteren werden die Begriffe der MDA eingeführt.<br />

2.2.2. Metamodell der Grundbegriffe der MDA<br />

In diesem Kapitel werden die Grunddefinitionen des MDAs dargestellt, die aus dem Buch von<br />

Gruhn, Pieper und Röttgers[10] zitiert werden nach einem Abgleich mit den Definitionen auf<br />

der OMG-Webpräsenz[17]. Die Metamodell der Grundbegriffe der MDA ist in der Abbildung<br />

2.1 zu sehen:<br />

Im Weiteren werden die Definitionen der OMG aufgelistet, wobei auf die Interpretation der<br />

Definitionen laut [10] weitgehend verzichtet wird.<br />

Definition 3. System<br />

” Ein System ist ein aus Teilen zusammengesetztes und strukturiertes Ganzes.<br />

Es hat eine Funktion, erfüllt einen Zweck und verfügt über eine Architektur.“[10]<br />

Definition 4. Model<br />

” Ein <strong>Modell</strong> beschreibt oder spezifiziert ein System zu einem bestimmten<br />

7


2. Grundlagen und verwendeten Technologien<br />

Abbildung 2.1.: Metamodell der Grunddefinitionen der MDA [10]<br />

Zweck. Dazu erfasst es alle hierfür relevanten Aspekte, etwa Struktur, Verhalten,<br />

Funktion und die Umwelt des Systems.“[10]<br />

Definition 5. Metamodell<br />

” Ein Metamodell ist die Menge von Elementen mit denen <strong>Modell</strong>e, die Instanzen<br />

dieses Metamodells sind, erstellt werden können. Es enthält die Regeln,<br />

die bei der Erstellung des <strong>Modell</strong>s beachtet werden müssen (abstrakte<br />

Syntax) sowie die Bedeutung der Elemente und Elementkonstellationen (Semantik).“[10]<br />

Definition 6. Profile<br />

” Ein Profil ist eine leichtgewichtige Erweiterung eines Metamodells. Dazu<br />

stellt es neue <strong>Modell</strong>elemente zur Verfügung oder redefiniert bzw. erweitert die<br />

Semantik oder Syntax bereits bestehender Elemente. Im Gegensatz zur Definition<br />

völlig neuer Metamodelle (schwergewichtiger Ansatz) können sie die Bedingungen,<br />

die an Elemente der <strong>Modell</strong>e gestellt werden, nur verschärfen.“[10]<br />

8


2.2. Model Driven Architecture (MDA)<br />

Definition 7. Domain<br />

” Unter dem Begriff Domäne versteht man ein abgrenzbares, kohärentes Wissensgebiet.<br />

In einem Metamodell (respektive in einem Profil) werden die Konzepte<br />

einer Domäne in Bezug gesetzt und beschrieben. Zusammen mit ihrem<br />

sprachdefinierenden Charakter bezeichnet man Metamodell und Profil daher<br />

als Domänenspezifische Sprache (engl. Domain-Specific Language, DSL).“[10]<br />

Definition 8. Application<br />

” Eine Anwendung oder Applikation (engl. Application) ist ein zu erstellendes<br />

Stück Software, welches die zu entwickelnde Funktionalität umfasst. Ein<br />

System kann sich aus einer oder mehreren Anwendung(en) zusammensetzen,<br />

die auf einer oder mehreren Plattform(en) ausgeführt werden.“[10]<br />

Definition 9. Plattform<br />

” Eine Plattform ist eine Ausführungsumgebung für eine Anwendung. Ihre<br />

Funktionalität stellt sie durch zweckmäßige Schnittstellen bereit, auf die die<br />

Anwendung ohne Kenntnis der eigentlichen Implementierung zugreifen kann.<br />

Typische Beispiele für Plattformen sind im Bereich Betriebssysteme (Unix,<br />

Windows), Programmiersprachen (C++, Java) und Middleware (CORBA,<br />

Java EE, .NET) zu finden. Typisch für Plattformen ist auch, dass sie oft in<br />

der Art eines Plattform-Stacks (dt. in etwa Plattform Stapel) aufeinander<br />

aufsetzen. So bildet die Hardware eines <strong>Co</strong>mputers die unterliegende Plattform<br />

für das Betriebssystem, das seinerseits wieder Plattform für die einzelnen<br />

Anwendungen bietet usw.“[10]<br />

Definition 10. Transformation<br />

” Eine Transformation (oder genauer <strong>Modell</strong>-Transformation) ist der Prozess<br />

der Umwandlung eines <strong>Modell</strong>s in ein anderes <strong>Modell</strong> des gleichen Systems.<br />

Die Spezifikation für eine solche Transformation ist in Abbildungsregeln<br />

(engl. Mapping Rules) festgehalten, die in einer Abbildung (engl. Mapping)<br />

gebündelt sind.“[10]<br />

Im weiteren Verlauf dieser Arbeit werden die oben genannten Begriffe stets im Sinne dieser<br />

Definitionen verwendet. Folgend werden die Abstraktionsebenen, auf denen sich <strong>Modell</strong>e der<br />

MDA befinden können, beschrieben.<br />

2.2.3. Durch MDA spezifizierte <strong>Modell</strong>e<br />

Die MDA spezifiziert folgende Abstraktion für <strong>Modell</strong>e. Die Abstraktion beinhaltet drei Ebenen<br />

in denen sich die Beschreibung des Models mit jeder weiteren Stufe mehr konkretisiert<br />

und verfeinert wird.<br />

9


2. Grundlagen und verwendeten Technologien<br />

In der ersten Ebene des CIMs (<strong>Co</strong>mputation Independent Model) enthält das <strong>Modell</strong> die Beschreibung<br />

der fachlichen Anforderungen mit Begriffen und Konzepten seiner Domäne(womöglich<br />

unter dem Einsatz einer DSL). Wobei das <strong>Modell</strong> unabhängig von Plattform und Programmiersprache<br />

ist.<br />

Auf der nächsten Ebene namens PIM (Platform Independent Model) beschreiben die <strong>Modell</strong>e<br />

die Fachlichkeit, also die Struktur und die Funktionalität der Anwendung. Diese <strong>Modell</strong>e<br />

sind unabhängig von implementierungstechnischen Details.<br />

Schließlich wird auf der dritten Abstraktionsebene das <strong>Modell</strong> mit allen technischen und<br />

implementierungsrelevanten Details angereichert und enthält somit eine plattformspezifische<br />

Umsetzung des PIMs. Hierbei ist zu erwähnen, dass die plattformunabhängigen <strong>Modell</strong>e die<br />

Grundlage für den MDA-Ansatz darstellen. Im Rahmen des Entwicklungsprozesses werden<br />

die in <strong>Modell</strong>en beschriebenen Gegebenheiten mithilfe von Transformationen aus einer Abstraktionsebene,<br />

in die <strong>Modell</strong>e einer anderen Abstraktionsebene überführt. Die OMG hat<br />

hierfür einen weiteren Standard namens ” Queries Views Transformations“ (QVT) veröffentlicht.<br />

[10] [20] [23]<br />

Im folgenden Kapitel werden die von der OMG veröffentlichten Standards näher betrachtet.<br />

2.3. Die <strong>Modell</strong>ierung<br />

Das Ziel dieses Abschnitts ist, einen Einblick in die <strong>Modell</strong>ierungsaspekte bei der modellgetriebenen<br />

Entwicklung zu gewähren und die aktuellen Standards zur Spezifikation der<br />

<strong>Modell</strong>en, die eine wichtige Rolle im Zusammenhang mit MDA spielen, zu erläutern. Nach<br />

einer Beschreibung der Unified Modeling Language wird die Meta Object Facility der OMG<br />

Group vorgestellt. Anschließend wird die Object <strong>Co</strong>nstraint Language beschrieben.<br />

2.3.1. Die Unified Modeling Language (UML). UML Profile<br />

Die <strong>Modell</strong>ierungssprache UML(Unified Modeling Language) zum graphischen Entwurf von<br />

Software hat seit ihrer Erscheinung im Jahr 1997 kontinuierlich an Bedeutung im Bereich<br />

des Objektorientierten Engineerings gewonnen. Martin Fowler äußert sich in seinem Buch<br />

” UML Konzentriert“[9] folgendermaßen dazu aus: UML hat die babylonische Sprachverwir-<br />

”<br />

rung der früheren Notationen aufgelöst“.<br />

Die UML wird unter allen graphischen Notationen de facto eingesetzt, und stellt somit<br />

eine Vereinigung der ” best practices“ und sogar ein Standard in der Softwareentwicklung<br />

dar.[9] Es ist anzumerken, dass in diesem Zusammenhang unter Standard keine Normierung<br />

und Standardisierung wie z.B. ISO gemeint sind. Der Standard ist als die Veröffentlichung<br />

einer Spezifikation durch die Object Management Group (OMG) zu verstehen.<br />

Außerdem repräsentiert die UML die Basismodellierungssprache des MDA. Auf der Web-<br />

Präsenz der OMG findet man eine Sammlung von UML-Spezifikationen namens UML-Stack.<br />

10


2.3. Die <strong>Modell</strong>ierung<br />

Daraus kann man fünf Hauptelemente der UML erkennen.[10] Die fundamentalen Sprachkonstrukte<br />

des UML sind in der Infrastructure Library zusammengefasst, die ein Teil der<br />

UML-Infrastructure bildet. Die UML-Infrastructure legt die Architekturgrundlage der UML-<br />

Spezifikation dar und liefert außerdem ein Meta-Metamodell für die UML-Superstructure.[11]<br />

Alle Metamodelle sind unter dem Einsatz vom MOF (Meta Object Facility) definiert, mehr<br />

zu dem MOF im folgenden Kapitel.<br />

Das UML-Metamodell enthält keine Informationen über die grafische Notation der UML,<br />

sondern definiert nur die logischen, strukturellen Zusammenhänge der UML-Sprachelemente.<br />

Zum Austausch der Metamodelle ist das XMI-Format (XML Metadata Interchange) bereitgestellt.<br />

Die textuelle, auf der mathematischen Grundlage aufbauende Sprache OCL (Object<br />

<strong>Co</strong>nstraint Language) erlaubt die Formulierung von Bedingungen und somit die Validierung<br />

der UML-<strong>Modell</strong>e.<br />

Einer der gewichtigsten Vorteile der UML liegt in ihrer Fähigkeit der Erweiterbarkeit. Die<br />

Spezifikation der UML bietet im Grunde keine Möglichkeit alle fachlichen technischen Problemdomänen<br />

adäquat abzubilden. Unter einer Domäne wird in diesem Zusammenhang ganz<br />

generell ein Wissens- bzw. Fachgebiet verstanden. Um eine <strong>Modell</strong>ierungssprache für besondere<br />

Fachgebiete in Form einer DSL (Domain Specific Language) zu erweitern, müssen die<br />

nötigen Erweiterungsmerkmale bestimmt werden, die durch die <strong>Modell</strong>ierungssprache spezifizierbar<br />

sein sollen.<br />

Die Beschreibung neuer oder erweiterter <strong>Modell</strong>ierungssprachen wird durch den Einsatz<br />

von UML-Profilen ermöglicht. Das UML-Profil stellt eine Menge der identifizierten Erweiterungsmerkmale<br />

dar, deren Beschaffenheit durch UML-Infrastructure exakt vorgegeben ist.<br />

Für die Definition von einem UML-Profil sind folgende drei Konstrukte ausschlaggebend: die<br />

Stereotypen, die Tagged Values und die Bedingungen (<strong>Co</strong>nstraints). Die Stereotypen legen<br />

die Bedeutung eines <strong>Modell</strong>ierungselements fest. Die Tagged Values spezialisieren bestimmte<br />

Attribute eines <strong>Modell</strong>ierungselements. Mithilfe der <strong>Co</strong>nstraints können spezielle Bedingungen<br />

zur Begrenzung der Instanzen eines Metamodells definiert werden.[20]<br />

Weiterer wichtiger Vorteil ist die Möglichkeit Metamodelle mithilfe von der UML zu entwickeln.<br />

Solche Möglichkeit bietet die Meta Object Facility (MOF), die im weiteren betrachtet<br />

wird.<br />

2.3.2. Die Meta <strong>Modell</strong>ierung und die Meta Object Facility (MOF)<br />

Die OMG hat im Rahmen der Meta Object Facility (MOF)[18] eine Konzeption zur Beschreibung<br />

der Metamodelle für andere <strong>Modell</strong>ierungssprachen entworfen. Die Metamodelle<br />

werden auf der Basis von den UML-Klassendiagrammen definiert. Die <strong>Modell</strong>ierungssprachen,<br />

die auf diesem Weg definiert worden sind, werden als formale <strong>Modell</strong>ierungssprachen<br />

oder auch als MOF-Sprachen im Rahmen dieser Arbeit bezeichnen.<br />

Die MOF definiert eine Metamodellhierarchie mit vier Metalevels M0-M3, wobei dem Level<br />

M3 die MOF selbst zugeordnet ist. Hier wird die MOF als das Urmodell bezeichnet. Alle<br />

anderen <strong>Modell</strong>e basieren auf der MOF und sind somit den darunter liegenden Levels zuge-<br />

11


2. Grundlagen und verwendeten Technologien<br />

Metalevel Name Beispiel<br />

M3 Urmodell MOF<br />

M2 Metamodelle UML Superstructure, OCL<br />

M1 <strong>Modell</strong>e Klassendiagramm<br />

M0 Systeme Website<br />

Tabelle 2.1.: Tabelle. Die Metalevels nach der MOF [10]<br />

ordnet. Mithilfe der MOF-Konzepte werden die Metamodelle für die <strong>Modell</strong>ierungssprachen<br />

entworfen, die ihren Platz auf dem Metalevel M2 einnehmen. Als Beispiel hierfür werden<br />

die OCL und die auf der MOF basierende UML-Superstructure, die alle Diagrammarten der<br />

UML festlegt, angegeben. Die Instanzen der definierten Metamodelle und somit die <strong>Modell</strong>e<br />

selbst werden dem Metalevel M1 zugeordnet. Letztendlich gehören die Anwendungen und die<br />

reelle Tatsachen, die mithilfe der <strong>Modell</strong>e beschrieben werden, zum Metalevel M0. Über dem<br />

M3 Level sind keine Levels mehr definiert worden. Die MOF ist selbstbeschreibend definiert.<br />

Hiermit sind bei der MOF-Definition die Konstrukte verwendet worden, die die MOF selber<br />

definiert.[10]<br />

Die MOF 2 ist in zwei Bestandteile aufgeteilt: das Essential MOF Model (EMOF) und das<br />

<strong>Co</strong>mplete MOF Model (CMOF). Die EMOF beinhaltet die Basisfunktionalität von der MOF<br />

und somit eine Untermenge davon, die die Definition einfacher Metamodelle zur Verfügung<br />

stellt. Die komplette CMOF enthält die Definition aller anderen Metamodelle des UML-<br />

Stacks wie die UML-Superstructure, sowie die EMOF und somit die gesamte Funktionalität<br />

der Meta Object Facility.[10]<br />

Die Tool-Interoperabilität wird mit dem XMI Format (XML Metadata Interchange) ermöglicht.<br />

Dieses Format kann als Mapping der MOF-Strukturen auf eXtensible Markup Language<br />

(XML) aufgefasst werden. Das XMI wird oft bei den Transformationswerkzeugen als<br />

Input- und Output-Format für <strong>Modell</strong>e gefordert.<br />

Im nächten Kapitel wird ein weiterer Standard der OMG vorgestellt.<br />

2.3.3. Die Object <strong>Co</strong>nstraint Language (OCL)<br />

Die Object <strong>Co</strong>nstraint Language (OCL) ist eine formale Sprache, mit der die Bedingungen<br />

in Form von <strong>Co</strong>nstraints für <strong>Modell</strong>e definiert werden können. Die OCL bietet als textuelle<br />

Ergänzung zu graphischen Diagrammen eine Möglichkeit die Bedingungen mit den <strong>Modell</strong>elementen<br />

zu verknüpfen. Hiermit kann z.B. der gültige Wertebereich für eine Variable oder<br />

eine Invariante für eine Klasse, die zu jederzeit gelten soll, definiert werden. Darüber hinaus<br />

kann unter Verwendung der OCL-Bedingungen das Vorhandensein bestimmter <strong>Modell</strong>elemente<br />

geprüft werden oder eine Vorbedingung für die Ausführung einer Operation definiert<br />

werden.<br />

12


2.4. Die Query View Transformations (QVT)<br />

Die OCL ist eine streng typisierte Sprache, was die Auswertung der OCL-Syntax zur <strong>Modell</strong>ierungszeit<br />

ermöglicht. Die mathematischen Konzepte der Mengenlehre und der Prädikatenlogik<br />

liegen der OCL-Sprache zugrunde. Für die mathematischen Symbole wird eine<br />

formal textuelle Notation verwendet. Hierbei hat die OCL einen deklarativen Charakter.<br />

Dies bedeutet, dass unter Verwendung von der OCL die Bedingungen erfasst werden, die für<br />

ein <strong>Modell</strong> erfüllt sein sollen und somit diese als gültig bewertet wird. Es kann jedoch mit<br />

Hilfe von OCL-Bedingungen nicht festgelegt werden wie ein <strong>Modell</strong> den gültigen Zustand<br />

erlangt.<br />

Die Verwendung der OCL-Sprache erlaubt dem <strong>Modell</strong>ierer eine hohe Präzision der Anwendungsbeschreibung<br />

zu erreichen, wobei hoher Abstraktionsgrad bewahrt wird. Die <strong>Modell</strong>validierung<br />

ist nahezu unvorstellbar ohne den Einsatz von so einer mächtigen Sprache<br />

wie die OCL. Einige Transformationssprachen wie z.B. die relationale QVT-Sprache basieren<br />

auf die OCL. Die von der OMG spezifizierte QVT (Query Views Transformations) wird im<br />

nächsten Abschnitt vorgestellt.<br />

2.4. Die Query View Transformations (QVT)<br />

Die QVT ist ein von der OMG veröffentlichter Standard zur Durchführung von <strong>Modell</strong>transformationen.<br />

Die QVT umfasst drei unterschiedlichen Transformationssprachen. Die<br />

imperative Sprache QVT Operational Mappings (QVT Operational) und die deklarativen<br />

Sprachen QVT Relations und QVT <strong>Co</strong>re.[23]<br />

Transformationen können unidirektional oder bidirektional sein. Dabei sind die deskriptiven<br />

Sprachen bidirektional und die imperative Sprache unidirektional. QVT unterscheidet<br />

zwischen zwei Konzepten für die Transformationen: der Model-To-Model-Transformation<br />

und der Model-To-Text Transformation. Mit einer Model-To-Text-Transformation kann eine<br />

<strong>Co</strong>de-Generierung erfolgen.<br />

2.5. Das Eclipse Modeling Framework (EMF)<br />

Das Eclipse Modeling Framework(EMF) ist ein <strong>Modell</strong>ierungsframework, der die Erstellung<br />

von eigenen <strong>Modell</strong>ierungssprachen erlaubt. Das EMF ist als eine Sammlung der Eclipse-<br />

Plug-ins konzipiert und benutzt ein eigenes Meta-Metamodell namens Ecore. In der Version<br />

2.0 kann das Ecore als Implementierung von EMOF betrachtet werden. Die Ecore-repräsentierte<br />

Metamodelle sind zum EMOF Format (siehe Kapitel 2.3.2) weitgehend äquivalent. Die<br />

Abbildung des Ecore auf das XMI ist der Abbildung des EMOFs auf das XMI sehr ähnlich.<br />

Der Unterschied bei Mappings auf das XMI ist zum Beispiel, dass die Namen der Bezeichner<br />

in Ecore Format mit E beginnen. Für einen Bezeichner Class steht z.B. EClass usw.<br />

Die Ecore-XMI Repräsentation lässt sich bei Bedarf unter Verwendung der EMF Werkzeuge<br />

einfach in das EMOF-Format überführen.[10][20]<br />

13


2. Grundlagen und verwendeten Technologien<br />

2.5.1. Metamodellierung mit Ecore Tools<br />

Die Erstellung von Metamodellen ermöglicht eine EMF Komponente, die Ecore Tools genannt<br />

wird. Sie stellt die Ecore-<strong>Modell</strong>-Editoren, die Ecore-Diagramm-Editoren zur <strong>Modell</strong>ierung<br />

der Metamodelle sowie das EMF Generator Template zur Verfügung. Das EMF<br />

Generator Template dient zur automatischen Generierung von Eclipse-Plug-ins, die die Editoren<br />

für die Erstellung und die Bearbeitung der Instanzen dieser Metamodelle erlauben.<br />

Wird das Ecore-Metamodell für eigene <strong>Modell</strong>ierungssprachen definiert, so kann aus diesem<br />

Ecore-Metamodell ein Generator-<strong>Modell</strong> für die Eclipse-Plug-ins generiert werden. Diese<br />

Plug-ins stellen Editoren bereit, welche die <strong>Modell</strong>ierung auf der eigenen <strong>Modell</strong>ierungssprache<br />

ermöglichen. Für die Ausführung von den <strong>Modell</strong>-Transformationen sollen oft die<br />

Metamodelle mit angegeben werden. Im Rahmen dieser Arbeit wurden für die Transformation<br />

benötigten Metamodelle in dem Ecore-Format definiert. Aus den Metamodellen wurden<br />

die Eclipse-Plug-ins generiert, welche die Editoren für die Erstellung der Metamodellinstanzen<br />

liefern. Die genaue Vorgehensweise dafür wird im Rahmen dieser Arbeit vorgestellt (siehe<br />

Anhang A). Darüber hinaus soll angemerkt werden, dass die Definition der Metamodelle für<br />

eigene <strong>Modell</strong>ierungssprachen eine schwergewichtige UML-Erweiterung mit sich bringt. Eine<br />

elegantere Alternative bietet der Einsatz eines UML-Profils.[23]<br />

2.5.2. Die Eclipse UML2<br />

Wie oben bereits erwähnt, verabschiedet OMG einen Standard dadurch, dass die Spezifikation<br />

dieses Standards veröffentlicht wird. Die konkreten Implementierungen des UML2-<br />

Metamodells werden von verschiedenen Open-Source- oder kommerziellen Tool-Herstellern<br />

entwickelt. Hierbei wurden unterschiedliche UML-2 Metamodell-Implementierungen um kleinere<br />

Tool-spezifische Inhalte erweitert. Somit unterscheiden sich diese Implementierungen<br />

voneinander. Dies hat eine schlechte Interoperabilität zur Folge. Als weiterer Faktor für die<br />

schlechte Interoperabilität zwischen verschiedenen Tools wäre eine ungenaue Spezifikation<br />

des XMI in den frühen Versionen zu benennen. Im Rahmen des Eclipse-UML2-Projekts<br />

wurde UML2-Metamodell unter Verwendung des Ecore-Formats spezifiziert und unter der<br />

Eclipse Public License (EPL) veröffentlicht. Somit können alle <strong>Modell</strong>ierungs- bzw. Transformationstools<br />

innerhalb der Eclipse ein einheitliches Metamodell verwenden. Ein standardisierter<br />

XMI-Export ist ebenfalls angeboten.[23][10]<br />

2.6. Die UWE Methodologie<br />

Die UML-based Web Engineering-Methodologie ist ein modellgetriebener Ansatz für die<br />

Entwicklung von Rich Internet Applications. Das UWE setzt auf die Standards des Model<br />

Driven Architecture und hat als Ziel ” Development Driven by Models“ durchzusetzen, wobei<br />

an allen Entwicklungsphasen der Einsatz von <strong>Modell</strong>transformationen zum maximalen Grad<br />

der Automatisierung des Entwicklungsprozesses beitragen soll.[12]<br />

14


2.6.1. UWE Metamodell und UWE Profil<br />

2.6. Die UWE Methodologie<br />

Das UWE-Metamodell ist als konservative Erweiterung des UML 2 Metamodells definiert.<br />

Dies ermöglicht ein Mapping des UWE-Metamodells auf ein UML Profil. Die UWE-Methodologie<br />

basiert auf einem UWE-Profil, der leichtgewichtigen UML Erweiterung, die eine Spezialisierung<br />

für die Domäne der modernen Webentwicklung in Form einer domänenspezifischen<br />

Sprache erstellt. Somit sind die UWE-<strong>Modell</strong>diagramme als <strong>Modell</strong>ierungssprache gut<br />

verständlich. Das UWE nutzt XMI als Austauschformat und ist somit zu den Tools kompatibel,<br />

die das XMI einsetzten.[14][12]<br />

2.6.2. Die Separation of <strong>Co</strong>ncerns<br />

UWE setzt auf die strikte Separation of <strong>Co</strong>ncerns. Die Webanwendung wird in den separaten<br />

<strong>Modell</strong>en beschrieben. Im Laufe des UWE-Entwicklungsprozesses werden die <strong>Modell</strong>e<br />

mithilfe <strong>Modell</strong>transformationen ineinander überführt[14][12].<br />

• Das Inhaltsmodell: In dem Inhaltsmodell werden die Inhalte der Webanwendung in<br />

Form eines Klassendiagramms modelliert, die aus einer Anforderungsanalyse hervorgehen.<br />

Das Ziel von dem Inhaltsmodell ist die visuelle Spezifikation der Domänenrelevanten<br />

Informationen der Webanwendung.<br />

• Das Navigationsmodell: Das Navigationsmodell spiegelt die Navigationsstruktur der<br />

Webanwendung wider, wobei diese Struktur aus dem Inhaltsmodell und den Anforderungen<br />

abgeleitet wird. Das Metamodell der Navigationsstruktur ist durch eine Anzahl<br />

spezieller Stereotype erweitert. Navigationsklassen repräsentieren die Navigationsknoten<br />

einer Webanwendung, die eine Business Logik enthalten sollen.<br />

• Das Prozessmodell: Das Prozessmodell enthält die Spezifikation der Funktionalitäten<br />

der Webanwendung, die basierend auf dem Inhaltsmodell und dem Navigationsmodell<br />

veranschaulicht werden.<br />

• Das Präsentationsmodell: Das Präsentationsmodell liefert eine abstrakte Sicht auf die<br />

Struktur von Benutzeroberfläche einer RIA. Es basiert auf dem Navigationsmodell.<br />

Der Vorteil von dem Präsentationsmodell ist, dass das <strong>Modell</strong> unabhängig von den<br />

Darstellungstechniken ist, welche für die Webanwendungsimplementierung eingesetzt<br />

werden können. Basiselemente der Repräsentationsmodelle sind Präsentationsklassen,<br />

die direkt auf den Knoten aus dem Navigationsmodell basieren.<br />

2.6.3. MagicUWE - UWE Plug-in für MagicDraw<br />

MagicUWE 1 ist ein MagicDraw-basiertes Plug-in, das eine Entwicklungsumgebung im Rahmen<br />

der UWE-Methodologie bereitstellt. Magic UWE unterstützt die <strong>Modell</strong>ierung von den<br />

unterschiedlichen UWE-<strong>Modell</strong>en. Das MagicDraw vereint in sich die Integration des UWE-<br />

Profils und einer benutzerfreundlichen Schnittstelle. Das Tool verfügt über eine Toolbar, in<br />

der für alle UWE-Diagramme passende Elemente (Klassen, Properties usw.) zur Verfügung<br />

stehen, womit eine bequeme <strong>Modell</strong>ierung erfolgen kann. Es sind <strong>Modell</strong>-Transformationen<br />

1 http://uwe.pst.ifi.lmu.de/toolMagicUWEReferenceV1.3.html<br />

15


2. Grundlagen und verwendeten Technologien<br />

in das MagicUWE integriert, deren Ausführung die Erstellung der <strong>Modell</strong>e vereinfachen. Das<br />

MagicUWE-Plug-in für das UML-basiertes Tool MagicDraw lässt sich leicht erweitern und<br />

verfügt über Konfigurations- und Anpassungsmöglichkeiten.<br />

Nachdem die grundlegenden Begriffe für die modellgetriebenen Entwicklung von RIAs erläutert<br />

wurden, wird im Folgenden die <strong>Modell</strong>-<strong>Evolution</strong> und <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> vorgestellt.<br />

16


3. Die <strong>Modell</strong>evolution und die<br />

<strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />

In diesem Kapitel werden die Grundlagen der Thematik der <strong>Co</strong>-<strong>Evolution</strong> vorgestellt. Die<br />

unterschiedlichen <strong>Modell</strong>ierungsartefakte sind auf verschiedenen Wegen von dem Metamodell<br />

bzw. deren Änderungen abhängig. Dabei wird zwischen folgenden Hauptarten der <strong>Co</strong>-<br />

<strong>Evolution</strong> unterschieden: der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> und der Transformationen-<strong>Co</strong>-<strong>Evolution</strong>.<br />

Diese erfolgen in Form einer Anpassung existierender Model- bzw. Transformationsinstanzen<br />

gemäß einer neuen Metamodell-Version.<br />

Im Rahmen dieser Arbeit wird der Schwerpunkt auf die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> gelegt. In<br />

diesem Zusammenhang werden im Folgenden die unterschiedlichen Arten der Metamodell-<br />

Modifikationen entsprechend der Typologie der benötigten Anpassungen kategorisiert. Diese<br />

Anpassung der <strong>Modell</strong>e enthält Schritte, welche für die Eliminierung der durch <strong>Modell</strong>evolution<br />

bedingten Differenzen benötigt werden. Für jeden solchen Typ wird der Automatisierungsgrad<br />

dieser Änderungen diskutiert, da nicht bei allen solchen Änderungstypen die<br />

<strong>Co</strong>-<strong>Evolution</strong> vollautomatisiert ablaufen kann. In solchen Fällen ist menschliche Eingriff unvermeidbar.<br />

Im Bereich der <strong>Co</strong>-<strong>Evolution</strong> der restlichen Software-Artefakte wird momentan geforscht.<br />

Es existieren bereits Ansätze zur Transformationen-<strong>Co</strong>-<strong>Evolution</strong>[16]. Auf die <strong>Co</strong>-<strong>Evolution</strong><br />

der Artefakte, die nicht <strong>Modell</strong>e oder Transformationen sind, wird im Rahmen dieser Arbeit<br />

nicht weiter eingegangen. Zu solchen Artefakten gehören beispielsweise die <strong>Modell</strong>-Editoren,<br />

die auf dem entsprechenden Metamodell basieren, die Dokumentation des Systems sowie die<br />

Anforderungen an das System. Eine Publikation berichtet über Erfolge in der Umsetzung<br />

einer Methodik für <strong>Co</strong>-<strong>Evolution</strong> von GMF-Editor[21]. Dieser Bereich der <strong>Co</strong>-<strong>Evolution</strong> ist<br />

sehr neu und die Arten der betroffenen Artefakte sind sehr umfangsreich, was eine vollständig<br />

automatisierte Migration der Gesamtmenge aller Software-Artefakte vermutlich unmöglich<br />

macht. Nach der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> und der Transformation-<strong>Co</strong>-<strong>Evolution</strong> bleiben immer<br />

einige Artefakte vorhanden, welche manuell angepasst werden müssen.<br />

Ein Versuch einen Ansatz zu erarbeiten, der die voll-automatisierte <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />

mit der Unterstützung von Transformationen ermöglicht, wirft eine Reihe von Problemen<br />

auf. Im Folgenden werden diese Probleme erläutert und die Möglichkeiten diskutiert, diese<br />

Ideen in die Realität umzusetzen. Anschließend wird die UWE-Methodologie unter die Lupe<br />

genommen und zwei Versionen der UWE-Metamodelle miteinander verglichen. Letztendlich<br />

wird die <strong>Co</strong>-<strong>Evolution</strong> Strategie für diese UWE Versionen aufgezeigt.<br />

17


3. Die <strong>Modell</strong>evolution und die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />

3.1. Was bringt die <strong>Modell</strong>-<strong>Evolution</strong> mit sich<br />

Die Abhängigkeiten zwischen dem Metamodell und den unterschiedlichen im Entwicklungsprozess<br />

beteiligten Software-Artefakten im Laufe des Metamodelllebenszyklus können zu<br />

einem beliebigen Zeitpunkt entstehen. Zum Beispiel ist eine <strong>Modell</strong>transformation, die als<br />

Ausgangsmodell Model M1 hat und als Resultat ein <strong>Modell</strong> M2 liefert, von Metamodellen<br />

von M1 und M2 abhängig. Ein graphisches oder textuelles Tool erlaubt es ein <strong>Modell</strong> zu<br />

beschreiben, wobei das Tool mit dem Metamodell in Abhängigkeit steht. [7] [8]<br />

Tool/Artefakt Beschreibung Abhängigkeit<br />

bei der<br />

Entwicklung<br />

Graphische sowie<br />

textuelle Editoren<br />

<strong>Modell</strong>-zu-<strong>Modell</strong>-<br />

Transformationen<br />

<strong>Modell</strong>-zu-Text-<br />

Transformationen<br />

Graphische oder textuelle<br />

Editoren, die Bearbeitung<br />

und Erstellung der<br />

<strong>Modell</strong>e unterstützen<br />

Transformationen, die<br />

aus einem Ausgangsmodell<br />

Zielmodelle<br />

generieren<br />

Transformationen, die als<br />

Ziel Textuelle Artefakte,<br />

wie z.B. den <strong>Co</strong>de aus<br />

dem Ausgangsmodell generieren<br />

Abhängigkeit<br />

bei der<br />

<strong>Evolution</strong><br />

Technologie<br />

Schwach Stark GMF, MagicDraw,<br />

Enterprise Architect,<br />

Topcased<br />

etc.<br />

Stark Mittel ATL, QVT Operational,<br />

QVT Relations,<br />

VIATRA2 etc.<br />

Schwach Schwach UWE4JSF, Acceleo<br />

etc.<br />

Tabelle 3.1.: Tabelle. Die Abhängigkeit zwischen dem Metamodell und den Softwareartefakten.<br />

[8]<br />

In der Tabelle 3.1 werden verschiedene Typen der Abhängigkeiten zwischen dem Metamodell<br />

und den unterschiedlichen Artefakten unterschieden, die im Laufe der Entwicklung entstehen<br />

können. Die Metamodelländerungen haben einen Einfluss auf existierende Software-<br />

Artefakte im Sinne der <strong>Co</strong>-<strong>Evolution</strong>-Problematik. Die Artefakte müssen angepasst werden,<br />

damit sie im Sinne der aktuellen Version des Metamodells wohldefiniert bleiben.<br />

Das Metamodell kann sich auf unterschiedlichen Wegen entwickeln: einige Änderungen können<br />

rein additiv sein und keinen Einfluss auf existierende Artefakte haben, wobei keine oder<br />

nur ganz kleine <strong>Co</strong>-<strong>Evolution</strong>-Anpassungen benötigt werden. Allerdings können in manchen<br />

Fällen Metamodell-Modifikationen Inkompatibilität und Inkonsistenzen mit sich bringen,<br />

welche nicht einfach und nicht immer automatisiert behoben werden können.<br />

3.1.1. Die Relationstypen zwischen dem Metamodell und den<br />

<strong>Modell</strong>ierungsartefakten<br />

Die benötigten <strong>Co</strong>-<strong>Evolution</strong>-Adaptationsschritte hängen von dem Typ der Relation zwischen<br />

dem Metamodell und dem betroffenem Artefakt ab.<br />

Alfonso Pierantonio und <strong>Co</strong>. unterscheiden in [8] zwischen folgenden Relationstypen:<br />

18


3.1. Was bringt die <strong>Modell</strong>-<strong>Evolution</strong> mit sich<br />

Abbildung 3.1.: Eine Übersicht der Beziehungen zwischen einem Metamodell und den Softwareartefakten<br />

[8]<br />

• conformsTo: diese Relation verbindet <strong>Modell</strong>e mit ihren Metamodell. Ein Model ist zu<br />

einem Metamodell konform, wenn dieses <strong>Modell</strong> jedes Konzept spezifiziert, das in der<br />

<strong>Modell</strong>definition vorkommt. Dabei werden die Konzepte des Metamodells entsprechend<br />

der Regeln benutzt, die im Metamodell spezifiziert sind;<br />

• domain<strong>Co</strong>nformsTo: ist eine Relation zwischen der Definition einer Transformation<br />

und der Definitionen der Metamodelle, auf denen diese Transformation operiert.<br />

Zum Beispiel könnte eine Konformitätseinschränkung festlegen, dass die Elemente einer<br />

Transformationsregel einer Metaklasse aus dem Quellmetamodell entsprechen müssen<br />

und dasselbe für Zielelemente und entsprechendes Zielmetamodell gelten soll;<br />

• dependsOn: ist die schwächste und meistens komplexeste Relation von allen. Diese<br />

Relation besteht zwischen dem Metamodell und der <strong>Modell</strong>ierungsartefakte, die keine<br />

direkten und wohlgeformten vordefinierten Abhängigkeiten zu Metamodell-Elementen<br />

besitzen. Zum Beispiel im Falle der GMF (Graphical Modeling Framework) <strong>Modell</strong>e referenzieren<br />

einige von ihnen nicht direkt auf die im Metamodell angegebenen Elemente,<br />

wenn auch eine Form der Konsistenz aufrechterhalten werden muss; 1<br />

Der Fokus dieser Arbeit liegt auf der Problematik der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>, weil die <strong>Modell</strong>e<br />

die zentrale Bedeutung in der MDA einnehmen. Einzelne Lösungsvorschläge für Probleme<br />

in der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> und Transformationen-<strong>Co</strong>-<strong>Evolution</strong> existieren bereits. Es<br />

existieren sogar Vorschläge für die <strong>Co</strong>-<strong>Evolution</strong> der <strong>Modell</strong>ierungsartefakte, die mit dem<br />

Metamodell dependsOn-Abhängigkeit besitzen, wie z.B. für den graphische GMF-Editor.<br />

Leider sind diese Lösungen zum größten Teil unreif bzw. in einem Prototypen-Stadium oder<br />

1 www.eclipse.org/gmf<br />

19


3. Die <strong>Modell</strong>evolution und die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />

basieren auf verschiedenen Standards und deren unterschiedlichen Versionen.<br />

Es existiert noch kein Tool, indem eine umfassende, einheitliche und universelle Lösung<br />

für <strong>Co</strong>-<strong>Evolution</strong>-Strategien für alle Typen der Artefakte vertreten ist. Der Kern der <strong>Co</strong>-<br />

<strong>Evolution</strong> liegt aber bei der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Auf die <strong>Modell</strong>e-<strong>Co</strong>-<strong>Evolution</strong> wird im<br />

weiterem detailliert eingegangen.<br />

3.2. Die Klassifizierung der Metamodelländerungen<br />

Die Metamodelle können als grundlegendes Konzept des MDA betrachtet werden, da sie eine<br />

formale Definition für die wohlgeformten <strong>Modell</strong>e bereitstellen. In anderen Worten bilden<br />

Metamodelle die Grundlage für die Sprachen, durch deren Verwendung die Gegebenheiten<br />

der Realität in einem abstrakten Sinne beschrieben werden. Durch die Weiterentwicklung<br />

der Metamodelle, die im Laufe deren Lebenszyklus unausweichlich sind, stößt man auf die<br />

Notwendigkeit das Problem der Versionskonflikte zu lösen. Die existierenden <strong>Modell</strong>e gehen<br />

mit der älteren Metamodell konform, aber nicht mit dem neuen Metamodell. Diese Konformitätsrelation<br />

ist vom Typ conformsTo (3.1.1) und damit abgebrochen. Dabei geht die<br />

Validität des <strong>Modell</strong>s verloren. Dieses Problem entsteht durch Inkompatibilität zwischen<br />

den Versionen des Metamodells und kann durch Anpassungsmechanismus der <strong>Modell</strong>-<strong>Co</strong>-<br />

<strong>Evolution</strong> gelöst werden. Somit kann die conformsTo-Relation (3.1.1) zwischen dem neuen<br />

Metamodell und entsprechenden angepassten <strong>Modell</strong>instanzen aufrechterhalten bleiben. Die<br />

<strong>Modell</strong>e können zu neuen Instanzen entsprechend der vorgenommenen Metamodelländerungen<br />

auf die neue Version migriert werden.<br />

Leider ist <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> nicht immer einfach: abhängig von der Art der Metamodell-<br />

Änderungen können sich Schwierigkeiten ergeben. Es ergeben sich unterschiedliche Arten von<br />

Metamodelländerungen im Bezug auf die Auswirkungen, die diese Änderungen an existierenden<br />

<strong>Modell</strong>en verursachen. Einige der Änderungen können rein additiv und unabhängig<br />

von anderen <strong>Modell</strong>-Elementen sein und somit keinen Anpassungsbedarf an existierenden<br />

<strong>Modell</strong>en verursachen.<br />

Einige Metamodelländerungen bedingen den Verlust von Konformität der existierenden <strong>Modell</strong>e<br />

zu dem neuen geänderten Metamodell. Diese Konformität kann dennoch mit einfachen<br />

voll automatisierten Anpassungen der <strong>Modell</strong>e wiederhergestellt werden; in manchen Fällen<br />

verursachen Metamodelländerungen Inkompatibilität und Inkonsistenz der <strong>Modell</strong>e, die auf<br />

vollständig automatisiertem Wege nicht beseitigt werden können. Hier ist der menschliche<br />

Eingriff unvermeidbar. Einige dieser Änderungen, lassen sich teilautomatisiert durchführen.<br />

Eine Untermenge der Metamodelländerungen lässt eine Automatisierung der Anpassung der<br />

existierenden <strong>Modell</strong>e nicht zu. Hier muss der <strong>Modell</strong>ierer die <strong>Modell</strong>e manuell ändern. Dies<br />

wird im nächsten Abschnitt weiter ausgeführt.<br />

3.2.1. Illustratives Beispiel für Metamodell-<strong>Evolution</strong><br />

Im Folgenden wird ein Beispiel von Model-<strong>Evolution</strong> vorgeführt. Es wird ein vereinfachtes<br />

Metamodell für die <strong>Modell</strong>ierung von Petri-Netze vorgestellt. [7] Das Ausgangsmetamodell<br />

20


3.2. Die Klassifizierung der Metamodelländerungen<br />

der Petri-Netze MM0 besteht aus Plätzen (Place) und Transitionen (Transition), wie es in<br />

der Abbildung 3.2 zu sehen ist.<br />

Abbildung 3.2.: Das Petri-Netze-Metamodell MM0 [7]<br />

Die Plätze können Eingangs- und Ausgangs-Transitionen besitzen. Die Transitionen verbinden<br />

einen Platz entsprechend mit Eingangs- und Ausgangsplätze (src- und dst Assoziationen).<br />

Aus diesem ganz vereinfachten Metamodell wird im nächsten Schritt ein neues Metamodell<br />

erstellt. Im Metamodell MM1 im Bild 3.3 soll jedes Netz mindestens einen Platz<br />

und eine Transition besitzen. Außerdem werden gerichtete Kanten zwischen den Plätzen<br />

und Transitionen explizit durch die Einführung von PTArc (Place-Transition Arc) und<br />

TPArc(Transition-Place Arc) Metaklassen definiert. [7]<br />

Abbildung 3.3.: Das Petri-Netze-Metamodell MM1 [7]<br />

Diese Verfeinerung erlaubt es, weitere Eigenschaften zu den Beziehungen zwischen den<br />

Plätzen und den Transitionen hinzuzufügen. Z.B. kann der Petri-Netze Formalismus jetzt<br />

mittels dieser Verfeinerung durch die Annotation der gerichteten Kanten mit Gewicht erweitert<br />

werden. Aufgrund der Tatsache, dass die beiden Klassen PTArc sowie TPArc gerichtete<br />

Kanten repräsentieren, können diese durch Hinzunahme einer Superklasse generalisiert werden.<br />

Wobei die neue Eigenschaft ” Gewicht“ in diese Metasuperklasse als Metaattribute vom<br />

Typ Integer hinzugenommen werden kann. Siehe Bild 3.4. Diese Änderung wird im Metamodell<br />

MM2 mit aufgenommen. Letztendlich wird die Metaklasse Net in PetriNet umbenannt.<br />

[7]<br />

Die Versionen MM1 und MM2 des Petri-Netze Metamodells, die davor vorgestellt wurden,<br />

können zu Ungültigkeit der bestehenden <strong>Modell</strong>instanzen nach der Migration auf eine<br />

neuere Version führen. Anhand der Änderungstypen soll eine Analyse dieser Versionen in<br />

Bezug auf die Auswirkung der Änderung auf die existierende <strong>Modell</strong>e erfolgen. Anschlie-<br />

21


3. Die <strong>Modell</strong>evolution und die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />

ßend werden Überlegungen über notwendigen Adaptationsschritte vorgenommen, die an den<br />

existierenden <strong>Modell</strong>en durchgeführt werden sollen, um Konformität mit dem neuen Metamodell<br />

wiederherzustellen. Die Änderungen eines Metamodells können anhand korrupten<br />

oder non-korrupten Effekte auf die existierenden <strong>Modell</strong>e klassifiziert werden [7]:<br />

• ” non-breaking changes“: Die Änderungen an einem Metamodell, die bewirken, dass<br />

existierende <strong>Modell</strong>e mit der durch diese Änderungen entstandenen neuen Version des<br />

Metamodells ohne jegliche Anpassungen konform gehen.<br />

• ” breaking and resolvable changes“: Die Konformität der existierenden <strong>Modell</strong>e zu<br />

dem geändertem Metamodell bleibt nicht erhalten und kann mithilfe vollautomatisierter<br />

<strong>Co</strong>-<strong>Evolution</strong> wiederhergestellt werden.<br />

Abbildung 3.4.: Das Petri-Netze-Metamodell MM2 [7]<br />

• ” breaking and unresolvable changes“: Die Konformität der existierenden <strong>Modell</strong>e<br />

der neuen Version des Metamodells bleibt nicht erhalten und kann nicht automatisiert<br />

wiederhergestellt werden. Menschlicher Eingriff ist unerlässlich.<br />

Das obere Beispiel zeigt, dass das Einfügen einer abstrakten Metaklasse Arc als Generalisierung<br />

der Metaklassen PTArc und TPArc (ohne Hinzunahme des Attributes weight) zu der<br />

Kategorie der ” non-breaking changes“ gehört. Nach einer solchen Änderung sind existierende<br />

<strong>Modell</strong>e, die mit dem MM1 Metamodell konform gehen, auch zu dem MM2 Metamodell<br />

konform. Die <strong>Co</strong>-<strong>Evolution</strong>-Aktivitäten sind an dieser Stelle nicht nötig.<br />

Die Hinzunahme der neuen Metaklassen PTArc und TPArc zu dem Metamodell MM0 bewirkt,<br />

dass die existierenden <strong>Modell</strong>e zu dem neuen MM1 Metamodell nicht mehr konform<br />

bleiben. Die Platz- und Transition-Instanz können dann nicht mehr direkt miteinander verbunden<br />

werden, da die PTArc- und TPArc- Elemente gemäß dem neuen Metamodell dafür<br />

eingesetzt werden sollen. Die <strong>Modell</strong>e können automatisiert in die neue Metamodellversion<br />

überführt werden, indem für jedes Platz-Transition Paar zwei zusätzliche PTArc- und<br />

TPArc-Instanzen hinzugefügt werden. Diese Metamodelländerung teilt man somit in die<br />

Kategorie ” breaking and resolvable changes“ ein.<br />

Oft führen die Metamodelländerungen zu Inkonsistenzen in den <strong>Modell</strong>en, die ohne menschlichen<br />

Eingriff nicht beseitigt werden können. Ein Beispiel dafür wäre die Hinzunahme eines<br />

22


3.2. Die Klassifizierung der Metamodelländerungen<br />

neuen Attributs in die Metaklasse Arc des MM2 <strong>Modell</strong>s, das zuvor im MM1 Metamodell<br />

nicht vorkam. Die <strong>Modell</strong>e, die mit dem MM1 Metamodell konform gehen, können nicht automatisiert<br />

auf die MM2 Version überführt werden, ohne dass Konformität eingebüßt wird.<br />

Nur ein <strong>Modell</strong>ierer kann die fehlende Information, die in diesem Fall die Gewichtung des<br />

Pfeils betrifft, in die existierenden <strong>Modell</strong>e einfügen. Dies ist ein Beispiel für die ” breaking<br />

and unresolvable changes“. Eine Abhilfe könnte die Definition eines Default-Wertes für dieses<br />

Attribut sein. Dadurch wäre die <strong>Co</strong>-<strong>Evolution</strong> automatisierbar und würde der Kategorie<br />

der ” breaking and unresolvable changes“ angehören.<br />

3.2.2. Die additiven Änderungen eines Metamodells<br />

Alle Szenarien der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> können entsprechend der Metamodellmodifikationen<br />

behandelt werden. Bei diesen Metamodellmodifikationen wird zwischen der additiven (engl.<br />

additive), subtraktiven (engl. subtraktive) und ändernden (engl. updative) Modifikation unterschieden.<br />

Mit additiven Änderungen werden folgende Additionen zu dem Metamodell<br />

gemeint[7][24]:<br />

• Das Einfügen einer Metaklasse: Eine neue Metaklasse wird dem Metamodell hinzugefügt.<br />

Dies hat keinerlei Auswirkung auf die restlichen Klassen des <strong>Modell</strong>s, ebenso<br />

wenn die neue Metaklasse abstrakt ist. Als Vorbedingung muss gelten, dass die neu<br />

hinzukommende Metaklasse in dem Metamodell nicht bereits enthalten ist. Somit wird<br />

die Unterscheidung der Klassen gewährleistet und das Vorhandensein von Duplikaten<br />

ausgeschlossen. Das Einfügen neuer Metaklassen bringt das Thema <strong>Co</strong>-<strong>Evolution</strong> nur<br />

dann auf, wenn die neue Metaklasse zwingend erforderlich (obligatorisch) ist. Nur der<br />

<strong>Modell</strong>ierer kann die neuen Instanzen dieser Metaklasse in die existierenden <strong>Modell</strong>e<br />

einfügen.<br />

• Das Einfügen einer Meta-Eigenschaft: Dies ist dem Einfügen einer Metaklasse<br />

ähnlich. Im Falle einer nicht obligatorischen Eigenschaft ist keine <strong>Co</strong>-<strong>Evolution</strong>-<br />

Aktivität notwendig. Die neue Eigenschaft kann mit der Berücksichtigung einer bestimmten<br />

Kardinalität obligatorisch sein. In diesem Fall ist die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />

nicht ohne menschliche Interaktion möglich. Besondere Aufmerksamkeit ist im Falle<br />

der Vererbung gefragt. Die Konformität bleibt erhalten, wenn die neue Eigenschaft in<br />

eine abstrakte Metaklasse, die keine nicht-abstrakte Subklassen besitzt, eingefügt wird.<br />

Ist die Metaklasse nicht abstrakt, so sind sowohl die Metaklasse selbst als auch alle<br />

ihre Subklassen betroffen. Das Eingreifen des Menschen ist dann wiederum unabdingbar,<br />

um den Wert der eingefügten obligatorischen Metaeigenschaft in allen betroffenen<br />

<strong>Modell</strong>elementen zu setzen. Legt man einen Default-Wert für die Eigenschaft fest, so<br />

lässt sich die <strong>Co</strong>-<strong>Evolution</strong> automatisieren.<br />

• Die Generalisierung einer Meta-Eigenschaft: Eine Meta-Eigenschaft ist generalisiert,<br />

wenn ihr Typ oder ihre Kardinalität geschwächt wird. Zum Beispiel, wenn die<br />

Kardinalität einer Metaklasse von 3..n auf 0..n geändert wird. Es ist in diesem Fall<br />

keine <strong>Co</strong>-<strong>Evolution</strong>-Aktion an den betroffenen Klassen der existierenden <strong>Modell</strong>e erforderlich.<br />

Die Instanzen dieser Metaklasse bleiben konform zu der neuen Version des<br />

Metamodells.<br />

• Das Verlagern einer Meta-Eigenschaft einer Metaklasse zu ihrer Superklas-<br />

23


3. Die <strong>Modell</strong>evolution und die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />

se (engl. pull metaproperty): Eine Meta-Eigenschaft wird aus einer Subklasse B<br />

zu ihrer Superklasse A verschoben. Sie wird in der Metaklasse B gelöscht und zu der<br />

Metaklasse A eingefügt. Ist diese Eigenschaft nicht obligatorisch, so muss keine <strong>Modell</strong>-<br />

<strong>Co</strong>-<strong>Evolution</strong>-Aktion ausgeführt werden. Andernfalls müssen als Resultat Instanzen<br />

der Metaklasse A und deren Subklassen modifiziert werden. Weil diese Klassen diese<br />

Meta-Eigenschaft erben. Die Instanzen der Klasse B müssen nicht modifiziert werden,<br />

da sie diese Eigenschaft bereits besitzen.<br />

• Das Extrahieren einer Superklasse: Eine Anzahl von Eigenschaften, die für einer<br />

bestimmten Menge von Klassen gemeinsam ist, wird in eine neue Superklasse in einer<br />

Hierarchie extrahiert. Die gemeinsamen Eigenschaften werden in diese Superklasse<br />

verschoben. Ist die Superklasse abstrakt, so ist keine <strong>Co</strong>-<strong>Evolution</strong> notwendig. Sonst<br />

können die Änderungseffekte auf den Fall des Verlagerns einer Meta-Eigenschaft einer<br />

Metaklasse zu ihrer Superklasse (engl. pull metaproperty) zurückgeführt werden.<br />

3.2.3. Die subtraktiven Änderungen eines Metamodells<br />

Die subtraktiven Änderungen beziehen sich auf das Löschen einiger Metamodellelemente<br />

und unterteilen sich in folgende Typen[7][24]:<br />

24<br />

• Das Löschen einer Metaklasse: Eine Metaklasse wird aus einem Metamodell gelöscht,<br />

um einem Sub-Metamodell Platz zu machen. In diesem Fall induziert eine solche Änderung<br />

normalerweise das Löschen aller Instanzen dieser Metaklasse. Wenn diese Klasse<br />

Subklassen hatte oder Referenzen zu den anderen Metaklassen besessen hat, sind die<br />

dadurch verursachten Seiteneffekte auch an diesen referenzierten Instanzen zu berücksichtigen.<br />

• Das Löschen einer Meta-Eigenschaft: Effekte sind analog zu denen, wie beim<br />

Löschen einer Metaklasse.<br />

• Die Verlegung einer Meta-Eigenschaft in eine Subklasse (push metaproperty):<br />

Ein Umzug einer Eigenschaft von einer Superklasse A zu ihren Subklassen bedeutet,<br />

dass diese Eigenschaft in der ursprünglichen Superklasse A gelöscht wird, um dann<br />

in allen Subklassen von A übernommen zu werden. Ist die Superklasse A abstrakt, so ist<br />

keine <strong>Modell</strong>-<strong>Co</strong>-Adaptation erforderlich. Andernfalls müssen alle Instanzen der Klasse<br />

A entsprechend modifiziert werden. Ist die Eigenschaft obligatorisch, so muss ihr Wert<br />

in allen betroffenen Klassen manuell gesetzt werden. Alternativ ermöglicht die Definition<br />

eines Default-Values ähnlich wie bei dem Fall des Einfügens einer Meta-Eigenschaft<br />

die Automatisierung für dieses Vorgehen.<br />

• Das Abflachen der Hierarchie (engl. flatten hierarchy): Das Abflachen einer<br />

Hierarchie bedeutet die Eliminierung einer Superklasse und Auslagerung aller Eigenschaften<br />

in die Subklassen. Dieses Szenario ist im vorigem Fall der Verlegung einer<br />

Meta-Eigenschaft in eine Subklasse (engl. push) abgedeckt.<br />

• Die Einschränkung der Kardinalität oder des Typs einer Meta-Eigenschaft:<br />

Eine Meta-Eigenschaft wird in diesem Zusammenhang durch die Einengung bzw. die<br />

Verringerung deren Kardinalitätsbereichs oder deren Typbereichs eingeschränkt. Dies<br />

ist ein komplexer Fall, wobei alle Instanzen eine manuelle <strong>Co</strong>-Adaption bedürfen. Wird


3.2. Die Klassifizierung der Metamodelländerungen<br />

der obere Grenzwert einer Multiplizität verringert, so müssen bestimmte Werte bzw.<br />

Klassen gelöscht werden. Wird der untere Grenzwert einer Multiplizität erhöht, so<br />

müssen zu den betroffenen Elementen neue Werte hinzugefügt werden, was normalerweise<br />

nur durch die manuelle Anpassung möglich ist. Die Wahl der zu löschenden<br />

Elemente kann nicht ohne menschlichen Eingriff getroffen werden. Nach einer Einschränkung<br />

eines Typbereichs in einem Attribut muss für jede betroffene Instanz eine<br />

Typkonvertierung dieses Attributes erfolgen.<br />

3.2.4. Die Updates an einem Metamodell<br />

Letztendlich kann die neue Version eines Metamodells einige Updates deren Elemente enthalten.<br />

Die damit hervorgerufenen Modifikationen können wie folgt gruppiert werden[7][24]:<br />

• Das Metaelement umbenennen: Die Umbenennung ist ein einfacher Fall. Die<br />

Änderung soll bei den existierenden Instanzen durchgeführt werden und kann somit<br />

vollständig automatisiert erfolgen.<br />

• Die Verlagerung einer Metaeigenschaft aus einer Metaklasse zu einer anderen<br />

Metaklasse: Bestimmte Eigenschaften einer Metaklasse A wird gelöscht und<br />

in eine andere Metaklasse B eingefügt.<br />

• Das Extrahieren (engl. to extract) einer Metaklasse und das Löschen (engl.<br />

to inline) einer Metaklasse: Das Extrahieren einer Metaklasse bedeutet, dass eine<br />

neue Metaklasse definiert wird und alle relevanten Felder aus einer existierenden Metaklasse<br />

in die neue verschoben werden. Eine Metaklasse zu löschen bedeutet, dass alle<br />

ihre Eigenschaften in eine andere Klasse verschoben werden, dabei wird die ursprüngliche<br />

Metaklasse gelöscht.<br />

3.2.5. Die Klassifizierung von Metamodelländerungen anhand der korrupten<br />

bzw. der non-korrupten Effekte auf existierende <strong>Modell</strong>e<br />

Die Klassifizierung von Metamodelländerungen anhand der korrupten bzw. der non-korrupten<br />

Effekte auf existierende <strong>Modell</strong>e ist in der Tabelle 3.2 zusammengefasst.<br />

Auf den ersten Blick wird der Eindruck erweckt, dass diese Klassifizierung die Assoziationen<br />

zwischen den Klassen nicht berücksichtigt. Dies ist aber nicht der Fall, weil die Assoziationen<br />

als Eigenschaften der Metaklassen betrachtet werden können.<br />

Alle möglichen oben beschriebene Szenarien für Metamodell-<strong>Evolution</strong> sind in der Tabelle<br />

3.2 in folgende Kategorien unterteilt: ” non-breaking changes“, ” breaking and resolvable<br />

changes“ und ” breaking and unresolvable changes“. Basierend auf dieser Kategorisierung leiten<br />

sich die Strategien für die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> von den existierenden <strong>Modell</strong>instanzen<br />

ab. Die ” non-breaking changes“ bedürfen keiner <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Die existierenden <strong>Modell</strong>e<br />

müssen nicht angepasst werden. Die ” breaking and resolvable changes“ bedürfen eine<br />

<strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>, wobei diese automatisiert werden kann. Die einzige Kategorie, welche<br />

die Automatisierung der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> sehr schwierig zum Teil unmöglich macht,<br />

ist die ” breaking and unresolvable changes“. Von allen Metamodelländerungen kann ” Die<br />

25


3. Die <strong>Modell</strong>evolution und die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />

Änderungstyp Änderungen<br />

Non-breaking changes<br />

Breaking and resolvable changes<br />

Breaking and unresolvable changes<br />

Die Generalisierung einer Metaeigenschaft<br />

Das Einfügen einer nicht-obligatorischen Metaklasse<br />

Das Einfügen einer nicht obligatorischen Metaeigenschaft<br />

Das Extrahieren einer abstrakten Superklasse<br />

Das Löschen einer Metaklasse<br />

Das Löschen einer Metaeigenschaft<br />

Der Umzug einer Metaeigenschaft in eine Subklasse (push metaproperty)<br />

Das Flachmachen einer Hierarchie (flatten hierarchy)<br />

Das Umbenennen von Metaelementen<br />

Der Umzug einer Metaeigenschaft zu einer anderen Metaklasse<br />

Das Extrahieren einer Metaklasse bzw. Inline einer Metaklasse<br />

Das Einfügen einer obligatorischen Metaklasse<br />

Das Einfügen einer obligatorischen Metaeigenschaft<br />

Der Umzug einer Metaeigenschaft zu einer Superklasse (pull metaproperty)<br />

Die Einschränkung der Kardinalität oder des Typs einer Metaeigenschaft<br />

Das Extrahieren einer nicht abstrakten Superklasse<br />

Tabelle 3.2.: Klassifizierung der Änderungen eines Metamodells im Überblick.[7][24]<br />

Einschränkung der Kardinalität oder des Typs einer Metaeigenschaft“ in keiner Weise automatisiert<br />

werden. Die restlichen Fälle lassen sich mit einer Abhilfe wie z.B. der Einführung<br />

eines Default-Wertes automatisieren. Diese Strategien wurden bereits für jeden solchen Typ<br />

dargestellt.[7][24]<br />

3.3. Die Transformation-<strong>Co</strong>-<strong>Evolution</strong><br />

Die Änderungen an einem Metamodell können die <strong>Modell</strong>transformationen beeinträchtigen.<br />

Inkonsistenzen entstehen, wenn die Transformation nicht mehr der domainTo-Relation 3.1.1<br />

genügt. Dies kann z.B. passieren, wenn ein Konzept aus dem Metamodell entfernt wird, das in<br />

der Transformationsregel angesprochen wird. In Bezug auf Transformationen unterscheidet<br />

man Metamodelländerungen in den drei folgenden Kategorien [8][16]:<br />

26<br />

• Vollautomatisiert: Änderungen an einem Metamodell, die Transformationen beeinträchtigen,<br />

wobei die existierende <strong>Modell</strong>e dank dieser Transformationen vollautomatisiert<br />

ohne Benutzer Interaktionen auf die neue Version migriert werden können.<br />

• Partiell automatisiert: Modifikationen des Metamodells, die Transformationen so<br />

Beinträchtigen, dass eine Migration notwendig ist, um die Validität der Transformationen<br />

und somit die domainTo Relation (3.1.1) wiederherzustellen. Diese Migration kann


3.4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> der UWE-Präsentationsmodelle<br />

automatisiert erfolgen mit der Ausnahme einiger feiner Anpassungen, die nur manuell<br />

durchzuführen sind, um die <strong>Co</strong>-<strong>Evolution</strong> dieser Transformationen zu vervollständigen.<br />

• Vollsemantisch: Die Änderungen am Metamodell, die existierende Transformationen<br />

so beeinträchtigen, dass das Migration nur durch einen Menschen manuell definiert<br />

werden kann.<br />

3.4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> der UWE-Präsentationsmodelle<br />

Im Laufe des Forschungsprozesses wurde die UWE-Methodologie, die im Kapitel bereits<br />

vorgestellt wurde, kontinuierlich verbessert und an die neuen Anforderungen der RIAs angepasst.<br />

Die UWE-Metamodell-<strong>Evolution</strong> verläuft gemäß diesen Anpassungen, sodass mehrere<br />

Versionen des UWE-Metamodells sowie des UWE-Profils bereits existieren. Im Rahmen<br />

dieser Arbeit wird der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>-Ansatz zur Veranschaulichkeit am Beispiel eines<br />

Ausschnittes des UWE-Metamodells, namens Präsentationsmodell, erarbeitet. In den<br />

nächsten Abschnitten werden die UWE-Präsentationsmetamodell-Differenzen zwischen Versionen<br />

1.7 und 1.8 vorgestellt. Anschließend werden die entdeckten Differenzen entsprechend<br />

der Typologie aus dem Kapitel 3.2 zugeordnet. Darauf basierend wird die Umsetzung der<br />

<strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> für das UWE-Präsentationsmodell aufgezeichnet.<br />

3.4.1. Die Metamodelldifferenzen zwischen UWE-Metamodellversion 1.7 und<br />

der Version 1.8<br />

Im Folgenden wird die <strong>Evolution</strong> des Präsentationsmodells des UWE-Metamodells betrachtet,<br />

die im Kapitel 2.6.2 bereits vorgestellt wurde. Das Präsentationsmodell des UWE-<br />

Metamodells definiert das Layout für die entsprechenden früher definierten Navigations- und<br />

Prozess-<strong>Modell</strong>e. Es enthält die Kompositionsstrukturen aus Klassen, die User- Interface-<br />

Elemente und die <strong>Co</strong>ntainer der grafischen Oberfläche in der Form einer Webseite repräsentieren.<br />

Im Weiteren, nach einer ausführlichen Beschreibung aller Elemente der beiden Präsentationsmodellen,<br />

werden die Unterschiede zwischen den Elementen herausgearbeitet.<br />

Die Abbildung 3.5 stellt das UWE-Präsentations-Metamodell der Version 1.7 dar. An dieser<br />

Stelle wird auf den Aufbau des Präsentationsmodells in der Version 1.7 näher eingegangen.<br />

Die PresentationClass ist eine spezielle Klasse zur Darstellung einer Webseite oder deren<br />

Teile und kann User-Interface-Elemente sowie Präsentationsklassen enthalten.<br />

Die Klasse PresentationPage hat dieselbe Semantik wie die PresentationClass und wird<br />

verwendet, um die oberste Ebene der Kompositionsstruktur einer Webseite zu kennzeichnen.<br />

Somit darf die PresentationPage nicht in einem anderen <strong>Co</strong>ntainer enthalten sein. Die<br />

PresentationGroup dient zur Darstellung von Bereichen einer Webseite, sobald diese komplex<br />

sind. Genauer gesagt beinhalten solche Bereiche mehrere Präsentationselemente bzw.<br />

Präsentationsklassen. Die PresentationProperty ist ein spezielles Attribut von der Klasse<br />

PresentationClass und deren Subklassen PresentationPage und PresentationGroup. Mit diesem<br />

Attribut werden die Präsentationselenente angegeben, die in PresentationClass bzw.<br />

PresentationPage bzw. PresentationGroup beinhaltet werden. Die PresentationClass und<br />

ihre Subklassen können aus den Subklassen der Klasse UIElement bestehen, die die User<br />

27


3. Die <strong>Modell</strong>evolution und die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />

Abbildung 3.5.: Das UWE-Präsentations-Metamodell. Version 1.7<br />

Interface Elemente einer Webseite repräsentieren.<br />

In der Abbildung 3.6 ist nicht zu übersehen, dass mehrere Änderungen an dem Metamodell<br />

vorgenommen wurden. Folgende abstrakte Metaklassen sind zur Unterscheidung der User-<br />

Interface-Elementen eingeführt worden: die ValuedElement, die InteractiveElement und die<br />

OutputElement. Dabei wird zwischen den Outputelementen wie z.B. Text, Bild usw. und den<br />

interaktiven Elementen differenziert. Die interaktiven Elemente unterteilen sich in Buttons,<br />

Anchor Elemente und Input-Elemente, die solche User-Interface-Elemente wie Textinput und<br />

Fileinput beinhalten. All die abstrakten Klassen bekamen eine Anzahl neuer Attribute, in<br />

welchen die RIA-Eigenschaften beschrieben sind.<br />

Darüber hinaus wurde die PresentationClass in die PresentationGroup umbenannt. Außerdem<br />

werden folgende Elemente umbenannt: Page zu PresentationPage, Choice zu Selection<br />

und Form zu InputForm.<br />

Die Klasse Anchored<strong>Co</strong>llection wird nicht weiter unterstützt, stattdessen soll entweder ein<br />

Anchor mit der Angabe der dazugehörigen Multiplizität oder eine IteratedPresentationGroup<br />

eingesetzt werden.<br />

Einige neue Klassen zur Unterstützung der RIA Eigenschaften wurden eingeführt, darunter:<br />

Tab, MediaObject, Fileinput und Custom<strong>Co</strong>mponent. In der Tabelle 3.3 sind alle Änderungen<br />

übersichtlich dargestellt. Dabei ist die Kategorie und der Typ jeder Änderung entsprechend<br />

der Kategorisierung aus dem Kapitel 3.2 angegeben.<br />

Zu jeder der Metamodell-Änderungen aus der Kategorie der ” breaking and resolvable changes“<br />

wird im Folgenden je eine Transformation definiert, die eine automatisierte Überführung<br />

der existierenden <strong>Modell</strong>en auf die neue Version ermöglichen. Bei den ” non-breaking changes“<br />

28


3.4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> der UWE-Präsentationsmodelle<br />

Abbildung 3.6.: UWE-Präsentations-Metamodell. Version 1.8<br />

29


3. Die <strong>Modell</strong>evolution und die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />

Änderungstyp Änderungen Metamodellelemente<br />

Non-breaking changes<br />

Breaking and resolvable changes<br />

Das Einfügen einer nicht obligatorischen Metaklasse Tab, MediaObject, Custom<strong>Co</strong>mponent<br />

Das Einfügen einer nicht obligatorischen Metaeigenschaft Attribute der Klassen: UIElement, PresentationGroup,<br />

ValuedElement, OutputElement,<br />

InputElement<br />

Das Extrahieren einer abstrakten Superklasse ValuedElement, InputElement, OutputElement,<br />

InteractiveElement<br />

Das Löschen einer Metaklasse Anchored<strong>Co</strong>llection<br />

Das Umbenennen eines Metaelements PresentationClass - PresentationGroup, Page<br />

- PresentationPage, Form - InputForm, Choice<br />

- Selection<br />

Tabelle 3.3.: Überblick der Metamodell-Änderungen im Bezug auf Änderungstypen<br />

muss keine Aktion ausgeführt werden, da diese Änderungen die Gültigkeit der existierenden<br />

<strong>Modell</strong>en nicht verletzen.<br />

Wie oben beschrieben kann für alle durch die <strong>Modell</strong>-<strong>Evolution</strong> betroffenen Elemente außer<br />

Anchored<strong>Co</strong>llection eine eindeutige Strategie für die Anpassung der entsprechenden <strong>Modell</strong>elementen<br />

angegeben werden. Im Falle der Klasse Anchored<strong>Co</strong>llection sind zwei Alternativen<br />

möglich. Es ist zu entscheiden ob eine Automatisierung der Überführung der Anchored<strong>Co</strong>llection-Elemente<br />

in die <strong>Modell</strong>e der neuen Version stattfinden soll, oder die Anpassung der<br />

Anchored<strong>Co</strong>llections durch den <strong>Modell</strong>ierer manuell erfolgen soll. Im Weiteren wird die Alternative<br />

mit der Umsetzung durch die IteratedPresentationGroup in den Transformationen<br />

übernommen. Die Wahl beruht auf der Tatsache, dass die Beschreibung zu dem Einsatz des<br />

Anchored<strong>Co</strong>llections in ” UWE Metamodel and Profile User Guide and Reference“ in der<br />

Version 1.7 [15] und der IteratedPresentationGroup in der Version 1.9 [6] dieselbe ist. Sie<br />

lautet, dass diese Elemente für die Präsentation eines Menüs oder eines Indexes verwendet<br />

werden können.<br />

Somit ist im Falle der UWE-Präsentationsmodelle eine komplett automatisierte transformative<br />

Model-<strong>Co</strong>-<strong>Evolution</strong> möglich, was dadurch bedingt ist, dass keine der Metamodell-<br />

Änderungen den Änderungstyp ” breaking and unresolvable changes“ hat.<br />

3.5. Zusammenfassung<br />

Metamodelle wie auch alle Softwareartefakte ändern sich im Laufe der Zeit. <strong>Evolution</strong> der<br />

Metamodelle betrifft unterschiedliche <strong>Modell</strong>ierungsartefakte, die mit dem entsprechenden<br />

Metamodell in einer Beziehung stehen, solche wie existierende <strong>Modell</strong>e, <strong>Modell</strong>transformationen,<br />

<strong>Modell</strong>ierungstools, Dokumentation und Anforderungen. Die <strong>Modell</strong>e stellen die<br />

Grundlage einer modellgetriebenen Entwicklung dar. Somit müssen die <strong>Modell</strong>e infolge einer<br />

Metamodell-<strong>Evolution</strong> als Erstes angepasst werden. In dieser Arbeit liegt der Fokus auf der<br />

<strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>.<br />

In diesem Kapitel wurde eine umfangreiche Beschreibung der Metamodelländerungen mit<br />

einer Diskussion über die Auswirkungen dieser Änderungen auf die Metamodellinstanzen<br />

vorgeführt. Anschließend wurde die Typologie zur Unterscheidung der möglichen Auswir-<br />

30


3.5. Zusammenfassung<br />

kungen der Änderungen auf die existierenden <strong>Modell</strong>e erläutert. Die ” breaking and resolvable<br />

changes“ des Metamodells haben keine Auswirkungen auf die Metamodellinstanzen.<br />

Die ” breaking and resolvable changes“ sind sehr interessant, da deren Auswirkungen auf<br />

die existierende <strong>Modell</strong>e automatisiert mithilfe der <strong>Modell</strong>transformationen beseitigt werden<br />

können.<br />

Sobald die Metamodell-<strong>Evolution</strong> eine der ” breaking and unresolvable changes“ mit sich<br />

bringt, bei denen eine Abhilfe wie z.B. die Definition eines Default-Wertes nicht anwendbar<br />

ist, kann die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> von betroffenen <strong>Modell</strong>elementen ausschließlich manuell<br />

erfolgen. Diese Tatsache stellt eine große und unlösbare Problematik dieses Bereiches dar.<br />

Eine ultimative Lösung dieses Problems ist nicht in Sicht.<br />

Zusätzlich ist die klare Trennung zwischen den Metamodell-<strong>Evolution</strong>-Kategorien leider nicht<br />

möglich. In der Wirklichkeit zeigen die Erfahrungen, dass Metamodell-<strong>Evolution</strong> nicht immer<br />

auf eine Sequenz der atomaren <strong>Co</strong>-<strong>Evolution</strong>sschritte zurückgeführt werden kann.[7]<br />

Grundsätzlich wird auf das Metamodell im Rahmen des <strong>Evolution</strong>sprozesses zeitgleich eine<br />

komplexe Kombination der Änderungen angewendet. Zudem gehören diese Änderungen<br />

zu verschiedenen Typen und weisen Abhängigkeiten voneinander auf. Die <strong>Co</strong>-<strong>Evolution</strong>-<br />

Strategie sollte in diesem Fall nicht nur auf der oben vorgestellten Klassifizierung beruhen,<br />

sondern auch auf den Entscheidungen des <strong>Modell</strong>ierers. Diese Entscheidungen basieren auf<br />

seinem Wissen über das Fachgebiet und die Zusammenhänge im konkreten <strong>Modell</strong>.<br />

Insgesamt soll der <strong>Co</strong>-<strong>Evolution</strong>-Prozess in möglichst großen Umfang automatisiert verlaufen.<br />

Anschließend sollen für die einzelnen ” breaking and unresolvable changes“ durch den<br />

<strong>Modell</strong>ierer eine konkrete Strategie für die betroffenen <strong>Modell</strong>elemente spezifiziert werden,<br />

was eine Eindeutigkeit der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> erzielen soll. Die Eindeutigkeit der <strong>Modell</strong>-<br />

<strong>Co</strong>-<strong>Evolution</strong> wird nur dann gewährleistet, wenn alle möglichen zulässigen Varianten der<br />

<strong>Co</strong>-<strong>Evolution</strong>-Strategie berücksichtigt, dokumentiert und im Rahmen des Projekts für alle<br />

zugänglich gemacht werden.<br />

<strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> soll im Rahmen der UWE-Methodologie ermöglicht werden. Eine ausführliche<br />

Beschreibung der Metamodelldifferenzen eines UWE-Metamodellausschnitts in der<br />

Versionen 1.7 und 1.8 wurde in diesem Kapitel vorgenommen. Es hat sich ergeben, dass die<br />

Änderungen, die das UWE-Metamodell üblicherweise während dessen Weiterentwicklung<br />

erfährt unter die Kategorien der ” unbreaking changes“ oder der ” breaking and resolvable<br />

changes“ gehören. Somit ist eine vollautomatisierte Überführung der existierenden <strong>Modell</strong>e<br />

möglich. Das UWE-Metamodell ist in Teilmodelle unterteilt. Jedes davon ist sehr übersichtlich<br />

und besitzt konkret definierte <strong>Modell</strong>elemente. Somit ist die automatisierte <strong>Modell</strong>-<strong>Co</strong>-<br />

<strong>Evolution</strong> für UWE-<strong>Modell</strong>e ein sich gut rentierender Ansatz, deren Einsatz viel Zeit sparen<br />

kann und eine hohe Qualität der <strong>Modell</strong>e bei der Versionsmigration gewährleistet.<br />

Im nächsten Kapitel wird ein transformativer Ansatz für die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> eines<br />

Ausschnittes des UWE-Metamodells vorgestellt.<br />

31


3. Die <strong>Modell</strong>evolution und die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />

32


4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter<br />

transformativer Ansatz<br />

In diesem Kapitel wird ein transformativer Ansatz beschrieben, der die automatisierte <strong>Modell</strong>-<br />

<strong>Co</strong>-<strong>Evolution</strong> der UWE-Präsentationsmodelle realisiert. Für die Umsetzung der Transformationen<br />

wird die relationale QVT-Sprache verwendet. Im vorangehenden Kapitel wurden die<br />

Änderungen zwischen den Präsentationsmetamodellen der Version 1.7 und 1.8 erläutert und<br />

gemäß der im Kapitel 3 vorgestellten Typologie in zwei Gruppen eingeteilt.<br />

Zu der ersten Gruppe gehören die Änderungen, die keine <strong>Co</strong>-<strong>Evolution</strong>-Aktion an den existierenden<br />

<strong>Modell</strong>en bedingen. Die zweite Gruppe beinhaltet die Änderungen des UWE-Präsentationsmetamodells,<br />

die zur Notwendigkeit der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> der existierenden <strong>Modell</strong>e<br />

führen. Für jede Änderung an einem UWE-Metamodellelement aus der zweiten Gruppe<br />

kann eine Relation in der relationalen QVT-Sprache definiert werden. Diese Relation generiert<br />

anhand der für die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> betroffenen <strong>Modell</strong>elemente der existierenden<br />

<strong>Modell</strong>e die geänderten <strong>Modell</strong>elemente, die konform zu der neuen UWE-Metamodell-Version<br />

sind. Nach einer Einführung in die relationale QVT-Sprache und ihre Konzepte werden all<br />

diese Relationen im Rahmen einer QVT-Transformation definiert und detailliert beschrieben.<br />

Die OMG veröffentlichte die Spezifikation der Query-View-Transformations (QVT), welche<br />

in Form der QVT-Sprachen Definitionen die Grundlagen und Richtlinien für die Transformationen<br />

vorgibt. Da die OMG keine Implementierungen des QVTs vorgibt, werden die<br />

Implementierungen von verschiedenen Tool-Herstellern bereitgestellt. Zu diesem Zeitpunkt<br />

gibt die Implementierung von mediniQVT am besten die Spezifikation der relationalen<br />

QVT-Sprache(QVT-Relations) wieder. Im Rahmen dieser Arbeit wird daher die medini-<br />

QVT Implementierung der relationalen Sprache für die Erfassung der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>-<br />

Transformationen verwendet.<br />

4.1. Der fundamentale Aufbau von Transformationsskript in der<br />

relationalen QVT-Sprache<br />

Die QVT-Spezifikation der OMG eignet sich leider nicht gut als ein Lehrbuch für die relationale<br />

QVT-Sprache. Siegfried Nolte hat ein sehr umfangreiches Buch über die relationale<br />

QVT-Sprache veröffentlicht[19]. Das Buch beinhaltet die Beschreibung der generellen<br />

Konzepte der relationalen QVT-Sprache, viele nützliche Beispiele und die Anleitungen zur<br />

Ausführung der Transformationen mithilfe von dem mediniQVT-Tool. Der Autor hat sich<br />

mit der relationalen Sprache auseinander gesetzt und sehr ausführliche und hilfreiche Definitionen<br />

verfasst. Nach Nolte lässt sich die Query View Transformations so interpretieren:<br />

33


4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz<br />

• Query: ” Die Query ist die Beschreibung einer Anfrage bezogen auf ein Quellmodell,<br />

um den Kandidaten für die Transformation zu ermitteln. Der Kandidat für die Transformation<br />

ist entweder Quellmodell selbst oder ein spezieller Ausschnitt des <strong>Modell</strong>s,<br />

welcher durch die Abfrage, die Query, eingegrenzt wird.“[19]<br />

• View: ” Die View ist die Beschreibung einer Sicht, wie das Ergebnis im Zielmodell<br />

aussehen soll.“[19]<br />

• Transformation ” Die Transformation ist der Prozess, das konkrete Quellmodell mit<br />

den definierten Query zu ermitteln und in das Zielmodell zu überführen.“[19]<br />

Mit einer Query wird aus einem Quellmodell stützend auf sein formales Metamodell eine<br />

bestimmte Untermenge deren Elemente selektiert. Eine spezielle View legt ein Zielmodell<br />

fest, welches in vollem Umfang aus den Quellmodellelementen hergeleitet wird. Unter dem<br />

Einsatz einer Transformation wird aus den selektierten Quellmodellelementen die vorher<br />

festgelegte View generiert. Dies bezeichnet Nolte in seinem Buch als das QVT-Prinzip. [19]<br />

Im Rahmen der Transformation werden zwischen den Elementen des Quellmodells und den<br />

Elementen des Zielmodells, die Bezug zueinander haben, Relationen definiert. Die Relationen<br />

beschreiben in Form der Musterdefinitionen konkret das gültige Erscheinungsbild des<br />

Zielmodells. Diese Vorgehensweise wird als ” Pattern Matching“ genannt.[19]<br />

Die relationale QVT-Sprache operiert mit folgenden Sprachkonstrukten: transformation, top<br />

relation, enforce und checkonly domain usw. In der Abbildung 4.1 ist der generelle Aufbau<br />

von Transformationen der relationalen QVT-Sprache zu sehen. Hierbei handelt es sich um<br />

einen generellen Überblick über die Sprachelemente und deren Beziehungen.[19]<br />

34<br />

• Eine QVT-Transformation (transformation) generiert aus Quellmodell ein Zielmodell,<br />

wobei dem Quell- und dem Zielmodell je ein bestimmtes Metamodell zugrunde<br />

liegt. Es können bei dem Input wie bei dem Output einer Transformation jeweils mehr<br />

als ein <strong>Modell</strong> angegeben werden.<br />

• Der Bezug einer konkreten Teilmenge des Quellmodells auf die Elemente des Zielmodells<br />

wird in den Relationen dargestellt. Eine Transformation soll mindestens eine<br />

Relation besitzen.<br />

• Eine oder mehrere Domänen können in einer Relation enthalten sein. Die Definition<br />

der Regeln für die Gültigkeit der <strong>Modell</strong>elemente wird mit Hilfe von sogenannten<br />

Domänenmustern (domain patterns) vorgenommen, die in Form einer Domäne<br />

(domain) einer Relation hinzugefügt werden.<br />

• Jede Domäne außer primitiven Domänen beinhaltet so ein Domänenmuster. Die primitiven<br />

Domänen werden dafür eingesetzt um die einfachen Datentypen, wie z.B. String<br />

als Argumente übergeben zu können. Die restlichen Domänen können als getypte Variable<br />

verstanden werden, die ein Metamodellelement in einer speziellen Form darstellt. In<br />

der Domänenmuster-Definition (pattern definition) erfolgt die Selektion der Eigenschaften<br />

des ausgewählten Metamodellelements, um von diesem Metamodellelement<br />

ausgehend die Elemente in dem Zielmodell zu generieren.<br />

• Die optionalen when- oder where-Klauseln können Bedingungen in Form der OCL-<br />

Ausdrücke enthalten. Mit Hilfe dieser Bedingungen wird die Gültigkeitsprüfung der<br />

Relation zusätzlich verschärft.


4.1. Der fundamentale Aufbau von Transformationsskript in der relationalen QVT-Sprache<br />

Abbildung 4.1.: Der Aufbau einer Transformation in der relationalen QVT-Sprache [19]<br />

• Darüber hinaus ist es möglich spezielle Hilfsfunktionen (queries), die mit OCL-Anweisungen<br />

umgesetzt werden, zu definieren. Die Hilfsfunktionen werden außerhalb der Relationen<br />

erstellt.<br />

• Die Verwendung der Variablen ist ausschließlich in den Relationen zugelassen. Dabei<br />

können es beliebige OCL-Variablen sein: primitive Datentypen (String, Boolean),<br />

Sammlungstypen (Set(String)) oder Variablen von einem Objekttyp (Class, Set(Attribute)<br />

etc.)<br />

• Bedingungen, domain patterns und queries werden mithilfe der OCL-Ausdrücke<br />

umgesetzt.<br />

• Eine optionale Spezifikation von keys schließt die Generierung von Duplikaten im<br />

Zielmodell aus.<br />

35


4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz<br />

Textuell ergibt sich folgender syntaktischer Aufbau einer Transformation:<br />

1 transformation <br />

2 (<br />

3 [ , ]∗<br />

4 )<br />

5 /∗ d i e f o l g e n d e Angabe i s t o p t i o n a l ∗/<br />

6 [ key { [ ,<br />

7 ]∗ } ; ] ∗<br />

8 −− mindestens e i n e Relation auf dem obersten Level muss es geben −−<br />

9 [ [ top ] relation <br />

10 {<br />

11 [ : ; ] ∗<br />

12 −− mindestens e i n e Domäne muss es geben −−<br />

13 [ [ checkonly | enforce ]<br />

14 domain : <br />

15 {<br />

16 [ , ]∗<br />

17 } ; ]+<br />

18 −− checkonly und e n f o r c e domains b e s i t z e n Patterns , −−<br />

19 −− p r i m i t i v e domains n i c h t −−<br />

20 [ p r i m i t i v e domain :<br />

21 ; ] ∗<br />

22 −− c o n d i t i o n s sind optional , a l l e r d i n g s unter −−<br />

23 −− Umständen unverzichtbar , z .B. f ü r r e l a t i o n − −−<br />

24 −− oder function −c a l l s −−<br />

25 [ when { } ]<br />

26 [ where { } ]<br />

27 }]+<br />

28 −− o p t i o n a l e H i l f s f u n k t i o n e n −−<br />

29 [ query ( [ [ , ] ] ∗ )<br />

30 {} ] ∗<br />

31 }<br />

Listing 4.1: Der Syntaktischer Aufbau eines Transformationsskriptes[19]<br />

Für die Definition der Hilfsfunktionen, sowie der Regeln in den where- und den when-<br />

Klauseln steht die komplette OCL-Sprache zur Verfügung.<br />

Im nächsten Kapitel wird näher auf die formale Beschreibung der relationalen QVT-Sprache<br />

eingegangen. Dabei wird für jedes oben beschriebenes Element der Sprache die Syntax angegeben.<br />

In den darauf folgenden Kapiteln werden die Transformationen, welche die UWE-<br />

Präsentationsmodell-<strong>Co</strong>-<strong>Evolution</strong> ermöglichen, detailliert beschrieben.<br />

4.2. Die relationalen Transformationen. Eine Formale Darstellung<br />

der Konzepte<br />

Nach der Einführung in den Aufbau einer QVT-Transformation, soll nun die Erläuterung<br />

der Hauptsprachmittel folgen, mit denen die Transformationen erarbeitet werden.<br />

36


4.2. Die relationalen Transformationen. Eine Formale Darstellung der Konzepte<br />

4.2.1. Die Transformationen<br />

Eine Transformation (transformation) wird als eine Relation zwischen <strong>Modell</strong>en betrachtet,<br />

die einen Namen besitzt und in Form einer Parameterliste <strong>Modell</strong>e deklariert. Jedes<br />

<strong>Modell</strong> besitzt einen Namen und einen Typ. Der Typ wird durch das entsprechende Metamodell<br />

bestimmt.[19]<br />

Die Syntax:<br />

1 transformation <br />

2 ( [ , ] ∗ )<br />

3 {<br />

4 [ ] ∗<br />

5 [ ] ∗<br />

6 [ ] ∗<br />

7 }<br />

Listing 4.2: Der Syntaktischer Aufbau einer Transformation[19]<br />

Die Definition der Relationen zwischen den <strong>Modell</strong>elementen legt die Grundlage für die<br />

Überführung eines <strong>Modell</strong>s in ein anderes fest. Die UWE-Präsentationsmodelle in der Version<br />

1.7, im weiteren SimpleUWEold-<strong>Modell</strong>e genannt, bestehen aus Paketen4.3, die folgende<br />

Elemente enthalten können: Pages, Presentation Classes, Presentation Groups, Text, Buttons<br />

usw. Wobei Pages, PresentationClasses und Presentation Groups Properties besitzen.<br />

Das Beispiel:<br />

1 transformation mapUWEversion ( s r c : SimpleUWEold , t r g : SimpleUWEnew )<br />

2 {<br />

3 −−keys−−<br />

4 top relation mapPackage {−− body −−}<br />

5 top relation mapPage {−− body −−}<br />

6 relation mapProperty {−− body −−}<br />

7 top relation mapPresClass {−− body −−}<br />

8 top relation mapPresGroup {−− body −−}<br />

9 top relation mapText {−− body −−}<br />

10 top relation mapAnchor {−− body −−}<br />

11 top relation mapImage {−− body −−}<br />

12 top relation mapButton {−− body −−}<br />

13 top relation mapTextInput {−− body −−}<br />

14 top relation mapAnchored<strong>Co</strong>l {−− body −−}<br />

15 top relation mapForm {−− body −−}<br />

16 −− q u e r i e s−−<br />

17 }<br />

Listing 4.3: Das Beispiel einer Transformation[19]<br />

Innerhalb der Transformationen können außer Relationen zusätzliche Hilfsfunktionen und<br />

Abfragen (queries) definiert werden, die aus einfachen oder komplexen OCL-Ausdrücken<br />

bestehen. Die Hilfsfunktionen lassen sich bei Bedarf in Form externer Dateien auslagern, die<br />

über eine Import-Anweisung eingebunden werden können.[19]<br />

37


4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz<br />

4.2.2. Die Relationen<br />

Eine Relation (relation) ist das primäre Element einer Transformation. In Form von Domänenmustern<br />

(domain patterns) werden in den Domänen einer Relation die Selektionsbedingungen<br />

für einen <strong>Modell</strong>auschnitt angegeben, der der Transformation als Quellmodell unterzogen<br />

wird. Der Mechanismus ist einer ebenfalls deskriptiven SQL-Abfrage auf einen relationalen<br />

Datenbestand ähnlich. Nur die <strong>Modell</strong>elemente, die dem Domänenmuster genügen, werden<br />

in die Transformation miteinbezogen. Innerhalb einer Relation können Variablen deklariert<br />

und verwendet werden, die in allen Domänen dieser Relation als global gelten. Die Variablen<br />

können vom Typ eines Elements aus den Metamodellen sein oder den beliebigen<br />

OCL-Datentyp besitzen.[19]<br />

Das Beispiel:<br />

1 transformation mapUWEversion ( s r c : SimpleUWEold , t r g : SimpleUWEnew )<br />

2 {<br />

3 −− E r s t e l l t e i n P r e s e n t a t i o n Paket im Z i e l m o d e l l −−<br />

4 −− mit dem Namen und dem Attribut kind aus Quellmodell −−<br />

5 top relation mapPackage<br />

6 {<br />

7 packageName : String ;<br />

8 packageKind : String ;<br />

9 checkonly domain s r c srcPckg : SimpleUWEold : : Package<br />

10 {<br />

11 name = packageName ,<br />

12 kind = packageKind<br />

13 } ;<br />

14 enforce domain t r g tgtPckg : SimpleUWEnew : : Package<br />

15 {<br />

16 name = packageName ,<br />

17 kind = packageKind<br />

18 } ;<br />

19 −− when−p r e d i c a t e −−<br />

20 −− where−p r e d i c a t e −−<br />

21 }<br />

Listing 4.4: Das Beispiel einer Relation<br />

Das Präsentationspaket soll mithilfe der Relation aus dem Listing 4.4 kopiert werden. Zuerst<br />

wird der Name und das Attribut kind des Pakets in den Variablen zwischengespeichert<br />

und anschließend in der folgenden Domäne dem Namen und dem Attribut kind des zu<br />

generierenden Pakets zugewiesen.<br />

Die Arten von Relationen<br />

Es wird zwischen zwei Arten von Relationen unterschieden[19]:<br />

38<br />

• top-level-Relation ist eine Relation, die unmittelbar bzw. implizit ausgeführt wird,<br />

sobald bei der Transformation eines <strong>Modell</strong>s das <strong>Modell</strong>element gefunden wird, für<br />

welches die Selektionsbedingungen aus einer Domäne der Relation erfüllt sind. Solche<br />

Relationen werden mit dem Schlüsselwort top gekennzeichnet.


4.2. Die relationalen Transformationen. Eine Formale Darstellung der Konzepte<br />

• non-top-level-Relation ist eine Relation, welche durch einen expliziten Aufruf aus<br />

einer anderen Relation heraus, ausgeführt wird. Diese Relationen werden mit keinem<br />

Schlüsselwort gekennzeichnet.<br />

Es muss mindestens eine top-level-Relation im Rahmen einer Transformation geben. Ansonsten<br />

wird eine solche Transformation keine Wirkung erzielen. In dem Listing 4.5 sind<br />

alle Relationen außer der mapProperty-Relation als top-level-Relationen deklariert. Wird<br />

bei der Abarbeitung eines <strong>Modell</strong>s ein bestimmtes Element gelesen, so wird die entsprechende<br />

top-level-Relation aufgerufen. Die mapProperty wird nur in dem Fall ausgeführt, wenn<br />

die Relation mapProperty explizit innerhalb von z.B. mapPage aufgerufen wird. Dabei muss<br />

beachtet werden, dass die top-level Relationen nur innerhalb der when-Klauseln aufgerufen<br />

werden können. Non-top-level-Relationsaufrufe dürfen ausschließlich innerhalb der where-<br />

Klauseln stehen.<br />

Mit jeder Ausführung von der mapPage Relation, wie in der Zeile 5 im Listing 4.5 steht, wird<br />

zuerst wegen des Aufrufs unter der when-Klausel die mapPackage Relation aufgerufen. Damit<br />

wird sichergestellt, dass zu dem Paket in dem sich die Page befindet ein entsprechendes<br />

Paket in dem Zielmodell bereits existiert.<br />

Das Beispiel:<br />

1 transformation mapUWEversion ( s r c : SimpleUWEold , t r g : SimpleUWEnew )<br />

2 {<br />

3 −−keys−−<br />

4 top relation mapPackage {−− body −−}<br />

5 top relation mapPage<br />

6 {<br />

7 −− body −−<br />

8 when<br />

9 {<br />

10 mapPackage (−−arguments−−) ;<br />

11 }<br />

12 where<br />

13 {<br />

14 mapProperty (−−arguments−−) ;<br />

15 }<br />

16 }<br />

17 relation mapProperty {−− body −−}<br />

18 −− q u e r i e s−−<br />

19 }<br />

Listing 4.5: Das Beispiel einer Relation unter dem Einsatz der when- und where-Klauseln<br />

In der where-Klausel in der Zeile 14 vom Listing 4.5 wird durch den Aufruf der Relation<br />

mapProperty sichergestellt, dass bei jeder Erzeugung von Page-Elements im Zielmodell auch<br />

die Erstellung von deren Attribute erzwungen wird.<br />

4.2.3. Die Domänen<br />

Nur die gültigen Relationen werden bei der Abarbeitung einer Transformation herangezogen.<br />

Durch die Definition der domain pattern werden die Regeln für die Gültigkeit der<br />

39


4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz<br />

Relation definiert. Eine Domäne repräsentiert die <strong>Modell</strong>elemente eines Metamodells als getypte<br />

Variable, die Root-Variable genannt wird. Der Domänenname und die Deklaration<br />

der Root-Variablen bilden die Signatur einer Domäne. Anschließend wird das Domänenmuster<br />

definiert. Mit dem Schlüsselwort checkonly wird gekennzeichnet, dass die Gültigkeit<br />

der Domäne geprüft wird, dies ist bei den Quellmodellelementen der Fall. Das enforce<br />

kennzeichnen die Domänen, deren Gültigkeit erzwungen wird. Erzwungen werden die<br />

Zielmodellelemente.[19]<br />

Die Syntax:<br />

1 [ checkonly | enforce ] domain <br />

2 <br />

3 {<br />

4 [ , ] ∗<br />

5 } ;<br />

Listing 4.6: Die Syntax einer Domäne[19]<br />

Mit wird ein <strong>Modell</strong>element bei der Argumentenliste der Transformation deklariert.<br />

Ein Domänenmuster enthält neben dem Definitionsteil einen prozeduralen Teil<br />

(pattern expression), der wiederum aus einer oder mehreren durch Kommata getrennten<br />

Zuweisungsoperationen(template expressions) besteht. Mithilfe Pattern Matching werden<br />

bestimmte <strong>Modell</strong>elemente im Rahmen des prozeduralen Teils geprüft(checkonly) oder<br />

erzwunden(enforce).[19]<br />

Die Relation mapPackage aus dem Listing 4.7 definiert die Beziehung zwischen den Paketen<br />

im <strong>Modell</strong> SimpleUWEold und den Paketen im dem <strong>Modell</strong> SimpleUWEnew. Die Root<br />

Variable srcPckg repräsentiert die Menge aller Pakete in SimpleUWEold, die das definierte<br />

Domänenmuster erfüllen. Die Variable trgPckg repräsentiert das zu generierende Paket im<br />

Zielmodell.<br />

1 top relation mapPackage<br />

2 {<br />

3 pckgName : String ;<br />

4 checkonly domain s r c srcPckg : SimpleUWEold : : Package<br />

5 {<br />

6 name = pckgName<br />

7 } ;<br />

8 enforce domain t r g tgtPckg : SimpleUWEnew : : Package<br />

9 {<br />

10 name = pckgName<br />

11 } ;<br />

12 }<br />

Listing 4.7: Das Beispiel eines prozeduralen Teil(pattern expression) einer Domäne<br />

Der Typname der Root-Variablen wird hier in vollständig spezifizierter Form angegeben, welche<br />

es erlaubt die Elemente der Metamodelle mit gleichen Namen eindeutig zu unterscheiden:<br />

:: <br />

also in Fall der Root-Variable:<br />

40


4.2. Die relationalen Transformationen. Eine Formale Darstellung der Konzepte<br />

srcPckg : SimpleUWEold::Package<br />

Es wird zwischen vorher deklarierten Variablen (variable template expressions) und<br />

den object template expressions, welche die <strong>Modell</strong>elemente zum Gegenstand haben,<br />

unterschieden.<br />

Als Hilfsmittel zur Speicherung des Namens des Paket wird eine freie Variable pckgName<br />

vom Typ String deklariert. In diesem Beispiel wird bei der Zuweisungsoperation eine variable<br />

template expression verwendet. Als Beispiel einer Komponente der Root-Variable<br />

vom Typ SimpleUWEold::Package dient name aus der Zeile 6 des Listings 4.7.<br />

Die Komponenten der Root-Variable stehen stets auf der linken Seite der Zuweisungsoperation.<br />

Auf der rechten Seite einer Zuweisungsoperation kann eine freie Variable, ein OCL-<br />

Ausdruck oder ein konkreter Wert seinen Platz haben. Der Checkonly-Teil wird vor dem<br />

Enforce-Teil ausgeführt, somit enthält die pckgName Variable bei jeden Ausführung der<br />

Transformation den aktuellen Wert des Namens des Packages aus SimpleUWEold. Dabei<br />

wird der Name des Pakets srcPckg wegen des checkonly-Status nicht verändert.<br />

In der darauf folgenden Domäne wird der Wert der Variable pckgName dem Namen des<br />

tgtPckg vom Typ SimpleUWEnew::Package zugewiesen. Bei jeder Ausführung dieser Relation<br />

wird ein Package des Typs SimpleUWEnew mit denselben Namen wie das ursprüngliche<br />

srcPckg Paket erzwungen.<br />

Eine Relation kann sowohl über mehrere checkonly-Domänen als auch mehrere enforce-<br />

Domänen verfügen. Bei der Ausführung einer Transformation wird zuerst die Gesamtmenge<br />

der checkonly-Domänen abgearbeitet und gültige <strong>Modell</strong>elemente aus dem Quellmodell selektiert.<br />

Ist ein <strong>Modell</strong>element selektiert, so wird die Generierung dieses Elements stattfinden.<br />

Dies wird check-before-enforce Semantik genannt und bildet ein wichtiges Konzept der<br />

relationalen QVT-Sprache.[19]<br />

4.2.4. Die when- und where-Klauseln<br />

Bestimmte Vorbedingungen und Invarianten können durch die Eingabe spezieller Prädikaten<br />

innerhalb der der when- und where-Klauseln geprüft oder hergestellt werden[19]:<br />

• Mithilfe einer when-Klausel werden die Vorbedingungen festgelegt, die erfüllt sein<br />

müssen, damit die Relation ausgeführt wird.<br />

• Mithilfe einer where-Klausel werden die Invarianten definiert. Für alle <strong>Modell</strong>elemente<br />

der Relation zu jedem Zeitpunkt während der Abarbeitung der Relation werden die<br />

Invarianten geprüft. Bei jedem Zugriff auf eine der veränderbaren Variablen müssen<br />

die Invarianten hergestellt werden.<br />

Innerhalb der when- und where-Klauseln dürfen beliebige, durch Semikola getrennte OCL-<br />

Ausdrücke stehen, wobei folgende Regeln beachtet werden müssen[19]:<br />

• Die top-level-Relationen dürfen nur in when-Klauseln explizit aufgerufen werden.<br />

41


4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz<br />

• Die non-top-level-Relationen dürfen nur in where-Klauseln aufgerufen werden.<br />

• Die Funktionen dürfen nur in where-Klauseln aufgerufen werden.<br />

Das Beispiel einer where-Klausel:<br />

1 top relation mapPackage<br />

2 {<br />

3 pckgName : String ;<br />

4 checkonly domain s r c srcPckg : SimpleUWEold : : Package<br />

5 {<br />

6 name = pckgName<br />

7 } ;<br />

8 enforce domain t r g tgtPckg : SimpleUWEnew : : Package<br />

9 {<br />

10 name = pckgName<br />

11 } ;<br />

12 −− Hier e i n e Bedingung : der Name des Packages −−<br />

13 −− s o l l P r e s e n t a t i o n heißen −−<br />

14 where<br />

15 {<br />

16 name = ’Presentation’ ;<br />

17 }<br />

18 }<br />

Listing 4.8: Beispiel einer where-Klausel<br />

Beim Zugriff auf die freie Variable pckgName in de enforce domain in der Zeile 6 des<br />

Listings 4.8, wird für pckgName mithilfe der where-Klausel ein definierter Zustand hergestellt,<br />

nämlich pckgName enthält den Wert ’Presentation’. Damit wird sichergestellt, dass<br />

ausschließlich Präsentations-Pakets zur Transformation herangezogen werden. Wird bei der<br />

Ausführung der Transformation ein Paket mit einem anderen Namen gefunden, so wird diese<br />

nicht für die Generierung eines Zielpakets selektiert.<br />

4.2.5. Object Template Expressions und Inline-Objekterzeugung<br />

Wie im Kapitel 4.2.3 erläutert, können Zuweisungsausdrücke eines Domänenmusters object<br />

expressions sein, wenn es sich um Instanzen von <strong>Modell</strong>en oder von <strong>Modell</strong>elementen handelt,<br />

oder variable expressions, wenn es sich um Variablen handelt. “Ein object template<br />

expression ist ein Ausdruck innerhalb eines Domänenmusters, der sich auf ein Element des<br />

assoziierten <strong>Modell</strong>s bezieht.”[19]<br />

Das Beispiel:<br />

1 top relation mapText<br />

2 {<br />

3 textName : String ;<br />

4 srcPackage : SimpleUWEold : : Package ;<br />

5 trgPackage : SimpleUWEnew : : Package ;<br />

6 checkonly domain s r c te : SimpleUWEold : : Text<br />

7 {<br />

8 namespace = srcPackage ,<br />

9 name = textName<br />

42


10 } ;<br />

4.2. Die relationalen Transformationen. Eine Formale Darstellung der Konzepte<br />

11 enforce domain t r g te2 : SimpleUWEnew : : Text<br />

12 {<br />

13 namespace = trgPackage ,<br />

14 name = textName<br />

15 } ;<br />

16 }<br />

Listing 4.9: Das Beispiel einer object template expression<br />

Das Muster der Domäne domain src, dass sich auf ein <strong>Modell</strong> vom Typ SimpleUWEold<br />

bezieht, ist insgesamt ein object template expression, der sich auf die Instanz text vom<br />

Typ Text bezieht. Zwei Zuweisungen sind in dem Domänenmuster enthalten: einen Variablenausdruck<br />

name = textName und einen Objektausdruck namespace = trgPackage. Das<br />

Domänenmuster kann alternativ wie folgt definiert werden[19]:<br />

1 top relation mapText<br />

2 {<br />

3 textName : String ;<br />

4 checkonly domain s r c te : SimpleUWEold : : Text<br />

5 {<br />

6 namespace = srcPackage : SimpleUWEold : : Package {} ,<br />

7 name = textName<br />

8 } ;<br />

9 enforce domain t r g te2 : SimpleUWEnew : : Text<br />

10 {<br />

11 namespace = trgPackage : SimpleUWEnew : : Package {} ,<br />

12 name = textName<br />

13 } ;<br />

14 when<br />

15 {<br />

16 mapPackage ( srcPackage , trgPackage ) ;<br />

17 }<br />

18 }<br />

Listing 4.10: Das Beispiel einer object template expression. Alternative<br />

Hier wird das Paket srcPackage in der Zeile 6 implizit mithilfe einer inneren ein object template<br />

expression deklariert und verwendet. Dabei ist dieser Objektzuweisungsausdruck mit<br />

der vordeklarierten Objektvariablen nicht gleichzusetzen. Implizite Zuweisung durch ein object<br />

template expression bedeutet folgendes[19]:<br />

namespace = srcPackage : SimpleUWEold::Package<br />

was folgendem OCL-Ausdruck entspricht:<br />

namespace->includes(srcPackage)<br />

Demgegenüber impliziert die Alternative mit einer vordefinierten Variablen:<br />

namespace = srcPackage<br />

43


4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz<br />

Manchmal kommt es vor, dass <strong>Modell</strong>elemente im Zielmodell mithilfe object template<br />

expression in der enforce-Domäne generiert werden sollen. Dieses Verfahren wird als Inline-Objekterzeugung<br />

bezeichnet.<br />

Das Beispiel:<br />

1 top relation mapPage<br />

2 {<br />

3 pageName : String ;<br />

4 propertyName : String ;<br />

5 checkonly domain s r c srcPg : SimpleUWEold : : Page<br />

6 {<br />

7 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />

8 name = pageName ,<br />

9 ownedAttribute = presProp : SimpleUWEold : : PresentationProperty<br />

10 {<br />

11 name=propertyName<br />

12 }<br />

13 } ;<br />

14 enforce domain t r g trgPg : SimpleUWEnew : : PresentationPage<br />

15 {<br />

16 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />

17 name = pageName ,<br />

18 −− I n l i n e Pattern zur Erzeugung der PresentationProperty −−<br />

19 −− unter Verwendung des Namen der Property aus dem SimpleUWEold−<br />

<strong>Modell</strong> −−<br />

20 ownedAttribute = presProp2 : SimpleUWEnew : : PresentationProperty<br />

21 {<br />

22 name = propertyName<br />

23 }<br />

24 } ;<br />

25 when<br />

26 {<br />

27 mapPackage ( srcPckg , tgtPckg ) ;<br />

28 }<br />

29 }<br />

Listing 4.11: Das Beispiel einer Inline-Objekterzeugung.<br />

Hier betrachten wir die Relation mapPage. Es wird gewährleistet, dass zu jeder Page ein<br />

PresentationPage in neuem <strong>Modell</strong> generiert wird, wobei dieses PresentationPage genau so<br />

viele PresentationProperties mit denselben Namen wie die ursprüngliche Page besitzen soll.<br />

Diese Properties werden mithilfe inline-Objekterzeugung erzwungen (siehe Zeilen 20-24 im<br />

Listing 4.11).<br />

Bis zur dieser Stelle wurden alle wichtigen formalen Konzepte der Relationalen QVT-Sprache<br />

erläutert, die für die Definition der Transformation für UWE-Präsentationsmodelle benötigt<br />

werden. In den nächsten Kapiteln werden die Relationen für die Überführung der Präsentationsmodellelemente<br />

aus der Version 1.7 des UWE-Metamodells in die Version 1.8 des<br />

UWE-Metamodells vorgestellt.<br />

44


4.3. Transformationen zur automatisierten <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> basierend auf UWE-Metamodellen<br />

4.3. Transformationen zur automatisierten <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />

basierend auf UWE-Metamodellen<br />

Nachdem in den vorangehenden Kapiteln die ausgewählten Grundkonzepte der relationalen<br />

QVT-Sprache vorgestellt wurden, kann an dieser Stelle die Transformation zu der automatisierten<br />

Überführung der UWE-Präsentationsmodelle der Version 1.7 in die Präsentationsmodelle<br />

der Version 1.8 definiert werden. Dabei wird der Fokus auf die UWE-spezifische<br />

Details gelegt und die Konzepte der relationalen QVT-Sprache nicht weiter erläutert.<br />

4.3.1. Signatur der Transformation<br />

Die Transformation soll ein Präsentationsmodell, das in der Version 1.7 des UWE-Metamodells<br />

erstellt wurde in ein Präsentationsmodell der Version 1.8 überführen. Die Metamodelle werden<br />

hier entsprechend SimpleUWEold und SimpleUWEnew genannt. Die Transformation<br />

in der relationalen QVT-Sprache heißt ” mapUWEversion“. Die UML-<strong>Modell</strong>e der SimpleU-<br />

WEold (Abb. A.7) und SimpleUWEnew (Abb. A.8) sind im Anhang A angegeben.<br />

1 transformation mapUWEversion ( s r c : SimpleUWEold , t r g : SimpleUWEnew )<br />

2 {<br />

3 −− r e l a t i o n s −−<br />

4 }<br />

Listing 4.12: Transformationssignatur.<br />

Das Quellmodell wird durch src repräsentiert und das Zielmodell entsprechend mit trg. Dies<br />

bedeutet, dass src und dessen <strong>Modell</strong>elemente das Gegenstand von checkonly-Domänen,<br />

und trg und dessen <strong>Modell</strong>elemente das Gegenstand der enforce-Domänen sind.<br />

4.3.2. Die Identifizierung der Relationen<br />

Als nächstes werden die UWE-Präsentationsmetamodelle untersucht und deren nicht abstrakte<br />

Klassen genau betrachtet. Einige Elemente des UWE-Metamodells haben sich in der<br />

neuen Version nicht verändert, daher wird die Transformation zu einem Teil aus der Relationen<br />

bestehen, welche die <strong>Modell</strong>elemente einfach kopieren und zum anderem Teil aus den<br />

Relationen, die die Metamodelländerungen berücksichtigen.<br />

Als erstes werden alle nicht abstrakten Elemente der SimpleUWEold-Metamodells zusammengefasst.<br />

Für die Elemente, die nicht von der Metamodell-<strong>Evolution</strong> betroffen sind, soll<br />

eine einfache Kopier-Aktion ausgeführt werden. Die restlichen Elemente sollen entsprechend<br />

der Metamodelländerungen transformiert werden. Dabei ist zu erwähnen, dass in unserem<br />

Fall es sich bei allen Metamodelländerungen um ” breaking and resolvable changes“ handelt,<br />

wie in der Tabelle 3.3 im Kapitel 3.4.1 bereits beschrieben wurde.<br />

In der Tabelle 4.1 sind alle Elemente erfasst, die bei einem UWE-<strong>Modell</strong> als <strong>Modell</strong>elemente<br />

vorkommen können. Im Rahmen der Transformation sollen die Instanzen des SimpleUWEold-<br />

Metamodells in die Instanzen des SimpleUWEnew-Metamodells überführt werden. Dabei er-<br />

45


4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz<br />

Nr. SimpleUWEold SimpleUWEnew Transformationsaktion Relation<br />

1 Package Package Kopie mapPackage<br />

2 Text Text Kopie mapText<br />

3 Image Image Kopie mapImage<br />

4 Button Button Kopie mapButton<br />

5 Anchor Anchor Kopie mapAnchor<br />

6 TextInput TextInput Kopie mapTextInput<br />

7 PresentationProperty PresentationProperty Kopie mapProperty<br />

8 Form InputForm Umbenennen. Die Attribute elements<br />

sollen als PresentationProperties<br />

der InputForm hinzugefügt<br />

werden<br />

mapForm<br />

9 Choice Selection Umbenennen mapChoice<br />

10 Page PresentationPage Umbenennen mapPage<br />

11 PresentationClass PresentationGroup Umbenennen mapPresClass<br />

12 PresentationGroup PresentationGroup Nicht mehr unterstützt, stattdessen<br />

PresentationGroup<br />

13 Anchored<strong>Co</strong>llection IteratedPresentationGroup Elemente werden mit Iterated-<br />

PresentaitonGroup ersetzt, wobei<br />

Anchors als PresentationProperties<br />

zu dieser hinzugefügt werden<br />

14 —— Attribute collapse<br />

und dragdrop<br />

Neue RIA-spezifische Attribute sind<br />

zu der Klasse PresentationGroup<br />

hinzugefügt worden. Die Page, InputForm<br />

und IteratedPresentation-<br />

Group erben diese Attribute<br />

mapPresGroup<br />

mapAnchored<strong>Co</strong>l<br />

mapPage,<br />

mapPresentationGroup,<br />

mapForm, mapAnchored<strong>Co</strong>l<br />

Tabelle 4.1.: Alle Klassen des SimpleUWEold-Metamodells mit den entsprechenden Transformationsaktionen<br />

und den Relationen.<br />

geben sich drei Arten der Elemente des SimpleUWEold-Präsentationsmetamodells in Bezug<br />

auf ihre strukturelle Beschaffenheit und die Platzierung in der Metamodellhierarchie:<br />

• UI-Elemente, die PresentationProperties besitzen können: PresentationClass und seine<br />

Unterklassen PresentationGroup und Page.<br />

• PresentationProperties enthalten eine Assoziation presentationElement auf das entsprechenden<br />

UI-Element, das in der PresentationClass beinhaltet ist. Dieses UI-Element<br />

kann wiederum ein PresentationClass oder deren Erbe sein oder ein einfaches UI-<br />

Element, wie unten beschrieben.<br />

• Die Erben der Klasse UIElement, die einfache UI-Elemente wie Text, Button, Anchor<br />

usw. darstellen. Diese dürfen wiederum keine PresentationProperties besitzen.<br />

Die Relationen einer Gruppe sind sehr ähnlich. Deswegen können im Weiteren repräsenta-<br />

46


4.3. Transformationen zur automatisierten <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> basierend auf UWE-Metamodellen<br />

Nr. SimpleUWEnew-Attribut Transformationsaktion Relationen<br />

1 liveReport Neues RIA-spezifische Attribut vom<br />

Typ Boolean ist zu der neuen abstrakten<br />

Klasse ValuedElement hinzugefügt<br />

worden. Die Text-, Image-<br />

, Button-, Anchor-, TextInput- und<br />

Selection-Elemente erben dieses Attribut<br />

2 periodicRefresh Neues RIA-spezifische Attribut vom<br />

Typ Boolean ist zu der neuen abstrakten<br />

Klasse OutputElement hinzugefügt<br />

worden. Die Text- und<br />

Image-Elemente erben dieses Attribut<br />

2 auto<strong>Co</strong>mpletion Neues RIA-spezifische Attribut vom<br />

Typ Boolean ist zu der neuen abstrakten<br />

Klasse InputElement hinzugefügt<br />

worden. Die TextInputund<br />

Selection-Elemente erben dieses<br />

Attribut<br />

2 liveValidation Neues RIA-spezifische Attribut vom<br />

Typ Boolean ist zu der neuen abstrakten<br />

Klasse InputElement hinzugefügt<br />

worden. Die TextInputund<br />

Selection-Elemente erben dieses<br />

Attribut<br />

Tabelle 4.2.: Attribute aus den Abstrakten Klassen.<br />

mapText,<br />

mapImage,<br />

mapButton,<br />

mapAnchor,<br />

mapTextInput,<br />

mapChoice<br />

mapText, map-<br />

Image<br />

mapTextInput,<br />

map-Choice<br />

mapTextInput,<br />

map-<br />

Anchored<strong>Co</strong>l<br />

tive Exemplare einer Gruppe vorgestellt werden. Alle Relationen sind im Anhang im vollen<br />

Umfang B angegeben.<br />

Die abstrakten Metaklassen können in dem Zielmodell mithilfe der Transformationen nicht<br />

instanziert werden. In dem UWE-Präsentationsmetamodell in der Version 1.8 ist eine Anzahl<br />

der abstrakten Klassen eingeführt worden. Die neuen abstrakten Klassen besitzen neue RIAspezifische<br />

Attribute. Diese Attribute können in den jeweiligen Subklassen der abstrakten<br />

Klasse in den dazugehörigen Relationen eingefügt werden. Die Attribute der Metaklassen<br />

sind in der Tabelle 4.2 zusammengefasst, wobei die betroffenen nicht-abstrakten Subklassen<br />

und die entsprechenden Relationen mit angegeben sind. Durch diese Lösung werden mithilfe<br />

der Transformation die <strong>Modell</strong>e erstellt die zum neuen Metamodell im vollen Umfang<br />

konform sind.<br />

Alle Relationen außer mapProperty sollen top-level-Relationen sein, da jedes Element<br />

des <strong>Modell</strong>s transformiert werden soll (die Arten von Relationen wurden im Kapitel 4.2.2<br />

betrachtet). Besitzen die <strong>Modell</strong>elemente PresentationProperties, so soll die non-top-level-<br />

Relation mapProperty an der Stelle erzwungen werden, also nicht implizit, sondern explizit<br />

durch Aufruf ausgeführt werden. Diese Aufrufe werden innerhalb der where-Klausel definiert<br />

(siehe Kapitel 4.2.4).<br />

1 transformation mapUWEversion ( s r c : SimpleUWEold , t r g : SimpleUWEnew )<br />

2 {<br />

47


4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz<br />

3 top relation mapPackage {−− body −−}<br />

4 top relation mapPage {−− body −−}<br />

5 relation mapProperty {−− body −−}<br />

6 top relation mapPresClass {−− body −−}<br />

7 top relation mapPresGroup {−− body −−}<br />

8 top relation mapText {−− body −−}<br />

9 top relation mapAnchor {−− body −−}<br />

10 top relation mapImage {−− body −−}<br />

11 top relation mapButton {−− body −−}<br />

12 top relation mapTextInput {−− body −−}<br />

13 top relation mapAnchored<strong>Co</strong>l {−− body −−}<br />

14 top relation mapForm {−− body −−}<br />

15 }<br />

Listing 4.13: Identifizierte Relationen<br />

Als nächstes nehmen wir die Relation mapPackage genau unter die Lupe.<br />

4.3.3. Die Relation für das Paket<br />

In dem UWE-Präsentationsmodell ist eine klare hierarchische Struktur der Beziehungen<br />

zwischen den Elementen festgelegt:<br />

1 top relation mapPackage<br />

2 {<br />

3 pckgName : String ;<br />

4 checkonly domain s r c srcPckg : SimpleUWEold : : Package<br />

5 {<br />

6 name = pckgName<br />

7 } ;<br />

8 enforce domain t r g tgtPckg : SimpleUWEnew : : Package<br />

9 {<br />

10 name = pckgName<br />

11 } ;<br />

12 −− Hier e i n e Bedingung : der Name des Packages −−<br />

13 −− s o l l P r e s e n t a t i o n heißen −−<br />

14 where<br />

15 {<br />

16 name = ’Presentation’ ;<br />

17 }<br />

18 }<br />

Listing 4.14: Relation mapPackage<br />

Auf dem obersten Level befindet sich das Präsentations-Package. Alle restlichen Präsentationselemente<br />

befinden sich darin als packagedElements. Bei der Ausführung der Transformation<br />

wird mit mapPackage angefangen. Danach werden die darauf folgenden Relationen<br />

ausgeführt. Für das Präsentations-Paket wird im Zielmodell ein Präsentations-Paket mit<br />

demselben Namen erzeugt.<br />

48


4.3. Transformationen zur automatisierten <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> basierend auf UWE-Metamodellen<br />

4.3.4. Die Relationen für die PresentationClass und deren Subklassen<br />

Die Elemente vom Typ PresentationClass, Page und PresentationGroup wurden bei der<br />

Metamodell-<strong>Evolution</strong> geändert. (Siehe Tabelle 4.1 in den Zeilen 10-13). Das Element PresentationClass<br />

ist zu der PresentationGroup umbenannt worden. Das Element PresentationGroup<br />

wird in der neuen Version nicht mehr unterstützt. Deswegen sollen die Elemente,<br />

die als PresentationGroup in der alten Version definiert waren, durch die Elemente PresentationClass<br />

umgesetzt werden, die in der neuen UWE-Präsentationsmetamodellversion<br />

PresentationGroup heißen. Dies ist ein gutes Beispiel dafür, dass sehr tiefes Wissen über<br />

die Beschaffenheit der Metamodelle unabdingbar ist. Hier sollen die Zusammenhänge genau<br />

spezifiziert werden. Obwohl es so aussieht, als ob man die Elemente PresentationGroup in<br />

die Elemente PresentationGroup der neuen Version überführt, hat sich die Semantik dieser<br />

Elemente verändert. Das Element Page ist lediglich in das PresentationPage umbenannt<br />

worden.<br />

mapPage<br />

Die Relationen für die Elemente PresentationGroup, Page und PresentationClass sind analog,<br />

wobei bei dem Element PresentationClass als Oberklasse die Unterscheidung zwischen<br />

dieser Klasse und deren Subklassen eingeführt werden soll. Die Auflösung dieser Vererbung<br />

wird später im Kapitel 4.3.4 behandelt. Im folgenden Listing ist die komplette mapPage-<br />

Relation dargestellt.<br />

1 −− Relation mapPage mappt Page auf PresentationPage . −−<br />

2 −− P r e s e n t a t i o n P r o p e r t i e s werden übernommen −−<br />

3 top relation mapPage<br />

4 {<br />

5 pageName : String ;<br />

6 checkonly domain s r c srcPg : SimpleUWEold : : Page<br />

7 {<br />

8 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />

9 name = pageName ,<br />

10 −− Es wird geprüft , ob page Stereotyp −−<br />

11 −− b e i dem Page angewendet i s t −−<br />

12 kind = ’page’ ,<br />

13 ownedAttribute = presProp : SimpleUWEold : : PresentationProperty {}<br />

14 } ;<br />

15 enforce domain t r g trgPg : SimpleUWEnew : : PresentationPage<br />

16 {<br />

17 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />

18 name = pageName ,<br />

19 kind = ’presentationPage’ ,<br />

20 −− Neue RIAs−Attribute , von PresentationGroup geerbt −−<br />

21 c o l l a p s e = f a l s e ,<br />

22 dragdrop = f a l s e ,<br />

23 ownedAttribute = presProp2 : SimpleUWEnew : : PresentationProperty {}<br />

24 } ;<br />

25 when<br />

26 {<br />

27 mapPackage ( srcPckg , tgtPckg ) ;<br />

49


4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz<br />

28 }<br />

29 where<br />

30 {<br />

31 −− B e s i t z t e i n e Page e i n e P r e s e n t a t i o n Property , −−<br />

32 −− so wird d i e R elation mapProperty a u f g e r u f e n −−<br />

33 mapProperty ( presProp , presProp2 ) ;<br />

34 }<br />

35 }<br />

Listing 4.15: Relation mapPage<br />

Mithilfe folgenden Zuweisung ” namespace = srcPckg : SimpleUWEold::Package“ in der Zeile<br />

7 des Listings 4.15 und ” namespace = trgPckg : SimpleUWEnew::Package“ in der Zeile 15<br />

werden alle namespace selektiert, für die gilt, dass die Page in ihnen liegt. Bei diesen Zuweisungen<br />

handelt es sich um object template expressions, die im Kapitel 4.2.5 erläutert<br />

wurden. Laut unserem vereinfachten Metamodell existiert nur ein Package-Element: das<br />

Präsentations-Paket. Soll das komplette UWE-Metamodell transformiert werden, so müssen<br />

die unterschiedlichen Pakete des UWE-Metamodells auseinander gehalten werden.<br />

Damit diese Relation im Falle, wenn für die Elemente srcPckg und trgPckg noch keine gültige<br />

Werte vorliegen, funktioniert, muss eine Vorbedingung für die Pakete definiert werden. Dies<br />

erfolgt innerhalb der when-Klausel. Somit wird bei jeder Ausführung der mapPage-Relation<br />

die mapPackage-Relation aufgerufen, um für jedes PresentationPage-Element einen korrekten<br />

Bezug zu entsprechendem Präsentations-Package herzustellen.<br />

Ähnlich verhält es sich mit den Konstruktionen ” ownedAttribute = presProp : SimpleU-<br />

WEold::PresentationProperty“ in der Zeile 9 des Listings 4.15 und ” ownedAttribute = presProp2<br />

: SimpleUWEnew::PresentationProperty“ in der Zeile 17. Der Unterschied liegt darin,<br />

dass die Elemente PresentationProperty erzwungen werden sollen, sobald ein Page aus<br />

dem Quellmodell PresentationProperties besitzt. Dafür sorgt die Bedingung in der where-<br />

Klausel, wo die Abarbeitung der non-top-level-Relation mapProperty durch den expliziten<br />

Aufruf erfolgt. Dieses Verfahren entspricht dem Prinzip des rekursiven Abstiegs.<br />

Das Attribut kind hält das Stereotyp des <strong>Modell</strong>elements fest. In der Zeile 10 des Listings<br />

4.15 wird sichergestellt, dass kind den Wert page besitz. In der Zeile 17 des Listing 4.15<br />

wird kind auf PresentationPage gesetzt. In dem neuen UWE-Metamodell sind in der Klasse<br />

PresentationGroup neue Attribute für RIAs Features eingeführt: collapse und dragdrop vom<br />

Typ boolean. Diese Attribute besitzen einen Default-Wert false, womit die Automatisierung<br />

der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> in diesem Fall ermöglicht wird.<br />

Die Relation mapPresGroup für die Transformation der Elemente PresentationGroup ist<br />

analog zu der Relation mapPage aufgebaut. Die einzige Abweichung besteht darin, dass in<br />

der checkonly-Domäne die Quellmodellelemente vom Typ PresentationGroup stehen und<br />

in der enforce-Domäne die Elemente des Zielmodells PresentationGroup stehen, die dem<br />

ursprünglichen PresentationClass entsprechen. Interessanter wird es bei dem Presentation-<br />

Class-Element des Quellmodells. Die Relation für die PresentationClass wird im nächsten<br />

Abschnitt betrachtet.<br />

50


4.3. Transformationen zur automatisierten <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> basierend auf UWE-Metamodellen<br />

Die Unterscheidung zwischen den Unterklassen Page bzw. PresentationGroup und<br />

deren Oberklasse PresentationClass<br />

Wenn die Relation mapPresClass analog zu der mapPage-Relation und der mapPresGroup-<br />

Relation definiert wird, so werden die Subklassen von der PresentationClass doppelt erzwungen.<br />

Dies liegt daran, dass die Elemente Page und PresentationGroup die Erben des PresentationClass<br />

sind. Bei der checkonly-Domäne der Relation mapPresentationClass werden die<br />

beiden Subklassen als PresentationClasses erkannt und in der enforce-Domäne als PresentationGroups<br />

mit allen Attributen und den PresentationProperties erneut erzwungen. Dieses<br />

Problem kann dadurch behoben werden, dass in der when-Klausel außer der Vorbedingung<br />

für die Pakete (siehe unter dem Kapitel 4.3.4) weitere Vorbedingungen definiert werden. Diese<br />

Vorbedingungen stehen in den Zeilen 16 und 17 des Listings 4.16. Die Elemente vom Typ<br />

PresentationClass sollen nur dann transformiert werden, wenn sie an keiner anderen Stelle<br />

der Transformation als Argumente der mapPage bzw. der mapPresGroup Relation stehen.<br />

Dies wird durch die Vorbedingungen ” not mapPage(pc, pg); “ und ” not mapPresGroup(pc,<br />

pg); “ erreicht.<br />

1 −− Relation mapPresClass mappt P r e s e n t a t i o n C l a s s auf P r e s e n t a t i o n −−<br />

2 −− Group −−<br />

3 top relation mapPresClass<br />

4 {<br />

5 className : String ;<br />

6 checkonly domain s r c pc : SimpleUWEold : : P r e s e n t a t i o n C l a s s<br />

7 {<br />

8 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />

9 name = className ,<br />

10 −− Es wird geprüft , ob p r e s e n t a t i o n C l a s s Stereotyp −−<br />

11 −− b e i dem P r e s e n t a t i o n C l a s s angewendet i s t −−<br />

12 kind = ’presentationClass’ ,<br />

13 ownedAttribute = pp : SimpleUWEold : : PresentationProperty {}<br />

14 } ;<br />

15 enforce domain t r g pg : SimpleUWEnew : : PresentationGroup<br />

16 {<br />

17 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />

18 name = className ,<br />

19 −− Hier wird das Stereotyp presentationGroup −−<br />

20 −− dem Z i e l e l e m e n t zugewiesen −−<br />

21 kind = ’presentationGroup’ ,<br />

22 −− neue RIA−A t t r i b u t s −−<br />

23 c o l l a p s e = f a l s e ,<br />

24 dragdrop = f a l s e ,<br />

25 ownedAttribute = pp2 : SimpleUWEnew : : PresentationProperty {}<br />

26 } ;<br />

27 when<br />

28 {<br />

29 mapPackage ( srcPckg , tgtPckg ) ;<br />

30 not mapPage ( pc , pg ) ;<br />

31 not mapPresGroup ( pc , pg ) ;<br />

32 }<br />

33 where<br />

51


4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz<br />

34 {<br />

35 −− B e s i t z t e i n P r e s e n t a t i o n Class e i n e P r e s e n t a t i o n Property , −−<br />

36 −− so wird d i e R elation mapProperty a u f g e r u f e n −−<br />

37 mapProperty ( pp , pp2 ) ;<br />

38 }<br />

39 }<br />

Listing 4.16: Relation mapPresClass<br />

Das ist die allgemeine Vorgehensweise in der relationalen QVT-Sprache, um die Subklassen<br />

von deren Oberklassen zu unterscheiden. Im Folgenden betrachten wir die Relationen für die<br />

einfachen UI-Elemente.<br />

4.3.5. Die Relationen für einfache UI-Elemente<br />

In der Tabelle 4.1 in den Zeilen 2-6 sind folgende Elemente zusammengefasst Text, Image,<br />

Button, Anchor und TextInput. Die Elemente dieser Gruppe besitzen eine Gemeinsamkeit:<br />

sie wurden bei der Metamodell-<strong>Evolution</strong> nicht verändert und sollen einfach kopiert werden.<br />

mapText<br />

Im nächsten Listing ist eine Relation zum Kopieren von dem Text-Element vorgestellt. Die<br />

restlichen Elemente werden analog kopiert.<br />

1 −− Die Relation mapText e r s t e l l t e i n e Kopie des Text−Elements −−<br />

2 −− im Z i e l m o d e l l −−<br />

3 top relation mapText<br />

4 {<br />

5 textName : String ;<br />

6 checkonly domain s r c te : SimpleUWEold : : Text<br />

7 {<br />

8 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />

9 name = textName ,<br />

10 −− Es wird geprüft , ob t e x t Stereotyp −−<br />

11 −− b e i dem Text angewendet i s t −−<br />

12 kind = ’text’<br />

13 } ;<br />

14 enforce domain t r g te2 : SimpleUWEnew : : Text<br />

15 {<br />

16 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />

17 name = textName ,<br />

18 −− Hier wird das Stereotyp t e x t −−<br />

19 −− dem Z i e l e l e m e n t zugewiesen −−<br />

20 kind = ’text’ ,<br />

21 p e r i o d i c R e f r e s h = f a l s e ,<br />

22 l i v e R e p o r t = f a l s e<br />

23 } ;<br />

24 when<br />

25 {<br />

26 mapPackage ( srcPckg , tgtPckg ) ;<br />

52


4.3. Transformationen zur automatisierten <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> basierend auf UWE-Metamodellen<br />

27 }<br />

28 }<br />

Listing 4.17: Relation mapText<br />

Wie bei allen Elementen des Präsentationspakets wird mithilfe des object template expressions<br />

für das namespace und der Vorbedingung in der when-Klausel sichergestellt, dass<br />

für die Elemente srcPckg und trgPckg gültige Werte vorliegen. Nach der Abarbeitung der<br />

mapText-Relation wird im Zielmodell ein text-Element mit dem Namen des Quelltextelements<br />

erzwungen. Im Weiteren werden die Relationen der UI-Elemente betrachtet, die im<br />

Rahmen der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> angepasst werden müssen.<br />

4.3.6. Die Relation mapForm<br />

Das Element Form wurde im Laufe der Metamodell-<strong>Evolution</strong> umbenannt und soll in der<br />

neuen Version des UWE-Präsentationsmodells InputForm heißen. Darüber hinaus hat sich<br />

ebenso die Position des Elements in der Hierarchie der PresentationElements verändert. Im<br />

neuen Metamodell gehört inputForm zu der Gruppe der Elemente, die PresentationProperties<br />

besitzen dürfen. Das Element InputForm ist eine Subklasse der PresentationGroup neben<br />

den Elementen PresentationPage und einem neuen Element IteratedPresentationGroup.<br />

1 −− Relation mapForm mappt das Element Form −−<br />

2 −− auf das Element InputForm des Z i e l m o d e l l s −−<br />

3 −− und f ü g t a l l e elements des u r s p r ü n g l i c h e n −−<br />

4 −− FormElements a l s P r e s e n t a t i o n P r o p e r t i e s hinzu −−<br />

5 top relation mapForm<br />

6 {<br />

7 formName : String ;<br />

8 formElemName : String ;<br />

9 checkonly domain s r c form : SimpleUWEold : : Form<br />

10 {<br />

11 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />

12 name = formName ,<br />

13 −− Es wird geprüft , ob form Stereotyp −−<br />

14 −− b e i der Form angewendet i s t −−<br />

15 kind = ’form’ ,<br />

16 elements = e l s : SimpleUWEold : : UIElement<br />

17 {<br />

18 name = formElemName<br />

19 }<br />

20 } ;<br />

21 enforce domain t r g iform : SimpleUWEnew : : inputForm<br />

22 {<br />

23 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />

24 name = formName ,<br />

25 −− Hier wird das Stereotyp inputForm −−<br />

26 −− dem Z i e l e l e m e n t zugewiesen −−<br />

27 kind = ’inputForm’ ,<br />

28 −− Neue RIAs−Attribute , von PresentationGroup geerbt −−<br />

29 c o l l a p s e = f a l s e ,<br />

30 dragdrop = f a l s e ,<br />

53


4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz<br />

31 −−i n l i n e Erzeugung von FormElementen −−<br />

32 ownedAttribute = presProp : SimpleUWEnew : : PresentationProperty<br />

33 {<br />

34 name = formElemName ,<br />

35 presentationElement = pe : SimpleUWEnew : : PresentationElement {}<br />

36 }<br />

37 } ;<br />

38 when<br />

39 {<br />

40 mapPackage ( srcPckg , tgtPckg ) ;<br />

41 mapText ( e l s , pe ) or mapImage ( e l s , pe ) or mapAnchor ( e l s , pe ) or<br />

mapTextInput ( e l s , pe ) or mapButton ( e l s , pe ) or mapChoice ( e l s ,<br />

pe ) ;<br />

42 }<br />

43 }<br />

Listing 4.18: Relation mapForm<br />

Zum einem gehört die Umbenennung eines Elements zu ganz einfachen <strong>Co</strong>-<strong>Evolution</strong> Änderungen.<br />

Zum anderen liegt hier eine Änderung des Metamodells vor, welche die semantischen<br />

Änderungen an dem Metamodell mit sich bringt. Um die <strong>Co</strong>-<strong>Evolution</strong> dieser Elemente zu<br />

verwirklichen, muss man über vertieftes Wissen über die Semantik und die Beschaffenheit<br />

der Metamodelle verfügen.<br />

In diesem Fall ist die Relation so definiert worden, dass die Elemente, die der Form als<br />

Attribute elements zugeordnet waren, in die neue inputForm als PresentationProperties hinzugefügt<br />

werden (siehe Zeilen 9-13 und 19-24 des Listings 4.18). In Form von elements dürfen<br />

zu einer Form verschiedene UIElements hinzugefügt werden, solche wie Text, Image, Button,<br />

Anchor und TextInput (siehe UWE-Metamodell 1.8 in der Abbildung 3.5 im Kapitel 3.4.1).<br />

In der Relation mapForm wird ein Domänenmuster für elements ähnlich wie bei namespace<br />

mit einer object template expression umgesetzt. Damit sichergestellt werden kann, dass<br />

ein entsprechender gültiger nicht-abstrakter UI-Element existiert. Es wird mithilfe einer Vorbedingung<br />

in der when-Klausel geprüft, ob so ein Element bereits erzwungen wurde. Wenn<br />

das nicht der Fall ist, wird abhängig vom UI-Element eine entsprechende Relation aufgerufen<br />

(siehe Zeile 28 in dem Listing 4.18). Es wird entweder mapText oder mapButton oder<br />

mapTextInput usw. aufgerufen.<br />

Als Argumente bekommen die Relationsaufrufe in der Zeile 28 die abstrakten Oberklassen<br />

der Elemente vom Typ PresentationElement. Dies ist kein Problem, da eine Form als elements-Attribute<br />

konkrete nicht-abstrakte UI-Elemente besitzt. Alle einfachen UI-Elemente<br />

sollen bereits existieren, da alle Relationen außer mapProperty die top-level-Relationen<br />

sind. Die Bedingung in der when-Klausel erzwingt diese Relationen, wenn sie noch nicht<br />

ausgeführt worden sind und sorgt damit für die Korrektheit der Attribute und der Beziehungen<br />

zwischen den Elementen. Die PresentationProperties in dem enforce domain-Teil<br />

werden mit der inline object - Erzeugung erzwungen. Dieses Konstrukt wurde im Kapitel<br />

4.2.5 näher erläutert.<br />

54


4.3. Transformationen zur automatisierten <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> basierend auf UWE-Metamodellen<br />

4.3.7. Die Relation mapAnchored<strong>Co</strong>l<br />

Die Elemente der Anchored<strong>Co</strong>llection werden in dem neuen UWE-Präsentationsmodell nicht<br />

mehr unterstützt. Wäre dies eine einfache Löschaktion, so müsste bei der Transformation für<br />

diese Elemente keine Relation angegeben werden und somit würden keine Elemente im neuen<br />

<strong>Modell</strong> erzwungen. In diesem Fall ist die Metamodelländerung, ähnlich wie bei der Form von<br />

der Semantik des Metamodells abhängig. Die Elemente der Anchored<strong>Co</strong>llection werden nicht<br />

mehr unterstützt. Stattdessen sollen neue Elemente der IteratedPresentationGroup verwendet<br />

werden, wobei die Attribute anchors des Anchored<strong>Co</strong>llection als PresentationProperties<br />

des IteratedPresentationGroup definiert werden sollen.<br />

1 −− Relation mapAnchored<strong>Co</strong>l mappt Element Anchored<strong>Co</strong>llection −−<br />

2 −− auf d i e Elemente IteratedPresentationGroup des Z i e l m o d e l l s −−<br />

3 −− und f ü g t a l l e Anchors des u r s p r ü n g l i c h e n Elements a l s −−<br />

4 −− P r e s e n t a t i o n P r o p e r t i e s hinzu −−<br />

5 top relation mapAnchored<strong>Co</strong>l<br />

6 {<br />

7 acName : String ;<br />

8 anchorName : String ;<br />

9 checkonly domain s r c ac : SimpleUWEold : : Anchored<strong>Co</strong>llection<br />

10 {<br />

11 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />

12 name = acName ,<br />

13 −− Es wird geprüft , ob a n c h o r e d C o l l e c t i o n Stereotyp −−<br />

14 −− b e i dem Anchored<strong>Co</strong>llection angewendet i s t −−<br />

15 kind = ’anchored<strong>Co</strong>llection’ ,<br />

16 anchors = ancs : SimpleUWEold : : Anchor<br />

17 {<br />

18 name = anchorName<br />

19 }<br />

20 } ;<br />

21 enforce domain t r g t i 2 : SimpleUWEnew : : IteratedPresentationGroup<br />

22 {<br />

23 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />

24 name = acName ,<br />

25 −− Hier wird das Stereotyp i t e r a t e d P r e s e n t a t i o n G r o u p −−<br />

26 −− dem Z i e l e l e m e n t zugewiesen −−<br />

27 kind = ’iteratedPresentationGroup’ ,<br />

28 −− Neue RIAs−Attribute , von PresentationGroup geerbt −−<br />

29 c o l l a p s e = f a l s e ,<br />

30 dragdrop = f a l s e ,<br />

31 −−i n l i n e Erzeugung von Anchors −−<br />

32 ownedAttribute = presProp : SimpleUWEnew : : PresentationProperty<br />

33 {<br />

34 name = anchorName ,<br />

35 presentationElement = pe : SimpleUWEnew : : PresentationElement {}<br />

36 }<br />

37 } ;<br />

38 when<br />

39 {<br />

40 mapPackage ( srcPckg , tgtPckg ) ;<br />

41 mapAnchor ( ancs , pe ) ;<br />

55


4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz<br />

42 }<br />

43 }<br />

Listing 4.19: Relation mapAnchored<strong>Co</strong>l<br />

Im Listing 4.19 wird das Domänenmuster für Anchors genau wie bei der Form mit einer<br />

object template expression umgesetzt. Somit kann sichergestellt werden, dass ein entsprechender<br />

gültiger Anchor-Element existiert, wird mithilfe einer Vorbedingung in der when-<br />

Klausel geprüft, ob so ein Element bereits erzwungen wurde. Mit enforce domain werden<br />

PresentationProperties, die die Anchors beinhalten, mithilfe der inline object-Erzeugung<br />

erzwungen (siehe Zeile 19 des Listings 4.19). Dabei wird das Attribute presentationElement<br />

der PresentationProperty in der Zeile 22 als ein abstraktes PresentationElement deklariert<br />

und in der Zeile 28 als Argument für den Aufruf des mapAnchor in der when-Klausel verwendet.<br />

Bei der Abarbeitung dieser Relation handelt es sich dann ausschließlich um die<br />

nicht-abstrakte Anchors, somit werden keine Fehler bei der Transformation entstehen.<br />

4.3.8. Die Relation mapProperty<br />

Zuletzt wird eine einzige non-top-level-Relation mapProperty betrachtet. Von Metamodell<br />

her wurden bei der Metamodellevolution keine Änderungen an diesem Metamodellelement<br />

vorgenommen. So wird nachstehend für PresentationProperty eine Kopier-Relation definiert:<br />

1 relation mapProperty<br />

2 {<br />

3 propName : String ;<br />

4 checkonly domain s r c pp : SimpleUWEold : : PresentationProperty<br />

5 {<br />

6 name = propName ,<br />

7 presentationElement = pe : SimpleUWEold : : PresentationElement<br />

8 {<br />

9 }<br />

10 } ;<br />

11 enforce domain t r g pp2 : SimpleUWEnew : : PresentationProperty<br />

12 {<br />

13 name = propName ,<br />

14 presentationElement = pe2 : SimpleUWEnew : : PresentationElement<br />

15 {<br />

16 }<br />

17 } ;<br />

18 when<br />

19 {<br />

20 −− Sobald e i n e PresentationProperty einen Presentation − −−<br />

21 −− Element b e s i t z t , s o l l d i e entsprechende Relation a u f g e r u f e n −−<br />

22 −− werden −−<br />

23 mapText ( pe , pe2 ) or mapAnchor ( pe , pe2 ) or mapImage ( pe , pe2 ) or<br />

mapButton ( pe , pe2 ) or mapTextInput ( pe , pe2 ) or mapAnchored<strong>Co</strong>l (<br />

pe , pe2 ) or mapPresClass ( pe , pe2 ) or mapPresGroup ( pe , pe2 ) or<br />

mapForm( pe , pe2 ) ;<br />

24 }<br />

25 }<br />

56


4.4. Die Durchführung der Transformationen mit dem mediniQVT-Tool<br />

Listing 4.20: Die Relation mapProperty<br />

Im Listing 4.20 wird der Name der PresentationProperty unter dem Einsatz von der Variable<br />

propName in die Ziel-Property übernommen. Außerdem wird die Assoziation presentation-<br />

Element mit object template expression umgesetzt. Hierbei sind die Attribute presentationElement<br />

in den Zeilen 7 und 14 des Listings 4.20 als abstrakte Elemente des Typs<br />

PresentationElement deklariert. In der when-Klausel stehen Aufrufe der möglichen Relationen,<br />

die mit der ODER-Verknüpfung verbunden sind. Dabei sind hier alle Relationen außer<br />

der mapPage vorhanden. Die Page steht stets als Strukturelement eines Pakets und darf<br />

daher nicht in der PresentationProperties eines PresentationClass oder deren Subklassen<br />

vorkommen.<br />

4.4. Die Durchführung der Transformationen mit dem<br />

mediniQVT-Tool<br />

In den vorausgehenden Kapiteln wurde die Transformation vorgestellt, welche die automatisierte<br />

<strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> der vereinfachten UWE-Präsentationsmodelle veranschaulicht.<br />

Für die Durchführung dieser Transformation sollten einige Aktionen vorab erledigt werden.<br />

Der ganze Prozess ist manuell vorbereitet und durchgeführt worden. Eine Transformation<br />

Abbildung 4.2.: Die Durchführung der Transformation.[19]<br />

überführt <strong>Modell</strong>e ineinander, die auf der Basis von spezifizierten Metamodellen definiert<br />

sind. Dabei besteht die Transformation aus einer Anzahl von Relationen, die auf der Basis<br />

57


4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz<br />

von Metamodellen gültige Beziehungen zwischen den Elementen der <strong>Modell</strong>e beschreibt. Außer<br />

einem Transformationsskript in der relationalen QVT-Sprache und einem Quellmodell<br />

sollen das Quell-Metamodell, sowie das Ziel-Metamodell in speziellen formalen Formen mit<br />

eingebunden werden. Das Zielmodell einer Transformation resultiert aus deren Ausführung.<br />

Die Durchführung einer Transformation mit mediniQVT setzt voraus, dass die für die Transformation<br />

benötigten Metamodelle sowie deren Instanzen mithilfe Eclipse Modeling Framework,<br />

das im Kapitel 2.5 bereits beschrieben wurde, erstellt sind. Der Prozess der Erstellung<br />

und Durchführung einer Transformation wird in der Abbildung 4.6 veranschaulicht.<br />

Im Kapitel 3.4 wurden die beiden Versionen der Präsentations-Metamodell vorgestellt und<br />

die Differenzen zwischen diesen Metamodellversionen in der Tabelle 3.3 zusammengefasst.<br />

Für die Transformation werden Metamodelle nach dem Verständnis der MOF in Form von<br />

UML2-Klassendiagrammen in Ecore-Format definiert, das im Kapitel 2.5.1 vorgestellt wurde.<br />

Im Anhang A ist detailliert beschrieben wie diese Metamodelle in einer serialisierten Form<br />

(Eclipse Ecore Format) erstellt werden. Wobei die Metamodelle im Eclipse Ecore Format<br />

dem generellen EMOF-Format (Essential Meta Object Facility) weitgehend äquivalent sind.<br />

Aus den Metamodellen in Ecore Format werden automatisch EMF-<strong>Modell</strong>e (siehe Eclipse<br />

Modeling Framework im Kapitel 2.5) vom Typ ” genmodel“ erstellt, die als eine Basis für<br />

die Generierung der Editor-Eclipse-Plug-ins dienen können. (Genaue Vorgehensweise hierzu<br />

ist im Anhang A.2 erläutert) Die aus Generator-<strong>Modell</strong> generierte Eclipse-Plug-ins stellen<br />

Editoren bereit, die es erlauben die formalen <strong>Modell</strong>e im Sinne der vordefinierten Metamodelle<br />

zu erstellen. (Siehe Anhang A.3)<br />

Die OMG hat für den Austausch von formalen <strong>Modell</strong>en das XML Metadata Interchange<br />

(XMI)-Format definiert, um speziell formale <strong>Modell</strong>e in ihrer flachen, textuell repräsentierten<br />

Struktur als Grundlage der Transformation bereitstellen zu können.<br />

58


4.5. Ein Beispiel für metamodellbasierte <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />

4.5. Ein Beispiel für metamodellbasierte <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />

In diesem Abschnitt wird ein Beispiel vorgeführt, welches die metamodellbasierte <strong>Modell</strong>-<br />

<strong>Co</strong>-<strong>Evolution</strong> für das <strong>Modell</strong> Adressbuch präsentiert. Da die <strong>Modell</strong>e in der Form in der sie<br />

in die Transformation eingehen ziemlich unübersichtlich sind, wird nur ein Ausschnitt aus<br />

den <strong>Modell</strong>en vorgeführt.<br />

4.5.1. Die Durchführung der Transformation an dem Adressbuch-<strong>Modell</strong><br />

Das Präsentationsmodell des Adressbuches in der Version 1.7 wird als Quellmodell genommen.<br />

In der Abbildung 4.3 ist das <strong>Modell</strong> zu sehen. Das Quellmodell wird in einem ge-<br />

Abbildung 4.3.: Das Präsentationsmodell für das Adressbuch in der Version 1.7.<br />

nerierten SimpleUWEold-Editor in der speziellen textuellen Form erstellt. Die Informationen<br />

über das erstellte <strong>Modell</strong> sind in der AddressBook.simpleuweold Datei gespeichert. Das<br />

<strong>Modell</strong> soll in dem XMI-Format in die Transformation eingehen. Deswegen soll die Datei<br />

AddressBook.simpleuweold in die Datei AddressBook.xmi umbenannt werden. Somit kann<br />

diese Datei in der Transformationskonfiguration angegeben werden.<br />

Während der Ausführung der Transformation wird das Zielmodell für das Adressbuch generiert,<br />

das zu dem SimpleUWEnew Metamodell konform ist. In der Abbildung 4.4 sind die<br />

beiden <strong>Modell</strong>e nebeneinander abgebildet.<br />

Das Präsentationsmodell des Adressbuches in der Version 1.7 ist in einem SimpleUWEold-<br />

Editor angezeigt. Das Präsentationsmodell des Adressbuches in der Version 1.8 ist dagegen<br />

in einem SimpleUWEnew-Editor angezeigt. Die Elemente sind in ihrer baumartigen Struktur<br />

abgebildet. In der ” Properties“-Ansicht werden die Detailinformationen über ein ausgewähltes<br />

Element angezeigt. In der Abbildung ist sowohl in der alten, als auch in der neuen<br />

Version das Form-Element, namens ” SearchForm“ ausgewählt. In der alten Version besitzt<br />

59


4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz<br />

Abbildung 4.4.: Das AddressBook vor und nach der Ausführung der Transformation in der<br />

textuellen Präsentation.<br />

die Form folgende elements-Attribute: den TextInput namens ” SearchCriterion“ und den<br />

Button namens ” Search“. Die Transformation hat diese Attribute in die gleichnamige PresentationProperties<br />

überführt, jeweils vom Typ TextInput und Button. Diese sind in der<br />

Abbildung grün gekennzeichnet.<br />

Außerdem ist zu sehen, dass die Page-Elemente AddressBook“ und Message“ in die gleich-<br />

” ”<br />

namige PresentationPage-Elemente transformiert wurden. Das PresentationClass-Element<br />

” <strong>Co</strong>ntact“ ist in ein entsprechendes PresentationGroup-Element mithilfe der Transformation<br />

überführt worden.<br />

60


4.5. Ein Beispiel für metamodellbasierte <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />

4.5.2. Die Konfiguration einer Transformation in mediniQVT<br />

Vor der Ausführung der Transformation sollen die Metamodelle in der QVT-Umgebung deklariert<br />

werden. Diese Einstellung erfolgt über das Menü ” Preferences“. Es kann ein beliebi-<br />

Abbildung 4.5.: Die Deklaration der Metamodelle in der mediniQVT-Umgebung.<br />

ges Instanz des SimpleUWEold-Metamodell mithilfe der Transformation auf die neue Version<br />

des Metamodells migriert werden. Hier wird als Beispiel für das Quellmodell das AdressBuch-<br />

<strong>Modell</strong> von der UWE-Webseite genommen. 1 Neben dem Transformationsskript sollen das<br />

Abbildung 4.6.: Die Run-Konfiguration der Transformation.<br />

Quell- und das Zielmodell angegeben werden. Als Richtung der Transformationsausführung<br />

soll das Ziel, in dem Fall trg ausgewählt werden.<br />

1 http://uwe.pst.ifi.lmu.de/exampleAddressBookWith<strong>Co</strong>ntentUpdates.html<br />

61


4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz<br />

4.6. Zusammenfassung<br />

In diesem Kapitel wurde demonstriert, wie eine Transformation mithilfe der relationalen<br />

QVT-Sprache für die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> aussehen kann. Hierbei besteht eine solche Transformation<br />

zum Teil aus Kopier-Relationen, welche die Elemente, die infolge der Metamodell-<br />

<strong>Evolution</strong> nicht geändert wurden, kopieren. Zum anderen Teil besteht die Transformation<br />

aus den Relationen, die Elemente, die sich infolge der Metamodell-<strong>Evolution</strong> geändert haben<br />

auf entsprechende Elemente des neuen Metamodells abbilden. Es hat sich bei der Analyse der<br />

Metamodelländerungen zwischen UWE-Präsentationsmetamodell in der Version 1.7 und in<br />

der Version 1.8 ergeben, dass <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> vollkommen automatisiert erfolgen kann.<br />

Dies ist möglich, weil alle Metamodell-Änderungen zu dem Typ ” unbreaking changes“ oder<br />

zu dem Typ ” breaking and resolvable changes“ zugeordnet sind. Außer der vollkommen automatisierten<br />

<strong>Co</strong>-<strong>Evolution</strong> kann man die zu transformierenden <strong>Modell</strong>e zusätzlich während<br />

der Transformationsabarbeitung validieren lassen, indem man mithilfe OCL-Ausdrücken Invarianten<br />

innerhalb der where-Klauseln und Vorbedingungen innerhalb der when-Klauseln<br />

festlegt.<br />

Man kann von den Änderungsarten ausgehend den größten Teil der Relationen über die<br />

vordefinierten Transformationsmuster definieren. In manchen Fällen, wie es z.B. bei der Form<br />

und Anchored<strong>Co</strong>llection vorher der Fall war, gibt es Abweichungen von dem Allgemeinfall.<br />

Man kann nur mithilfe semantischen Wissens über entsprechende Metamodelle und deren<br />

Änderungen mehr Einzelheiten und Informationen auf unterschiedlichen Wegen in die neue<br />

Version übernehmen. Dies sind für jedes Metamodell eine spezifische Besonderheiten, die sich<br />

nicht kategorisieren lassen. Im Großen und Ganzen ist aber die Typologie aus dem Kapitel 3<br />

sehr hilfreich bei der Definition der Transformation, sodass man von Transformationsmustern<br />

sprechen kann.<br />

In diesem Kapitel wurde illustrativ vorgestellt, wie <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> für Metamodellbasierte<br />

UWE-<strong>Modell</strong>e unter dem Einsatz der Transformationen durchgeführt werden kann.<br />

Dadurch wurde zwar bewiesen, dass die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> gemäß der Überlegungen aus<br />

dem Kapitel 3 für UWE-<strong>Modell</strong>e funktioniert, aber es wurde damit keine anwendbare Lösung<br />

für die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> der UWE-<strong>Modell</strong>e angeboten. Bei der <strong>Modell</strong>ierungsumgebung<br />

für UWE-<strong>Modell</strong>e werden diese nicht als Instanzen derer Metamodelle definiert, sondern als<br />

UML-<strong>Modell</strong>e unter einer Anwendung von UWE-Profil. Der in diesem Kapitel beschriebener<br />

Ansatz zur Definition der Ecore-Metamodelle liefert eine schwergewichtige Erweiterung<br />

des UML im Rahmen der UWE-Methodologie. Das UWE setzt auf die UML-Profile als eine<br />

leichtgewichtige Erweiterung der UML. Die oben vorgeführten Transformationen sollen<br />

für eine Integration in die Toolumgebung der UWE-Methodologie im nächsten Abschnitt<br />

angepasst werden.<br />

62


5. Integration des UWE-Profil-basierten<br />

transformativen Ansatzes in die UWE<br />

Toolumgebung<br />

In diesem Kapitel wird eine Basis für die Integration des transformativen Ansatzes in eine<br />

Toolumgebung für UWE-Methodologie vorgestellt. Zuerst wird die UWE-Profil-basierte<br />

Transformation für die UWE-<strong>Modell</strong>e mit dem angewendeten UWE-Profil aus der metamodellbasierten<br />

Transformation siehe Kapitel 4 abgeleitet. Anschließend wird eine Toolumgebung<br />

für die Integration des UWE-Profil-basierten transformativen Ansatzes ausgewählt.<br />

Nach einer Anforderungsanalyse an diese Integration wird diese Integration detailliert beschrieben.<br />

5.1. Anpassung der metamodellbasierten Transformation für<br />

UWE-<strong>Modell</strong>e<br />

In Kapitel 4.3.2 vorgestellte Transformation für die UWE-<strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> basiert auf<br />

den Metamodelländerungen, welche durch die Metamodell-<strong>Evolution</strong> entstanden sind (siehe<br />

Kapitel 4). Die Definition eigener UWE-Metamodelle mithilfe des Eclipse Modeling Frameworks,<br />

die im Kapitel 4 vorgestellt wurde, liefert eine schwergewichtige Erweiterung der<br />

UML. Das UWE-Profil dagegen ermöglicht eine leichtgewichtige Erweiterung der UML. Es<br />

soll an dieser Stelle eine Strategie vorgeschlagen werden, die es erlaubt aus der metamodellbasierten<br />

Transformation eine UWE-Profil-basierte Transformation abzuleiten. Die Grundlage<br />

dafür liefern die Mappings, die bei der UWE-Metamodelldefinition zusätzlich definiert sind.<br />

Jedem nicht-abstrakten Element des UWE-Metamodells wird ein Stereotyp im UWE-Profil<br />

zugeordnet:<br />

UWE-Metamodellklasse UWE-Stereotype<br />

PresentationClass <br />

PresentationGroup <br />

Page <br />

PresentationProperty <br />

Text <br />

TextInput <br />

Anchor <br />

Anchored<strong>Co</strong>llection <br />

Button <br />

Image <br />

Form <br />

63


5. Integration des UWE-Profil-basierten transformativen Ansatzes in die UWE Toolumgebung<br />

Das UWE-Profil der Version 1.7 wird in der Abbildung 5.1 veranschaulicht. Somit lassen<br />

sich neue Relationen für die UWE-Profil-basierte Transformation aus den entsprechenden<br />

Relationen der metamodellbasierten Transformation (aus Kapitel 4.3) für jedes UWE-<br />

Profilelement direkt ableiten.<br />

Jedes UWE-<strong>Modell</strong> wird als UML2 <strong>Modell</strong> definiert, wobei das UWE-Profil auf dieses <strong>Modell</strong><br />

angewendet wird. Auf die Klassen des <strong>Modell</strong>s werden bestimmte UWE-Stereotypen angewendet.<br />

Die Attribute werden als TaggedValues aus dem UWE-Metamodell übernommen.<br />

Abbildung 5.1.: Das UML-Profil in Version 1.7<br />

Als Metamodell wird bei der UWE-Profilbasierten Transformation das Eclipse UML2 Metamodell<br />

in Ecore-Format verwendet, dass im Kapitel 2.5.2 bereits beschrieben wurde. Diese<br />

Umstellung auf das neue Metamodell bringt einige Anpassungen an der Transformation aus<br />

Kapitel 4.3 mit sich, die im Weiteren erläutert werden.<br />

5.1.1. Der Zugriff auf die angewendeten UWE-Stereotypen<br />

Das Quellmodell für die Transformation ist in Form eines UML 2 <strong>Modell</strong>s angegeben, wobei<br />

einige UWE-Stereotypen auf die Klassen dieses <strong>Modell</strong>s angewendet wurden. Im Fall des<br />

Präsentationsmodells sind alle eingesetzten Klassen mit den UWE-Stereotypen markiert. Im<br />

Rahmen der Transformation werden folgende Hilfsfunktionen definiert, die einen Zugriff auf<br />

ein Stereotyp anhand seines Namens ermöglicht: die getStereotype und die getStereotypes.<br />

Hier sind die Hilfsfunktionen bis auf ihren Rückgabenwerttyp identisch. Die zweite Funktion<br />

64


5.1. Anpassung der metamodellbasierten Transformation für UWE-<strong>Modell</strong>e<br />

liefert eine Menge der Stereotypen für einen bestimmten Stereotypnamen. Diese Hilfsfunktionen<br />

können im Weiteren aus anderen Relationen unter den when-Klauseln aufgerufen<br />

werden.<br />

1 query g e t S t e r e o t y p e ( stName : String ) : Stereotype<br />

2 {<br />

3 Stereotype . a l l I n s t a n c e s ( )−><br />

4 s e l e c t ( x : uml : : Stereotype |<br />

5 x . name = stName )−><br />

6 asSequence ( )−> f i r s t ( )<br />

7 }<br />

8<br />

9 query g e t S t e r e o t y p e s ( stName : String ) : Sequence ( Stereotype )<br />

10 {<br />

11 Stereotype . a l l I n s t a n c e s ( )−><br />

12 s e l e c t ( x : uml : : Stereotype |<br />

13 x . name = stName )−><br />

14 asSequence ( )<br />

15 }<br />

Listing 5.1: Die Hilfsfunktionen für das Zugriff auf ein angewendetes Stereotyp<br />

Das UWE-Profil wird in der Transformationskonfiguration neben dem Quellmodell angegeben.<br />

Somit ist während der Abarbeitung der Transformation der Zugriff auf all die verfügbaren<br />

UWE-Stereotypen gewährleistet. Unter einer when-Klausel einer Relation, kann somit<br />

abgefragt werden, ob ein Stereotyp mit vorgegebenen Namen auf eine Klasse angewendet<br />

ist.<br />

1 when<br />

2 {<br />

3 s t = g e t S t e r e o t y p e ( ’text’ ) ;<br />

4 s r c C l s . i s S t e r e o t y p e A p p l i e d ( s t ) ;<br />

5 }<br />

Listing 5.2: Die Anwendung des Stereotyps text wird unter der when-Klausel geprüft<br />

Zuerst wird in einer Variablen st vom Typ uml:Stereotype anhand des Stereotypnamens der<br />

Wert für den Stereotyp mithilfe der oben beschriebenen Hilfsfunktion gespeichert.<br />

Dann kann mit Hilfe der isStereotypeApplied-Funktion geprüft werden, ob dieses Stereotyp<br />

auf der Quellklasse srcCls angewendet ist.<br />

5.1.2. Die neu angepasste Transformation<br />

Die neuen Relationen sind den Relationen aus Kapitel 4.3 sehr ähnlich. Das Schreiben von<br />

einem QVT-Skript in der relationalen QVT-Sprache, das auf dem Eclipse UML2 Metamodell<br />

aufbaut, soll gemäß diesem Metamodell angepasst werden. Dies betrifft die Struktur<br />

der Transformation. Um UML-Klassen transformieren zu können, wird die Transformation<br />

rekursiv aufgebaut.<br />

65


5. Integration des UWE-Profil-basierten transformativen Ansatzes in die UWE Toolumgebung<br />

Die top-level-Relation<br />

Bei einem rekursiven Aufbau gibt es nur eine top level-Relation, alle anderen Relationen<br />

werden in den where-Klauseln aufgerufen. Das Präsentationspaket ist in dem Präsentationsmodell<br />

enthalten. Das Model-Relation ist die einzige top-level-Relation. Die Relation<br />

Packages wird in der where-Klausel der Relation Model aufgerufen.<br />

1 transformation e v o l u t i o n P r o f i l ( source : uml , t a r g e t : uml )<br />

2 {<br />

3 key Class {name , owner } ;<br />

4 key Property {name , owner } ;<br />

5<br />

6 top relation Model<br />

7 {<br />

8 modelName : String ;<br />

9 checkonly domain source s r c : uml : : Model<br />

10 {<br />

11 name = modelName<br />

12 } ;<br />

13 enforce domain t a r g e t dst : uml : : Model<br />

14 {<br />

15 name = modelName<br />

16<br />

17 } ;<br />

18 where<br />

19 {<br />

20 Packages ( src , dst ) ;<br />

21 }<br />

22 }<br />

23 relation Packages<br />

24 {<br />

25 packageName : String ;<br />

26 checkonly domain source srcPkg : uml : : Package<br />

27 {<br />

28 packagedElement = srcP : uml : : Package { name = packageName }<br />

29 } ;<br />

30 enforce domain t a r g e t dstPkg : uml : : Package<br />

31 {<br />

32 packagedElement = dstP : uml : : Package { name = packageName }<br />

33 } ;<br />

34 where<br />

35 {<br />

36 Packages ( srcP , dstP ) ;<br />

37 Datatypes ( srcP , dstP ) ;<br />

38 pageClasses ( srcP , dstP ) ;<br />

39 P r e s C l a s s C l a s s e s ( srcP , dstP ) ;<br />

40 t e x t C l a s s e s ( srcP , dstP ) ;<br />

41 anchorClasses ( srcP , dstP ) ;<br />

42 −− d i e r e s t l i c h e n Aufrufe werden wegen der Ü b e r s i c h t l i c h k e i t<br />

n i c h t angegeben −−<br />

43 }<br />

44 }<br />

66


5.1. Anpassung der metamodellbasierten Transformation für UWE-<strong>Modell</strong>e<br />

Listing 5.3: Die Relationen für das <strong>Modell</strong> und das Paket<br />

Unter der Verwendung des Eclipse UML 2 kann ein Objektausdruck in Form namespace =<br />

trgPackage nicht angegeben werden, da namespace keine Informationen über die Pakete, in<br />

denen eine Klasse enthalten ist, bereitstellt. Dies wird mithilfe von einem key umgegangen.<br />

Eine Angabe von key erlaubt bei der Generierung von Zielelementen die Duplikate zu unterbinden.<br />

Die in den Zeilen 3 und 5 des Listings 5.3 definierte keys für die Klassen und die<br />

Properties lösen das Problem mit dem fehlenden Bezug der Klassen auf deren Paket. Sobald<br />

eine Klasse mit einem eindeutigen Namen erzeugt wird, wird bei jedem Versuch diese Klasse<br />

erneut zu erzeugen diese bereits existierende Klasse genommen. Dies entspricht der Tatsache,<br />

dass innerhalb eines Pakets keine Klassen mit denselben Namen existieren dürfen.<br />

Die Relation für den Text<br />

Im Weiteren wird eine Relation für Textelemente betrachtet. Diese Relation ist nahezu identisch<br />

zu der Relation mapText aus dem Kapitel 4. Unter der when-Klausel wird geprüft,<br />

ob die Klasse mit dem -Stereotyp markiert ist. Bei dieser Relation werden ausschließlich<br />

solche Klassen berücksichtigt.<br />

1 −− Relation b e t r a c h t e t nur Klassen mit dem Stereotyp t e x t −−<br />

2 relation t e x t C l a s s e s<br />

3 {<br />

4 s t : uml : : Stereotype ;<br />

5 className : String ;<br />

6 checkonly domain source s r c : uml : : Package<br />

7 {<br />

8 packagedElement = s r c C l s : uml : : Class<br />

9 {<br />

10 name = className<br />

11 }<br />

12 } ;<br />

13 enforce domain t a r g e t dst : uml : : Package<br />

14 {<br />

15 packagedElement = dstCls : uml : : Class<br />

16 {<br />

17 name = className<br />

18 }<br />

19 } ;<br />

20 when<br />

21 {<br />

22 s t = g e t S t e r e o t y p e ( ’text’ ) ;<br />

23 s r c C l s . i s S t e r e o t y p e A p p l i e d ( s t ) ;<br />

24 }<br />

25 where<br />

26 {<br />

27 −− Klasse Text erbt von OutputElement das A ttribute<br />

p e r i o d i c R e f r e s h −−<br />

28 p e r i o d i c R e f r e s h A t t r i b u t e ( dstCls ) ;<br />

29 −− Erbt von der S u p e r k l a s s e ValuedElement das Attribute<br />

l i v e R e p o r t −−<br />

67


5. Integration des UWE-Profil-basierten transformativen Ansatzes in die UWE Toolumgebung<br />

30 l i v e R e p o r t A t t r i b u t e ( dstCls ) ;<br />

31 }<br />

32 }<br />

1<br />

Listing 5.4: Die Relation für die Textelemente<br />

In Version 1.7 des UWE-Profils besitzt das Stereotyp keine Attribute in Form<br />

einer TaggedValue. In Version 1.8 sind zwei neue Attribute dazugekommen: das periodicRefresh<br />

und das liveReport. Das Text-Element erbt im UWE-Metamodell diese Attribute von<br />

den abstrakten Klassen OutputElement und ValuedElement. Die Erzeugung dieser Attribute<br />

wird in einer speziellen Relation erzwungen.<br />

Im nächsten Listing ist die Relation für das liveReport-Attribut vorgestellt:<br />

2 relation l i v e R e p o r t A t t r i b u t e<br />

3 {<br />

4 enforce domain t a r g e t oc : uml : : Class<br />

5 {<br />

6 ownedAttribute = op : uml : : Property<br />

7 {<br />

8 name = ’liveReport’ ,<br />

9 v i s i b i l i t y = uml : : V i s i b i l i t y K i n d : : private ,<br />

10 type = getDataTypeBoolean ( )<br />

11 }<br />

12 } ;<br />

13 }<br />

Listing 5.5: Die Relation für die Erzeugung eines liveReport-Attributs<br />

Diese Relation verfügt ausschließlich über die enforce-Domäne. In der Zielklasse wird das<br />

Attribute liveReport erzwungen.<br />

Wie im Kapitel 4.3.2 bereits beschrieben, gehört der Text zu den einfachen UIElements.<br />

Somit sind die Relationen für die Transformation der restlichen Subklassen des Elements<br />

UIElement, solchen wie das Image, der Button und das Anchor der Relation textClasses<br />

sehr ähnlich und werden im Weiterem nicht näher behandelt.<br />

5.1.3. Die Relation für die PresentationClass<br />

Die Relation für die Klassen, die mit dem -Stereotyp markiert sind,<br />

sieht folgendermaßen aus:<br />

1 −− Relation b e t r a c h t e t nur Klassen mit dem Stereotyp<br />

p r e s e n t a t i o n C l a s s −−<br />

2 relation P r e s C l a s s e s<br />

3 {<br />

4 s t : uml : : Stereotype ;<br />

5 className : String ;<br />

6 checkonly domain source s r c : uml : : Package<br />

7 {<br />

68


5.1. Anpassung der metamodellbasierten Transformation für UWE-<strong>Modell</strong>e<br />

8 packagedElement = s r c C l s : uml : : Class<br />

9 {<br />

10 name = className<br />

11 }<br />

12 } ;<br />

13 enforce domain t a r g e t dst : uml : : Package<br />

14 {<br />

15 packagedElement = dstCls : uml : : Class<br />

16 {<br />

17 name = className<br />

18 }<br />

19 } ;<br />

20 when<br />

21 {<br />

22 s t = g e t S t e r e o t y p e ( ’presentationClass’) ;<br />

23 s r c C l s . i s S t e r e o t y p e A p p l i e d ( s t ) ;<br />

24 }<br />

25 where<br />

26 {<br />

27 −− Kopiere bestehende P r o p e r t i e s −−<br />

28 A t t r i b u t e s ( srcCls , dstCls ) ;<br />

29 −− A l l e PresentationGroup und deren Subklassen b e s i t z e n −−<br />

30 −− im neuen Metamodell A ttribute c o l l a p s e und dragdrop −−<br />

31 c o l l a p s e A t t r i b u t e ( dstCls ) ;<br />

32 dragdropAttribute ( dstCls ) ;<br />

33 }<br />

34 }<br />

Listing 5.6: Die Relation für die PresentationClass<br />

Wird bei der Abarbeitung der Transformation eine Klasse mit dem Stereotyp gefunden, so wird eine Klasse mit denselben Namen im Zielmodell erzeugt. Die<br />

Properties der PresentationClass werden in der Attributes-Relation erzwungen. Im UWE-<br />

Metamodell wurden zwei neuen Attribute der Klasse PresentationGroup hinzugefügt: collapse<br />

und dragdrop. Diese Attribute werden analog wie das Attribute liveReport von Text in<br />

einer ausgelagerten Relation der Zielklasse hinzugefügt.<br />

Die presentationClass gehört zu der Gruppe der Elementen, die PresentationProperties besitzen<br />

dürfen, genau so wie die PresentationGroup und die Page. Aus diesem Grund werden<br />

die Relationen für die PresentationGroup und die Page nicht näher erläutert. Die Klassen<br />

werden nach dem angewendeten Stereotyp unterschieden, somit wird auch strikt zwischen<br />

der PresentationClass und deren Subklassen unterschieden.<br />

Im Weiteren wird die Relation Attributes für die Erzeugung der Properties einer PresentationClass<br />

beschrieben.<br />

Die Relation für die PresentationProperty<br />

In der UML 2 wird zwischen einfachen und komplexen Attributen unterschieden. In der<br />

Relation Attributes werden in der where-Klausel dafür weitere Relationen aufgerufen: pri-<br />

69


5. Integration des UWE-Profil-basierten transformativen Ansatzes in die UWE Toolumgebung<br />

mitiveAttribute und complexAttribute. In der Relation primitiveAttribute werden die einfachen<br />

UML-Datatypen als Attribute behandelt. Zum Beispiel kann eine Klasse aus dem<br />

Quellmodell einen Attribute von Typ boolean oder String besitzen.<br />

1 relation A t t r i b u t e s<br />

2 {<br />

3 checkonly domain source i c : uml : : Class<br />

4 {<br />

5 ownedAttribute = ip : uml : : Property {}<br />

6 } ;<br />

7 enforce domain t a r g e t oc : uml : : Class<br />

8 {<br />

9 ownedAttribute = op : uml : : Property {}<br />

10 } ;<br />

11 where<br />

12 {<br />

13 p r i m i t i v e A t t r i b u t e ( ip , op ) ;<br />

14 complexAttribute ( ip , op ) ;<br />

15 }<br />

16 }<br />

17<br />

18 relation p r i m i t i v e A t t r i b u t e<br />

19 {<br />

20 propName : String ;<br />

21 propType : uml : : DataType ;<br />

22 p r o p V i s i b i l i t y : uml : : V i s i b i l i t y K i n d ;<br />

23 checkonly domain source scrPr : uml : : Property<br />

24 {<br />

25 name = propName ,<br />

26 v i s i b i l i t y = p r o p V i s i b i l i t y ,<br />

27 type = propType<br />

28 } ;<br />

29 enforce domain t a r g e t trgPr : uml : : Property<br />

30 {<br />

31 name = propName ,<br />

32 v i s i b i l i t y = p r o p V i s i b i l i t y ,<br />

33 type = propType<br />

34 } ;<br />

35 when<br />

36 {<br />

37 not propType . oclIsTypeOf ( uml : : Class ) ;<br />

38 }<br />

39 }<br />

40<br />

41 relation complexAttribute<br />

42 {<br />

43 propName : String ;<br />

44 className : String ;<br />

45 p r o p V i s i b i l i t y : uml : : V i s i b i l i t y K i n d ;<br />

46 checkonly domain source scrPr : uml : : Property<br />

47 {<br />

48 name = propName ,<br />

49 v i s i b i l i t y = p r o p V i s i b i l i t y ,<br />

70


50 type = c l s : uml : : Class<br />

51 {<br />

52 name = className<br />

53 }<br />

54 } ;<br />

55 enforce domain t a r g e t trgPr : uml : : Property<br />

56 {<br />

57 name = propName ,<br />

58 v i s i b i l i t y = p r o p V i s i b i l i t y ,<br />

59 type = c l s 2 : uml : : Class<br />

60 {<br />

61 name = className<br />

62 }<br />

63 } ;<br />

64 when<br />

65 {<br />

66 s t = g e t S t e r e o t y p e ( ’presentationProperty’) ;<br />

67 scrPr . i s S t e r e o t y p e A p p l i e d ( s t ) ;<br />

68 }<br />

69 }<br />

Listing 5.7: Die Relation für die PresentationProperties<br />

5.2. Wahl der Toolumgebung<br />

Die Relation primitiveAttribute erzwingt ein Attribut mit seinem Namen, der Sichtbarkeit<br />

und dem Typ. Unter der when-Klausel wird folgende Bedingung aufgestellt:<br />

not propType.oclIsTypeOf(uml::Class);<br />

Diese sorgt dafür, dass in der Relation nur die Attribute mit einem einfachen Datentyp<br />

berücksichtigt werden.<br />

Die Relation complexAttribute ermöglicht die Erzeugung von PresentationProperties. Deren<br />

Typ uml:Class ist. Der Name, die Sichtbarkeit und der Klassentyp der Property werden<br />

im Zielmodell übernommen. Unter der when-Klausel wird zusätzlich geprüft, dass -Stereotyp auf die Quellproperty angewendet ist.<br />

Inzwischen wurden alle drei Typen der Elementen des UWE-Präsentationsmodell betrachtet:<br />

die einfachen UIElements, die Elemente, welche Properties besitzen dürfen und die Properties<br />

selbst.<br />

Wie aus den vorgestellten Relationsskripten entnommen werden kann, erfolgt keine Anwendung<br />

der Stereotypen aus dem Profilversion 1.8 auf die Klassen des Zielmodells. Dieses<br />

Problem sowie die Lösungsvorschläge für das Problem werden im Kapitel 5.5 näher angegangen.<br />

5.2. Wahl der Toolumgebung<br />

Die Transformation in der relationalen QVT-Sprache aus Kapitel 4.3 ist für die <strong>Modell</strong>e mit<br />

angewendetem UWE-Profil angepasst worden und mit dem QVT-Werkzeug mediniQVT der<br />

Version 1.7.0 erarbeitet und getestet worden, siehe Kapitel 5.1.2. Das Tool mediniQVT ist<br />

71


5. Integration des UWE-Profil-basierten transformativen Ansatzes in die UWE Toolumgebung<br />

ein Open Source Produkt, das die von der OMG veröffentlichte Spezifikation der relationalen<br />

QVT-Sprache zur Zeit am vollständigsten abbildet[19] Das mediniQVT ist als Plug-in für<br />

die Eclipse-Entwicklungsplattform implementiert.<br />

Das Tool MagicDraw 1 verfügt über keine Implementierungen für die <strong>Modell</strong>transformationen<br />

in der relationalen QVT-Sprache. Die Transformationen können ausschließlich hart kodiert<br />

in Java eingebettet werden. Dadurch gehen alle Vorteile der formalen Transformationen und<br />

die Möglichkeit zur Validierung der <strong>Modell</strong>e während der Ausführung der Transformationen<br />

verloren. Dies widerspricht den Grundideen des MDA. Hinzu kommt, dass es allgemein nicht<br />

einfach ist, mit dem schlecht dokumentierten OpenAPI für MagicDraw zu operieren, wie Petar<br />

Blagoev in seiner Arbeit [3] berichtete. Ebenso erläuterte Marianne Busch in [5], dass die<br />

Verwendung des OpenAPIs nicht einfach ist. Aufgrund der Tatsache, dass der Quellcode von<br />

MagicDraw nicht zur Verfügung steht, schließt dies die Verbesserung sowie die Erweiterung<br />

der OpenAPI Funktionen aus. Diese Tatsache erschwert ebenfalls die Verwendung von bestimmten<br />

APIs, wie z.B. MDT OCL Eclipse Bibliotheken 2 . Es ist nicht möglich herauszufinden<br />

welche Version von MDT OCL Bibliotheken innerhalb der MagicDraw-Implementierung<br />

verwendet wird. Dadurch ist die Implementierung wegen Versionskonflikt zwischen OCL-<br />

Bibliotheken unmöglich. In einer Implementierung einer MagicUWE-Erweiterung für die<br />

Validierung der UWE-<strong>Modell</strong>e wurde dafür ein interner Server implementiert, in den die<br />

OCL-<strong>Co</strong>nstraints-Bearbeitung ausgelagert werden musste, um der Bibliothekinkompatibilität<br />

auszuweichen. Zu guter Letzt fehlt es dem OpenAPI an der Flexibilität, was besonders<br />

bei GUI-Entwicklung zur Last fällt.<br />

Würde es keine anderen Möglichkeiten für die Integration des Transformationsansatzes in<br />

die UWE-Methodologie geben, so müsste man sich mit der einzigen Integrationsmöglichkeit<br />

zufriedengeben: die Transformationen hart codiert in Java für das Tool MagicUWE zu implementieren.<br />

Letztens wurde ein zu MagicDraw alternatives Tool implementiert, mit dem UWE-<strong>Modell</strong>e<br />

erstellt werden können. Dieses Tool soll an dieser Stelle in Betracht gezogen werden. Das<br />

UWEclipse ist im Rahmen der Diplomarbeit ” Erweiterung eines Open Source-Werkzeugs<br />

für die UML-basierte <strong>Modell</strong>ierung von Webanwendungen“ von Dariya Sharonova entstanden.<br />

Das UWEclipse ist die Nachbildung bzw. die Migration der MagicUWE-Funktionalität<br />

in ein Open Source-Werkzeug vergleichbar mit MagicDraw <strong>Modell</strong>ierungsmöglichkeiten[22].<br />

Die im Rahmen der oben genannten Diplomarbeit entwickelte Software-Lösung für die Unterstützung<br />

der UWE-Methodologie (UWEclipse) ist in den TOPCASED UML Editor integriert.<br />

TOPCASED ist ein grafisches UML-<strong>Modell</strong>ierungswerkzeug (Eclipse-basierte RCP),<br />

das in Version 5.0.0 erweitert wurde. UWEclipse ist in Form eines Eclipse-Plug-ins entwickelt<br />

worden. Auf diese Weise kann es problemlos in jede mit TOPCASED ausgestattete Eclipse-<br />

Distribution integriert werden und auf der Funktionalität von TOPCASED aufbauen.[22]<br />

In der Eclipse-Umgebung im Gegensatz zu MagicDraw steht eine Anzahl der QVT-Implementierungen<br />

zur Verfügung. Unter anderem das Tool, namens mediniQVT 3 für die Durch-<br />

1 http://uwe.pst.ifi.lmu.de/toolMagicUWE.html<br />

2 http://www.eclipse.org/modeling/mdt/?project=ocl<br />

3 http://projects.ikv.de/qvt<br />

72


5.3. Die Anforderungsanalyse für die Integration des transformativen Ansatzes<br />

führung der Transformationen in der relationalen QVT-Sprache, das im Kapitel 4.3 ausführlich<br />

besprochen worden war. Sobald eine Transformation in der relationalen QVT-Sprache<br />

für einen gegebenen Versionsübergang zur automatisierten <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> von existierenden<br />

UWE-<strong>Modell</strong>en vorliegt, können beliebige <strong>Modell</strong>e dem <strong>Co</strong>-<strong>Evolution</strong>-Prozess<br />

unterzogen werden. Das Tool TOPCASED mit mediniQVT und einer Kombination aus<br />

ausgewählten Eclipse-Plug-ins erweitert, die im Weiteren beschrieben werden, soll dem <strong>Modell</strong>ierer<br />

eine Basis für die Durchführung der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> schaffen.<br />

Im nächsten Kapitel wird eine Anforderungsanalyse für die Integration des transformativen<br />

Ansatzes in eine Eclipse-basierte <strong>Modell</strong>ierungsumgebung beschrieben. Nachfolgend werden<br />

ausgewählte Eclipse-basierte Tools näher vorgestellt, welche den <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>sprozess<br />

unterstützen sollen. Die Resultate und Probleme bei der Durchführung der <strong>Modell</strong>-<strong>Co</strong>-<br />

<strong>Evolution</strong> für UWE-<strong>Modell</strong>e werden anschließend vorgestellt und Alternativen zur Lösung<br />

der Probleme aufgezeigt.<br />

5.3. Die Anforderungsanalyse für die Integration des<br />

transformativen Ansatzes<br />

Zuerst werden die funktionalen Anforderungen für die Durchführung des <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>-<br />

Prozesses unter die Lupe genommen. Anschließend werden einige nicht-funktionale Anforderungen<br />

gestellt und bestimmte Aspekte wie z.B. deren Bedienbarkeit diskutiert.<br />

5.3.1. Die funktionalen Anforderungen<br />

Dem <strong>Modell</strong>ierer soll die automatisierte <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> im Rahmen einer <strong>Modell</strong>ierungsumgebung<br />

ermöglicht werden. Es wird vorausgesetzt, dass das neue und das alte UWE-<br />

Profile vorliegen, ebenso wie das entsprechende Transformationsskript. Im Folgenden werden<br />

die Anwendungsfälle für die Durchführung der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> beschrieben.<br />

Die Grundidee besteht darin, dass die Toolumgebung dem <strong>Modell</strong>ierer zusätzliche Funktionalität<br />

zur automatisierten <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> anbietet. Es soll möglich sein, dass für<br />

ein beliebiges <strong>Modell</strong>, das unter Anwendung der alten Version des UWE-Profils erstellt wurde,<br />

ein neues <strong>Modell</strong> generiert wird, das weitgehend all die Informationen des alten <strong>Modell</strong>s<br />

beinhaltet. Das neue generierte <strong>Modell</strong> geht mit der neuen Version des UWE-Metamodells<br />

konform.<br />

Die Anpassungen, die im Laufe der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> vorgenommen wurden, sollen im<br />

generierten <strong>Modell</strong> nach Bedarf gekennzeichnet werden, damit der <strong>Modell</strong>ierer genau weiß,<br />

auf welchem Weg das <strong>Modell</strong> transformiert wurde. Das heißt, dass die Elemente des <strong>Modell</strong>s,<br />

die aufgrund der Metamodell-<strong>Evolution</strong> geändert worden sind, hervorgehoben werden<br />

sollen. Sollten im alten Metamodell Elemente vorhanden sein, deren Änderungstyp wegen<br />

Metamodell-<strong>Evolution</strong> zu der Kategorie ” breaking and unresolvable changes“ zählen, so ist<br />

eine automatisierte Transformation der Instanzen solcher Elemente nicht möglich. Diese Anpassungen<br />

sind ohne menschliches Eingreifen nicht möglich. Sie werden bei der Transforma-<br />

73


5. Integration des UWE-Profil-basierten transformativen Ansatzes in die UWE Toolumgebung<br />

tion übersprungen. Diese Elemente sollten im ursprünglichen <strong>Modell</strong> nach Wunsch angezeigt<br />

werden können. Dem <strong>Modell</strong>ierer soll außerdem die Dokumentation für die Strategie der Anpassung<br />

dieser Elemente zur Verfügung gestellt werden. Wie in der Zusammenfassung des<br />

Kapitels 3 bereits beschrieben, kann die Eindeutigkeit des <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>sprozesses<br />

nur durch die genaue Spezifikation aller Anpassungsmöglichkeiten gewährleistet werden.<br />

Insbesondere soll genau spezifiziert werden wie die Anpassungen der <strong>Modell</strong>elementen erfolgen<br />

sollen, die durch ” breaking and unresolvable changes“ bedingt sind. Die Strategie für<br />

die manuellen Anpassungsschritte solcher Elementen soll bei der Erarbeitung der <strong>Modell</strong>-<br />

<strong>Co</strong>-<strong>Evolution</strong> aus der Metamodell-<strong>Evolution</strong> abgeleitet, dokumentiert und in Form einer<br />

Spezifikation dem <strong>Modell</strong>ierer zur Verfügung gestellt werden.<br />

Die Instanzen der Metamodellelemente deren Änderungstyp wegen Metamodell-<strong>Evolution</strong><br />

zu der Kategorie ” breaking and resolvable changes“ zählen, werden mithilfe der Transformation<br />

in die neuen geänderte <strong>Modell</strong>elemente überführt. Im Zielmodell soll die Hervorhebung<br />

dieser Elemente möglich sein, um die Änderungen während der Transformation zu veranschaulichen.<br />

Die Hervorhebung der Elemente soll sich in Abhängigkeit von der Metamodellmodifikation<br />

an diesem Element unterscheiden. Entweder wurde das Element geändert oder<br />

neu hinzugefügt. Gelöschte Elemente sind nicht mehr vorhanden und sollten im Quellmodell<br />

hervorgehoben werden.<br />

Im Weiteren werden unterschiedliche Möglichkeiten zur Hervorhebung dieser Elemente im<br />

Bezug auf die Bedienbarkeit diskutiert.<br />

5.3.2. Die nicht-funktionalen Anforderungen<br />

Bei den nicht-funktionalen Anforderungen steht die Bedienbarkeit bzw. die Benutzerfreundlichkeit<br />

im Vordergrund. Die genauen Beschreibungen für jedes konkretes <strong>Modell</strong>element<br />

für seine <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> sollen dem <strong>Modell</strong>ierer zugänglich sein. Die Beschreibungen<br />

der <strong>Co</strong>-<strong>Evolution</strong>sstrategie könnten in Form von Zusatzinformationen zu jedem Element<br />

im <strong>Modell</strong> hinzugefügt und mit angezeigt werden. Sind die <strong>Modell</strong>e komplex, an denen <strong>Co</strong>-<br />

<strong>Evolution</strong> stattfinden soll, und wird bei jedem Element im Diagramm eine Zusatzinformation<br />

diesbezüglich angezeigt, so werden die neu angepassten <strong>Modell</strong>e bald unübersichtlich und mit<br />

Zusatzinformationen überladen. Dies sollte vermieden werden.<br />

Es soll dem <strong>Modell</strong>ierer auf jeden Fall ermöglicht werden die Anzahl und die Form der anzuzeigenden<br />

Informationen zu konfigurieren. Außerdem soll die Kalkulation des neuen <strong>Modell</strong>s,<br />

also die tatsächliche Transformation, effizient verlaufen. Die Korrektheit der Ausführung des<br />

<strong>Co</strong>-<strong>Evolution</strong>-Prozesses ist auch eine der wichtigsten Anforderungen. Im Folgenden sind die<br />

nicht-funktionalen Anforderungen zusammengefasst:<br />

74<br />

• Die Bedienbarkeit<br />

• Die Benutzerfreundlichkeit<br />

• Die Konfigurierbarkeit<br />

• Die Korrektheit<br />

• Die Performanz


5.3. Die Anforderungsanalyse für die Integration des transformativen Ansatzes<br />

Die Korrektheit ist dadurch gewährleistet, dass bei der Definition der Transformationen<br />

vollständige Informationen über die Metamodelländerungen vorliegen. Die Transformation<br />

selbst enthält die Vorbedingungen und Invarianten in der OCL-Sprache, die während der<br />

Ausführung der Transformation geprüft werden. Somit wird stets ein korrektes <strong>Modell</strong> als<br />

Ergebnis der Transformation geliefert. Die restlichen nicht-funktionalen Anforderungen werden<br />

genauer angegangen.<br />

Es ist notwendig, nach jeder Transformation deren Ergebnisse auch entsprechend zu visualisieren.<br />

Da das UWE selbst eine Methodologie für die grafische <strong>Modell</strong>ierung ist, hängt<br />

die Benutzer-Akzeptanz sicherlich maßgeblich von der grafischen Darstellung der <strong>Modell</strong>differenzen<br />

und Änderungen des <strong>Modell</strong>s ab. Wünschenswert wäre natürlich eine Markierung<br />

des geprüften <strong>Modell</strong>s selbst, um so die <strong>Modell</strong>differenzen direkt im <strong>Modell</strong>ierungswerkzeug<br />

visualisieren und auch entsprechend bearbeiten zu können.<br />

In den Kapiteln 3.2.2 bis 3.2.4 wurde zwischen additiven Änderungen, subtraktiven Änderungen<br />

und Updates an einem Metamodell unterschieden. Dementsprechend werden diese<br />

Aktionen an den existierenden <strong>Modell</strong>en während der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> nachvollzogen.<br />

Nach der Ausführung der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> wird erwartet, dass die Unterschiede zwischen<br />

dem Ursprungs- und dem Zielmodell hervorgehoben werden. Im Zielmodell soll die Hervorhebung<br />

der Elemente möglich sein, um zu visualisieren welche Änderungen sie während der<br />

Transformation erfahren haben. Die Hervorhebung der Elemente soll sich in Abhängigkeit<br />

von der Metamodellmodifikation, die dieses Element betrifft, unterscheiden. Entweder wurde<br />

das Element geändert oder neu hinzugefügt, die gelöschten Elemente sind nicht mehr vorhanden.<br />

Die Umrandung der Elemente mit unterschiedlichen Farben würde diese kennzeichnen,<br />

ohne das <strong>Modell</strong> mit Informationen zu überladen. Zum Beispiel könnten neu hinzugefügte<br />

Elemente mit Grün umrandet sein und die geänderten Elemente mit Gelb.<br />

Sind im alten Metamodell Elemente vorhanden, deren Änderungstyp wegen Metamodell-<br />

<strong>Evolution</strong> zu der Kategorie ” breaking and unresolvable changes“ gehört, so ist eine automatisierte<br />

Transformation solcher Elemente nicht möglich, somit werden diese bei der Transformation<br />

übersprungen. Diese Elemente sollten im ursprünglichen <strong>Modell</strong> nach Wunsch<br />

angezeigt werden können, z.B. mit einer roten Umrandung. Damit der Entwickler anhand<br />

dieser Elemente entscheiden kann, ob und in welcher Form diese im neuen <strong>Modell</strong> übernommen<br />

werden sollen. So kann vermieden werden, dass für das <strong>Modell</strong> relevante Informationen<br />

aus Versehen verloren gehen. Sind in beiden <strong>Modell</strong>en farbige Umrandungen an den entsprechenden<br />

Elementen vorhanden, so kann man die Unterschiede zwischen diesen auf einen<br />

Blick sehen. Es sollte möglich sein die farbige Darstellung oder die Darstellung bestimmter<br />

Änderungsgruppen auszublenden. Somit könnte man die Anzeige nach dem eigenen Bedarf<br />

konfigurieren.<br />

75


5. Integration des UWE-Profil-basierten transformativen Ansatzes in die UWE Toolumgebung<br />

5.4. Die Anwendungsfälle<br />

Für ein UWE-<strong>Modell</strong>, das in einer früheren UWE-Profil-Version entwickelt worden ist, soll<br />

eine Transformation zur <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> gestartet werden können. Somit soll dieses<br />

<strong>Modell</strong> in ein neues <strong>Modell</strong> automatisiert überführt werden, das mit der aktuellen Version<br />

des UWE-Profils konform geht. Da die Überführung mithilfe einer Transformation atomar<br />

abgearbeitet wird, ergeben sich folgende wenige Anwendungsfälle:<br />

Abbildung 5.2.: Die Anwendungsfälle für den UWE-<strong>Co</strong>-<strong>Evolution</strong>sprozess<br />

In den nächsten Abschnitten folgt eine detaillierte Beschreibung der Anwendungsfälle.<br />

5.4.1. Das UseCase ” Die Transformation für ein <strong>Modell</strong> durchführen“<br />

Die Kurzbeschreibung<br />

In der Entwicklungsumgebung soll in einer Run-Konfiguration der Speicherort des Quellund<br />

des Ziel-<strong>Modell</strong>s angegeben werden. Das Transformationsskript soll ebenfalls angegeben<br />

werden, sowie die Richtung der Transformationsausführung.<br />

Die Vorbedingung<br />

Das Transformationsskript für den ausgewählten Versionsübergang liegt vor. Das Quell-<br />

<strong>Modell</strong> ist konform zu dem entsprechenden Metamodell.<br />

76


Die Nachbedingung<br />

5.4. Die Anwendungsfälle<br />

Das Zielmodell wird generiert, das zu dem neuen UWE-Metamodell konform ist.<br />

5.4.2. Das UseCase ” Die <strong>Modell</strong>differenzen anzeigen lassen“<br />

Die Kurzbeschreibung<br />

Nachdem das Zielmodell unter Einsatz einer Transformation generiert wurde, soll die Berechnung<br />

der <strong>Modell</strong>differenzen, sowie die farbige Darstellung dieser Differenzen ermöglicht<br />

werden. An der ersten Stelle soll eine Berechnung der <strong>Modell</strong>differenzen für <strong>Modell</strong>e, die<br />

in einer textuellen baumartigen Form repräsentiert sind, möglich sein. Eine graphische Repräsentation<br />

der <strong>Modell</strong>differenzen soll ebenfalls möglich sein.<br />

Die Vorbedingung<br />

Das Quell-<strong>Modell</strong> und das generierte UWE-<strong>Modell</strong> liegen vor. Beide <strong>Modell</strong>e sind zu ihren<br />

Metamodellen konform.<br />

Die Nachbedingung<br />

Die <strong>Modell</strong>differenzen sind aufgelistet. Diese Differenzen sind in der Baumstruktur der <strong>Modell</strong>e<br />

bzw. der grafischen Repräsentation der <strong>Modell</strong>e entsprechend farblich hervorgehoben.<br />

5.4.3. Das UseCase ” Die Konformität eines <strong>Modell</strong>s zu seinem Metamodell<br />

prüfen“<br />

Die Kurzbeschreibung<br />

Es soll dem <strong>Modell</strong>ierer ermöglicht werden, die Konformität der <strong>Modell</strong>e prüfen zu lassen.<br />

Anders ausgedrückt die <strong>Modell</strong>e zu validieren.<br />

Die Vorbedingung<br />

Die Beschränkungen (<strong>Co</strong>nstraints in der OCL-Sprache) für die <strong>Modell</strong>validierung liegen vor.<br />

Die Nachbedingung<br />

Das Ergebnis der Validierung wird angezeigt.<br />

77


5. Integration des UWE-Profil-basierten transformativen Ansatzes in die UWE Toolumgebung<br />

5.5. Die zusammengesetzte Toolumgebung<br />

Das mediniQVT Tool basiert auf der Eclipse Plattform, genau wie das TOPCASED-Tool,<br />

das in unserem Fall für die Definition der UWE-<strong>Modell</strong>e verwendet wurde.<br />

Das Eclipse-Plug-in mediniQVT in der Version 1.7.0 lässt sich problemlos in das Tool TOP-<br />

CASED in der Version 4.3.0 mit einbinden. Somit kann man ohne export/import Aktionen<br />

zwischen den Tools, die <strong>Modell</strong>e den Transformationen unterziehen. Unsere erste Anforderung<br />

war, dass der <strong>Modell</strong>ierer mit wenigen Klicks die Transformation zur <strong>Modell</strong>-<strong>Co</strong>-<br />

<strong>Evolution</strong> starten kann. Diese Anforderung ist bei der oben genannten Tool-Konstellation<br />

bereits erfüllt. Für den Start der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> Transformation soll lediglich eine<br />

mediniQVT-Konfiguration für diese angegeben werden. Das zu transformierende <strong>Modell</strong> wird<br />

als Input-<strong>Modell</strong> bei der Konfiguration angegeben. Es wird davon ausgegangen, dass für die<br />

Konfiguration benötigte Metamodelle und das Transformationsskript bereits vorliegen. Mehr<br />

wird nicht gebraucht. Die Transformation kann somit gestartet werden.<br />

Der Anforderung für die farbige Darstellung der <strong>Modell</strong>differenzen zwischen dem Ursprungsund<br />

dem Zielmodell wird nachgekommen, indem man das Eclipse-basierte EMF-<strong>Co</strong>mpare-<br />

Tool einsetzt. Das EMF-<strong>Co</strong>mpare-Tool in der Version 1.2.2, berücksichtigt beim Vergleich<br />

die Elemente und die Strukturen der <strong>Modell</strong>e. Die Ergebnisse des Vergleichs werden mithilfe<br />

von Bäumen dargestellt, in denen geänderte, hinzugefügte oder gelöschte <strong>Modell</strong>elemente<br />

visualisiert werden. Durch die Integration in das Eclipse kann das EMF-<strong>Co</strong>mpare-Tool beim<br />

Vergleich unterschiedlicher Versionen eines <strong>Modell</strong>s verwendet werden, wobei der Vergleich<br />

grafisch dargestellter <strong>Modell</strong>e ab der Version 1.3 unterstützt werden soll. Auf der Herstellerseite<br />

ist die neue Version für Ende Juni 2012 angekündigt. 4<br />

Die letzte wichtige Anforderung betrifft die Validierung der <strong>Modell</strong>e innerhalb der TOP-<br />

CASED-Umgebung. Im TOPCASED ist neben der Prüfung, ob <strong>Modell</strong>e zu der UML2 Spezifikation<br />

konform sind, eine Definition der eigenen OCL-Regeln ermöglicht. Hierfür kann<br />

ein im Rahmen des TOPCASED angebotenes OCL-Tooling verwendet werden. Es können<br />

spezielle Bedingungen in Form der OCL-<strong>Co</strong>nstraints definiert werden, welche die Konformität<br />

eines UWE-<strong>Modell</strong>s zu seinem Metamodell prüfen. Somit ist die dritte Anforderung<br />

ebenfalls erfüllt.<br />

5.5.1. Das mediniQVT-Tool<br />

Das mediniQVT der ikv++ technologies AG ein Eclipse-basiertes Tool zur <strong>Modell</strong>transformation<br />

mit der relationalen QVT-Sprache. Das mediniQVT kann sowohl als Eclipse-Plugin<br />

in eine bestehende Eclipse-basierte Toolumgebung integriert werden, als auch schlanke<br />

und vollständige Eclipse Rich Client Platform genutzt werden. Das mediniQVT ist ein freies<br />

Produkt, das die von OMG spezifizierte relationale QVT-Sprache sehr konsequent unterstützt.[19]<br />

Alle in dieser Arbeit vorgestellte Transformationen sind mit dem OpenSource-Werkzeug me-<br />

4 http://wiki.eclipse.org/EMF_<strong>Co</strong>mpare<br />

78


5.5. Die zusammengesetzte Toolumgebung<br />

diniQVT getestet worden. Vor der Ausführung der Transformation sollen die Metamodelle<br />

in der QVT-Umgebung deklariert werden. Diese Einstellung erfolgt über das Menü ” Preferences“.<br />

Den UWE-<strong>Modell</strong>en liegt die Eclipse UML 2 zugrunde. So soll diese in der QVT-<br />

Umgebung als ” http://www.eclipse.org/uml2/3.0.0/UML“ mit angegeben werden. In der<br />

Transformationskonfiguration soll neben dem Transformationsskript, dem Quell- und dem<br />

Zielmodell das UWE-Profil mit angegeben werden. (Siehe Abb. 5.3) Als Richtung der Transformationsausführung<br />

soll das Ziel gewählt werden. Somit kann auf die Stereotypen in den<br />

Abbildung 5.3.: Die Konfiguration der Transformation in der mediniQVT-Umgebung.<br />

Relationen von Transformation zugegriffen werden.<br />

Innerhalb der zusammengesetzten Tool-Umgebung können sich die Quell- und die Zielmodelle<br />

sogar in den Unterschiedlichen Projekten befinden. Es muss keine export/import<br />

Aktion durchgeführt werden.<br />

Das mediniQVT-Problem bei der Anwendung von Stereotypen im Zielmodell<br />

Unter Einsatz des mediniQVT-Werkzeugs lassen sich momentan die Stereotypen auf die<br />

Zielklassen nicht anwenden. Dies liegt daran, dass die Methoden unter einer where- oder<br />

einer when-Klauseln ausschließlich boolean-Werte als Rückgabewerte liefern dürfen. Die<br />

Anwendung eines Stereotyps liefert einen void-Wert als Rückgabewert. Die Anwendung des<br />

Stereotyps kann nur innerhalb der where- und when-Klauseln erfolgen. Somit liefert die<br />

oben angepasste Transformation ein UML-Klassenmodell, auf dem kein UWE-Profil angewendet<br />

ist.<br />

79


5. Integration des UWE-Profil-basierten transformativen Ansatzes in die UWE Toolumgebung<br />

In den Foren der mediniQVT-Webseite steht, dass an einer Implementierungslösung gearbeitet<br />

wird, welche die Methoden mit void-Rückgabewerten zulassen würde. 5<br />

Ein anderer Lösungsansatz dieses Problems ist die Angabe eines UML-Profils unter den<br />

Metamodellen in der QVT-Umgebung. Hierfür soll das UML-Profil als statisches Profil in<br />

Eclipse UML2 definiert werden. Als Resultat können Profilelemente in einer Domäne direkt<br />

erzwungen und angewendet werden.<br />

1 enforce domain t e x t S t e r e o t y p e : u w e p r o f i l e : : Text{<br />

2 b a s e c l a s s = someClass<br />

3 }<br />

Listing 5.8: Das Erzwingen eines UML-Profil-Elements in einer Relationsdomäne.<br />

Eine Recherche ergab, dass die Anwendung eines Profils auf das Zielmodell einer Transformation<br />

problemlos unter Einsatz der operationalen QVT-Sprache funktioniert. Ausführliche<br />

Beispiele von Sigfried Nolte sind in dem Tutorium: ” <strong>Modell</strong>getriebene Anwendungsentwicklung<br />

Jahrestagung der Gesellschaft für Informatik 2010“ vorgestellt worden. 6 Die dritte<br />

Lösung für das oben geschilderte Problem würde die Definition der Transformation in der<br />

operationalen QVT-Sprache liefern.<br />

5.5.2. Das EMF-<strong>Co</strong>mpare<br />

Das EMF-<strong>Co</strong>mpare ist ein Teil des EMF, das einen metamodellunabhängigen <strong>Modell</strong>vergleich<br />

ermöglicht. Dies wird unter der Verwendung eines generischen Vergleichsalgorithmus<br />

erreicht, das von Cédric Brun and Alfonso Pierantonio entwickelt ist[4].<br />

Als Ergebnis eines Vergleichs zweier <strong>Modell</strong>e erzeugt das EMF <strong>Co</strong>mpare ein Übereinstimmungsund<br />

ein Differenzmodell. Ein rekursiver Vergleich entlang der hierarchischen Struktur eines<br />

<strong>Modell</strong>s wird durchgeführt, um ein Übereinstimmungsmodell mit dem anderen <strong>Modell</strong> erstellen<br />

zu können. Auf jeder Hierarchieebene werden ähnliche Elemente identifiziert. Im<br />

Übereinstimmungsmodell wird jedes Element aus dem ersten <strong>Modell</strong> dem ähnlichsten Element<br />

des zweiten <strong>Modell</strong>s zugeordnet. Die Ähnlichkeit der <strong>Modell</strong>elemente wird anhand von<br />

vier Metriken gemessen:<br />

• <strong>Modell</strong>elementnamen (engl. name similarity)<br />

• Referenzenvergleich(engl. relations similarity)<br />

• Attributenvergleich (engl. value similarity)<br />

• Metamodellelementenvergleich(engl. type similarity)<br />

Alle Metriken werden gewichtet und zu einer Gesamtmetrik zusammengerechnet. Zwei Elemente<br />

sind ähnlich, im Fall wenn ihre Namen identisch sind oder die Gesamtmetrik über<br />

einem bestimmten Schwellwert liegt. Dieser Algorithmus zeichnet sich durch die hohe Korrektheit<br />

und die Effizienz aus. Aus dem Übereinstimmungsmodell wird ein Differenzmodell<br />

5 http://projects.ikv.de/qvt/discussion/<br />

6 http://www.siegfried-nolte.de/GI2010/GI2010.html<br />

80


5.5. Die zusammengesetzte Toolumgebung<br />

Abbildung 5.4.: Der Vergleich zweier UWE-<strong>Modell</strong>e. Die Differenzen der zwei <strong>Modell</strong>e.<br />

abgeleitet. Das Differenzmodell enthält alle additiven, subtraktiven Änderungen und die Updates<br />

an den <strong>Modell</strong>elementen. Das Übereinstimmungs- und das Differenzmodell sind zur<br />

automatisierten Weiterverarbeitung gut geeignet, da sie selbst EMF-<strong>Modell</strong>e sind.<br />

Die GUI des EMF-<strong>Co</strong>mpare Tools besteht aus zwei Ansichten: der Ansicht der strukturellen<br />

<strong>Modell</strong>differenzen und der Visualisierung dieser Differenzen. Die Abbildung 5.4 zeigt die<br />

strukturelle Differenz zwischen einem UWE-<strong>Modell</strong> mit angewendetem UWE-Profil und dem<br />

mithilfe der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>-Transformation generiertem UWE-<strong>Modell</strong>. Für die Page<br />

sind folgende Differenzen zu sehen: im Vergleich zu dem Zielmodell ist im Quellmodell bei<br />

der Klasse Homepage das Stereotype angewendet. Bei dem Zielmodell wurden<br />

im Laufe der Transformation die neuen Attribute collapse und dragdrop hinzugefügt. Die<br />

Visualisierung der strukturellen Ansicht zeigt die <strong>Modell</strong>e nebeneinander. Die Differenzen<br />

werden farblich gekennzeichnet. (Abb. 5.4)<br />

81


5. Integration des UWE-Profil-basierten transformativen Ansatzes in die UWE Toolumgebung<br />

Der Algorithmus wird absichtlich generisch gehalten. Es besteht die Möglichkeit an diesem<br />

Algorithmus eigene Anpassungen durchzuführen. Dafür stehen APIs zur Verfügung.<br />

82


5.6. Beispiel der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> für UWE-<strong>Modell</strong>e mit angewendetem UWE-Profil<br />

5.6. Beispiel der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> für UWE-<strong>Modell</strong>e mit<br />

angewendetem UWE-Profil<br />

In diesem Abschnitt wird ein Beispiel der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> an einem UWE-<strong>Modell</strong> mit<br />

dem angewendeten UWE-Stereotyp vorgestellt. Hierfür wird das Präsentationsmodell der<br />

einfachen Webseite (engl. Simple Website) von der UWE-Seite verwendet. 7 . In der Abbildung<br />

5.5 ist das Präsenationsmodell der einfachen Webseite zu sehen. In der TOPCASED-<br />

Abbildung 5.5.: Das Präsentationsmodell der einfachen Webseite in der Version 1.7 des<br />

UWE-Profils.<br />

<strong>Modell</strong>ierungsumgebung werden <strong>Modell</strong>e durch eine spezielle textuelle und eine grafische<br />

Komponente dargestellt, wobei diese in zwei getrennten Dateien gespeichert werden. Diese<br />

sind die *.uml-Datei und der *.umldi-Datei. In der Transformationskonfiguration wird<br />

das SimpleWebSite.uml-Datei als Quelldatei angegeben. Als Zielmodell wird wiederum eine<br />

*.uml-Datei generiert.<br />

Die Klassen, auf die Stereotyp angewendet ist, werden kopiert. In dem Zielmodell<br />

wird auf diese Kopien das Stereotyp angewendet. Dies Betrifft<br />

die Klassen ” ProjectHomepage“, ” Acknowledgement“ und ” Article“. Der Presentation-<br />

Group wurden in der neuen Version die Attribute collapse und dragdrop hinzugefügt. Somit<br />

werden diese Attribute in den oben genannten Klassen im Zeilmodell definiert.<br />

Die Klasse ” SectionRequirements“ wird im Zielmodell mit dem Stereotype<br />

markiert. Dies wird aus der Anwendung des -Stereotyps<br />

7 http://uwe.pst.ifi.lmu.de/examples.html<br />

83


5. Integration des UWE-Profil-basierten transformativen Ansatzes in die UWE Toolumgebung<br />

im Quellmodell abgeleitet. Die Attribute collapse und dragdrop werden der ” SectionRequirements“<br />

neu hinzugefügt.<br />

Abbildung 5.6.: Der Vergleich der Versionen 1.7 und 1.8 der SimpleWebSite.<br />

Alle <strong>Modell</strong>elemente, die mit im Quellmodell markiert sind, werden<br />

in dem Zielmodell mit markiert. Da IteratedPresentationGroup<br />

eine Subklasse der PresentationGroup ist, werden bei den betroffenen Klassen<br />

entsprechend die neuen collapse- und dragdrop-Attribute definiert. In diesen Klassen werden<br />

die anchors-Attribute der Quellklasse als PresentationProperties definiert. In dem <strong>Modell</strong><br />

der einfachen Webseite sind drei Anchored<strong>Co</strong>llection-Elemente vorhanden: ” ArticleIndex“,<br />

” SectionMenu“ und ” ExternalAnchor“.<br />

Alle Klassen, auf die ein -Stereotyp angewendet ist, werden mit denselben Stereotyp<br />

in dem Zielmodell markiert. Einzige Anpassung, die im Rahmen der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />

an diesen Elementen stattfindet ist die Hinzunahme der Attribute periodicRefresh und li-<br />

84


5.6. Beispiel der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> für UWE-<strong>Modell</strong>e mit angewendetem UWE-Profil<br />

veReport.<br />

Sehr ähnlich werden die Klassen mit dem angewendeten Stereotyp behandelt.<br />

Diese Klassen werden im Zielmodell mit demselben Stereotyp markiert und um einen neuen<br />

Attribut liveReport erweitert.<br />

In der Abbildung 5.6 ist der Vergleich des <strong>Modell</strong>s der einfachen Webseite in der Version<br />

1.7 und der Version 1.8 unter dem Einsatz des EMF-<strong>Co</strong>mpare-Tools dargestellt. Für die<br />

Erkennung der Profil-Differenzen muss das EMF-<strong>Co</strong>mpare-Vergleichsalgorithmus erweitert<br />

werden.<br />

Das Tool EMF-<strong>Co</strong>mpare stellt alle strukturellen Differenzen, wie die neu hinzugefügte Klassen<br />

oder Attibute sehr übersichtlich dar. Diese Differenzen sind in der strukturellen Ansicht<br />

in Form einer Liste beschrieben. Die Vizualisierung der Differenzen veraunschaulicht diese<br />

sehr gut. Beide <strong>Modell</strong>e sind in ihren textuellen baumartigen Struktur nebeneinander dargestellt,<br />

wobei die <strong>Modell</strong>elemente, die sich unterscheiden, farblich hervorgehoben werden.<br />

Abbildung 5.7.: Das Präsentationsmodell der einfachen Webseite in der Version 1.8 des<br />

UWE-Profils.<br />

In der Abbildung 5.7 ist die grafische Repräsentation des generierten <strong>Modell</strong>s dargestellt.<br />

Dieses Diagramm wurde manuell erstellt, da leider noch kein angemessener automatisierter<br />

Ansatz zur Generierung der grafischen Komponente zur Verfügung steht. Auf der nächsten<br />

Seite in der Abb. 5.8 werden die beiden Versionen des <strong>Modell</strong>s der einfachen Webseite in<br />

vollem Umfang nebeneinander in der Topcased-UML-Ansicht dargestellt.<br />

85


5. Integration des UWE-Profil-basierten transformativen Ansatzes in die UWE Toolumgebung<br />

Abbildung 5.8.: Die Präsentationsmodelle der einfachen Webseite in der Version 1.7 un der<br />

Version 1.8.<br />

86


6. Die Zusammenfassung und der Ausblick<br />

6.1. Die Zusammenfassung<br />

Das UWE-Metamodell erfährt einige Änderungen an bestimmten Teilmodellen bzw. an allen<br />

Teilmodellen mehrmals im Jahr. An dem UWE-Metamodell wird aktiv gearbeitet, so dass<br />

ständig neue RIA-Features, Design Pattern, Verbesserungen in Form der ” best practices“-<br />

Lösungen dem Metamodell hinzugefügt werden. Dieser <strong>Evolution</strong>sprozess bringt einen hohen<br />

Bedarf an einer Anpassung der existierenden <strong>Modell</strong>e auf jeweils neue UWE-Metamodell-<br />

Version, solcher wie die Beispielsmodelle, die auf der UWE-Webseite 1 zu finden sind. Diese<br />

Anpassung soll am besten automatisiert durchgeführt werden.<br />

Laut den neuesten Erkenntnisse auf dem Gebiet der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>, ist diese auf der<br />

Basis der Metamodelländerungen durchzuführen. Diese Arbeit beschreibt genau vor wie die<br />

<strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>sstrategie aus den Metamodelländerungen abzuleiten ist. Eine illustrative<br />

Transformation wurde definiert, um die metamodellbasierte <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> der<br />

UWE-Präsentationsmodelle zu veranschaulichen.<br />

Da die UWE-Methodologie eine leichtgewichtige Erweiterung der UML mithilfe eines UWE-<br />

Profils vorschlägt, wurde die Strategie entwickelt, welche die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> der <strong>Modell</strong>e<br />

mit dem angewendeten UWE-Profil ermöglicht. Dies wurde durch die Tatsache gewährt,<br />

dass die UWE-Metamodellspezifikation die Mappings zwischen dem Metamodel und dem<br />

Profil konkret spezifiziert. Anhand dieser Mappings wurde aus der metamodellbasierten<br />

Transformation durch geringfügige Anpassungen eine UWE-Profil-basierte Transformation<br />

abgeleitet.<br />

Die in dieser Arbeit geschaffene Basis für die Integration des transformativen Ansatzes im<br />

Rahmen der UWE-Methodologie erlaubt die weitgehende Automatisierung des <strong>Modell</strong>-<strong>Co</strong>-<br />

<strong>Evolution</strong>s-Prozesses und bietet somit eine wohlgeformte, einheitliche und konsistenzerhaltende<br />

Lösung.<br />

Für die Integration des transformativen Ansatzes in die UWE-Methodologie wurde eine Auswahl<br />

von Werkzeugen ausgesucht, welche die automatisierte <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> ermöglichen.<br />

Das <strong>Modell</strong>ierungswerkzeug TOPCASED mit einem UWEclipse-Plug-in wurde als<br />

Grundlage für die Toolumgebung in dieser Arbeit verwendet. In UWEclipse sind Funktionalitäten<br />

enthalten, welche die UWE-basierte <strong>Modell</strong>ierung von RIAs ermöglichen. Weitere<br />

Tools wurden ausgewählt und getestet, um den <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>sprozess zu unterstützen.<br />

Das TOPCASED mit UWEClipse Plug-in wurde mit weiteren benötigten Werkezeugen<br />

erweitert: dem mediniQVT-Tool für die Durchführung der Transformationen in der<br />

1 http://uwe.pst.ifi.lmu.de<br />

87


6. Die Zusammenfassung und der Ausblick<br />

relationalen QVT-Sprache und dem EMF-<strong>Co</strong>mpare-Tool für die Repräsentation der <strong>Modell</strong>differenzen.<br />

Für die Validierung der <strong>Modell</strong>e werden interne TOPCASED-Tools eingesetzt.<br />

Somit ist die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> für UWE-<strong>Modell</strong>e als toolbasierter MDA-Entwicklungsprozess<br />

erarbeitet worden. Alle erforderlichen Konzepte, welche diesen Prozess unterstützen,<br />

sind durch die OMG spezifiziert und standardisiert. Die Zusammensetzung der ausgewählten<br />

Tools erfüllt alle an diese Integration im Rahmen dieser Arbeit gestellten Anforderungen.<br />

Die Transformationen in der relationalen QVT-Sprache, welche automatisierte UWE-<strong>Modell</strong>-<br />

<strong>Co</strong>-<strong>Evolution</strong> ermöglichen, sind erarbeitet und mit dem Werkzeug mediniQVT getestet worden.<br />

Das mediniQVT-Tool verfügt über keine grafische <strong>Modell</strong>ierungskomponente. Das Tool<br />

lässt sich in anderen Eclipse-basierten <strong>Modell</strong>ierungstools wie TOPCASED integrieren. Im<br />

Rahmen dieser Arbeit wurde eine solche Integration durchgeführt und eine Basis für die<br />

<strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> an den mit UWE-Profil erweiterten TOPCASED-UML-<strong>Modell</strong>en geschaffen.<br />

Die <strong>Modell</strong>e und Metamodelle, die zu einer Transformation herangezogen werden, müssen für<br />

die Transformation in einer serialiesierten textbasierten Form vorliegen. Dies ist im TOPCA-<br />

SED dadurch gegeben, dass ein UML-<strong>Modell</strong> aus einer textbasierten und einer graphischen<br />

Konponenten besteht, welche in getrennten Dateien gespeichert sind. Die <strong>Modell</strong>e müssen<br />

nicht exportiert werden, um für die Transformation in das mediniQVT-Tool importiert zu<br />

werden. Das Tool ist als ein Teil der <strong>Modell</strong>ierungsumgebung integriert. Diese Tatsache<br />

bringt einen großen Vorteil mit sich: die graphische Repräsentation der exisierenden <strong>Modell</strong>e<br />

geht nicht verloren.<br />

Die Zusammensetzung der graphischen <strong>Modell</strong>ierung und der textbasierten Transformation<br />

hat ihre Nachteile: das generierte Zielmodell ist nur in textueller Form vorhanden. Dies<br />

ist eine im Rahmen der MDA sehr verbreitete Problematik. Die graphische Komponente<br />

kann aus dem Quellmodell nicht abgeleitet werden und muss somit manuell erstellt werden.<br />

Im TOPCASED lässt sich ein Diagramm aus einem textbasierten <strong>Modell</strong> mit wenigen Klicks<br />

erstellen. Dieses Diagramm wird als leeres Diagramm erstellt. Alle Elemente können per<br />

drag&drop in das Diagramm aus dem textuell repräsentierten Teil des <strong>Modell</strong>s übertragen<br />

werden. Leider muss man sich mit dieser Möglichkeit zufrieden geben. Die UWE-<strong>Modell</strong>e<br />

sind gemäß dem Prinzip des ” Separation of <strong>Co</strong>ncerns “ in Teilmodelle unterteilt, die keine<br />

allzugroße Anzahl von Elementen aufweisen und ziemlich überschaubar sind. Somit ist<br />

der Zeitaufwand für den Wiederaufbau der graphischen Repräsentation im Fall der UWE-<br />

<strong>Modell</strong>e relativ gering.<br />

6.2. Der Ausblick<br />

Die Transformationen wurden mit dem Open Source-Werkzeug mediniQVT entwickelt und<br />

ausgeführt. Im Rahmen dieser Arbeit wurde festgestellt, dass sich dieses Werkzeug wunderbar<br />

für die <strong>Modell</strong>transformationen eignet. Bei der Transformation der <strong>Modell</strong>e mit einer<br />

UML-Profil-Anwendung, kann auf die angewendeten Stereotypen zugegriffen und anhand<br />

88


6.2. Der Ausblick<br />

diesen Stereotypen die Transfromation gesteuert werden. Es tritt ein Problem bei der Generierung<br />

eines <strong>Modell</strong>s auf, auf dem eine Profil-Anwendung erforderlich ist. Das Ziel-Profil<br />

kann auf das Zielmodell in der vorliegenden Implementierung des mediniQVT-Tools nicht<br />

angewendet werden. Leider eignet sich die relationale QVT-Sprache in der mediniQVT Implementierung<br />

nicht für die UWE-<strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Es hat sich ergeben, dass die Anwendung<br />

des UWE-Profils und der UWE-Stereotypen an den Elementen des generierten <strong>Modell</strong>s<br />

mit mediniQVT nicht umsetzbar ist. Aufgrund der Tatsache, dass das mediniQVT die Spezifikation<br />

der relationalen QVT-Sprache von OMG zur Zeit am vollständigsten abbildet,<br />

dürfte der Einsatz der operationalen QVT-Sprache in diesem Fall eine bessere Alternative<br />

darstellen.<br />

Ein weiteres Tool, namens EMF-<strong>Co</strong>mpare dient zur Unterstützung der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />

und wird für die Darstellung von <strong>Modell</strong>differenzen zwischen dem Quellmodell und dem<br />

generierten Zielmodell eingesetzt. Dieses Tool erlaubt den Vergleich der UML-<strong>Modell</strong>e mit<br />

dem angewendeten UML-Profil unter Einsatz eines generischen Vergleichsalgorithmus.<br />

Dieser Algorithmus bedarf einiger Verbesserungen. Im Falle eines Vergleichs der <strong>Modell</strong>e<br />

mit angewendeten Stereotypen werden leider die Stereotypen, welche sich in der neuen<br />

Version nicht geändert haben, trotzem als neuhinzugefügte Stereotypen erkannt. Das EMF-<br />

<strong>Co</strong>mpare bietet eine Erweiterungsmöglichkeit zur Verwendung eigener Vergleichsalgorithmen<br />

an. Dafür stellt EMF-<strong>Co</strong>mpare umfangreiche Schnittstellen zur Implementierung eigener<br />

Vergleichsalgorithmen zur Verfügung. Also wäre es möglich, den Vergleichsalgorithmus<br />

so anzupassen, dass die gleichnahmigen Stereotypen als nicht verändert angezeigt werden.<br />

Die EMF-<strong>Co</strong>mpare-Implementierung in Java lässt sich in ein beliebiges <strong>Modell</strong>ierungstool<br />

integrieren, wie z.B. das MagicDraw.<br />

Für den Einsatz von der operationalen QVT spricht auch folgender Umstand. Ein QVT-Plugin<br />

für die Transformationen in der operationalen QVT-Sprache ist bereitgestellt worden, das<br />

in das MagicDraw integriert werden kann. 2 Dabei handelt es sich um eine Implementierung<br />

des ” Operational QVT“, die im Rahmen der M2M-Projektes von Eclipse 3 entstanden ist<br />

(Ein Teil des Eclipse Modeling Frameworks). Somit könnte die Durchführung der Transformationen<br />

in der operationalen QVT-Sprache innerhalb des Tools MagicUWE mit diesem<br />

Plug-in ermöglicht werden. Durch eine Integration der EMF-<strong>Co</strong>mpare-Implementierung zur<br />

Visualisierung der <strong>Modell</strong>differenzen könnte somit das MagicUWE-Tool um eine umfassende<br />

Erweiterung für die automatisierte <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> ergänzt werden.<br />

2 http://www.nomagic.com/products/magicdraw-addons/qvt-plugin.html<br />

3 http://www.eclipse.org/m2m/<br />

89


6. Die Zusammenfassung und der Ausblick<br />

90


A. Darstellung der Metamodelle<br />

Im Folgenden wird die Vorgehensweise der Erstellung der vereinfachten SimpleUWEold und<br />

SimpleUWEnew der MOF-Metamodelle erläutert. Die Voraussetzung für die Verwendung<br />

von Metamodellen im Rahmen einer QVT-Transformation ist, dass diese Metamodelle eine<br />

Serialisierung der Metamodelle im Eclipse-Ecore-Format unterstützen. Die Metamodelle<br />

werden mithilfe des <strong>Modell</strong>ierungstools ” Eclipse Galileo - Eclipse Modeling Tools“ [1] erstellt.<br />

Das <strong>Modell</strong>ierungspaket enthält eine Sammlung von Eclipse Modeling Project Komponenten<br />

1 , einschließlich EMF, GMF, MDT XSD/OCL/UML2, M2M, M2T, und EMFT Elemente.<br />

Zur Bearbeitung von Ecore-<strong>Modell</strong>en stellt das Eclipse Modeling Tool die ” Ecore Tools“ zur<br />

Verfügung, die einen graphischen Editor für die Erstellung der Ecore-<strong>Modell</strong>e bereitstellt.<br />

Abbildung A.1 zeigt SimpleUWEold-Metamodell in grafischen Ecore Editor von Eclipse.<br />

Abbildung A.1.: Grafischer Ecore Editor in Eclipse-Umgebung<br />

1 http://www.eclipse.org/downloads/packages/eclipse-modeling-tools-includes-incubating-components/<br />

galileor<br />

91


A. Darstellung der Metamodelle<br />

A.1. Erstellung von Metamodellen in Ecore-Format<br />

Bevor Metamodelle modelliert werden können, muss ein ” Ecore Tools Project“ erstellt werden:<br />

• File ->New ->Other ->Ecore Tools ->Ecore Tools Project<br />

Abbildung A.2.: Einen neuen ” Ecore Tools Project“ erstellen<br />

Ein Ecore Diagramm wird wie folgt erstellt:<br />

• File ->New ->Other ->Ecore Tools ->Ecore Diagram<br />

Abbildung A.3.: Eine neue Ecore Diagramm erstellen<br />

Nach der Erstellung erscheinen zwei Dateien: SimpleUWEold.ecore und SimpleUWEold.ecorediag.<br />

Die erste Datei enthält das erstellte <strong>Modell</strong> in Ecore Format. Die zweite Datei enthält die<br />

Diagramminformationen der grafischen Repräsentation des <strong>Modell</strong>s und kann in einem ” Ecore<br />

Diagramm Editor“ geöffnet und bearbeitet werden:<br />

• open with ->Ecore Diagram Editor<br />

Die Ecore Datei kann mit dem speziellen ” Sample Ecore Model Editor“ angezeigt und bearbeitet<br />

werden:<br />

92<br />

• open with -> ” Sample Ecore Model Editor“


A.1. Erstellung von Metamodellen in Ecore-Format<br />

Abbildung A.4.: Ecorediag - Datei mit dem ” Ecore Diagramm Editor“ öffnen<br />

Abbildung A.5.: Ecore - Datei mit ” Sample Ecore Model Editor“ öffnen<br />

Im ” Sample Ecore Model Editor“ können <strong>Modell</strong>e in spezieller textbasierter Form angezeigt<br />

und bearbeitet werden. Graphischer Editor bietet eine bessere Alternative hierzu. Bearbeitet<br />

man ein Model im graphischen ” Ecore Diagram Editor“, so werden alle Änderungen sofort<br />

in Ecore <strong>Modell</strong> übernommen. ” Sample Ecore Model Editor“ sieht folgendermaßen aus:<br />

Abbildung A.6.: Das erstellte <strong>Modell</strong> im ” Sample Ecore Model Editor“<br />

Der grafische Editor wurde bereits in der Abbildung A.1 veranschaulicht. Im Outline-Bereich<br />

auf der linken Seite ist das erstellte <strong>Modell</strong> in Ecore-Repräsentation, siehe in der Abbildung<br />

A.6, dargestellt. Auf folgenden zwei Seiten sind die Ecore-Darstellungen der SimpleUWEnew<br />

und der SimpleUWEold Metamodelle dargeboten.<br />

93


A. Darstellung der Metamodelle<br />

94<br />

Abbildung A.7.: UWE-Präsentations-Metamodell. Version 1.7 in der Ecore Darstellung


A.1. Erstellung von Metamodellen in Ecore-Format<br />

Abbildung A.8.: UWE-Präsentations-Metamodell. Version 1.8 in der Ecore Darstellung<br />

95


A. Darstellung der Metamodelle<br />

A.2. Ein Generator-<strong>Modell</strong> aus Ecore-<strong>Modell</strong>en erstellen<br />

Die Metamodelle werden in Form von Eclipse-Plug-ins, die in die Entwicklungsumgebung<br />

mit eingebunden werden können, gebraucht. Dies ermöglicht die Erstellung <strong>Modell</strong>e in entsprechender<br />

Form basierend auf diesen Metamodellen. Das Werkzeug ” Eclipse Modeling Framework“[2]<br />

ermöglicht die Erstellung der Metamodelle als Eclipse-Plug-ins aus den Ecore-<br />

Metamodellen. Zuerst soll das EMF-<strong>Modell</strong>, die auf dem Ecore-<strong>Modell</strong> basiert, erstellt werden.<br />

Diese EMF-<strong>Modell</strong> soll vom Typ ” EMF Generator Model“ sein:<br />

• File ->Other ->Eclipse Modeling Framework ->EMF Generator Model<br />

Abbildung A.9.: Ein Generator <strong>Modell</strong> aus einem Ecore-<strong>Modell</strong> erstellen<br />

Das Generator-Model soll SimpleUWEold.genmodel bzw. SimpleUWEnew.genmodel heißen:<br />

Abbildung A.10.: Namen für das Generator-<strong>Modell</strong> wählen<br />

Als ” Model Importeur“ soll SimpleUWEold.ecore bzw. SimpleUWEnew.ecore gewählt werden:<br />

Als nächstes soll das Ecore-<strong>Modell</strong> geladen werden. Hierfür soll man den Button Load<br />

96


A.2. Ein Generator-<strong>Modell</strong> aus Ecore-<strong>Modell</strong>en erstellen<br />

Abbildung A.11.: Als ” Model Importer“ das Ecore-<strong>Modell</strong> wählen<br />

betätigen. Ist das Ecore-<strong>Modell</strong> korrekt, so wird es ohne weitere Meldungen geladen und<br />

” Next“-Button wird aktiviert. Ansonsten erscheint eine Fehlermeldung, dass das Ecore-<br />

<strong>Modell</strong> korrigiert werden soll. Die Erstellung von Generator-<strong>Modell</strong> muss nach der Korrektur<br />

des Ecore-<strong>Modell</strong>s von vorne angestoßen werden. Wir gehen davon aus, dass das Ecore-<strong>Modell</strong><br />

korrekt war und Next“-Button betätigt wurde. Als letzter Schritt kann man referenzierte<br />

”<br />

Genmodelle hinzufügen, was in unserem Fall entfällt, und den Button Finish“ betätigen.<br />

”<br />

97


A. Darstellung der Metamodelle<br />

A.3. Erstellung der Metamodelle in Form von Eclipse-Plug-ins<br />

Das Generator-<strong>Modell</strong> SimpleUWEold.genmodel bzw. SimpleUWEnew.genmodel ist jetzt<br />

die Quelle für den EMF-Generator. Das Generator-<strong>Modell</strong> kann man in EMF Generator<br />

öffnen:<br />

• Open with ->EMF Generator<br />

Abbildung A.12.: Generator <strong>Modell</strong> mit EMF Generator öffnen<br />

Letztendlich mit der Auswahl der folgenden Menü-Option ” Generate“ -> ” Generate all“ werden<br />

für das SimpleUWEold-Metamodell bzw. SimpleUWEnew-Metamodell die Eclipse-Plugin-Projekte<br />

erstellt:<br />

• Generate ->Generate all<br />

Abbildung A.13.: Eclipse Plug-in-Projekte erstellen<br />

In unserem Fall heißen die generierten Plug-in-Projekte SimpleUWEold, SimpleUWEold.edit,<br />

SimpleUWEold.editor, SimpleUWEold.test bzw. SimpleUWEnew, SimpleUWEnew.edit, SimpleUWEnew.editor,<br />

SimpleUWEnew.test:<br />

98<br />

Abbildung A.14.: Eclipse Plug-in-Projekte


A.4. Das Deployment der Metamodell-Eclipse-Plug-ins<br />

A.4. Das Deployment der Metamodell-Eclipse-Plug-ins<br />

Die Projekte, die deployable sind, sollen ausgewählt und nach der Angabe eines Speicherortes<br />

als JAR-Dateien dort gespeichert werden.<br />

• File ->Export<br />

Abbildung A.15.: Das Export der Metamodell-Eclipse-Plug-ins<br />

Im nächsten Schritt soll der Speicherort für die zu generierenden Plug-ins angegeben werden:<br />

Abbildung A.16.: Speicherortangabe beim Export der Metamodell-Eclipse-Plug-ins<br />

99


A. Darstellung der Metamodelle<br />

Unter dem angegebenen Speicherort befinden sich nach dem Betätigen des ” Finish“-Buttons<br />

die generierten JAR-Dateien. Das Deployment von den generierten Metamodell-Eclipse-<br />

Plug-ins erfolgt dadurch, dass die generierten Jar-Dateien in das Plug-ins-Verzeichnis der<br />

aktuellen Eclipse-Plattform hineinkopiert werden. Nach dem Neustart von Eclipse, kann<br />

Abbildung A.17.: Das Deployment der Plug-ins<br />

man <strong>Modell</strong>e, denen die SimpleUWEold und die SimpleUWEnew Metamodelle zugrunde<br />

liegen, in einem speziellen Editor in ihrer flachen, textuell repräsentierten Struktur erstellen.<br />

Im Weiteren wird die Erstellung dieser <strong>Modell</strong>e beschrieben<br />

Abbildung A.18.: Ein Beispiel eines SimpleWebSite-<strong>Modell</strong>s, dem SimpleUWEold-<br />

Metamodell zugrunde liegt<br />

100


A.5. <strong>Modell</strong>e basierend auf Metamodellen erstellen<br />

A.5. <strong>Modell</strong>e basierend auf Metamodellen erstellen<br />

Nachdem die Metamodell-Plug-ins in die Eclipse-Umgebung eingebunden sind und die Eclipse-<br />

Umgebung neu gestartet wurde, können Instanzen der Metamodelle erstellt werden. Um ein<br />

Model, das zu SimpleUWEold-Präsentationsmodell konform ist, zu erstellen, soll man folgendes<br />

ausführen:<br />

• New ->Other ->Example EMF Model Creation Wizard ->SimpleUWEold Model<br />

Abbildung A.19.: Ein SimpleUWEold <strong>Modell</strong> erstellen<br />

Metamodell-Plug-ins beinhalten unter anderem einen speziellen Model Editor, mit dessen<br />

Hilfe die <strong>Modell</strong>e in ihrer flacher, textuell repräsentierter Struktur, modelliert werden können.<br />

Dieser Editor verfügt über das Menü ” SimpleUWEold Editor“, dass oben an der Menüleiste<br />

des Eclipse angezeigt wird. Man kann mit ” New Sibling“ neue Elemente dem SimpleUWE-<br />

Abbildung A.20.: SimpleUWEold <strong>Modell</strong> Editor Menü<br />

101


A. Darstellung der Metamodelle<br />

<strong>Modell</strong> hinzufügen. Die Liste der möglichen Elemente, siehe Bild A.20, wird angezeigt, wenn<br />

man mit der Maus über den Menüeintrag ” New Sibling“ fährt. Attribute, in unserem Fall<br />

PresentationProperties, werden mit ” New Child“ angelegt. ” Properties View“ ermöglicht die<br />

Modifikation der Detail-Informationen jedes Elements. Um die ” Properties View“ in Eclipse<br />

anzeigen zu lassen, wählt man den ” Show Properties View“-Menüeintrag des SimpleUWE-<br />

<strong>Modell</strong>-Editors-Menü. Mit ” Refresh“ wird das <strong>Modell</strong> aktualisiert. Außerdem gibt es eine<br />

Möglichkeit die Konformität des <strong>Modell</strong>s gegenüber dem Metamodell mit ” Validate“ überprüfen<br />

zu lassen. Alternativ lassen sich die neuen Elemente und PresentationProperties direkt<br />

Abbildung A.21.: SimpleUWEold <strong>Modell</strong> Editor - Kontext-Menü<br />

im <strong>Modell</strong> über ein Kontext-Menü anlegen. In dem <strong>Modell</strong> in der Abbildung A.21 ist das<br />

Element Page ProjectHome ausgewählt. Mit dem Kontext-Menü über ” New Child“ -> ” PresentationProperty“<br />

kann dem Page ProjectHome neue PresentationProperty hinzugefügt<br />

werden.<br />

102<br />

Abbildung A.22.: SimpleUWEold <strong>Modell</strong> Editor Überblick


1<br />

B. Transformationsskript mapUWEversion<br />

2 transformation mapUWEversion ( s r c : SimpleUWEold , t r g : SimpleUWEnew )<br />

3 {<br />

4<br />

5 −− E r s t e l l t das PresentationPackage im Z i e l m o d e l l −−<br />

6 −− mit dem Namen aus Quellmodell −−<br />

7 top relation mapPackage<br />

8 {<br />

9 pckgName : String ;<br />

10 checkonly domain s r c srcPckg : SimpleUWEold : : Package<br />

11 {<br />

12 name = pckgName<br />

13 } ;<br />

14 enforce domain t r g tgtPckg : SimpleUWEnew : : Package<br />

15 {<br />

16 name = pckgName<br />

17 } ;<br />

18 −− Hier e i n e Bedingung : der Name s o l l P r e s e n t a t i o n s e i n −−<br />

19 where<br />

20 {<br />

21 name = ’Presentation’ ;<br />

22 }<br />

23 }<br />

24 −− Relation mapPage mappt Page auf PresentationPage . −−<br />

25 −− P r e s e n t a t i o n P r o p e r t i e s werden übernommen −−<br />

26 top relation mapPage<br />

27 {<br />

28 pageName : String ;<br />

29 checkonly domain s r c srcPg : SimpleUWEold : : Page<br />

30 {<br />

31 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />

32 name = pageName ,<br />

33 −− Es wird geprüft , ob page Stereotype −−<br />

34 −− b e i dem Page angewendet i s t −−<br />

35 kind = ’page’ ,<br />

36 ownedAttribute = presProp : SimpleUWEold : : PresentationProperty<br />

{}<br />

37 } ;<br />

38 enforce domain t r g trgPg : SimpleUWEnew : : PresentationPage<br />

39 {<br />

40 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />

41 name = pageName ,<br />

42 kind = ’presentationPage’ ,<br />

43 c o l l a p s e = f a l s e ,<br />

103


B. Transformationsskript mapUWEversion<br />

44 dragdrop = f a l s e ,<br />

45 ownedAttribute = presProp2 : SimpleUWEnew : : PresentationProperty<br />

{}<br />

46 } ;<br />

47 when<br />

48 {<br />

49 mapPackage ( srcPckg , tgtPckg ) ;<br />

50 }<br />

51 where<br />

52 {<br />

53 −− B e s i t z t e i n e Page e i n e PresentationProperty , −−<br />

54 −− so wird d i e R elation mapProperty a u f g e r u f e n −−<br />

55 mapProperty ( presProp , presProp2 ) ;<br />

56 }<br />

57 }<br />

58 −− Relation mapProperty wird j e d e s Mal in der where−Klausel −−<br />

59 −− der Elementen , d i e e i n e PresentationProperty b e s i t z e n können , −−<br />

60 −− a u f g e r u f e n sobald e i n e Property vorhanden i s t −−<br />

61 relation mapProperty<br />

62 {<br />

63 propName : String ;<br />

64 checkonly domain s r c pp : SimpleUWEold : : PresentationProperty<br />

65 {<br />

66 name = propName ,<br />

67 presentationElement = pe : SimpleUWEold : : PresentationElement {}<br />

68 } ;<br />

69 enforce domain t r g pp2 : SimpleUWEnew : : PresentationProperty<br />

70 {<br />

71 name = propName ,<br />

72 presentationElement = pe2 : SimpleUWEnew : : PresentationElement {}<br />

73 } ;<br />

74 when<br />

75 {<br />

76 −− Sobald e i n e P r e s e n t a t i o n Property einen P r e s e n t a t i o n −−<br />

77 −− Element b e s i t z t , s o l l entsprechende Relation a u f g e r u f e n −−<br />

78 −− werden −−<br />

79 mapText ( pe , pe2 ) or mapAnchor ( pe , pe2 ) or mapImage ( pe , pe2 ) or<br />

mapButton ( pe , pe2 ) or mapTextInput ( pe , pe2 ) or<br />

mapAnchored<strong>Co</strong>l ( pe , pe2 ) or mapForm( pe , pe2 ) or mapPresClass (<br />

pe , pe2 ) or mapPresGroup ( pe , pe2 ) ;<br />

80 }<br />

81 }<br />

82 −− Relation mapPresClass mappt P r e s e n t a t i o n C l a s s auf P r e s e n t a t i o n −−<br />

83 −− Group −−<br />

84 top relation mapPresClass<br />

85 {<br />

86 className : String ;<br />

87 checkonly domain s r c pc : SimpleUWEold : : P r e s e n t a t i o n C l a s s<br />

88 {<br />

89 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />

90 name = className ,<br />

91 −− Es wird geprüft , ob P r e s e n t a t i o n C l a s s Stereotype −−<br />

92 −− b e i dem P r e s e n t a t i o n C l a s s angewendet i s t −−<br />

104


93 kind = ’presentationClass’ ,<br />

94 ownedAttribute = pp : SimpleUWEold : : PresentationProperty {}<br />

95 } ;<br />

96 enforce domain t r g pg : SimpleUWEnew : : PresentationGroup<br />

97 {<br />

98 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />

99 name = className ,<br />

100 kind = ’presentationGroup’ ,<br />

101 c o l l a p s e = f a l s e ,<br />

102 dragdrop = f a l s e ,<br />

103 ownedAttribute = pp2 : SimpleUWEnew : : PresentationProperty {}<br />

104 } ;<br />

105 when<br />

106 {<br />

107 mapPackage ( srcPckg , tgtPckg ) ;<br />

108 not mapPage ( pc , pg ) ;<br />

109 not mapPresGroup ( pc , pg ) ;<br />

110 }<br />

111 where<br />

112 {<br />

113 −− B e s i t z t e i n P r e s e n t a t i o n Class e i n e P r e s e n t a t i o n Property ,<br />

−−<br />

114 −− so wird d i e Relation mapProperty a u f g e r u f e n −−<br />

115 mapProperty ( pp , pp2 ) ;<br />

116 }<br />

117 }<br />

118 −− Relation mapPresGroup mappt PresentationGroup auf P r e s e n t a t i o n −−<br />

119 −− Group −−<br />

120 top relation mapPresGroup<br />

121 {<br />

122 pageName : String ;<br />

123 checkonly domain s r c srcPg : SimpleUWEold : : PresentationGroup<br />

124 {<br />

125 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />

126 name = pageName ,<br />

127 kind = ’presentationGroup’ ,<br />

128 ownedAttribute = presProp : SimpleUWEold : : PresentationProperty<br />

{}<br />

129 } ;<br />

130 enforce domain t r g trgPg : SimpleUWEnew : : PresentationGroup<br />

131 {<br />

132 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />

133 name = pageName ,<br />

134 kind = ’presentationGroup’ ,<br />

135 c o l l a p s e = f a l s e ,<br />

136 dragdrop = f a l s e ,<br />

137 ownedAttribute = presProp2 : SimpleUWEnew : : PresentationProperty<br />

{}<br />

138 } ;<br />

139 when<br />

140 {<br />

141 mapPackage ( srcPckg , tgtPckg ) ;<br />

142 }<br />

105


B. Transformationsskript mapUWEversion<br />

143 where<br />

144 {<br />

145 −− B e s i t z t e i n P r e s e n t a t i o n Group e i n e P r e s e n t a t i o n −−<br />

146 −− Property , so wird d i e Relation mapProperty a u f g e r u f e n −−<br />

147 mapProperty ( presProp , presProp2 ) ;<br />

148 }<br />

149 }<br />

150 −− Relation mapText e r s t e l l t e i n e Kopie des Text−Elements −−<br />

151 −− im Z i e l m o d e l l −−<br />

152 top relation mapText<br />

153 {<br />

154 textName : String ;<br />

155 checkonly domain s r c te : SimpleUWEold : : Text<br />

156 {<br />

157 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />

158 name = textName ,<br />

159 kind = ’text’<br />

160 } ;<br />

161 enforce domain t r g te2 : SimpleUWEnew : : Text<br />

162 {<br />

163 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />

164 name = textName ,<br />

165 kind = ’text’ ,<br />

166 p e r i o d i c R e f r e s h = f a l s e ,<br />

167 l i v e R e p o r t = f a l s e<br />

168 } ;<br />

169 when<br />

170 {<br />

171 mapPackage ( srcPckg , tgtPckg ) ;<br />

172 }<br />

173 }<br />

174 −− Relation mapAnchor e r s t e l l t e i n e Kopie des Anchor−Elements −−<br />

175 −− im Z i e l m o d e l l −−<br />

176 top relation mapAnchor<br />

177 {<br />

178 anchorName : String ;<br />

179 checkonly domain s r c an : SimpleUWEold : : Anchor<br />

180 {<br />

181 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />

182 name = anchorName ,<br />

183 kind = ’anchor’<br />

184 } ;<br />

185 enforce domain t r g an2 : SimpleUWEnew : : Anchor<br />

186 {<br />

187 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />

188 name = anchorName ,<br />

189 kind = ’anchor’ ,<br />

190 l i v e R e p o r t = f a l s e<br />

191 } ;<br />

192 when<br />

193 {<br />

194 mapPackage ( srcPckg , tgtPckg ) ;<br />

195 }<br />

106


196 }<br />

197 −− Relation mapImage e r s t e l l t e i n e Kopie des Image−Elements −−<br />

198 −− im Z i e l m o d e l l −−<br />

199 top relation mapImage<br />

200 {<br />

201 imageName : String ;<br />

202 checkonly domain s r c im : SimpleUWEold : : Image<br />

203 {<br />

204 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />

205 name = imageName ,<br />

206 kind = ’image’<br />

207 } ;<br />

208 enforce domain t r g im2 : SimpleUWEnew : : Image<br />

209 {<br />

210 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />

211 name = imageName ,<br />

212 kind = ’image’ ,<br />

213 p e r i o d i c R e f r e s h = f a l s e ,<br />

214 l i v e R e p o r t = f a l s e<br />

215 } ;<br />

216 when<br />

217 {<br />

218 mapPackage ( srcPckg , tgtPckg ) ;<br />

219 }<br />

220 }<br />

221 −− Relation mapButton e r s t e l l t e i n e Kopie des Button−Elements −−<br />

222 −− im Z i e l m o d e l l −−<br />

223 top relation mapButton<br />

224 {<br />

225 buttonName : String ;<br />

226 checkonly domain s r c bu : SimpleUWEold : : Button<br />

227 {<br />

228 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />

229 name = buttonName ,<br />

230 kind = ’button’<br />

231 } ;<br />

232 enforce domain t r g bu2 : SimpleUWEnew : : Button<br />

233 {<br />

234 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />

235 name = buttonName ,<br />

236 kind = ’button’ ,<br />

237 l i v e R e p o r t = f a l s e<br />

238 } ;<br />

239 when<br />

240 {<br />

241 mapPackage ( srcPckg , tgtPckg ) ;<br />

242 }<br />

243 }<br />

244 −− Relation mapTextInput e r s t e l l t e i n e Kopie des TextInput−Elements<br />

−−<br />

245 −− im Z i e l m o d e l l−−<br />

246 top relation mapTextInput<br />

247 {<br />

107


B. Transformationsskript mapUWEversion<br />

248 tiName : String ;<br />

249 checkonly domain s r c t i : SimpleUWEold : : TextInput<br />

250 {<br />

251 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />

252 name = tiName ,<br />

253 kind = ’textInput’<br />

254 } ;<br />

255 enforce domain t r g t i 2 : SimpleUWEnew : : TextInput<br />

256 {<br />

257 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />

258 name = tiName ,<br />

259 kind = ’textInput’ ,<br />

260 l i v e R e p o r t = f a l s e ,<br />

261 auto<strong>Co</strong>mpletion = f a l s e ,<br />

262 l i v e V a l i d a t i o n = f a l s e<br />

263 } ;<br />

264 when<br />

265 {<br />

266 mapPackage ( srcPckg , tgtPckg ) ;<br />

267 }<br />

268 }<br />

269 −− Relation mapChoice mappt Element Choice −−<br />

270 −− auf das Element S e l e c t i o n im Z i e l m o d e l l −−<br />

271 top relation mapChoice<br />

272 {<br />

273 choiceName : String ;<br />

274 mult : Boolean ;<br />

275 checkonly domain s r c c h o i c e : SimpleUWEold : : Choice<br />

276 {<br />

277 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />

278 name = choiceName ,<br />

279 kind = ’choice’ ,<br />

280 m u l t i p l e = mult<br />

281 } ;<br />

282 enforce domain t r g s e l e c t i o n : SimpleUWEnew : : S e l e c t i o n<br />

283 {<br />

284 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />

285 name = choiceName ,<br />

286 kind = ’selection’ ,<br />

287 m u l t i p l e = mult ,<br />

288 l i v e R e p o r t = f a l s e ,<br />

289 auto<strong>Co</strong>mpletion = f a l s e ,<br />

290 l i v e V a l i d a t i o n = f a l s e<br />

291 } ;<br />

292 when<br />

293 {<br />

294 mapPackage ( srcPckg , tgtPckg ) ;<br />

295 }<br />

296 }<br />

297 −− Relation mapAnchored<strong>Co</strong>l mappt Element Anchored<strong>Co</strong>llection −−<br />

298 −− auf d i e Elemente IteratedPresentationGroup des Z i e l m o d e l l s −−<br />

299 −− und f ü g t a l l e Anchors des u r s p r ü n g l i c h e n Elements a l s −−<br />

300 −− P r e s e n t a t i o n P r o p e r t i e s hinzu −−<br />

108


301 top relation mapAnchored<strong>Co</strong>l<br />

302 {<br />

303 acName : String ;<br />

304 anchorName : String ;<br />

305 checkonly domain s r c ac : SimpleUWEold : : Anchored<strong>Co</strong>llection<br />

306 {<br />

307 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />

308 name = acName ,<br />

309 kind = ’anchored<strong>Co</strong>llection’ ,<br />

310 anchors = ancs : SimpleUWEold : : Anchor<br />

311 {<br />

312 name = anchorName<br />

313 }<br />

314 } ;<br />

315 enforce domain t r g t i 2 : SimpleUWEnew : : IteratedPresentationGroup<br />

316 {<br />

317 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />

318 name = acName ,<br />

319 kind = ’iteratedPresentationGroup’ ,<br />

320 c o l l a p s e = f a l s e ,<br />

321 dragdrop = f a l s e ,<br />

322 −−i n l i n e Erzeugung von Anchorn −−<br />

323 ownedAttribute = presProp : SimpleUWEnew : : PresentationProperty<br />

324 {<br />

325 name = anchorName ,<br />

326 presentationElement = pe : SimpleUWEnew : : PresentationElement<br />

{}<br />

327 }<br />

328 } ;<br />

329 when<br />

330 {<br />

331 mapPackage ( srcPckg , tgtPckg ) ;<br />

332 mapAnchor ( ancs , pe ) ;<br />

333<br />

334 }<br />

335 }<br />

336 −− Relation mapForm mappt das Element Form −−<br />

337 −− auf das Element InputForm des Z i e l m o d e l l s −−<br />

338 −− und f ü g t a l l e elements des u r s p r ü n g l i c h e n −−<br />

339 −− FormElements a l s P r e s e n t a t i o n P r o p e r t i e s hinzu −−<br />

340 top relation mapForm<br />

341 {<br />

342 formName : String ;<br />

343 formElemName : String ;<br />

344 checkonly domain s r c form : SimpleUWEold : : Form<br />

345 {<br />

346 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />

347 name = formName ,<br />

348 kind = ’form’ ,<br />

349 elements = e l s : SimpleUWEold : : UIElement<br />

350 {<br />

351 name = formElemName<br />

352 }<br />

109


B. Transformationsskript mapUWEversion<br />

353 } ;<br />

354 enforce domain t r g iform : SimpleUWEnew : : inputForm<br />

355 {<br />

356 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />

357 name = formName ,<br />

358 kind = ’inputForm’ ,<br />

359 c o l l a p s e = f a l s e ,<br />

360 dragdrop = f a l s e ,<br />

361 −−i n l i n e Erzeugung von FormElementen −−<br />

362 ownedAttribute = presProp : SimpleUWEnew : : PresentationProperty<br />

363 {<br />

364 name = formElemName ,<br />

365 presentationElement = pe : SimpleUWEnew : : PresentationElement<br />

{}<br />

366 }<br />

367 } ;<br />

368 when<br />

369 {<br />

370 mapPackage ( srcPckg , tgtPckg ) ;<br />

371 mapText ( e l s , pe ) or mapImage ( e l s , pe ) or mapAnchor ( e l s , pe ) or<br />

mapTextInput ( e l s , pe ) or mapButton ( e l s , pe ) or mapChoice ( e l s<br />

, pe ) ;<br />

372 }<br />

373 }<br />

374 }<br />

Listing B.1: Kompletter Transformationsskript, der eine automatisierte<br />

UWE-Präsentationsmodell-<strong>Co</strong>-<strong>Evolution</strong> ermöglicht.<br />

110


Abbildungsverzeichnis<br />

2.1 Metamodell der Grunddefinitionen der MDA [10] . . . . . . . . . . . . . . . . 8<br />

3.1 Eine Übersicht der Beziehungen zwischen einem Metamodell und den Softwareartefakten<br />

[8] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19<br />

3.2 Das Petri-Netze-Metamodell MM0 [7] . . . . . . . . . . . . . . . . . . . . . . 21<br />

3.3 Das Petri-Netze-Metamodell MM1 [7] . . . . . . . . . . . . . . . . . . . . . . 21<br />

3.4 Das Petri-Netze-Metamodell MM2 [7] . . . . . . . . . . . . . . . . . . . . . . 22<br />

3.5 Das UWE-Präsentations-Metamodell. Version 1.7 . . . . . . . . . . . . . . . . 28<br />

3.6 UWE-Präsentations-Metamodell. Version 1.8 . . . . . . . . . . . . . . . . . . 29<br />

4.1 Der Aufbau einer Transformation in der relationalen QVT-Sprache [19] . . . 35<br />

4.2 Die Durchführung der Transformation.[19] . . . . . . . . . . . . . . . . . . . . 57<br />

4.3 Das Präsentationsmodell für das Adressbuch in der Version 1.7. . . . . . . . . 59<br />

4.4 Das AddressBook vor und nach der Ausführung der Transformation in der<br />

textuellen Präsentation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60<br />

4.5 Die Deklaration der Metamodelle in der mediniQVT-Umgebung. . . . . . . . 61<br />

4.6 Die Run-Konfiguration der Transformation. . . . . . . . . . . . . . . . . . . . 61<br />

5.1 Das UML-Profil in Version 1.7 . . . . . . . . . . . . . . . . . . . . . . . . . . 64<br />

5.2 Die Anwendungsfälle für den UWE-<strong>Co</strong>-<strong>Evolution</strong>sprozess . . . . . . . . . . . 76<br />

5.3 Die Konfiguration der Transformation in der mediniQVT-Umgebung. . . . . . 79<br />

5.4 Der Vergleich zweier UWE-<strong>Modell</strong>e. Die Differenzen der zwei <strong>Modell</strong>e. . . . . 81<br />

5.5 Das Präsentationsmodell der einfachen Webseite in der Version 1.7 des UWE-<br />

Profils. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83<br />

5.6 Der Vergleich der Versionen 1.7 und 1.8 der SimpleWebSite. . . . . . . . . . . 84<br />

5.7 Das Präsentationsmodell der einfachen Webseite in der Version 1.8 des UWE-<br />

Profils. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85<br />

5.8 Die Präsentationsmodelle der einfachen Webseite in der Version 1.7 un der<br />

Version 1.8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86<br />

A.1 Grafischer Ecore Editor in Eclipse-Umgebung . . . . . . . . . . . . . . . . . . 91<br />

A.2 Einen neuen ” Ecore Tools Project“ erstellen . . . . . . . . . . . . . . . . . . . 92<br />

A.3 Eine neue Ecore Diagramm erstellen . . . . . . . . . . . . . . . . . . . . . . . 92<br />

A.4 Ecorediag - Datei mit dem ” Ecore Diagramm Editor“ öffnen . . . . . . . . . . 93<br />

A.5 Ecore - Datei mit ” Sample Ecore Model Editor“ öffnen . . . . . . . . . . . . . 93<br />

A.6 Das erstellte <strong>Modell</strong> im ” Sample Ecore Model Editor“ . . . . . . . . . . . . . 93<br />

A.7 UWE-Präsentations-Metamodell. Version 1.7 in der Ecore Darstellung . . . . 94<br />

A.8 UWE-Präsentations-Metamodell. Version 1.8 in der Ecore Darstellung . . . . 95<br />

A.9 Ein Generator <strong>Modell</strong> aus einem Ecore-<strong>Modell</strong> erstellen . . . . . . . . . . . . 96<br />

111


Abbildungsverzeichnis<br />

112<br />

A.10 Namen für das Generator-<strong>Modell</strong> wählen . . . . . . . . . . . . . . . . . . . . . 96<br />

A.11 Als ” Model Importer“ das Ecore-<strong>Modell</strong> wählen . . . . . . . . . . . . . . . . . 97<br />

A.12 Generator <strong>Modell</strong> mit EMF Generator öffnen . . . . . . . . . . . . . . . . . . 98<br />

A.13 Eclipse Plug-in-Projekte erstellen . . . . . . . . . . . . . . . . . . . . . . . . . 98<br />

A.14 Eclipse Plug-in-Projekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98<br />

A.15 Das Export der Metamodell-Eclipse-Plug-ins . . . . . . . . . . . . . . . . . . 99<br />

A.16 Speicherortangabe beim Export der Metamodell-Eclipse-Plug-ins . . . . . . . 99<br />

A.17 Das Deployment der Plug-ins . . . . . . . . . . . . . . . . . . . . . . . . . . . 100<br />

A.18 Ein Beispiel eines SimpleWebSite-<strong>Modell</strong>s, dem SimpleUWEold-Metamodell<br />

zugrunde liegt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100<br />

A.19 Ein SimpleUWEold <strong>Modell</strong> erstellen . . . . . . . . . . . . . . . . . . . . . . . 101<br />

A.20 SimpleUWEold <strong>Modell</strong> Editor Menü . . . . . . . . . . . . . . . . . . . . . . . 101<br />

A.21 SimpleUWEold <strong>Modell</strong> Editor - Kontext-Menü . . . . . . . . . . . . . . . . . 102<br />

A.22 SimpleUWEold <strong>Modell</strong> Editor Überblick . . . . . . . . . . . . . . . . . . . . . 102


Tabellenverzeichnis<br />

2.1 Tabelle. Die Metalevels nach der MOF [10] . . . . . . . . . . . . . . . . . . . 12<br />

3.1 Tabelle. Die Abhängigkeit zwischen dem Metamodell und den Softwareartefakten.<br />

[8] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />

3.2 Klassifizierung der Änderungen eines Metamodells im Überblick.[7][24] . . . . 26<br />

3.3 Überblick der Metamodell-Änderungen im Bezug auf Änderungstypen . . . . 30<br />

4.1 Alle Klassen des SimpleUWEold-Metamodells mit den entsprechenden Transformationsaktionen<br />

und den Relationen. . . . . . . . . . . . . . . . . . . . . . 46<br />

4.2 Attribute aus den Abstrakten Klassen. . . . . . . . . . . . . . . . . . . . . . . 47<br />

113


Tabellenverzeichnis<br />

114


Listings<br />

4.1 Der Syntaktischer Aufbau eines Transformationsskriptes[19] . . . . . . . . . . 36<br />

4.2 Der Syntaktischer Aufbau einer Transformation[19] . . . . . . . . . . . . . . . 37<br />

4.3 Das Beispiel einer Transformation[19] . . . . . . . . . . . . . . . . . . . . . . 37<br />

4.4 Das Beispiel einer Relation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38<br />

4.5 Das Beispiel einer Relation unter dem Einsatz der when- und where-Klauseln 39<br />

4.6 Die Syntax einer Domäne[19] . . . . . . . . . . . . . . . . . . . . . . . . . . . 40<br />

4.7 Das Beispiel eines prozeduralen Teil(pattern expression) einer Domäne . . . . 40<br />

4.8 Beispiel einer where-Klausel . . . . . . . . . . . . . . . . . . . . . . . . . . . 42<br />

4.9 Das Beispiel einer object template expression . . . . . . . . . . . . . . . . 42<br />

4.10 Das Beispiel einer object template expression. Alternative . . . . . . . . . 43<br />

4.11 Das Beispiel einer Inline-Objekterzeugung. . . . . . . . . . . . . . . . . . . . 44<br />

4.12 Transformationssignatur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45<br />

4.13 Identifizierte Relationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47<br />

4.14 Relation mapPackage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48<br />

4.15 Relation mapPage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49<br />

4.16 Relation mapPresClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51<br />

4.17 Relation mapText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />

4.18 Relation mapForm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53<br />

4.19 Relation mapAnchored<strong>Co</strong>l . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55<br />

4.20 Die Relation mapProperty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56<br />

5.1 Die Hilfsfunktionen für das Zugriff auf ein angewendetes Stereotyp . . . . . . 65<br />

5.2 Die Anwendung des Stereotyps text wird unter der when-Klausel geprüft . . 65<br />

5.3 Die Relationen für das <strong>Modell</strong> und das Paket . . . . . . . . . . . . . . . . . . 66<br />

5.4 Die Relation für die Textelemente . . . . . . . . . . . . . . . . . . . . . . . . . 67<br />

5.5 Die Relation für die Erzeugung eines liveReport-Attributs . . . . . . . . . . . 68<br />

5.6 Die Relation für die PresentationClass . . . . . . . . . . . . . . . . . . . . . . 68<br />

5.7 Die Relation für die PresentationProperties . . . . . . . . . . . . . . . . . . . 70<br />

5.8 Das Erzwingen eines UML-Profil-Elements in einer Relationsdomäne. . . . . . 80<br />

B.1 Kompletter Transformationsskript, der eine automatisierte UWE-Präsentationsmodell-<br />

<strong>Co</strong>-<strong>Evolution</strong> ermöglicht. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103<br />

115


Liste der Definitionen<br />

1.1 <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />

Unter <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> wird eine Anpassung der existierenden <strong>Modell</strong>e verstanden,<br />

die wegen der <strong>Evolution</strong> des zugrundeliegenden Metamodells durchgeführt<br />

werden muss. Die Anpassung bewirkt, dass diese <strong>Modell</strong>e mit dem neuen geänderten<br />

Metamodell konform gehen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2<br />

2.2 Rich Internet Applications<br />

” Rich Internet Applications (RIAs) are web applications, which use data that can be<br />

processed both by the server and the client. Furthermore, the data exchange takes<br />

place in an asynchronous way so that the client stays responsive while continuously<br />

recalculating or updating parts of the user interface. On the client, RIAs provide a<br />

similar look-and-feel as desktop applications and the word rich“ means particularly<br />

”<br />

the difference to the earlier generation of web applications. RIAs are basically<br />

characterized by a variety of interactive operating controls, the possibility of on-<br />

/offline use of the application, and the transparent usage of the client and server<br />

computing power and of the network connection..“[13] . . . . . . . . . . . . . . . . 5<br />

2.3 System<br />

” Ein System ist ein aus Teilen zusammengesetztes und strukturiertes Ganzes. Es<br />

hat eine Funktion, erfüllt einen Zweck und verfügt über eine Architektur.“[10] . . . 7<br />

2.4 Model<br />

” Ein <strong>Modell</strong> beschreibt oder spezifiziert ein System zu einem bestimmten Zweck.<br />

Dazu erfasst es alle hierfür relevanten Aspekte, etwa Struktur, Verhalten, Funktion<br />

und die Umwelt des Systems.“[10] . . . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />

2.5 Metamodell<br />

” Ein Metamodell ist die Menge von Elementen mit denen <strong>Modell</strong>e, die Instanzen<br />

dieses Metamodells sind, erstellt werden können. Es enthält die Regeln, die bei<br />

der Erstellung des <strong>Modell</strong>s beachtet werden müssen (abstrakte Syntax) sowie die<br />

Bedeutung der Elemente und Elementkonstellationen (Semantik).“[10] . . . . . . . 8<br />

2.6 Profile<br />

” Ein Profil ist eine leichtgewichtige Erweiterung eines Metamodells. Dazu stellt es<br />

neue <strong>Modell</strong>elemente zur Verfügung oder redefiniert bzw. erweitert die Semantik<br />

oder Syntax bereits bestehender Elemente. Im Gegensatz zur Definition völlig neuer<br />

Metamodelle (schwergewichtiger Ansatz) können sie die Bedingungen, die an<br />

Elemente der <strong>Modell</strong>e gestellt werden, nur verschärfen.“[10] . . . . . . . . . . . . . 8<br />

116


Liste der Definitionen<br />

2.7 Domain<br />

” Unter dem Begriff Domäne versteht man ein abgrenzbares, kohärentes Wissensgebiet.<br />

In einem Metamodell (respektive in einem Profil) werden die Konzepte einer<br />

Domäne in Bezug gesetzt und beschrieben. Zusammen mit ihrem sprachdefinierenden<br />

Charakter bezeichnet man Metamodell und Profil daher als Domänenspezifische<br />

Sprache (engl. Domain-Specific Language, DSL).“[10] . . . . . . . . . . . . . .<br />

2.8 Application<br />

”<br />

9<br />

Eine Anwendung oder Applikation (engl. Application) ist ein zu erstellendes Stück<br />

Software, welches die zu entwickelnde Funktionalität umfasst. Ein System kann<br />

sich aus einer oder mehreren Anwendung(en) zusammensetzen, die auf einer oder<br />

mehreren Plattform(en) ausgeführt werden.“[10]<br />

2.9 Plattform<br />

. . . . . . . . . . . . . . . . . . . 9<br />

” Eine Plattform ist eine Ausführungsumgebung für eine Anwendung. Ihre Funktionalität<br />

stellt sie durch zweckmäßige Schnittstellen bereit, auf die die Anwendung<br />

ohne Kenntnis der eigentlichen Implementierung zugreifen kann. Typische Beispiele<br />

für Plattformen sind im Bereich Betriebssysteme (Unix, Windows), Programmiersprachen<br />

(C++, Java) und Middleware (CORBA, Java EE, .NET) zu finden. Typisch<br />

für Plattformen ist auch, dass sie oft in der Art eines Plattform-Stacks (dt. in<br />

etwa Plattform Stapel) aufeinander aufsetzen. So bildet die Hardware eines <strong>Co</strong>mputers<br />

die unterliegende Plattform für das Betriebssystem, das seinerseits wieder<br />

Plattform für die einzelnen Anwendungen bietet usw.“[10] . . . . . . . . . . . . . .<br />

2.10Transformation<br />

”<br />

9<br />

Eine Transformation (oder genauer <strong>Modell</strong>-Transformation) ist der Prozess der<br />

Umwandlung eines <strong>Modell</strong>s in ein anderes <strong>Modell</strong> des gleichen Systems. Die Spezifikation<br />

für eine solche Transformation ist in Abbildungsregeln (engl. Mapping<br />

Rules) festgehalten, die in einer Abbildung (engl. Mapping) gebündelt sind.“[10] . 9<br />

117


Liste der Definitionen<br />

118


Literaturverzeichnis<br />

[1] Eclipse Galileo. Eclipse Modeling Tools; online accessed 31-May-2012 . http://www.<br />

eclipse.org/galileo/.<br />

[2] Eclipse Modeling Framework, Online accessed 31-May-2012 . http://www.eclipse.<br />

org/modeling/emf/?project=emf.<br />

[3] Blagoev, P.: MagicDraw-Plugin zur <strong>Modell</strong>ierung und Generierung von Web-<br />

Anwendungen. Diplomarbeit, Ludwig-Maximilians-Universität, 2007.<br />

[4] Brun, C. und A. Pierantonio: Model Differences in the Eclipse Modeling Framework.<br />

UPGRADE The European J for the Informatics Professional, IX(2):29–34, 2008.<br />

[5] Busch, M.: Migration und Erweiterung des MagicDraw-Plugins MagicUWE zur Entwicklung<br />

von Web-Anwendungen. Ludwigs-Maximilians-Universität. 2009.<br />

[6] Christian Kroiß, N. K. und S. Kozuruba: UWE Metamodel and Profile User Guide<br />

and Reference. Version 1.7 . 2011.<br />

[7] Cicchetti, A., D. D. Ruscio, R. Eramo und A. Pierantonio: Automating <strong>Co</strong>evolution<br />

in Model-Driven Engineering. In: Proceedings of the 2008 12th International<br />

IEEE Enterprise Distributed Object <strong>Co</strong>mputing <strong>Co</strong>nference, S. 222–231, Washington,<br />

DC, USA, 2008. IEEE <strong>Co</strong>mputer Society.<br />

[8] Di Ruscio, D., L. Iovino und A. Pierantonio: What is needed for managing coevolution<br />

in MDE?. In: Proceedings of the 2nd International Workshop on Model <strong>Co</strong>mparison<br />

in Practice, IWMCP ’11, S. 30–38, New York, NY, USA, 2011. ACM.<br />

[9] Fowler, M.: UML konzentriert. Addison-Wesley, München [u.a.], 2004.<br />

[10] Gruhn, V., D. Pieper und C. Röttgers: MDA: Effektives Software-Engineering mit<br />

UML 2 und Eclipse. Springer, Berlin, 2006.<br />

[11] Hitz, M., G. Kappel, E. Kapsammer und W. Retschitzegger: UML@Work, Objektorientierte<br />

<strong>Modell</strong>ierung mit UML 2 . dpunkt.verlag, Heidelberg, 2005.<br />

[12] Knapp, A., N. Koch, M. Wirsing und G. Zhang: UWE - Ein Ansatz zur modellgetriebenen<br />

Entwicklung von Webanwendungen (UWE - An Approach for the Model-<br />

Driven Development of Web Applications). i-com, 6(3):5–12, 2007.<br />

[13] Koch, N. und M. Busch: Rich Internet Application. State-of-the-Art. 2009.<br />

[14] Koch, N., A. Knapp, G. Zhang und H. Baumeister: Uml-Based Web Engineering<br />

- An Approach Based on Standards.. In: Rossi, G., O. Pastor, D. Schwabe und<br />

L. Olsina (Hrsg.): Web Engineering, Human-<strong>Co</strong>mputer Interaction Series, S. 157–191.<br />

Springer, 2008.<br />

119


Literaturverzeichnis<br />

[15] Kroiß, C. und N. Koch: UWE Metamodel and Profile User Guide and Reference.<br />

Version 1.7 . 2008.<br />

[16] Levendovszky, T., D. Balasubramanian, A. Narayanan und G. Karsai: A Novel<br />

Approach to Semi-Automated <strong>Evolution</strong> of DSML Model Transformation. In: Second<br />

International <strong>Co</strong>nference on Software Language Engineering, SLE 2009, LNCS,<br />

Bd. 5969, S. 23–41, Denver, CO, 05/2010 2010. Springer, Springer.<br />

[17] MOF, O. M. G.: Object Management Group Terms And Acronyms; Online accessed 31-<br />

May-2012 . http://www.omg.org/gettingstarted/save_terms_and_acronyms.htm.<br />

[18] MOF, O. M. G.: OMG’s MetaObject Facility; Online accessed 31-May-2012 . http:<br />

//www.omg.org/mof/.<br />

[19] Nolte, S.: QVT - Relations Language. Springer, 2009.<br />

[20] Pietrek, G. und J. Trompeter (Hrsg.): <strong>Modell</strong>getriebene Softwareentwicklung: MDA<br />

und MDSD in der Praxis. Entwickler.Press, Frankfurt am Main, 2007.<br />

[21] Ruscio, D. D., R. Laemmel und A. Pierantonio: Automated co-evolution of GMF<br />

editor models. In: Malloy, B., S. Staab und M. van den Brand (Hrsg.): 3rd<br />

International <strong>Co</strong>nference on Software Language Engineering (SLE 2010), S. 143–162.<br />

Springer, Heidelberg, 2010.<br />

[22] Sharonova, D.: Erweiterung eines Open Source-Werkzeugs für die UML-basierte <strong>Modell</strong>ierung<br />

von Webanwendungen. Diplomarbeit, Ludwig-Maximilians-Universität, 2011.<br />

[23] Stahl, T. und M. Völter: <strong>Modell</strong>getriebene Softwareentwicklung - Techniken, Engineering,<br />

Management. dpunkt.verlag, 2007.<br />

[24] Wachsmuth, G.: Metamodel Adaptation and Model <strong>Co</strong>-adaptation. In: ECOOP, S.<br />

600–624, 2007.<br />

120

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!