Erweiterung der ViPER-Umgebung zur ... - It works!
Erweiterung der ViPER-Umgebung zur ... - It works!
Erweiterung der ViPER-Umgebung zur ... - It works!
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Diplomarbeit<br />
<strong>Erweiterung</strong> <strong>der</strong> <strong>ViPER</strong>-<strong>Umgebung</strong> <strong>zur</strong><br />
methodengestützten Entwicklung mit<br />
MeDUSA<br />
von<br />
Marcel Hermanns<br />
Vorgelegt <strong>der</strong><br />
Fakultät für Mathematik, Informatik und Naturwissenschaften <strong>der</strong><br />
Rheinisch-Westfälischen Technischen Hochschule Aachen<br />
im September 2007<br />
Angefertigt am<br />
Lehr- und Forschungsgebiet Software-Konstruktion<br />
Prof. Dr. rer. nat. Horst Lichter<br />
Gutachter:<br />
Prof. Dr. rer. nat. Horst Lichter<br />
Prof. Dr.-Ing. Manfred Nagl<br />
Betreuer:<br />
Dipl.-Inform. Alexan<strong>der</strong> Nyßen
Hiermit versichere ich, dass ich die vorliegende Arbeit selbständig verfasst und keine<br />
an<strong>der</strong>en als die angegebenen Quellen und Hilfsmittel benutzt, sowie Zitate kenntlich<br />
gemacht habe.<br />
Aachen, den 21. September 2007<br />
Marcel Hermanns
Inhaltsverzeichnis<br />
1 Einleitung 1<br />
1.1 Software-Engineering . . . . . . . . . . . . . . . . . . . . . . . . . . 1<br />
1.2 Softwarekonstruktion - Notationen, Werkzeuge und Methoden . . . . 2<br />
1.3 Eingebettete Systeme . . . . . . . . . . . . . . . . . . . . . . . . . . 4<br />
1.4 Aufgabenstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />
1.5 Aufbau <strong>der</strong> Arbeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />
2 MeDUSA, UML, <strong>ViPER</strong> 7<br />
2.1 MeDUSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />
2.2 UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />
2.3 <strong>ViPER</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />
3 Prozessunterstützung in aktuellen Werkzeugen 33<br />
3.1 Jaczone WayPointer . . . . . . . . . . . . . . . . . . . . . . . . . . . 33<br />
3.2 Rational Systems Developer . . . . . . . . . . . . . . . . . . . . . . 38<br />
3.3 Evaluierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39<br />
4 Vision 41<br />
4.1 Methodenunterstützung . . . . . . . . . . . . . . . . . . . . . . . . . 41<br />
4.2 Prozessintegration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45<br />
4.3 Infrastruktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45<br />
4.4 Kosten/Nutzen-Analyse . . . . . . . . . . . . . . . . . . . . . . . . . 46<br />
5 Methodenunterstützung 49<br />
5.1 Allgemeine Unterstützung . . . . . . . . . . . . . . . . . . . . . . . 49<br />
5.2 Unterstützung <strong>der</strong> Subsystem Identification . . . . . . . . . . . . . . . 63<br />
6 Prozessintegration 75<br />
6.1 Analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75<br />
6.2 Konzept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82<br />
6.3 Technische Umsetzung . . . . . . . . . . . . . . . . . . . . . . . . . 88<br />
6.4 Durchführung <strong>der</strong> Prozessintegration . . . . . . . . . . . . . . . . . . 95<br />
7 Evaluierung 99<br />
7.1 Prozessintegration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99<br />
7.2 <strong>ViPER</strong> PF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100<br />
7.3 Methodenunterstützung . . . . . . . . . . . . . . . . . . . . . . . . . 101<br />
8 Zusammenfassung 107<br />
i
1 Einleitung<br />
Die Geburtsstunde des Software-Engineering fällt in das Jahr 1968, als <strong>der</strong> Informatiker<br />
F. L. Bauer auf einer NATO-Konferenz in Garmisch-Partenkirchen eine provokante<br />
Äußerung an sein Publikum richtete:<br />
The whole trouble comes from the fact that there is so much tinkering with<br />
software. <strong>It</strong> is not made in a clean fabrication process, which it should be.<br />
What we need, is software engineering.<br />
Der Grund seiner Provokatation war die Mitte <strong>der</strong> 60er Jahre herrschende Softwarekrise.<br />
Seit <strong>der</strong> Erfindung <strong>der</strong> ersten elektrischen Rechenanlage Z3 durch Konrad Zuse<br />
um 1941 hatte die Entwicklung <strong>der</strong> Hardware rasante Fortschritte gemacht [AFM00].<br />
Aus den verschiedensten Gründen - sei es <strong>der</strong> nationale Sicherheit wegen o<strong>der</strong> um des<br />
Profits willen - war versucht worden, die steigende und immer preiswerter werdende<br />
Rechenleistung durch komplexere Programme auszunutzen. Es entstand ein Problem,<br />
dass <strong>der</strong> nie<strong>der</strong>ländische Mathematiker und Informatiker Edsger Wybe Dijkstra in seiner<br />
Dankesrede zum Turingpreis 1972 folgen<strong>der</strong>maßen formulierte:<br />
[The major cause of the software crisis is] that the machines have become<br />
several or<strong>der</strong>s of magnitude more powerful! To put it quite bluntly: as long<br />
as there were no machines, programming was no problem at all; when we<br />
had a few weak computers, programming became a mild problem, and<br />
now we have gigantic computers, programming has become an equally<br />
gigantic problem. [Dij72]<br />
Die Softwarekrise resultierte also aus dem Scheitern vieler Softwareprojekte. Die mit<br />
<strong>der</strong> nun höheren Rechenleistung realisierbaren Programme besaßen eine Größe und<br />
Komplexität, die mit den damalig genutzten Techniken nicht mehr handhabbar waren.<br />
Der durch die Rede von Bauer geprägte Begriff des Software-Engineering beschreibt<br />
das Arbeiten an Software nach Ingenieurdisziplinen [LL06], <strong>der</strong>en Anwendung dazu<br />
führen sollte, Softwareherstellung bewusst und kontrolliert vorzunehmen, um damit<br />
<strong>der</strong> Softwarekrise zu begegnen. Hieraus hat sich im Laufe <strong>der</strong> Zeit die stark von Normierungen<br />
und Standards geprägte Form <strong>der</strong> Softwareentwicklung gebildet.<br />
1.1 Software-Engineering<br />
Im Software-Engineering haben sich vier verschiedene Teilbereiche gebildet (vgl. Abb.<br />
1.1), in denen die einzelnen Disziplinen Anwendung finden. Die Erstellung <strong>der</strong> Software<br />
wird in einem Projekt durchgeführt, das die Menschen, Tätigkeiten, Interaktionen<br />
1
1 Einleitung<br />
und Resultate verbindet. Mit dem Projektmanagement werden dazu Ziele verfolgt, die<br />
zu einem erfolgreichen Abschluss des Projekts führen. „ [. . . ] »Erfolgreich« bedeutet,<br />
dass das Projekt die definierten Resultate in <strong>der</strong> gefor<strong>der</strong>ten Qualität innerhalb <strong>der</strong><br />
vorgegebenen Zeit und mit den vorgesehenen Mittels erzielt [. . . ] “ [LL06].<br />
Abbildung 1.1: Teilbereiche des Software-Engineerings (Vorlesungsskript, Lichter)<br />
Die Qualitätssicherung beinhaltet organisatorische, konstruktive aber auch analytische<br />
Maßnahmen, um die Zielerfüllung <strong>der</strong> Software in gewissem Maße zu gewährleisten.<br />
Für die Verwaltung von verschiedenen Produktversionen beispielsweise, aber auch<br />
für die Berücksichtigung von Än<strong>der</strong>ungswünschen, ist das Konfigurationsmanagement<br />
verantwortlich. Die eigentliche Softwarekonstruktion bzw. Systemherstellung bildet<br />
nur einen Teil des Software-Engineerings und steht in ständiger Interaktion mit den<br />
an<strong>der</strong>en Teilbereichen.<br />
1.2 Softwarekonstruktion - Notationen, Werkzeuge und Methoden<br />
Im konstruktiven Teil <strong>der</strong> Softwareentwicklung werden Programme heutzutage meist<br />
in einer hohen Programmiersprache mit einem Werkzeug entlang einer definierten Methode<br />
entwickelt. Oft werden die drei Bestandteile durch gemeinsame Konzepte verbunden<br />
und bilden dann ein Systemdreieck wie in Abbildung 1.2 dargestellt.<br />
2<br />
Abbildung 1.2: Das Systemdreick
1.2 Softwarekonstruktion - Notationen, Werkzeuge und Methoden<br />
Sprachen und Notationen Bei den ersten Rechenanlagen in den 40er Jahren<br />
mussten Programme in Maschinencode erstellt werden. Mit <strong>der</strong> Vereinfachung durch<br />
die Einführung von Assembler, war die Programmierung einem ständigen Prozess <strong>der</strong><br />
Abstraktion unterworfen. Ab den 50er Jahren kamen verschiedene zumeist prozedurale<br />
Hochsprachen zum Einsatz, <strong>der</strong>en Quelltext mit verfügbaren Compilern in Maschinenbefehle<br />
übersetzt werden konnte.<br />
Die Einführung <strong>der</strong> Objektorientierung in den 90er Jahren und die damit verbundenen<br />
Konzepte wie das <strong>der</strong> Vererbung o<strong>der</strong> das <strong>der</strong> Polymorphie sind die Grundlage <strong>der</strong> mo<strong>der</strong>nen<br />
Softwareentwicklung. Programme werden so nicht mehr ausschließlich durch<br />
die Implementierung von Funktionen und Prozeduren erstellt, die eine Eingabe in eine<br />
Ausgabe nach einer Rechenvorschrift umwandeln. Die Objektorientierung erlaubt<br />
das Modellieren von Objekten, die durch Nachrichten miteinan<strong>der</strong> kommunizieren.<br />
Gleichartige Objekte werden durch gemeinsame Klassen beschrieben, die untereinan<strong>der</strong><br />
wie<strong>der</strong>um Hierarchien bilden können. Die Verwendung <strong>der</strong> Objektorientierung<br />
verspricht eine bessere Wartbarkeit; allerdings muss ein schlechteres Laufzeitverhalten<br />
<strong>der</strong> Programme in Kauf genommen werden. Bei <strong>der</strong> Entwicklung von Informationssystemen<br />
überwiegen die Kosten <strong>der</strong> Softwareherstellung und -wartung die Kosten<br />
<strong>der</strong> Hardware. Um eine bessere Wartbarkeit <strong>der</strong> Software zu gewährleisten und damit<br />
<strong>der</strong>en Kosten zu senken, wird aus diesem Grund ein schlechteres Laufzeitverhalten<br />
akzeptiert.<br />
Mit <strong>der</strong> Einführung <strong>der</strong> Unified Modeling Language (UML) als Standard am 19. November<br />
1997 wurde ein weiterer wichtiger Eckpfeiler <strong>der</strong> heutigen Softwareentwicklung<br />
gesetzt. Auf <strong>der</strong> Basis <strong>der</strong> Objektorientierung erlaubt die UML das Beschreiben<br />
von Softwaresystemen auf einer abstrakteren Ebene als <strong>der</strong> <strong>der</strong> gewählten Programmiersprache<br />
und ermöglicht eine grafische Visualisierung durch verschieden Diagrammtypen.<br />
Aktuelle Ansätze wie die modellgetriebene Softwareentwicklung nutzen<br />
diese Notation, um aus dem Modellierten unmittelbar den Code einer (objektorientierten)<br />
Hochsprache zu generieren.<br />
Werkzeuge Die Werkzeuge <strong>der</strong> Softwareherstellung durchlebten ebenfalls eine stetige<br />
Weiterentwicklung. Neben den Compilern waren in den Anfängen <strong>der</strong> Programmierung<br />
wohl Texteditoren die fundamentalen Werkzeuge. Mit ihnen konnte <strong>der</strong> Quelltext<br />
<strong>der</strong> jeweiligen Sprache erstellt werden. Weitergehende Editoren konnten durch<br />
Syntax-Highlighting den Code in einer lesbareren Form präsentierten und während<br />
des Editierens auf Syntax-Fehler aufmerksam machen. An<strong>der</strong>e Einzelwerkzeuge unterstützten<br />
beispielsweise die als Debugging bezeichnete Fehlersuche.<br />
Erst in den letzten Jahren entstanden Werkzeuge, die mehrere Anwendungen vereinen<br />
und als integrierte Entwicklungsumgebungen (IDE) bezeichnet werden. Momentan<br />
sehr populär ist die frei verfügbare Eclipse-IDE, die durch ihre große Anhängerschaft<br />
immer mächtiger wird. Sie unterstützt in ihren diversen Ausprägungen beispielsweise<br />
die Programmierung in verschiedenen Sprachen (z. B. C, C++, Java und neuerdings<br />
auch PHP 5), das Debugging und die Versionskontrolle [Ecl].<br />
3
1 Einleitung<br />
Methoden und Prozesse Heutige Softwareentwicklungsprozesse beschreiben,<br />
wie die Entwicklung von Software nach einem vordefinierten Prozess stattfinden soll.<br />
Sie bilden also den von Bauer erwähnten „Fertigungsprozess“ (fabrication process).<br />
Allgemeine Entwicklungsprozesse, wie beispielsweise <strong>der</strong> Rational Unified Process<br />
(RUP) [Kru99], beinhalten Aufgaben, die den Handlungsbedarf in allen Teilbereichen<br />
des Software-Engineerings (vgl. Abb. 1.1) berücksichtigen.<br />
Methoden hingegen können zwar Teil eines Entwicklungsprozesses sein, beschränken<br />
sich aber auf die reine Softwarekonstruktion. Bei <strong>der</strong> Erstellung von Software nehmen<br />
die Entwickler verschiedene Rollen ein, um bei <strong>der</strong> Bearbeitung von Aufgaben verschiedene<br />
Arbeitsergebnisses zu erstellen. Methoden definieren Regeln, mit denen ein<br />
Entwickler in einer Rolle bei <strong>der</strong> Wahl seiner Aktionen unterstützt wird [LL06].<br />
Werkzeuge stellten im Laufe <strong>der</strong> Zeit immer mehr Funktionalität bereit, um die Entwicklung<br />
<strong>der</strong> Software zu unterstützen. Bis heute gibt es allerdings nur wenige, in<br />
denen ein Entwicklungsprozess bzw. eine Methode integriert ist. Die Unterstützung<br />
beinhaltet oft nur die Beschreibung des Prozesses. We<strong>der</strong> wird <strong>der</strong> konkrete Ablauf<br />
des Prozesses, noch eine spezielle Hilfe bei einzelnen Aufgaben einer Methode im<br />
Werkzeug abgebildet.<br />
1.3 Eingebettete Systeme<br />
Einen spezieller Bereich <strong>der</strong> Softwareentwicklung stellen eingebettete Systeme dar.<br />
Ein eingebettetes System ist eine Kombination aus Computerhardware und -software,<br />
das <strong>zur</strong> Erfüllung einer bestimmten Aufgabe erstellt wurde und mechanische o<strong>der</strong> an<strong>der</strong>e<br />
Komponenten beinhalten kann [Bar99]. Heutzutage befinden sie sich in nahezu<br />
jedem elektrischen Gerät, können aber auch Teil großer Prozessautomatisierungsanlagen<br />
sein.<br />
Sie werden oft tausend- o<strong>der</strong> millionenfach mit identischer Hard- und Software eingesetzt.<br />
Da ist es naheliegend, dass im Vergleich zu klassischen Informationssystemen<br />
die Kosten <strong>der</strong> Hardware eine wesentlich wichtigere Rolle spielen. Kann die Software<br />
prinzipiell so konstruiert werden, dass sie mit weniger Hardwareressourcen auskommt,<br />
können die Herstellungskosten damit immens verringert werden. Die Software muss<br />
nur ein einziges mal erstellt werden, die Hardware hingegen für jedes System. Aus<br />
diesem Grund wird versucht, die Hardwarekosten zu minimieren und die Software<br />
mit möglichst effizientem Laufzeitverhalten zu realisieren. In <strong>der</strong> Praxis wird deshalb<br />
auf die Objektorientierung verzichtet und es wird beispielsweise eine prozedurale Programmiersprache<br />
wie C eingesetzt.<br />
Im Gegensatz zum Bereich <strong>der</strong> Informationssysteme haben sich im Kontext eingebetteter<br />
Systeme relativ wenige Entwicklungsprozesse bzw. Methoden etabliert. Bruce<br />
Powel Douglass veröffentlichte 1999 ROPES [Dou99] - eine Methode, in <strong>der</strong> die Konzepte<br />
<strong>der</strong> UML in <strong>der</strong> Entwicklung von eingebetteten Systemen Einzug finden sollten<br />
[Dou99]. Knapp ein Jahr später erschien von Hassan Gomaa ein Buch <strong>zur</strong> COMET<br />
Methode [Gom00], mit <strong>der</strong> ein ähnlicher Ansatz verfolgt wurde. Beide Autoren ent-<br />
4
1.4 Aufgabenstellung<br />
wickelten auf den jeweiligen Methoden aufbauend weitere Ansätze. Douglass veröffentlichte<br />
Ende 2006 ein Buch, in dem er die Methode Harmony vorstellte, die durch<br />
das Werkzeug Rhapsody unterstützt wird und und in <strong>der</strong> modellgetriebenen Softwareentwicklung<br />
Anwendung findet [Dou06]. Ein an<strong>der</strong>es Konzept wird durch Gomaa<br />
aufbauend auf <strong>der</strong> COMET Methode mit PLUS verfolgt. In seinem Werk, das er im<br />
Juli 2006 veröffentlichte, beschreibt er die Produktlinienentwicklung im Kontext eingebetteter<br />
Systeme.<br />
1.4 Aufgabenstellung<br />
In dieser speziellen Fachdomäne wird am Lehrstuhl für Software-Konstruktion <strong>der</strong><br />
RWTH Aachen seit einigen Jahren in Kooperation mit <strong>der</strong> Industrie eine weitere Methode<br />
entwickelt, die durch ein prototypisches UML-Modellierungswerkzeug unterstützt<br />
werden soll.<br />
Der Bedarf einer neuen Methode entstand dadurch, dass die bestehenden Methoden<br />
für die Entwicklung von speziellen eingebetteten Systemen in einem Unternehmen<br />
keine ausreichende Unterstützung boten. Die COMET-Methode wurde mehrfach den<br />
eigenen Bedürfnissen bei <strong>der</strong> Entwicklung angepasst und mit <strong>der</strong> Zeit unübersichtlich.<br />
Aus diesem Grund wird in Kooperation mit dem Lehrstuhl die MeDUSA-Methode<br />
entwickelt, die auf Ansätzen von COMET basiert und auf die beson<strong>der</strong>en Bedürfnisse<br />
dieser speziellen Domäne eingeht. Im Vor<strong>der</strong>grund steht hier unter an<strong>der</strong>em die Use<br />
Case- und modellgetriebene Entwicklung.<br />
Neben <strong>der</strong> MeDUSA-Methode wurde das auf die Eclipse-IDE basierende Werkzeug<br />
<strong>ViPER</strong> entwickelt. Diese integrierte Entwicklungsumgebung unterstützt die modellgetriebene<br />
Entwicklung einbetteter Systeme.<br />
Im Rahmen dieser Arbeit soll <strong>ViPER</strong> dahingehend erweitert werden, dass erste Grundsteine<br />
für die methodengestützte Entwicklung mit MeDUSA gelegt werden. Dabei<br />
müssen im Wesentlichen zwei wesentliche Fragestellungen betrachtet werden:<br />
• Methodenunterstützung: Wodurch kann <strong>der</strong> Entwickler bei den Aufgaben einer<br />
Methode möglichst optimal unterstützt werden?<br />
• Prozessintegration: Wie kann <strong>der</strong> zeitliche Ablauf eines Entwicklungsprozesses<br />
in einem Werkzeug abgebildet werden?<br />
1.5 Aufbau <strong>der</strong> Arbeit<br />
Entlang dieser Leitfragen orientiert und strukturiert sich die gesamte Arbeit. Im Folgenden<br />
Kapitel werden zunächst MeDUSA, <strong>ViPER</strong> und die UML detailliert vorgestellt.<br />
Die Beschreibung von MeDUSA beruht auf <strong>der</strong> Unified Method Architecture<br />
(UMA), die unter an<strong>der</strong>em ein Begriffsmodell <strong>zur</strong> Definition von Prozessen beinhaltet.<br />
5
1 Einleitung<br />
Entlang dieses Modells ist die Beschreibung von MeDUSA getrennt in eine Darstellung<br />
des Methodeninhalts sowie in eine Schil<strong>der</strong>ung <strong>der</strong> zeitlichen Abfolge des Prozesses.<br />
<strong>ViPER</strong> wird anschließend zusammen mit <strong>der</strong> Eclipse-IDE und verwendeten<br />
Technologien vorgestellt.<br />
Im Kapitel 3 werden aktuelle Werkzeuge <strong>der</strong> Softwareentwicklung hinsichtlich realisierter<br />
Konzepte für die Methodenunterstützung und Prozessintegration untersucht.<br />
Auf <strong>der</strong> Basis <strong>der</strong> in diesem Kapitel identifizierten Konzepte werden in Kapitel 4 mögliche<br />
Hilfestellung für die methodengestützte Entwicklung mit MeDUSA diskutiert.<br />
Kapitel 5 greift mögliche Konzepte einer möglichen Methodenunterstützung auf. Der<br />
Schwerpunkt liegt auf <strong>der</strong> Entwicklung eines allgemeinen Frame<strong>works</strong>, das für die<br />
Unterstützung einer einzelnen Aufgabe eingesetzt werden kann und <strong>der</strong> prototypischen<br />
Entwicklung für eine Hilfestellung einer speziellen Aufgabe.<br />
Die in Kapitel 4 beschriebenen Aspekte einer möglichen Prozessintegration werden in<br />
Kapitel 6 vertieft und sowohl eine konzeptionelle Lösung als auch <strong>der</strong>en technische<br />
Umsetzung präsentiert. Unter an<strong>der</strong>em beinhaltet das Kapitel auch eine Beschreibung<br />
des UMA-Metamodells das - wenn nicht an<strong>der</strong>s kenntlich gemacht - im Rahmen dieser<br />
Arbeit stets verwendet wird, insbeson<strong>der</strong>e für die in Kapitel 2 vorgelegte Beschreibung<br />
von MeDUSA.<br />
Sowohl die Evaluierung <strong>der</strong> Prozessintegration als auch die <strong>der</strong> Methodenunterstützung<br />
werden im Kapitel 7 vorgenommen, indem die erstellten Komponenten bzgl. verschiedener<br />
Qualitätsmerkmale bewertet werden. Abgeschlossen wird diese Arbeit mit<br />
Kapitel 8, wo neben einer Zusammenfassung ein Ausblick auf mögliche zukünftige<br />
Arbeiten geliefert wird.<br />
Viele Abbildungen dieser Arbeit sind Bildschirmfotos o<strong>der</strong> Diagramme einer definierten<br />
grafischen Notation. Der Übersichtlichkeit halber und <strong>zur</strong> Erklärung wurden den<br />
Abbildungen an einigen Stellen durch rote Markierung kenntlich gemachte Hinweise<br />
hinzugefügt.<br />
6
2 MeDUSA, UML, <strong>ViPER</strong><br />
Im Folgenden sollen zunächst die Methode MeDUSA mit dem zugehörigen Prozess<br />
vorgestellt werden und darüber hinaus die relevanten Bestandteile <strong>der</strong> UML und das<br />
Modellierungswerkzeug <strong>ViPER</strong>, das um eine Prozessunterstützung für MeDUSA erweitert<br />
werden soll. Zusammen mit <strong>der</strong> UML als Architekturbeschreibungssprache<br />
bilden sie, verbunden durch gemeinsame Konzepte, wie beispielsweise <strong>der</strong> Use Caseund<br />
modellgetriebenen Entwicklung, das in Abbildung 2.1 dargestellte Systemdreieck.<br />
Abbildung 2.1: Systemdreieck: MeDUSA [LN07], <strong>ViPER</strong> [ViP], UML [UML]<br />
2.1 MeDUSA<br />
MeDUSA ist eine Design-Methode für die Erstellung von Software-Anwendungen<br />
eingebetteter Systeme [LN07]. Ihr Einsatzbereich ist beschränkt auf eine spezielle<br />
Fachdomäne, die <strong>der</strong> so genannten Feldgeräte. Feldgeräte sind kleine eingebettete<br />
Systeme, die in Prozessautomatisierungsanalgen integriert sind und beispielsweise <strong>zur</strong><br />
Messung einer Temperatur, eines Drucks o<strong>der</strong> einer Fließgeschwindigkeit eingesetzt<br />
werden.<br />
Für die Implementierung <strong>der</strong> Softwaresysteme werden in <strong>der</strong> Praxis aufgrund <strong>der</strong> starken<br />
Hardwareeinschränkungen prozedurale Programmiersprachen wie C eingesetzt.<br />
Um eine Abbildung auf eine solche Sprache zu ermöglichen, wird auf das Konzept <strong>der</strong><br />
Objektorientierung, inbeson<strong>der</strong>e auf die Vererbung und <strong>der</strong> darauf aufbauenden Polymorphie,<br />
verzichtet. Der durchgängig objektbasierte Ansatz <strong>der</strong> Entwicklung in <strong>der</strong><br />
Analyse und im Entwurf ist sich durch die niedrige Komplexität <strong>der</strong> Systeme und <strong>der</strong><br />
somit geringen Anzahl zu erstellen<strong>der</strong> Objekte begründet.<br />
7
2 MeDUSA, UML, <strong>ViPER</strong><br />
Die folgende Beschreibung von MeDUSA basiert auf <strong>der</strong> Unified Method Architecture<br />
(UMA), einer Sprache <strong>zur</strong> Modellierung von Entwicklungsprozessen und Methoden.<br />
Wesentliches Ziel 1 von UMA ist die Trennung von Methodeninhalt und Prozess. Der<br />
Methodeninhalt enthält unter an<strong>der</strong>em die Aufgaben <strong>der</strong> Methode, die von den einzelnen<br />
Rollen im Entwicklungsprozess zu bearbeiten sind, um verschiedene Arbeitsergebnisse<br />
zu erstellen. Sowohl die Aufgaben und Rollen als auch die entstehenden<br />
Arbeitsergebnisse werden innerhalb des Methodeninhaltes in Disziplinen gruppiert.<br />
Der Prozess hingegen setzt die Methodeninhalte in zeitliche Abhängigkeiten und definiert<br />
einen Ablauf. Der Abschnitt 6.1.1 beschäftigt sich ausgiebig mit dieser Thematik<br />
und stellt die UMA-Terminologie vor.<br />
2.1.1 Methodeninhalt<br />
Bei <strong>der</strong> Beschreibung <strong>der</strong> MeDUSA-Disziplinen wird implizit eine zeitliche Abhängigkeit<br />
vorgegeben, da manche Aufgaben Arbeitsergbnisse an<strong>der</strong>er Aufgaben referenzieren.<br />
Beispielsweise werden im Context Modelling als Aufgabe <strong>der</strong> Analyse die im<br />
Use Case Modelling identifizierten Akteure referenziert. Diese implizite Vorgabe des<br />
Ablaufs soll jedoch nicht den Prozess festlegen, son<strong>der</strong>n lediglich zum Verständnis<br />
dienen.<br />
Requirements<br />
In <strong>der</strong> objektorientierten Analyse (OOA) werden oft Use Cases eingesetzt, um die<br />
funktionalen Anfor<strong>der</strong>ungen an das zu erstellende System aus einer externen Sicht heraus<br />
darstellen zu können. Solche Analysemethoden dienen meist <strong>der</strong> Modellierung von<br />
Informationssystemen. Nicht-funktionalen Anfor<strong>der</strong>ungen bzgl. Hardwareeinschränkungen<br />
spielen eine eher untergeordnete Rolle. Bei eingebetteten Systemen treten diese<br />
nicht-funktionale Anfor<strong>der</strong>ungen - also Restriktionen für die Erstellung einer Lösung<br />
- aufgrund <strong>der</strong> Ressourcenknappheit und Nebenläufigkeit dagegen vermehrt auf.<br />
Mit MeDUSA sollen neben den funktionalen zusätzlich zu den nicht-funktionalen Anfor<strong>der</strong>ungen<br />
bereits bei dem Use Case Modelling berücksichtigt werden. Neben <strong>der</strong><br />
Erfassung von Use Cases und Akteuren in Diagrammen werden die Szenarien <strong>der</strong> einzelnen<br />
Use Cases im Narrative Use Case Description Modelling erläutert.<br />
Use Case Modelling Im Use Case Modelling werden die Use Cases des zu erstellenden<br />
Systems und die an <strong>der</strong> Interaktion für jeden Use Case beteiligten Akteure<br />
in einem UML Use Case-Diagramm erfasst und zueinan<strong>der</strong> in Beziehung gesetzt<br />
[JCJv92]. Ein primärer Akteur stößt die Interaktion für einen Use Case an, sekundäre<br />
Akteure sind passiv beteiligt. Die Attribute primär und sekundär repräsentieren also<br />
Rollen, so dass ein Akteur bezüglich eines Use Cases ein primärer Akteur und bezüglich<br />
eines weiteren Use Cases ein sekundärer Akteur sein kann. Die Taxonomie <strong>der</strong><br />
Akteure wird in Abbildung 2.2 dargestellt.<br />
8<br />
1 UMA wird im Kapitel 6.1.1 detailliert vorgestellt
Abbildung 2.2: Taxonomie <strong>der</strong> Akteure in MeDUSA<br />
2.1 MeDUSA<br />
Neben externen Soft- und Hardwaresystemen, die als device bzw. protocol actor repräsentiert<br />
werden, wird <strong>der</strong> Auslöser einer Interaktion (ein primärer Akteur) durch einen<br />
trigger actor repräsentiert. In eingebetten Systemen gibt es keine menschlichen Akteure.<br />
Je<strong>der</strong> Use Case wird entwe<strong>der</strong> periodisch (timer actor) o<strong>der</strong> aperiodisch (eventer<br />
actor) von einer Quelle ausgelöst. Die Idee, die mit MeDUSA verfolgt wird, ist<br />
die Trennung <strong>der</strong> Quelle von dem Ereignis. Während die Quelle durch einen passiven<br />
interface actor repräsentiert wird, stellt ein aktiver trigger actor den Auslöser des<br />
Ereignisses dar.<br />
Sind externe Systeme in <strong>der</strong> Realität (aktive) primäre Akteure, werden sie also als ein<br />
trigger und ein interface actor modelliert. Abbildung 2.3 zeigt die Modellierung eines<br />
Sensors sowohl durch einen device actor als auch durch einen timer actor. Passive<br />
Akteure, wie z. B. ein externes System <strong>zur</strong> Anzeige von Informationen (Output Display),<br />
werden lediglich durch einen interface actor repräsentiert. Die Trennung von<br />
<strong>der</strong> Quelle und dem Ereignis erlaubt die explizite Modellierung von zeitlichen Rahmenbedingungen.<br />
Abbildung 2.3: Trennung von Quelle und Ereignis / Interner Akteur<br />
Die Nebenläufigkeit von Use Cases ist ebenfalls aus einer externen Sicht auf das System<br />
erkennbar (vgl. Abb. 2.3 ): Ein Feldgerät könnte beispielsweise durch einen Sensor<br />
die Flussgeschwindigkeit in einem Rohr bestimmen und daraus verschiedene Wer-<br />
9
2 MeDUSA, UML, <strong>ViPER</strong><br />
te wie die Durchflussmenge bestimmen, die dann auf ein externes System übertragen<br />
werden, um dort eine Ausgabe zu erzeugen. An<strong>der</strong>erseits könnten zeitgleich Wartungsinformationen<br />
des Feldgerätes generiert werden, die auf das gleiche externe System<br />
übertragen werden müssen. Werden beide Szenarien als Use Cases modelliert, und die<br />
für die Ausgabe relevante Kommunikation mit dem externen System durch einen weiteren<br />
Use Case dargestellt, entsteht die Notwendigkeit einer Synchronisation. Es muss<br />
entschieden werden, welche Informationen an das externe System als Nächstes übertragen<br />
werden sollen. Anstatt die beiden nebenläufigen Use Cases jeweils mit dem die<br />
Kommunikation beinhaltenden Use Case durch Assoziationen miteinan<strong>der</strong> zu verbinden,<br />
werden sie wie in Abbildung 2.3 indirekt über einen internen Akteur verknüpft.<br />
Der interne Akteur ist bezüglich <strong>der</strong> Use Cases Determine Flow Rate und Generate<br />
Maintenance Information sekundärer Akteur. Bezüglich des Use Cases Send Ouput<br />
nimmt er die Rolle eines primären Akteurs ein, da er das mit dem Use Case assoziierte<br />
Verhalten anstößt. Eine ausführliche Diskussion dieser Problematik findet sich in<br />
[NL].<br />
Use Case Description Modelling Für jeden identifizierten Use Case wird eine<br />
textuelle Beschreibung erstellt, die neben den Vor- und Nachbedingungen das Szenario<br />
des Use Cases als Abfolge einzelner Schritte beschreibt. Die Darstellungen des Standardablaufs<br />
und <strong>der</strong> Alternativabläufe werden mit Hilfe des flow of event-Konzepts<br />
realisiert. Mit diesem Ansatz werden Abläufe als Flüsse von einem Anfangs- zu einem<br />
Endpunkt interpretiert. Ein Fluss kann <strong>Erweiterung</strong>spunkte enthalten, die bei Alternativabläufen<br />
durch Alternativflüsse erweitert werden können. Bei Vererbungsbeziehungen<br />
können Flüsse zwischen zwei <strong>Erweiterung</strong>spunkten spezifiziert o<strong>der</strong> bereits<br />
vorhandene überschrieben werden. Das Konzept <strong>der</strong> flow of events wird in [WNHL]<br />
vorgestellt.<br />
Analysis<br />
In <strong>der</strong> Analyse sollen die Gegenstände <strong>der</strong> Problemwelt erkannt, festgehalten und ihr<br />
kollaboratives Verhalten für die Use Cases beschrieben werden. Das Verhalten von<br />
Objekten, die an mehreren Kollaborationen beteiligt sind, wird jeweils in einem Diagramm<br />
konsolidiert dargestellt. Zuletzt werden Task-Kandidaten ermittelt. Durch eine<br />
erste Abschätzung <strong>der</strong> CPU-Ausnutzung soll die weitere Entwicklung eines Systems<br />
ausgeschlossen werden, das bereits zu diesem Zeitpunkt als nicht realisierbar eingestuft<br />
werden kann.<br />
Die Analyseobjekte werden entsprechend <strong>der</strong> in Abbildung 2.4 dargestellten Taxonomie<br />
typisiert. Alle Objekte werden unterteilt in trigger und interface Objekte - analog<br />
zu den Akteuren <strong>der</strong> Use Cases, in entity Objekte <strong>zur</strong> Repräsentierung datenintensiver<br />
Objekte, in application logic Objekte <strong>zur</strong> Kapselung von Algorithmen o<strong>der</strong> Geschäftslogik<br />
sowie in control Objekte <strong>zur</strong> Steuerung des Kontrollflusses. Um bei <strong>der</strong><br />
Identifikation dieser Objekte systematisch vorgehen zu können, werden sie in verschiedenen<br />
Aufgaben identifiziert. Die erste Aufgabe beschäftigt sich mit <strong>der</strong> Identifikation<br />
<strong>der</strong> trigger und interface Objekte. Im anschließenden Information Modelling werden<br />
10
2.1 MeDUSA<br />
die entity Objekte identifiziert und während des Inter-Object Collaboration Modelling<br />
die noch fehlenden und für die Interaktionen <strong>der</strong> einzelnen Use Cases notwendigen<br />
application-logic und control Objekte modelliert.<br />
Abbildung 2.4: Taxonomie <strong>der</strong> Analyseobjekte in MeDUSA<br />
Context Modelling Während des Context Modelling sollen alle Soft- und Hardwareschnittstellen<br />
des Systems und damit alle Quellen periodischer o<strong>der</strong> aperiodischer<br />
Ereignisse durch den Systemanalyst im Context Diagram in Form eines UML Objektdiagramms<br />
festgehalten werden. Die trigger Objekte spiegeln direkt die im Use Case<br />
Modelling identifizierten (externen) trigger Akteure wie<strong>der</strong>.<br />
Information Modelling Das Ziel des Information Modelling ist das Identifizieren<br />
aller datenintensiven entity Objekte und <strong>der</strong>en Beziehungen untereinan<strong>der</strong>. Bei <strong>der</strong> Erstellung<br />
des als UML Objekt-Diagramm realisierten Information Diagram werden alle<br />
in <strong>der</strong> Realität <strong>der</strong> Anwendungsdomäne vorhandenen und für das System relevanten<br />
physikalischen Größen identifiziert.<br />
Inter-Object Collaboration Modelling Für jeden einzelnen Use Case wird ausgehend<br />
von dem auslösenden trigger Objekt die Kollaboration <strong>der</strong> bisher entdeckten<br />
und benötigten Analyseobjekte wahlweise in Kommunikations- o<strong>der</strong> Sequenzdiagrammen<br />
beschrieben, wobei control und application-logic Objekte identifiziert werden.<br />
Sollte <strong>der</strong> Use Case keine Assoziation mit einem trigger-Objekt besitzen, weil er beispielsweise<br />
nur als <strong>Erweiterung</strong> eines an<strong>der</strong>en Use Cases dient, wird stattdessen das<br />
korrespondierende Analyseobjekt verwendet. Die Kollaboration des Standardablaufs<br />
sollte als Kommunikationsdiagramm modelliert werden. Die Interaktionen für Alternativabläufe<br />
werden zusätzlich als Sequenzdiagramme festgehalten.<br />
Intra-Object Behavioural Modelling Während <strong>der</strong> Analyse werden vermutlich<br />
einige Objekte identifiziert, die an mehr als einer Kollaboration beteiligt sind, zumindest<br />
fallen einige control und application-logic Objekte darunter. Ziel des Intra-Object<br />
Behavioural Modelling ist nun, das Verhalten dieser Objekte in einem Diagramm konsolidiert<br />
darzustellen.<br />
Das Verhalten von application-logic Objekten kann zustandsabhängig sein, so dass<br />
eine Beschreibung durch Zustandsdiagramme erfolgen sollte. Ansonsten steht es dem<br />
11
2 MeDUSA, UML, <strong>ViPER</strong><br />
Systemanalysten frei, das Verhalten von Objekten in verschiedenen Kollaborationen<br />
durch Sequenz- und Aktivitätsdiagramme zu beschreiben.<br />
Task Modelling Bereits im Use Case Modelling wird versucht, das Auftreten von<br />
Nebenläufigkeit zu identifzieren und die dazugehörige Interaktionen im Inter-Object<br />
Collaboration Modelling zu beschreiben. Aus den trigger Objekten und an<strong>der</strong>en an<br />
<strong>der</strong> Kollaboration <strong>zur</strong> Durchführung eines Use Cases beteiligten Objekten sind Task-<br />
Kandidaten identifizierbar, die unter Berücksichtigung <strong>der</strong> Nebenläufigkeit für eine<br />
Durchführbarkeitsanalyse herangezogen werden können. Die Identifzierung <strong>der</strong> Task-<br />
Kandidaten wird im späteren Architekturentwurf aufgegriffen, um die tatsächlichen<br />
Tasks zu definieren.<br />
Ein potentiell auf dem Zielsystem <strong>zur</strong> Laufzeit tatsächlich existieren<strong>der</strong> Thread wird<br />
als Task-Kandidat repräsentiert und bezieht sich auf eine Use Case-bezogene Interaktion<br />
<strong>der</strong> Analyseobjekte. Der Systemanalyst kann mit Hilfe vordefinierter Angaben<br />
durch Berechnungsverfahren analysieren, ob <strong>der</strong> modellierte Ansatz überhaupt realisierbar<br />
ist. Dazu können feste Zeitintervallen <strong>der</strong> timer Objekte und Schätzungen für<br />
das Zeitverhalten von eventer Objekten herangezogen werden.<br />
Dazu müssen die Zeitintervalle des in timer Objekten gekapselten periodischen Verhaltens<br />
herangezogen, bzw. worst case-Schätzungen für das Auftreten <strong>der</strong> mit eventer<br />
Objekten beschriebenen aperiodischen Ereignisse <strong>zur</strong> Berechnung <strong>der</strong> Frequenz<br />
vorgenommen werden, um damit eine Schätzung <strong>der</strong> CPU-Ausnutzung vornehmen<br />
zu können. Für jeden Task-Kandidaten werden die Ergebnisse im Initial Task Report<br />
festgehalten. Eine Schedulability-Analyse wird auf <strong>der</strong> Basis <strong>der</strong> berechneten CPU-<br />
Ausnutzungen anhand eines geeigneten Verfahrens ([LN07], [Gom00]) durchgeführt.<br />
Die Ergebnisse werden im Initial Schedulability Report festgehalten. Bei dieser Analyse<br />
kann das Rapid Prototyping eingesetzt werden, um die Ausführungsdauer schlecht<br />
schätzbarer, komplexer Algorithmen zu messen.<br />
Architectural Design<br />
Ziel des Architectural Design ist die Modellierung einer Lösung, die mit dem Analysemodell<br />
konsistent ist. Dazu werden durch das Partitionieren <strong>der</strong> Analyseobjekte<br />
Subsysteme erstellt und Struktur- bzw. Verhaltensbeziehungen zwischen den gebildeten<br />
Subsystemen modelliert. Die identifizierten Task-Kandidaten des Task Modelling<br />
werden hierzu aufgegriffen und es wird eine detailliertere Schedulability-Analyse<br />
durchgeführt, um feststellen zu können, ob die entworfene Architektur zu einer Lösung<br />
führen kann.<br />
Subsystem Identification Die Aufteilung <strong>der</strong> Objekte des Analysemodells in<br />
Subsysteme beeinflusst stark die Leistung des Systems bzw. entscheidet, ob das modellierte<br />
System überhaupt eine Lösung darstellt. Sollte die Partitionierung <strong>der</strong> Objekte<br />
12
2.1 MeDUSA<br />
einen starken Kommunikationsoverhead verursachen, kann es unter Umständen vorkommen,<br />
dass das für die Ausführung eines einzelnen periodischen Tasks benötigte<br />
Zeitintervall länger ist als die Periode seines Auftretens. Somit wird <strong>der</strong> Task nicht<br />
beendet werden, bevor er erneut auszuführen ist. Als Folge dessen kann das bisher<br />
modellierte System zu keiner Lösung führen. Um eine gewisse Qualität <strong>der</strong> Aufteilung<br />
gewährleisten zu können, sind deshalb für die Durchführung Prinzipien und Metriken<br />
vorgesehen, an denen sich <strong>der</strong> Systemarchitekt orientieren, bzw. mit <strong>der</strong>en Hilfe er das<br />
Modell bewerten kann.<br />
Während <strong>der</strong> Partitionierung wird für jedes Subsystem ein Initial Structural Subsystem<br />
Design Diagram erstellt. Diese Arbeitsergebnisse enthalten neben den Analyseobjekten<br />
und ihren Beziehungen die für die Kommunikation mit <strong>der</strong> Außenwelt notwendigen<br />
Interaktionspunkte, um den Informationsfluss zu externen Systemen o<strong>der</strong> zu<br />
Objekten an<strong>der</strong>er Subsysteme berücksichtigen zu können. Für jeden Interaktionspunkt<br />
eines solchen UML Composite Structure-Diagramms wird festgelegt, ob ein Dienst<br />
angeboten o<strong>der</strong> gefor<strong>der</strong>t wird. Die Signaturen <strong>der</strong> zugehörigen Schnittstellen werden<br />
in einem weiteren Arbeitsergebnis - dem Initial Subsystem Interface Design Diagram<br />
- entworfen, das als UML Klassendiagramm realisiert wird. Die Methodensignaturen<br />
<strong>der</strong> Schnittstellen werden zunächst ohne Parameter und Rückgabewerte modelliert.<br />
Structural System Architecture Modelling Während <strong>der</strong> Subsystem Identification<br />
wurden die Analyseobjekte in Subsysteme partitioniert und es sind Schnittstellen<br />
zu an<strong>der</strong>en Subsystemen als Interaktionspunkte modelliert worden. Um die erstellten<br />
Subsysteme und ihre Schnittstellen im Systemkontext zu betrachten bzw. zu validieren,<br />
ob die angebotenen den gefor<strong>der</strong>ten Schnittstellen entsprechen, wird ein UML<br />
Komponentendiagramm erstellt, in dem die Schnittstellen <strong>der</strong> Subsysteme miteinan<strong>der</strong><br />
verbunden werden. Die Signaturen <strong>der</strong> Schnittstellen werden im Initial Subsystem<br />
Interface Design Diagram um Parameter und Rückgabetypen erweitert.<br />
Behavioural System Architecture Modelling Nachdem die Subsysteme und<br />
<strong>der</strong>en struktureller Zusammenhang mittels Schnittstellen entworfen worden sind, werden<br />
die in <strong>der</strong> Inter-Object Collaboration Modelling modellierten Interaktionen <strong>der</strong><br />
einzelnen Use Cases unter Berücksichtigung <strong>der</strong> neu hinzugekommenen interface Objekte<br />
erneut beschrieben. Es sind also die Diagramme <strong>der</strong>jenigen Interaktionen zu aktualisieren,<br />
<strong>der</strong>en beteiligte Objekte auf mehr als ein Subsystem verteilt wurden. Das<br />
Arbeitsergebnis wird im Behavioural System Architecture Diagram als Sequenzdiagramm<br />
festgehalten.<br />
Task Design Consolidation Die im Initial Task Report festgehaltenen Task-Kandidaten<br />
werden in dieser Aufgabe herangezogen, um Optimierungspotential zu identifizieren.<br />
Beispielsweise können die in einem Subsystem enthaltenen timer Objekte,<br />
<strong>der</strong>en Perioden einen größten gemeinsamen Teiler (>1) besitzen, zu einem einzigen<br />
Objekt verschmolzen werden. Des Weiteren könnten eventer Objekte, <strong>der</strong>en Ereignisse<br />
in keinem Fall zeitgleich auftreten können, durch ein einziges Objekt ersetzt wer-<br />
13
2 MeDUSA, UML, <strong>ViPER</strong><br />
den. Durch dieses Verschmelzen solcher trigger Objekte kann die Anzahl <strong>der</strong> Tasks<br />
verringert werden. Das Ergebnis wird im Consolidated Task Report festgehalten. Die<br />
Schedulability-Analyse wird erneut durchgeführt und liefert den Consolidated Schedulability<br />
Report.<br />
Detailed Design<br />
Das „Innenleben“ jedes Subsystems wird individuell und unabhängig von an<strong>der</strong>en<br />
Subsystemen entworfen. Eine Konsolidierung, wie sie für aktive Objekte in <strong>der</strong> Task<br />
Design Consolidation durchgeführt wurde, kann auf Subsystemebene in <strong>der</strong> Subsystem<br />
Design Consolidation ähnlich für die passiven Objekte durchgeführt werden. Im<br />
Class Design Modelling werden schließlich die Objekte auf Klassen abgebildet.<br />
Subsystem Design Consolidation Auf <strong>der</strong> Basis des Initial Structural Subsystem<br />
Design Diagrams kann eine Konsolidierung <strong>der</strong> passiven Objekte erfolgen, indem<br />
einige verschmolzen, an<strong>der</strong>e entfernt und manche auf mehrere Objekte abgebildet<br />
werden. Die Verän<strong>der</strong>ungen werden in den bereits erstellten Arbeitsergebnissen<br />
<strong>zur</strong> Beschreibung <strong>der</strong> Struktur bzw. des Verhaltens aktualisiert.<br />
Class Design Modelling Bei <strong>der</strong> Abbildung <strong>der</strong> Objekte auf Klassen muss <strong>der</strong><br />
objektbasierte Ansatz von MeDUSA berücksichtigt werden und somit auf die Vererbung<br />
verzichtet werden. In vielen Fällen tritt domänenspezifische Funktionalität sich<br />
häufig wie<strong>der</strong>holend auf, so dass Bibliotheken erstellt bzw. verwendet werden können.<br />
2.1.2 Prozess<br />
Der Prozess setzt laut <strong>der</strong> Unfied Method Architecture (UMA) Methodeninhalte in zeitliche<br />
Abhängigkeiten. Entsprechend <strong>der</strong> beschriebenen Disziplinen beinhaltet <strong>der</strong> Prozess<br />
vier analog benannte Phasen und vier <strong>It</strong>erationen. Jede Phase enthält, wie <strong>der</strong> Abbildung<br />
2.5 entnommen werden kann, die gleichnamige <strong>It</strong>eration und die <strong>It</strong>erationen<br />
<strong>der</strong> vorangegangenen Phasen, die optional wie<strong>der</strong>holt durchgeführt werden können.<br />
Diese Strukturierung des Prozesses soll einerseits durch die Phasen und den zugehörigen<br />
Meilensteinen den Prozessfortschritt anzeigen, aber an<strong>der</strong>erseits auch eine möglicherweise<br />
auftretende Rücksprungdynamik auffangen. Die Diagramme <strong>der</strong> Phasen<br />
machen durch Entscheidungspunkte deutlich, dass ein Rücksprung in die vorangestellten<br />
<strong>It</strong>erationen möglich ist. Des weiteren existiert für jede <strong>It</strong>eration ein Aktivitätsdiagramm,<br />
das festlegt, in welcher Reihenfolge die einzelnen Aufgaben bearbeitet werden<br />
können und welche evtl. gleichzeitig bearbeitbar sind.<br />
14
2.2 UML<br />
Abbildung 2.5: Aufteilung des Prozesses in vier Phasen mit den jeweiligen <strong>It</strong>erationen<br />
2.2 UML<br />
Die Unified Modeling Language (UML) ist eine von <strong>der</strong> Object Management Group<br />
(OMG) standardisierte Beschreibungssprache [UML]. Das Einsatzgebiet <strong>der</strong> UML ist<br />
die Beschreibung von Strukturen, Verhalten und Architekturen, aber auch von Geschäftsprozessen<br />
und Datenbanken [UML]. Im Software-Engineering wird sie eingesetzt,<br />
um statische Strukturen und dynamische Abläufe eines Softwaresystems deskriptiv<br />
o<strong>der</strong> auch präskriptiv festzuhalten [LL06].<br />
2.2.1 Strukturierung <strong>der</strong> UML<br />
Die UML beinhaltet ein Metamodell, das ab <strong>der</strong> Version 2.0 aufgrund seiner Komplexität<br />
durch zwei Spezifikationen definiert wird. Neben dem Metamodell legen die<br />
Spezifikationen die Notation <strong>der</strong> grafischen Repräsentierung des Modellinhaltes <strong>der</strong><br />
Diagramme fest. Zusätzlich wird mit <strong>der</strong> UML eine formale Spezifikationssprache<br />
(OCL) und ein Standard zum Informationsaustausch von Diagramminformationen definiert:<br />
• UML Infrastructure [Inf07]: Die Infrastructure enthält den Kernel <strong>der</strong> Superstructure.<br />
Der Kernel umfasst die grundlegenden Metamodell-Elemente <strong>der</strong><br />
UML, von denen jedes an<strong>der</strong>e Element direkt o<strong>der</strong> indirekt abhängig ist. Die<br />
Elemente des Kernel bilden also die Grundlage <strong>der</strong> UML. Darin enthalten sind<br />
beispielsweise die Elemente Paket, Klasse, Multiplizität und Assoziation.<br />
• UML Superstructure [Obj07]: Der zweite Teil <strong>der</strong> UML Spezifikation beinhaltet<br />
diverse Konstrukte auf <strong>der</strong> Basis <strong>der</strong> UML Infrastructure, die bei <strong>der</strong> Modellierung<br />
eingesetzt werden. Sie sind entsprechend ihrer Konzepte in Spracheinheiten<br />
aufgeteilt, die nach Struktur und Verhalten gruppiert sind. Als Spracheinheit<br />
werden beispielsweise Interaktionen, Zustandsautomaten o<strong>der</strong> Use Cases<br />
für die Modellierung von Verhalten bzw. Klassen und Composite Structures<br />
15
2 MeDUSA, UML, <strong>ViPER</strong><br />
für die Modellierung von Strukturen bereitgestellt. Neben <strong>der</strong> Beschreibung des<br />
Metamodells werden aber auch die grafischen Notationen <strong>der</strong> Diagramme je<strong>der</strong><br />
Spracheinheit definiert.<br />
• Object Constraint Language [OCL06]: Die Object Constraint Language (OCL)<br />
ist eine formale Sprache, die bei <strong>der</strong> Metamodellierung eingesetzt wird, um Bedingungen<br />
an ein Modell o<strong>der</strong> Suchanfragen (Queries) über einem Modell zu<br />
formulieren. Da die OCL eine Spezifikationssprache ist, kann sie nicht dazu<br />
verwendet werden, das Modell selbst zu verän<strong>der</strong>n. Das heißt die Auswertung<br />
<strong>der</strong> formulierten Ausdrücke ist frei von Seiteneffekten: Ausdrücke können eine<br />
Bedingung an den Zustand des Modells stellen, ihn aber nicht verän<strong>der</strong>n.<br />
• Diagram Interchange [DI006]: Die UML Superstructure definiert Spracheinheiten<br />
für verschiedene Anwendungsfälle und legt somit einerseits das Metamodell<br />
und an<strong>der</strong>erseits die grafischen Notationen <strong>der</strong> Diagramme fest. Für den<br />
Austausch von Diagrammen zwischen unterschiedlichen Modellierungswerkzeugen<br />
und <strong>zur</strong> standardisierten Serialisierung, wurde für die UML 2 eine weitere<br />
Spezifikation entwickelt. Das Diagram Interchange legt fest, wie Diagramminformationen<br />
persistent abgelegt werden.<br />
Nach dieser groben Übersicht <strong>der</strong> UML wird nun kurz ein Konzept <strong>zur</strong> <strong>Erweiterung</strong><br />
von Metamodellen und die für MeDUSA relevanten Spracheinheiten <strong>der</strong> UML Superstructure<br />
detaillierter vorgestellt und durch Beispieldiagramme illustriert. Die mit roter<br />
Markierung kenntlich gemachten Hinweise sind <strong>zur</strong> Erklärung hinzugefügt worden<br />
und nicht Teil <strong>der</strong> eigentlichen Inhalte.<br />
2.2.2 Profile<br />
Für die leichtgewichtige 2 Anpassung <strong>der</strong> UML für verschiedene Einsatzzwecke stellt<br />
die UML Infrastructure einen <strong>Erweiterung</strong>smechanismus durch sogenannte Profile <strong>zur</strong><br />
Verfügung. Ein Profil beinhaltet Stereotypen, mit denen Modellelemente versehen werden<br />
können. Mit diesen speziellen Metaklassen können UML-Metamodellelemente<br />
implizit erweitert werden. Es entstehd dabei ein Dialekt <strong>der</strong> UML.<br />
2.2.3 Spracheinheiten<br />
Bei <strong>der</strong> Entwicklung mit MeDUSA werden verschiedene Diagramme und somit auch<br />
Sprachpakete eingesetzt. Neben den Use Case-Diagrammen und den textuellen Beschreibungen<br />
<strong>der</strong> Standard- und Alternativabläufe im Requirements (vgl. Abschnitt<br />
2.1.1), gehen aus den Aufgaben <strong>der</strong> Analyse Objekt- und Interaktionsdiagramme als<br />
Arbeitsergebnisse hervor. Nach <strong>der</strong> Partitionierung <strong>der</strong> Analyse Objekte im Architectural<br />
Design werden für die Modellierung <strong>der</strong> Subsysteme zusätzlich Composite Structure-Diagramme<br />
verwendet.<br />
16<br />
2 d. h. das UML Metamodell bleibt unverän<strong>der</strong>t
Classes<br />
2.2 UML<br />
Das grundlegende Modellierungskonzept <strong>der</strong> UML sind Classifier und ihre Beziehungen<br />
im Sinne <strong>der</strong> Objektorientierung. Sie werden in <strong>der</strong> UML Infrastructure definiert<br />
und in <strong>der</strong> UML Superstructure wie<strong>der</strong>verwendet [Obj07]. Ein Classifier ist eine abstrakte<br />
Metaklasse, die eine Klassifikation mehrerer Instanzen darstellt. Ein Classifier<br />
beschreibt also eine Menge von Instanzen bzgl. ihrer Gemeinsamkeiten. Klassen<br />
(Classes), Interfaces aber auch Datentypen sind Beispiele für Classifier und werden<br />
in <strong>der</strong> UML Superstructure definiert. Ein Attribut eines Classifiers wird als Property<br />
bezeichnet. Da Beziehungen wie Aggregation, Komposition und Assoziation sowie<br />
die Modellierung von Attributen und Methoden allgemein bekannt sind, wird auf eine<br />
minutiöse Beschreibung verzichtet 3 .<br />
Abbildung 2.6: Auszug eines Objektdiagramms aus dem Information Modelling<br />
Neben dem Konzept <strong>der</strong> Classifier werden Metamodell-Elemente <strong>zur</strong> Darstellung von<br />
Instanzen des modellierten Systems eingeführt. Eine InstanceSpecification kann eine<br />
Instanz zu einem bestimmten Zeitpunkt o<strong>der</strong> auch nur einen für den betrachteten Sachverhalt<br />
maßgeblichen Teil repräsentieren. Wie Klassen Attribute besitzen und mit Assoziationen<br />
in Beziehung gesetzt werden können, besteht die Möglichkeit, Werte von<br />
Instanzen durch Slots und Beziehungen durch Links zu modellieren. Eine InstanceSpecification<br />
kann gleichzeitig eine Instanz mehrerer Classifier sein, indem beispielsweise<br />
Mehrfachvererbung eingesetzt wird o<strong>der</strong> verschiedene Interfaces implementiert werden.<br />
Abbildung 2.6 zeigt die grafische Notation dieser Elemente. Hinter dem Namen<br />
einer InstanceSpecification wird, durch einen Doppelpunkt getrennt, die Namensliste<br />
<strong>der</strong> Classifier angegeben.<br />
Interactions<br />
Interaktionen beschreiben das Zusammenspiel von verschiedenen Objekten, um ein<br />
spezielles Verhalten des Systems zu gewährleisten. Dabei wird <strong>der</strong> für die Sicht auf<br />
das System relevante Teil des Innenlebens betrachtet. Instanzen werden durch Lifelines<br />
repräsentiert, die durch Messages miteinan<strong>der</strong> kommunizieren. Jede Lifeline kann<br />
3 für eine genauerer Behandlung dieser Thematik kann [Inf07] herangezogen werden<br />
17
2 MeDUSA, UML, <strong>ViPER</strong><br />
lediglich Bestandteil einer einzigen Interaction sein und repräsentiert in den meisten<br />
Fällen eine Property. Die Art und Weise wie Messages an die sendenden bzw.<br />
empfangenden Lifelines gekoppelt werden, ist von dem Typ des Diagramms abhängig.<br />
Wie im dargestellten Kommunikationsdiagramm (Abbildung 2.7) zu sehen, können<br />
sich Messages auf einen Connector zwischen Lifelines beziehen. Die Spracheinheit<br />
Interactions enthält unter an<strong>der</strong>e die Diagrammtypen Sequenzdiagramm und Kommunikationsdiagramm.<br />
Components<br />
Abbildung 2.7: Auszug eines Kommunikationsdiagramms<br />
Mit <strong>der</strong> Spracheinheit Components können modulare Einheiten mit wohl-definierten<br />
Schnittstellen modelliert werden. Dabei wird in vielen Fällen eine black box-Sicht auf<br />
die Komponenten geworfen, so dass die Implementierung des Inhalts außer Acht gelassen<br />
wird. Durch die Komponenten können beispielsweise Subsysteme innerhalb eines<br />
Systems repräsentiert werden. Eine Komponente ist eine Property eines Structured-<br />
Classifiers. Sie kann eine Schnittstelle aus zweierlei Sichten referenzieren:<br />
1. required: Eine Schnittstelle wird referenziert, mit <strong>der</strong> eine Komponente festlegt,<br />
welche Funktionalität sie von ihrer <strong>Umgebung</strong> erwartet.<br />
2. provided: Angebotene Funktionalität kann von einer Komponente für eine wohldefinierte<br />
Schnittstelle bereitgestellt werden.<br />
Wie Abbildung 2.8 verdeutlicht, werden in einem Gesamtkontext (z. B. in einem System)<br />
zusammenpassende Paare von required/provided Schnittstellen <strong>der</strong> Komponenten<br />
durch die sogenannte ball and socket Notation mit assembly-Konnektoren verbunden.<br />
Die Schnittstellen einer Komponente können mittels Ports organisiert werden, indem<br />
beliebig viele required und provided Interfaces von einem Port aggregiert werden.<br />
18
Composite Structures<br />
Abbildung 2.8: Auszug eines Komponentendiagramms<br />
2.2 UML<br />
Die Spracheinheit Composite Structures dient <strong>der</strong> Modellierung von Element-Kompositionen.<br />
Ein StructuredClassifier beinhaltet eine interne Struktur, bestehend aus Property-Elementen,<br />
die über Konnektoren miteinan<strong>der</strong> verbunden sind. Diese Elemente<br />
werden Parts genannt. Für die Kommunikation mit <strong>der</strong> Außenwelt kann ein EncapsulatedClassifier<br />
zusätzlich Ports besitzen, die - ähnlich wie beim Sprachpaket Components<br />
beschrieben - Interfaces aggregieren können. Abbildung 2.9 zeigt ein Composite<br />
Structure Diagramm, das ein mit MeDUSA modelliertes Subsystem als EncapsulatedClassifier<br />
enthält. Die interne Struktur beinhaltet Parts <strong>zur</strong> Repräsentierung <strong>der</strong><br />
dem Subsystem zugeteilten Analyseobjekte.<br />
Abbildung 2.9: Subsystem modelliert im Composite Structure Diagramm<br />
19
2 MeDUSA, UML, <strong>ViPER</strong><br />
2.3 <strong>ViPER</strong><br />
<strong>ViPER</strong> ist ein Prototyp einer integrierten Entwicklungsumgebung, mit <strong>der</strong> die modellgetriebene<br />
Entwicklung auf <strong>der</strong> Basis von UML unterstützt wird. Mit <strong>ViPER</strong> (Visual<br />
Modeling Platform for Embedded System Architectures) soll insbeson<strong>der</strong>e die Modellierung<br />
bei <strong>der</strong> Entwicklung von eingebetteten Systemen bis zum Entwurf unterstützt<br />
werden. Gerade im Zuge dieser Diplomarbeit sind die ersten Grundsteine für die<br />
methodengestützte Entwicklung mit MeDUSA zu legen. <strong>ViPER</strong> ist als Eclipse Rich-<br />
Client-Platform (RCP) realisiert und verwendet bzw. beinhaltet eine ganze Reihe an<strong>der</strong>er<br />
Werkzeuge, Frame<strong>works</strong> und Technologien. Zunächst werden die grundlegende<br />
Architektur und wichtige Bestandteile von Eclipse erläutert und im Anschluß die von<br />
<strong>ViPER</strong> genutzen Frame<strong>works</strong> beziehungsweise <strong>ViPER</strong> selbst vorgestellt.<br />
2.3.1 Eclipse SDK<br />
<strong>ViPER</strong> beinhaltet unter an<strong>der</strong>em den gesamten Eclipse Software Development Kit<br />
(Eclipse SDK). Grundlage je<strong>der</strong> auf Eclipse aufbauenden integrierten Entwicklungsumgebung<br />
ist die Eclipse Platform, die im Folgenden erläutert wird. Im Anschluss<br />
werden die für die spätere Betrachtung relevanten Bestandteile des Eclipse-SDKs vorgestellt.<br />
Eclipse Platform<br />
Die Eclipse Platform ist ein Framework für die Erstellung von integrierten Entwicklungsumgebungen<br />
(IDE) auf <strong>der</strong> Basis <strong>der</strong> Programmiersprache Java [Jav]. Für die<br />
Entwicklung einer konkreten IDE kann dieses Framework um Plug-Ins erweitert werden.<br />
Jedes Plug-In besitzt ein sogenanntes Manifest, indem die folgenden Eigenschaften<br />
definiert sind [BSM + 03]:<br />
20<br />
• Required: Jede Abhängigkeit zu an<strong>der</strong>en Plug-Ins muss explizit in einer required-Liste<br />
angegeben werden. Ein Plug-In ist von einem an<strong>der</strong>en abhängig, wenn<br />
es Bestandteile desselben verwendet o<strong>der</strong> erweitert. Zirkularitäten von Abhängigkeiten<br />
sind nicht erlaubt.<br />
• Exports: Java Quelltextdateien werden im Allgemeinen durch Pakete (Packages)<br />
hierarchisch angeordnet. Diejenigen Pakete eines Plug-Ins, die an<strong>der</strong>en<br />
Plug-Ins <strong>zur</strong> Verfügung stehen sollen, werden in einer export-Liste definiert.<br />
Ausschließlich die hier aufgelisteten (Java) Pakete können von an<strong>der</strong>en genutzt<br />
werden.<br />
• Extension Points: Jedes Framework benötigt so genannte hotspots - Stellen an<br />
denen es durch anwendungsspezifischen Code erweitert werden kann. Da das<br />
Framework im Besitz des Kontrollflusses ist, muss die Bekanntmachung des erweiternden<br />
Codes und somit auch die Bekanntmachung <strong>der</strong> hotspots auf einer
2.3 <strong>ViPER</strong><br />
abstrakteren Ebene als die <strong>der</strong> verwendeten Programmiersprache erfolgen. Für<br />
die Bekanntmachung einer <strong>Erweiterung</strong> wäre ansonsten <strong>der</strong> Kontrollfluss notwendig.<br />
In Eclipse werden deshalb sowohl hotspots als auch <strong>der</strong>en <strong>Erweiterung</strong>en<br />
im Manifest definiert und als Extension Points bzw. Extensions bezeichnet.<br />
• Extensions: Während Extension Points aufzeigen, welche Stellen eines Frame<strong>works</strong><br />
erweiterbar sind, werden die <strong>Erweiterung</strong>en selbst durch Extensions gebildet.<br />
Je<strong>der</strong> Extension Point legt mittels einer XML Schema Definition (XSD)<br />
fest, welche Informationen die Extension bereitstellen soll. Dies könnte z. B.<br />
<strong>der</strong> vollständige Namen einer Klasse sein, die ein bestimmtes Interface implementiert,<br />
um spezielle erweiternde Funktionalität zu bieten.<br />
Durch Features können des Weiteren beliebig viele Plug-Ins gruppieren werden, die<br />
gemeinsam eine Funktionalität des Werkzeuges realisieren. Ein solches Feature zeichnet<br />
sich dadurch aus, dass es die kleinste separat installierbare Einheit einer Eclipsebasierten<br />
Entwicklungsumgebung darstellt. Es kann zum einen nur aus Plug-Ins bestehen,<br />
im Sinne einer Werkzeugkomposition allerdings auch weitere Features beinhalten.<br />
Architektur<br />
Auf <strong>der</strong> Basis <strong>der</strong> Eclipse Plattform und <strong>der</strong> damit verbundenen Plug-In Architektur<br />
bildet <strong>der</strong> Eclipse SDK die „Standard“ IDE. Neben <strong>der</strong> Platform Runtime, die für die<br />
Auflösung <strong>der</strong> Plug-In Abhängigkeiten verantwortlich ist, beinhaltet die Eclipse Plattform<br />
zusätzlich grafische Komponenten. Wie aus Abbildung 2.10 hervorgeht, ist in<br />
jedem Fall das Standard Widget Toolkit (SWT) und JFace darin enthalten. SWT ist eine<br />
native Bibliothek <strong>zur</strong> Erstellung von grafischen Elementen (z. B. Kontroll-, Bild-,<br />
Textelemente) und JFace eine darauf aufbauende weiterführende Bibliothek für komplexere<br />
Komponenten (z. B. Dialoge).<br />
Neben <strong>der</strong> Eclipse Benutzer-Assistenz, die in <strong>der</strong> Übersicht als Help dargestellt wird,<br />
definiert die Workbench UI verschiedene Konzepte <strong>zur</strong> Oberflächengestaltung einer<br />
Eclipse-basierten Entwicklungsumgebung. Durch Perspektiven wird die Oberfläche<br />
<strong>der</strong> Entwicklungsumgebung kontextabhängige angepasst. Menüstrukturen sind beispielsweise<br />
nur dann sichtbar, wenn sie einen Teil <strong>der</strong> betrachteten Perspektive sind.<br />
Die Workbench ist aufgeteilt in verschiedene Views. Diese Fenster sind in die Gesamtoberfläche<br />
integriert, und können beliebig nebeneinan<strong>der</strong> und mittels Kartenreiter<br />
übereinan<strong>der</strong> angeordnet werden.<br />
Plug-Ins, Features und auch an<strong>der</strong>e Einheiten werden während <strong>der</strong> Entwicklung im<br />
Werkzeug als Projekte repräsentiert. Jedem Projekt können mehrere Natures zugeordnet<br />
werden, die als Markierungen interpretiert werden können, um dem Werkzeug<br />
anzuzeigen, welche Typen das Projekt besitzt. Das können, neben den genannten Plug-<br />
Ins und Features, Natures für Java o<strong>der</strong> eine an<strong>der</strong>e Programmiersprache sein. Die von<br />
dem Projekt beinhalteten Dateien werden als Ressourcen bezeichnet. Alle Projekte und<br />
die dazugehörigen Ressourcen werden in einem speziellen Bereich, dem Workspace,<br />
21
2 MeDUSA, UML, <strong>ViPER</strong><br />
Abbildung 2.10: Architektur des Eclipse-SDK (Quelle: [DFK + 04])<br />
verwaltet und gespeichert. Dadurch wird unter an<strong>der</strong>em sichergestellt, dass zu jedem<br />
Zeitpunkt höchstens durch eine Entwicklungsumgebungen die in einem Workspace<br />
befindlichen Projekte und Ressourcen bearbeitet werden.<br />
Die weiteren in Abbildung 2.10 dargestellten Bestandteile des Eclipse-SDK werden<br />
hier nicht aufgeführt. Stattdessen werden die Benutzer-Assistenz und JFace näher betrachtet.<br />
JFace<br />
JFace eine auf SWT aufbauende Bibliothek für komplexere grafische Komponenten<br />
[SHNM05]. Ein Schwerpunkt liegt auf <strong>der</strong> Betrachtung von strukturierten Daten nach<br />
dem Model-View-Controller (MVC) 4 Architekturmuster. Es wird nicht nur <strong>der</strong> Inhalt<br />
(das Model) von <strong>der</strong> Ansicht (<strong>der</strong> View) getrennt, son<strong>der</strong>n zusätzlich auch die Repräsentierung<br />
eines Elements von <strong>der</strong> Struktur. Für ein anzuzeigendes Element muss<br />
ein LabelProvi<strong>der</strong> realisiert werden, <strong>der</strong> Text und ein Bild für die Anzeige definiert.<br />
Ein ContentProvi<strong>der</strong> beinhaltet Schnittstellen, mit dem hinsichtlich <strong>der</strong> baumartigen<br />
Struktur die untergeordneten Elemente abgefragt werden können o<strong>der</strong> das übergeordnete<br />
Element zu bestimmen ist.<br />
Der zweite Schwerpunkt von JFace wird durch verschiedenste Dialoge gebildet. Beson<strong>der</strong>s<br />
interessant sind Wizards, mit denen komplexe Aufgaben in kleinere, sequentielle<br />
Aufgaben zerlegt werden können, die dann in einer bestimmten Reihenfolge aus-<br />
22<br />
4 Architekturmuster nach dem Prinzip <strong>der</strong> Trennung von Interaktion und Funktion, [LL06]
2.3 <strong>ViPER</strong><br />
geführt werden müssen [EHLK04]. Dazu wird dieser Dialog als Modalfenster 5 realisiert<br />
und beinhaltet mehrere Seiten, zwischen denen <strong>der</strong> Benutzer wechseln kann.<br />
Üblicherweise werden auf den Wizard-Seiten Einstellungen vorgenommen, um eine<br />
definierte Aktion durchführen zu können. Nach den Eclipse User Interface Guidelines<br />
[EHLK04] besitzt ein Wizard vier Schaltflächen:<br />
1. Next: Anzeigen <strong>der</strong> nächsten Seite<br />
2. Previous: Anzeigen <strong>der</strong> vorherigen Seite<br />
3. Cancel: Abbruch des Dialogs<br />
4. Finish: Beenden des Dialogs und evtl. Ausführung <strong>der</strong> mit dem Wizard verbundenen<br />
Aktion<br />
In Eclipse gibt es eine ganze Reihe verschiedener Wizards. Als Standardbeispiel wird<br />
in <strong>der</strong> Dokumentation des Öfteren ein Projektwizard herangezogen. Auf den einzelnen<br />
Seiten kann <strong>der</strong> Benutzer Einstellungen treffen und mit dem Aktivieren <strong>der</strong> Schaltfläche<br />
Finish wird die eigentliche Aktion durchgeführt - die Erstellung eines neuen<br />
Projekts.<br />
Benutzer-Assistenz<br />
Auf Eclipse basierende Rich-Client Plattformen besitzen eine integrierte Benutzer-<br />
Assistenz, die neben dem statischen Hilfesystem und einer kontextabhängigen dynamischen<br />
Hilfe durch sogenannte CheatSheets gebildet wird. Jedes dieser Konzepte kann<br />
in einem Plug-In durch Extensions zu definierten Extension-Points erweitert werden.<br />
Abbildung 2.11 zeigt den Aufbau des Hilfesystems. Auf <strong>der</strong> linken Seite befindet sich<br />
eine baumartige Struktur <strong>zur</strong> Navigation, <strong>der</strong>en Knoten mit Inhalten verknüpft sind,<br />
die auf <strong>der</strong> rechten Seite angezeigt werden. Für den statischen Inhalt werden u. a.<br />
Suchfunktionen, das Anlegen von „Lesezeichen“ und das Ausdrucken <strong>der</strong> betrachteten<br />
Seite angeboten. Der Inhalt des Hilfesystems (vgl. Abb. 2.11, rechter Teil) wird durch<br />
HTML-Dateien definiert. Die Navigation wird durch sogenannte table-of-contents Dateien<br />
auf <strong>der</strong> Basis von XML erstellt.<br />
CheatSheets dienen <strong>der</strong> Durchführen von Abläufen und werden oft für „Tutorials“<br />
eingesetzt, um den Benutzer durch ihn unbekannte Vorgänge zum Erreichen eines bestimmten<br />
Ziels zu führen. Der Benutzer muss die dafür festgelegten, meist sequentiell<br />
angeordneten Schritte abarbeiten, kann referenzierte Seiten des Hilfesystems öffnen<br />
und abgelegte Aktionen ausführen. Das gezeigte CheatSheet im Inhaltsbereich <strong>der</strong> in<br />
Abbildung 2.11 dargestellten Hilfeseite zeigt die dafür notwendigen Kontrollelemente.<br />
Durch das Betätigen eines Fragezeichen-Symbols wird die damit verknüpfte Hilfeseite<br />
geöffnet. Die Aktivierung des Abspielknopfs mit dem Text „Click to perform“ führt<br />
eine Aktion aus (in dem Beispiel würde ein Wizard gestartet werden).<br />
5 Ein Fenster das die restliche Anwendung solange blockiert, bis es selbst wie<strong>der</strong> geschlossen wird<br />
23
2 MeDUSA, UML, <strong>ViPER</strong><br />
Abbildung 2.11: Bildschirmfoto: Beispiel des Eclipse-Hilfesystem<br />
Die Anzahl <strong>der</strong> modellierbaren Hierarchiestufen von CheatSheets ist sehr begrenzt. Eine<br />
nach oben beliebig erweiterbare Struktur kann dagegen durch den Einsatz von CompositeCheatSheets<br />
erreicht werden, indem die Möglichkeit besteht, Elemente rekursiv<br />
zu verschachtelt. Der durch die Rekursion aufgespannte Baum enthält als Blätter Referenzen<br />
auf CheatSheets. Sowohl Composite-CheatSheets, als auch CheatSheets, sind<br />
durch eine Grammatik definiert und werden in XML-Dateien abgelegt.<br />
2.3.2 Eclipse Modeling Framework (EMF)<br />
Das Eclipse Modeling Framework dient <strong>der</strong> Metamodellierung und <strong>der</strong> Handhabung<br />
und Serialisierung von Metamodell Instanzen. Auf <strong>der</strong> technischen Seite beinhaltet das<br />
unter an<strong>der</strong>em eine Java Code-Generierung, um mit den Modellen programmatisch<br />
umgehen zu können:<br />
24
2.3 <strong>ViPER</strong><br />
• EMF.Core stellt Mechanismen für die Metamodellierung bereit und definiert<br />
dafür ein eigenes (Meta-)Metamodell namens Ecore<br />
• EMF.Codegen ermöglicht die Generierung von Code ausgehend vom erstellten<br />
Metamodell<br />
• EMF.Edit dient <strong>der</strong> Handhabung von Instanzen eines Metamodells und stellt<br />
Funktionalität für das Editieren und die graphischen Repräsentierung bereit<br />
Ecore - das EMF-Metamodell<br />
EMF definiert für die Metamodellierung ein eigenes, sehr schmales Metamodell namens<br />
Ecore, das identisch zu einem kleinen Teil des vorgestellten UML-Kernels (vgl.<br />
Abschnitt 2.2.1) ist. EMF ermöglicht eine Vereinheitlichung von XSD, Java und <strong>der</strong><br />
UML, indem ein damit definiertes Metamodell in ein Ecore-Modell umgewandelt werden<br />
kann. Es ist also möglich, ein eigenes Metamodell mit Hilfe <strong>der</strong> UML zu definieren<br />
- beispielsweise unter Verwendung eines Klassendiagramms - und dieses in ein<br />
Ecore-Modell zu transformieren.<br />
Der Kern des Ecore-Metamodells wird durch den in Abbildung 2.12 dargestellte strukturelle<br />
Zusammenhang zwischen EClass, EReference und EAttribute gebildet. Elemente<br />
eines zu erstellenden Metamodells werden als EClasses modelliert. Instanzen<br />
eines Elementes können wie<strong>der</strong>um an<strong>der</strong>e Instanzen beinhalten o<strong>der</strong> verwenden. Dieses<br />
Referenzieren von an<strong>der</strong>en Elemente wird im Metamodell durch die Verwendung<br />
von EReference-Elementen modelliert. Der Parameter containment gibt an, ob es sich<br />
um eine Komposition o<strong>der</strong> Assoziation/Aggregration handelt. Attribute in Form von<br />
primitiven Datentypen werden mit Hilfe des Ecore Elements EAttribute definiert. Ecore<br />
stellt weitere Metamodell-Elemente <strong>zur</strong> Verfügung, die an dieser Stelle allerdings<br />
nicht vorgestellt werden. Genauere und weiterführende Informationen finden sich in<br />
[BSM + 03].<br />
Abbildung 2.12: Auszug aus dem Ecore - Metamodell (Quelle: [BSM + 03])<br />
Code-Generierung<br />
Das primäre Ziel von EMF ist die Handhabung von Metamodellen bzw. <strong>der</strong>en Instanzen<br />
was auf technischer Seite durch die Programmiersprache Java realisiert wird. Auf<br />
25
2 MeDUSA, UML, <strong>ViPER</strong><br />
<strong>der</strong> Basis des erstellten Ecore-Modells kann deshalb eine Code-Generierung angestoßen<br />
werden, bei <strong>der</strong> das Entwurfsprinzip <strong>der</strong> Trennung von Schnittstelle und Implementierung<br />
6 verfolgt wird. Für jedes Element des erstellten Metamodells wird sowohl<br />
ein Interface als auch eine Klasse und die modellierten Methoden, Attribute, Referenzen<br />
und entsprechende Zugriffsmethoden generiert. Zusätzlich wird <strong>der</strong> folgende Code<br />
generiert:<br />
• Factory: Elemente des Metamodells werden nicht direkt, son<strong>der</strong>n unter Verwendung<br />
einer Factory ,instanziert.<br />
• Notifier und Adapter: Um auf Verän<strong>der</strong>ungen eines Modellelementes aufmerksam<br />
machen zu können, wird das Observer-Muster eingesetzt. Bei dem beobachteten<br />
Objekt (Rolle Notifier) können sich an<strong>der</strong>e Objekte (Rolle Observer)<br />
registrieren, die bei Än<strong>der</strong>ungen benachrichtigt werden. Das Entwurfsmuster<br />
wird an dieser Stelle mit dem das Objekt-Adapter-Muster kombiniert. Die sich<br />
registrierenden Observer nehmen gleichzeitig die Rolle Adapter bzgl. des beobachtenden<br />
Objektes ein. Diese Kombination erlaubt es dem beobachtenden<br />
Adapter, die Funktionalität eines beobachteten Objektes Notifier für einen bestimmten<br />
Kontext zu erweitern und dabei gleichzeitig auf Än<strong>der</strong>ungen des Objektes<br />
geeignet reagieren zu können. Jede für ein Metamodell-Element generierte<br />
Klasse implementiert die Rolle Notifier. Ein Beispiel für einen beobachtenden<br />
Adapter ist <strong>der</strong> <strong>It</strong>emProvi<strong>der</strong>.<br />
• <strong>It</strong>emProvi<strong>der</strong>: In Eclipse gibt es verschiedene Mechanismen Modellinformationen<br />
anzuzeigen. Mittels TreeViewern können, wie in Abschnitt 2.3.1 beschrieben,<br />
baumartige Strukturen dargestellt werden, während PropertyViewer dem<br />
Anzeigen von Details eines ausgewählten Objektes dienen. EMF generiert für jede<br />
Klasse (also für jedes Element des erstellten Metamodells) sogenannte <strong>It</strong>em-<br />
Provi<strong>der</strong>, die als Adapter die Instanzen dahingehend um Funktionalität erweitern,<br />
dass sie in den verschiedenen Ansichten angezeigt werden können. Sie implementieren<br />
also gleichzeitig den Label- und ContentProvi<strong>der</strong>. Wie beschrieben<br />
fungieren sie durch die Registrierung als Adapter ebenfalls als Observer, so<br />
dass Modellän<strong>der</strong>ungen auch unmittelbar in den Ansichten berücksichtigt werden.<br />
• Präsentation: Als Hilfestellung für die Erstellung von Modellen wird automatisch<br />
ein Wizard generiert und <strong>zur</strong> Betrachtung und Bearbeitung eines Modells<br />
wird ein Editor inklusive eines TreeViewers erstellt.<br />
Reflective API<br />
Durch die Code-Generierung werden modellierte Methoden, Attribute und Referenzen<br />
unmittelbar auf Java-Code abgebildet. Um einen allgemeinen Zugriff auf die Attribute<br />
und Referenzen von Instanzen eines beliebigen Metamodells zu ermöglichen, exis-<br />
26<br />
6 Für die auch im Folgenden genannten Entwurfsprinzipien und -muster kann [LL06] herangezogen<br />
werden
2.3 <strong>ViPER</strong><br />
tiert neben <strong>der</strong> generierten API eine weitere, vom erstellten Metamodell unabhängige,<br />
sogenannte reflective API, die durch das Ecore Metamodell bereitgestellt wird. Dazu<br />
definiert EMF generische Methoden, mit denen ein Attribut o<strong>der</strong> eine Referenz unter<br />
Verwendung einer eindeutigen ID, aber ohne Kenntnis <strong>der</strong> eigentlichen Zugriffsmethode,<br />
verän<strong>der</strong>t bzw. hinzugefügt o<strong>der</strong> entfernt werden kann.<br />
Command-Framework<br />
Des Weiteren gibt es ein Framework <strong>zur</strong> Handhabung von Modellän<strong>der</strong>ungen. Das<br />
Command-Framework sieht vor, jede Än<strong>der</strong>ungen des Modells in einem Command zu<br />
kapseln, <strong>der</strong> dann auf einem Stack (dem Command-Stack) ausgeführt wird. Realisiert<br />
ein Command undo- bzw. redo-Operationen, so sind die Modellän<strong>der</strong>ungen mit Hilfe<br />
des Command-Stacks wi<strong>der</strong>rufbar bzw. erneut durchführbar. Für den Einsatz mit<br />
EMF sind vordefinierte Commands implementiert, die das Erstellen von Objekten und<br />
das Än<strong>der</strong>n von Attributen und Referenzen erlauben. Zusätzlich existieren Compound-<br />
Commands, die als Komposition beliebiger an<strong>der</strong>er Commands eingesetzt werden können,<br />
um damit mehrere Commands als atomare Einheit zusammenzufassen. EMF realisiert<br />
darauf aufbauend Commands zum Kopieren von Objekten.<br />
Commands können erst durch die Metamodell-unabhängige reflective API und <strong>der</strong> generischen<br />
Handhabung von beliebigen Objekten realisiert werden. Sie können durch<br />
Angabe des betroffenen Objektes, <strong>der</strong> ID des Attributes o<strong>der</strong> <strong>der</strong> zu benutzenden Referenz<br />
und dem neuen Wert bzw. des hinzuzufügenden o<strong>der</strong> zu entfernenden Objektes<br />
erstellt und ausgeführt werden.<br />
Objekt-Serialisierung<br />
Modellinstanzen eines mit EMF definierten Metamodells werden in Resourcen abgelegt,<br />
<strong>der</strong>en Inhalt persistent in Dateien gespeichert werden kann. Für die Serialisierung<br />
wird das XML Metamodel Interchange (XMI) Format verwendet [XMI05]. Dadurch,<br />
dass nicht alle Objekte eines Modells in einer einzigen Ressource abgelegt werden<br />
müssen, können Objekte eines an<strong>der</strong>en Modells referenziert werden.<br />
2.3.3 openArchitectureWare (oAW)<br />
<strong>ViPER</strong> ist eine integrierte Entwicklungsumgebung <strong>zur</strong> Unterstützung <strong>der</strong> modellgetriebenen<br />
Softwareentwicklung. Vorraussetzung für die Realisierung dieser Unterstützung<br />
ist die Generierung von Code aus einem UML-Modell. <strong>ViPER</strong> nutzt dafür das<br />
openArchitectureWare (oAW) Framework, mit dem Modell-zu-Modell Transformationen<br />
und Modell-zu-Code Generierung programmatisch durchgeführt werden können.<br />
oAW beinhaltet drei Komponenten für die Transformation, Generierung und Validierung,<br />
die jeweils eigene funktionale Sprachen verwenden.<br />
27
2 MeDUSA, UML, <strong>ViPER</strong><br />
Jede dieser Sprachen berücksichtigt Vererbung und Polymorphie. Es können sowohl<br />
die allgemein definierten Methoden eines Modells auf den generierten Klassen aufgerufen<br />
werden, als auch statische Java-Methoden als Extensions. Zusätzlich zu den drei<br />
genannten Komponenten gibt es eine Workflow-Komponente <strong>zur</strong> konkreten Durchführung<br />
einer Transformation, Generierung o<strong>der</strong> Validierung.<br />
Xtend Modell-zu-Modell Transformationen können mit <strong>der</strong> Sprache XTend realisiert<br />
werden. Die für die Transformation definierten Funktionen werden als Extensions bezeichnet.<br />
Eine Extension erhält üblicherweise ein o<strong>der</strong> mehrere Objekte des abzubildenen<br />
Modells und erstellt ein entsprechendes Objekt des Zielmodells. Dafür greift oAW<br />
auf das mittels ECore beschriebene Metamodell durch Nutzung <strong>der</strong> reflective API (vgl.<br />
2.3.2) zu, um die Werte <strong>der</strong> abzubildenen Objekte lesen bzw. die Werte des Zielobjekts<br />
setzen zu können. Zusätzlich stellt XTend eine API mit Hilfsfunktionen bereit.<br />
XPand Für die Modell-zu-Code Generierung stellt oAW eine weitere Sprache <strong>zur</strong><br />
Verfügung, mit <strong>der</strong> sogenannte Templates definiert werden können. Die mit XPand<br />
definierten Dateiinhalte bestehen aus dem zu generierenden Code bzw. aus aufzulösenden<br />
Funktionsaufrufen.<br />
Check Bevor ein Modell transformiert bzw. daraus Code generiert wird, sollte es<br />
auf Validität überprüft werden, um die Erstellung eines korrekten Ergebnisses gewährleisten<br />
zu können. Für die Validierung stellt das oAW Framework eine weitere, regelbasierte<br />
Sprache <strong>zur</strong> Verfügung, die <strong>der</strong> Object Constraint Language (OCL) 7 ähnelt.<br />
Bedingungen, die an ein Modell gestellt werden, sind von Anwendungsfall zu Anwendungsfall<br />
unterschiedlich und können deshalb nicht mit Hilfe <strong>der</strong> OCL im Modell<br />
verankert werden. Mit Hilfe <strong>der</strong> check-Komponente kann nun eine anwendungsspezifische<br />
Validitätsprüfung realisiert werden.<br />
Workflow Die Workflow-Komponente dient dazu, die entsprechende Transformation<br />
bzw. Generierung durchzuführen. Es müssen die verwendeten Metamodelle spezifiziert<br />
werden sowie das abzubildende Ausgangsmodell und optional ein Postprocessor<br />
angegeben werden. Eine mögliche Realisierung eines Postprocessors bestünde darin,<br />
den generierten Code zu formatieren. Die check-Komponente kann eingesetzt werden,<br />
um das Ausgangsmodell vor <strong>der</strong> Durchführung zu validieren.<br />
2.3.4 Architektur<br />
Auf <strong>der</strong> Basis <strong>der</strong> Eclipse Plug-In Architektur glie<strong>der</strong>t sich die <strong>ViPER</strong> IDE im Wesentlichen<br />
in die <strong>ViPER</strong> Platform und in <strong>ViPER</strong> UML2, wie in Übersicht 2.13 dargestellt.<br />
28<br />
7 OCL ist eine prädikatenlogische Sprache <strong>zur</strong> Formulierung von Bedingungen, die an Instanzen eines<br />
Modells gestellt werden. Für nähere Informationen siehe [OCL06]
2.3 <strong>ViPER</strong><br />
Die <strong>ViPER</strong> Platform ist - bestehend aus drei Features - das Fundament von <strong>ViPER</strong> und<br />
dabei völlig unabhängig von <strong>der</strong> UML. <strong>ViPER</strong> Core bietet zusätzliche Funktionalität<br />
für die Verwendung des Eclipe Modeling Framework (EMF). Das <strong>ViPER</strong> Modeling<br />
Transformation Framework (MTF) dient <strong>der</strong> allgemeinen Unterstützung von Modelltransformationen<br />
und Code-Generierung und nutzt das Werkzeug openArchitecture-<br />
Ware (oAW).<br />
Abbildung 2.13: Architektur von <strong>ViPER</strong><br />
Für die Erstellung von Diagrammeditoren stellt die Plattform das <strong>ViPER</strong> Visual Modeling<br />
Framework (VMF) <strong>zur</strong> Verfügung, das auf dem Graphical Editing Framework<br />
(GEF) aufbaut. Parallel <strong>zur</strong> <strong>ViPER</strong> Platform sind in <strong>ViPER</strong> UML drei Features realisiert,<br />
die jeweils die <strong>der</strong> Plattform erweitern. <strong>ViPER</strong> Codegen realisiert die Code-<br />
Generierung auf <strong>der</strong> Basis von UML-Modellen.<br />
Im Kontext dieser Diplomarbeit sind lediglich die Features <strong>ViPER</strong> Core und <strong>ViPER</strong><br />
MTF von Relevanz, die nun detaillierter beschrieben werden.<br />
2.3.5 <strong>ViPER</strong> Core<br />
Durch <strong>ViPER</strong> Core wird EMF in die <strong>ViPER</strong> Plattform integriert und zusätzliche Funktionalität<br />
bereitgestellt. Zum einen werden Commands <strong>zur</strong> Erstellung, zum Löschen<br />
und zum Umbenennen von Ressourcen <strong>zur</strong> Verfügung gestellt und zum an<strong>der</strong>en enthält<br />
<strong>ViPER</strong> Core Operationen <strong>zur</strong> Handhabung <strong>der</strong> Modell-Ressourcen. Zusätzlich beinhaltet<br />
dieses Feature unter Verwendung von SWT und JFace einige Dialoge und Wizards<br />
<strong>zur</strong> Erstellung von Ressourcen und Modellinstanzen.<br />
29
2 MeDUSA, UML, <strong>ViPER</strong><br />
2.3.6 <strong>ViPER</strong> MTF<br />
Mit <strong>ViPER</strong> MTF wird das Ziel verfolgt, den Einsatz von oAW zu vereinfachen, indem<br />
die Handhabung <strong>der</strong> Transformation, wie in Abbildung 2.14 dargestellt, durch eine<br />
TransformationUnit gekapselt wird 8 .<br />
Abbildung 2.14: TransformationUnit in <strong>ViPER</strong> MTF<br />
Die TransformationUnit beinhaltet alle Bestandteile, die für die Transformation notwendig<br />
sind:<br />
30<br />
• IModelRea<strong>der</strong>: das serialisierte Modell muss aus einer Datei gelesen werden,<br />
bevor es transformiert werden kann. Sollte das dazugehörige Metamodell mittels<br />
EMF konstruiert worden sein, kann <strong>der</strong> Standard XMIModelRea<strong>der</strong> verwendet<br />
werden.<br />
• CheckComponent: für die Validierung von Instanzmodellen eines Metamodells<br />
werden mit <strong>der</strong> Sprache check Regeln definiert, die ausgehend von den Wurzelelementen<br />
kaskadiert angewendet werden. Der Aufruf <strong>der</strong> ersten Regel für das<br />
Wurzelelement wird in <strong>der</strong> CheckComponent definiert.<br />
• TransformationComponent: analog <strong>zur</strong> stufenförmigen Anwendung von Regeln<br />
in <strong>der</strong> check-Komponente werden bei <strong>der</strong> Transformation die mittels XTend bestimmten<br />
Extensions ausgewertet. Die TransformationComponent kapselt die<br />
initiale Extension. Für die Transformation können zusätzliche Parameter angegeben<br />
werden.<br />
• PostProcessor: ein Postprocessor kann für die Formatierung von Code verwendet<br />
werden. Modellinstanzen werden mit dem XMI-Format und somit einer spe-<br />
8 Die entsprechende Klasse GenerationUnit <strong>zur</strong> Kapselung <strong>der</strong> Generierung ist analog aufgebaut
2.3 <strong>ViPER</strong><br />
ziellen Form von XML abgelegt, so dass ein XMLBeautifier genutzt werden<br />
kann. Wesentlich wichtiger als bei <strong>der</strong> Serialisierung von Modellinstanzen ist<br />
die Verwendung eines Postprocessors bei <strong>der</strong> Generierung von Quelltext, <strong>der</strong><br />
Entwicklern als Basis für die weitere Entwicklung dient. In diesem Fall muss<br />
die Lesbarkeit des Quelltextes gewährleistet sein.<br />
Des Weiteren stellt <strong>ViPER</strong> MTF Dialoge <strong>zur</strong> Durchführung einer Transformation bzw.<br />
Generierung bereit, denen die zu verwendenden TransformationUnits bzw. GenerationUnits<br />
übergeben werden.<br />
31
2 MeDUSA, UML, <strong>ViPER</strong><br />
32
3 Prozessunterstützung in aktuellen Werkzeugen<br />
Nachdem im letzten Kapitel MeDUSA, <strong>ViPER</strong> und die relevanten Teil <strong>der</strong> UML vorgestellt<br />
wurden, sollen in diesem Kapitel aktuelle Werkzeuge <strong>der</strong> Softwaremodellierung<br />
hinsichtlich <strong>der</strong> in <strong>der</strong> Einleitung beschriebenen Leitfragen untersucht werden:<br />
• Methodenunterstützung: Wodurch kann <strong>der</strong> Entwickler bei den Aktivitäten einer<br />
Methode möglichst optimal unterstützt werden?<br />
• Prozessintegration: Wie kann <strong>der</strong> zeitliche Ablauf eines Entwicklungsprozesses<br />
in einem Werkzeug abgebildet werden?<br />
Eine Betrachtung <strong>der</strong> Werkzeuge WayPointer und Rational System Developer anhand<br />
dieser Leitfragen soll erste Kenntnisse darüber liefern, wie Prozess- und Methodenunterstützungen<br />
realisiert werden können. Die gewonnenen Erkenntnisse werden unter<br />
Berücksichtigung <strong>der</strong> <strong>ViPER</strong> IDE am Ende dieses Kapitels evaluiert, um als Grundlage<br />
einer im nächsten Kapitel beschriebenen Vision zu dienen.<br />
3.1 Jaczone WayPointer<br />
Die Firma Jaczone stellt mit ihrer kommerziellen Entwicklungsumgebung WayPointer<br />
[APF] ein agentenbasiertes Werkzeug <strong>zur</strong> UML-Modellierung bereit, das den Rational<br />
Unified Process (RUP) ([Kru99]) unterstützt. Wie Abbildung 3.1 zeigt, werden diese<br />
drei Bestandteile verbunden durch das gemeinsame Konzept <strong>der</strong> Use Case-getriebenen<br />
Entwicklung. WayPointer bildet die Grundlage einer Werkzeuglandschaft, mit <strong>der</strong> die<br />
Entwicklung unterstützt wird.<br />
Abbildung 3.1: Systemdreieck - RUP [Kru99], WayPointer [APF], UML [UML]<br />
33
3 Prozessunterstützung in aktuellen Werkzeugen<br />
Werkzeugintegration Während <strong>der</strong> Softwareentwicklung kommen üblicherweise<br />
verschiedene Werkzeuge zum Einsatz. Auf <strong>der</strong> einen Seite muss die Möglichkeit bestehen,<br />
eine Architektur zu modellieren, Code zu generieren und programmieren zu<br />
können. Auf <strong>der</strong> an<strong>der</strong>en Seite müssen aber auch textuelle Dokumente wie Testfälle,<br />
Dokumentationen und Use Case Beschreibungen verfasst werden. Somit werden<br />
bei <strong>der</strong> Entwicklung im Allgemeinen mindestens zwei Werkzeuge eingesetzt: ein Modellierungswerkzeug<br />
und ein Textverarbeitungsprogramm. Der verwendete Softwareentwicklungsprozess<br />
wird oft nur implizit „gelebt“, da er nicht durch die jeweiligen<br />
Werkzeuge unterstützt wird.<br />
Abbildung 3.2: Werkzeugintegration in WayPointer [Jac06]<br />
Mit WayPointer wird nun das Ziel verfolgt, die unterschiedlichen Werkzeuge zusammenzufassen<br />
und den Software-Prozess (z. B. den RUP) stärker zu berücksichtigen.<br />
Wie Abbildung 3.2 darstellt, bildet WayPointer die Grundlage einer Werkzeuglandschaft.<br />
Für das Erstellen von textuellen Dokumenten muss ein spezielles Textverarbeitungssystem<br />
integriert werden. Für die UML-Modellierung kann ein Werkzeug aus<br />
einer fest vorgegeben Liste ausgewählt werden. WayPointer bewirkt eine Synchronisation<br />
mit dem Modellierungswerkzeug, so dass Än<strong>der</strong>ungen eines Modells im Modellierungswerkzeug<br />
unmittelbar durch WayPointer berücksichtigt werden und ebenso<br />
umgekehrt.<br />
WayPointer soll nun hinsichtlich <strong>der</strong> Methodenunterstützung betrachtet werden. Der<br />
zentrale Begriff ist dabei <strong>der</strong> des aktive Prozesses.<br />
Aktiver Prozess Als aktiver Prozess wird abstrakt das Verhalten von WayPointer<br />
bei <strong>der</strong> konkreten Durchführung des integrierten Entwicklungsprozesses bezeichnet.<br />
Bei <strong>der</strong> Benutzung des Werkzeuges passen sich die Oberfläche und das Verhalten <strong>der</strong><br />
durch den Benutzer gewählten Rolle, z. B. durch die Auswahl <strong>der</strong> <strong>zur</strong> Verfügung stehenden<br />
Aktivitäten, dynamisch an.<br />
Die standardmäßige Integration des RUP deckt allerdings nicht alle Disziplinen ab. Es<br />
werden lediglich die Diziplinen Requirements und Analysis & Design unterstützt. Die<br />
einzelnen Aktivitäten 1 werden nicht identisch repräsentiert. Beispielsweise werden die<br />
34<br />
1 nach <strong>der</strong> UMA-Terminologie Aufgabe, im Kontext des RUPs weiterhin Aktivität
3.1 Jaczone WayPointer<br />
Aktivitäten „Find Actors and Use Cases“ und „Structure the Use Case Model“ des<br />
RUP in WayPoiner zusammengefasst zu <strong>der</strong> Aktivität „Develop the Use Case Model“.<br />
Das Abbilden mehrerer RUP Aktivitäten auf eine Einzige in WayPointer wird dadurch<br />
begründet, dass die im RUP modellierten Aktivitäten im aktiven Prozess gleichzeitig<br />
bearbeitet werden (müssen). Die Aktivitäten und die Unterstützung bei <strong>der</strong> Erstellung<br />
von Arbeitsergebnissen werden durch Agenten realisiert, die <strong>der</strong> Interaktion mit dem<br />
Entwickler dienen.<br />
Abbildung 3.3: Regelverstoß und Vorschlag <strong>zur</strong> Beseitigung [Jac06]<br />
Agenten Die wichtigsten Ausprägungen des aktiven Prozesses sind sogenannte intelligente<br />
Agenten, Regeln und Vorschläge. Agenten besitzen Wissen und sind fähig,<br />
dieses durch ein proaktives Verhalten geeignet einzusetzen, um den Entwickler bei <strong>der</strong><br />
Durchführung einer Aktivität interaktiv unterstützen zu können. Es gibt drei Arten von<br />
Agenten [Jac06]:<br />
• Aktivität: Jede Aktivität des aktiven Prozesses wird durch einen Agenten repräsentiert.<br />
• Wizard: Durch Wizards werden komplexe Aktivitäten mit einer sequentiellen<br />
Bearbeitung unterstützt.<br />
35
3 Prozessunterstützung in aktuellen Werkzeugen<br />
• Artefakt-Agent: Artefakt-Agenten sollen dem Entwickler bei den unterschiedlichen<br />
Modellierungsaufgaben helfen und bieten durch definierte Regeln die<br />
Möglichkeit <strong>der</strong> Konsistenz-, Vollständigkeits- und Korrektheitsprüfung des gerade<br />
bearbeiteten Modells. Durch Korrekturvorschläge ist es möglich, diesen<br />
Regelverstoß aufzuheben.<br />
Die Interaktion mit Agenten wird über den in Abbildung 3.3 dargestellten WayPointer<br />
Highlighter realisiert. Aktivitäten und Schritte werden in einer Baumansicht grafisch<br />
repräsentiert und für Regelverstöße werden Korrekturvorschläge angezeigt.<br />
Abbildung 3.3 zeigt ein Beispiel für die Use Case-Modellierung. Die Aktivität „Develop<br />
the Use-Case Model“ beinhaltet unter an<strong>der</strong>em den Schritt „Find actors“. Im<br />
Artefakt-Agenten des use case models ist eine Regel definiert, die besagt, dass das<br />
Use Case Modell mindestens einen Akteur besitzen muss. Der Hinweis auf den Regelverstoß<br />
mit zugehörigem Korrekturvorschlag wird ebenfalls dargestellt.<br />
Prozessintegration Eine Unterstützung bei <strong>der</strong> konkreten Durchführung eines<br />
Prozesses, d.h. eine Integration des Ablaufs ist in WayPointer nicht vorzufinden. In<br />
einer Werbeschrift <strong>der</strong> Firma Jaczone heißt es zwar:<br />
The WayPointer Active Process Framework enables you to turn your static<br />
process description into Active Process applications [APF]<br />
Doch die suggerierte Abbildung des statischen Prozesses auf eine dynamische Begleitung<br />
durch den Ablauf des Prozesses existiert nicht. Während das vorgestellte Konzept<br />
<strong>der</strong> Agenten und Regeln dynamisch auf Interaktionen des Benutzers und Än<strong>der</strong>ungen<br />
des Modells eingeht, wird <strong>der</strong> Ablauf des Prozesses „nur“ statisch durch eine Repräsentierung<br />
des Arbeitsstrukturbaums, wie Abbildung 3.4 zeigt, vor Augen geführt. Der<br />
Benutzer kann stets selbst entscheiden, ob und in welcher Reihenfolge er die Aktivitäten<br />
bearbeitet.<br />
Wie die Abbildung außerdem zeigt, kann für jede Aktivität eine (spezifische) Hilfe<br />
aufgerufen werden. Diese gibt unter Verwendung <strong>der</strong> RUP Konfiguration Auskunft<br />
darüber, wie die jeweilige Aktivität bearbeitet bzw. erledigt werden kann.<br />
Konfiguration und Erweiterbarkeit Die Einstellungen <strong>der</strong> Agenten und die Definition<br />
<strong>der</strong> Regeln auf Basis vordefinierter, beschränkter Auswahlmöglichkeiten werden<br />
direkt in WayPointer vorgenommen, um damit den Prozess projektspezifisch anzupassen.<br />
Durch die Aktivität „Definiere Regeln“ können sie unmittelbar in WayPointer<br />
aktiviert werden. Dazu ist das zu beobachtende Modellelement (z. B. das „Use Case“)<br />
aus einer Auswahlliste zu selektieren, welche Eigenschaft Gegenstand <strong>der</strong> Betrachtung<br />
sein soll (z. B. „Mindestanzahl <strong>der</strong> Akteure“), sowie die entsprechenden Parameter<br />
(die Anzahl als numerischer Wert). Nach <strong>der</strong> Regeldefinition können aus einer festgelegten<br />
Liste Vorschläge gewählt werden, die dem Benutzer bei dem entsprechenden<br />
Regelverstoß angezeigt werden, wie in Abbildung 3.3 dargestellt.<br />
36
Abbildung 3.4: „Arbeitsstrukturbaum“ in WayPointer<br />
3.1 Jaczone WayPointer<br />
Die Definition gänzlich neuer Agenten (inklusive Aktivität und Schritte), Regeln und<br />
Korrekturvorschläge ist durch die Verwendung eines Development Kit, bzw. dem darin<br />
enthaltenen Agent Buil<strong>der</strong> realisierbar. Komplexe, nicht vordefinierte Modellprüfungen<br />
können durch eine Implementierung auf Quelltextebene realisiert werden.<br />
Zusammenfassung Mit dem Konzept des aktiven Prozesses passt sich die Entwicklungsumgebung<br />
<strong>der</strong> vom Entwickler gewählten Rolle an, um die damit verbundenen<br />
Aktivität anzubieten und durch Agenten zu unterstützen. Auf Regelverletzungen<br />
wird <strong>der</strong> Entwickler durch Artefakt-Agenten lediglich hingewiesen, optionale Korrekturvorschläge<br />
für <strong>der</strong>en Beseitigung werden ihm angeboten. Der Entwicklungsprozess<br />
(standardmäßig <strong>der</strong> Rational Unified Process (RUP)) wird durch Menüpunkte abgebildet;<br />
eine Integration des Prozessablaufs ist nicht vorzufinden.<br />
Projektspezifische Anpassungen <strong>der</strong> Regeleinstellungen und -aktivierung bzw. <strong>der</strong> Auswahl<br />
<strong>der</strong> Korrekturvorschläge ist direkt in WayPointer möglich und Teil des aktiven<br />
Prozesses. Die Integration gänzlich neuer Aktivitäten und die Entwicklung neuer<br />
Agenten wird durch den Development Kit unterstützt. WayPointer ist also zugleich<br />
Entwicklungsumgebung im Sinne einer Werkzeugkomposition als auch ein erweiterbares<br />
Framework.<br />
37
3 Prozessunterstützung in aktuellen Werkzeugen<br />
3.2 Rational Systems Developer<br />
Auf <strong>der</strong> Eclipse Plattform aufbauend bietet <strong>der</strong> Rational Systems Developer 2 als kommerzielles<br />
Werkzeug eine „ [. . . ] integrierte Entwurfs- und Entwicklungsunterstützung<br />
für die modellgetriebene Entwicklung mit UML“ [RSD]. Das Werkzeug liefert unter<br />
an<strong>der</strong>em, ebenfalls unter Verwendung einer Rational Unified Process-Konfiguration,<br />
eine integrierte Prozessbeschreibung. Die statische Beschreibung kann im Process<br />
Browser betrachtet und kontextabhängig durch den Process Advisor referenziert werden.<br />
Abbildung 3.5: Kontextabhängige Referenz auf statische Prozessbeschreibung<br />
Das Navigieren durch die Prozessbeschreibung wird durch den Prozess Browser ermöglicht<br />
(vgl. Abbildung 3.5, rechte Seite). Für dessen Nutzung können die mittels<br />
EPF-Composer (vgl. Abschnitt 6.1.1) o<strong>der</strong> mit dem darauf aufbauenden kommerziellen<br />
Pendant, dem IBM Rational Methode Composer veröffentlichten HTML-Seiten in<br />
den RSA integriert werden. Die Beschreibung des RUP ist standardmäßig im Produkt<br />
enthalten. Die Ansicht wird in einem neuen Fenster geöffnet und kann ähnlich wie in<br />
einem Browser betrachtet und <strong>zur</strong> Laufzeit erweitert bzw. verän<strong>der</strong>t werden.<br />
Der Prozess Advisor (Abbildung 3.5, linke Seite) bietet kontextabhängig Referenzen<br />
<strong>zur</strong> Prozessschreibung anhand <strong>der</strong> vom Benutzer aktuell durchgeführten Aktion (z. B.<br />
Use Case-Modellierung) an. Das Verwenden einer solchen Referenz öffnet die dazugehörige<br />
Seite <strong>der</strong> statischen Beschreibung im Prozess Browser. Der Prozess Advisor<br />
bewirkt also implizit eine kontextabhängige Suche <strong>der</strong> durch den Process Browser bereitgestellten<br />
Themen.<br />
Darüber hinaus bietet <strong>der</strong> Rational Systems Developer keine Unterstützung für den<br />
Softwareentwicklungsprozess.<br />
38<br />
2 ebenso <strong>der</strong> darauf aufbauende Rational Software Architect (RSA)
3.3 Evaluierung<br />
3.3 Evaluierung<br />
Die beiden beschriebenen Werkzeuge bieten eine Werkzeugunterstützung für die Softwareentwicklung<br />
nach dem Rational Unified Process. Die statische und dynamische<br />
Hilfe beim Rational System Developer kann als Nachschlagewerk in Form einer Prozessbeschreibung<br />
verstanden werden. Sie unterstützt den Entwickler also nur indirekt<br />
und vereinfacht beispielsweise das Erlernen des Prozesses, indem Informationen und<br />
Hilfestellungen nicht in einem externen Dokument eingeholt werden müssen, son<strong>der</strong>n<br />
direkt verfügbar sind.<br />
Die interaktive Entwicklung mit dem WayPointer bei <strong>der</strong> Modellierung in einem externen<br />
Werkzeug bietet weitergehende Unterstützung. Zum einen passt sich die <strong>Umgebung</strong><br />
<strong>der</strong> gewählten Rolle an, zum an<strong>der</strong>en bietet das Agentenkonzept ein sehr leicht<br />
konfigurierbares und prinzipiell erweiterbares Framework. Folgend werden die einzelnen<br />
Konzepte bewertet:<br />
• Statische und kontextabhängige Prozessbeschreibung: Sowohl eine statische als<br />
auch eine kontextabhängige Hilfe durch eine Prozess- bzw. Methodenbeschreibung<br />
ist wohl in jedem Fall eine geeignete Unterstützung. Die statische Prozessbeschreibung<br />
kann als Referenzwerk eingesetzt werden, wohingegen kontextabhängige<br />
Referenzen eine dynamische Hilfestellung bieten.<br />
• Rollen-basierte Anpassung <strong>der</strong> Oberfläche: Ein Anpassung <strong>der</strong> Oberfläche <strong>der</strong><br />
Entwicklungsumgebung an die gewählte Rolle hilft dem Entwickler, seine Ziele<br />
zu identifizieren. Die Anpassung ist allerdings nur dann sinnvoll, wenn für jede<br />
Aktivität die gleiche Oberfläche verwendet wird und es viele verschiedene<br />
Rollen im Prozess gibt.<br />
• Validierungen und Korrekturvorschläge: Die Validierung des Modells, als auch<br />
das Bereitstellen von Korrekturvorschlägen dient zum einen <strong>der</strong> Qualitätssicherung,<br />
zum an<strong>der</strong>en aber auch dem Abnehmen einfacher Arbeiten.<br />
• Konfigurierbares Agentensystem: Die Konfiguration <strong>der</strong> Agenten <strong>zur</strong> Unterstützung<br />
<strong>der</strong> einzelnen Aktivitäten ist nur dann von Belangen, wenn <strong>der</strong> integrierte<br />
Prozess projektspezifisch angepasst werden muss.<br />
• Übersicht <strong>der</strong> Aktivitäten: Das Starten <strong>der</strong> Aktivitäten aus dem Menü heraus ist<br />
für erfahrene Entwickler eine sehr einfache und schnelle Möglichkeit die Modellierung<br />
zu betreiben. Eine zusätzliche Möglichkeit einer konkreten Durchführung<br />
des Prozessablaufs wäre eine zusätzliche Erleichterung.<br />
Die Unterstützung bei<strong>der</strong> Werkzeuge ist von sehr allgemeiner Natur. Der zugrunde liegende<br />
Entwicklungsprozess RUP ist nicht für eine spezielle Domäne entwickelt worden,<br />
son<strong>der</strong>n ganz im Gegenteil - er soll ein breites Spektrum von Softwareentwicklungsprojekten<br />
abdecken [Kru99]. Es ist also naheliegend, dass auch die unterstützenden<br />
Werkzeuge ähnlich allgemein bleiben. An<strong>der</strong>e UML-Modellierungswerkzeuge<br />
bieten in den meisten Fällen fast gar keine Unterstützung für einen Entwicklungspro-<br />
39
3 Prozessunterstützung in aktuellen Werkzeugen<br />
zess o<strong>der</strong> eine Methode an. Mit dem WayPointer ist es zwar möglich, einige Anpassungen<br />
für ein Projekt vorzunehmen, allerdings beziehen sich dies Anpassungen nur<br />
auf die Prüfungen des erstellten Modells beziehungsweise auf die Korrekturvorschläge<br />
bei Verstößen.<br />
Wie im anschließenden Kapitel diskutiert, kann für MeDUSA und <strong>ViPER</strong> aufgrund <strong>der</strong><br />
sehr speziellen Anwendungsdomäne eine wesentlich konkretere Unterstützung realisiert<br />
werden, als es bei den beiden betrachteten Werkzeugen <strong>der</strong> Fall ist.<br />
40
4 Vision<br />
Im letzten Kapitel wurden während <strong>der</strong> Untersuchung von zwei aktuellen, kommerziellen<br />
Modellierungswerkzeugen allgemeine Möglichkeiten <strong>zur</strong> Unterstützung <strong>der</strong><br />
Softwareentwicklung vorgestellt und im Anschluß diskutiert. Teilweise darauf aufbauend<br />
soll nun in Form einer Vision die für eine Unterstützung von MeDUSA denkbaren<br />
Konzepte herausgearbeitet werden. Drei Bereiche sind hier thematisch voneinan<strong>der</strong><br />
abzugrenzen:<br />
• Der Begriff Methodenunterstützung umfasst im Wesentlichen alle Hilfestellungen<br />
für die Bearbeitung von Aufgaben. Die für diesen Bereich identifizierten<br />
Konzepte können für alle Aufgaben Anwendung finden o<strong>der</strong> sich auch auf eine<br />
aufgabenspezifischen Unterstützung beziehen. Zusätzlich ist die technische<br />
Umsetzung <strong>der</strong> MeDUSA Objekttaxonomie erfor<strong>der</strong>lich.<br />
• Unter <strong>der</strong> Prozessintegration wird die Unterstützung verstanden, die sich auf<br />
den MeDUSA-Prozess bezieht. Neben <strong>der</strong> Realisierung einer konkreten Durchführung<br />
des Prozesses, wird durch Prozessintegration auch Prozessbeschreibung<br />
eingeschlossen.<br />
• Die Infrastruktur beinhaltet sowohl die Bereitstellung von allgemeinen Einstellungen<br />
als auch die Verwaltung und Erstellung von MeDUSA-Projekten.<br />
Sowohl für die Methodenunterstützung als auch für die Prozessintegration werden im<br />
Folgenden lediglich grundlegende Ideen einer möglichen Hilfestellung aufgeführt. Eine<br />
detaillierte Beschreibung <strong>der</strong> Konzepte und <strong>der</strong> technischen Realisierung wird in<br />
den Kapiteln 6 bzw. 5 geliefert. Der Realisierung <strong>der</strong> Infrastruktur ist rein technischer<br />
Natur und wird daher ausschließlich in diesem Kapitel durch eine Identifizierung <strong>der</strong><br />
durchzuführenden Arbeiten behandelt.<br />
4.1 Methodenunterstützung<br />
In <strong>der</strong> Konzeption <strong>der</strong> Methodenunterstützung sind verschiedene Ansätze von Bedeutung.<br />
Zum einen könnten sicherlich die in <strong>der</strong> Evaluierung des letzten Kapitels genannte<br />
Validierungen mit entsprechenden Korrekturvorschlägen eine geeignete Hilfestellung<br />
bieten. Eine zusätzliche Bewertung durch Metriken könnte Aufschluss über<br />
die Qualität <strong>der</strong> erstellten UML-Modellen geben. Durch die Anwendung von Metriken<br />
während <strong>der</strong> Partitionierung <strong>der</strong> Analyseobjekte in <strong>der</strong> ersten Aufgabe des Architectural<br />
Design (vgl. Abschnitt 2.1.1) könnte die Architektur entscheidend beeinflusst werden.<br />
Bei einer gleichzeitigen Betrachtung <strong>der</strong> Use Case-Modellierung und des Context<br />
Modelling kann eine Redundanz bezüglich <strong>der</strong> identifizierten Elemente erkannt wer-<br />
41
4 Vision<br />
den. Die in Use Case-Diagrammen identifizierten Akteure werden erneut als Schnittstellen<br />
des Systems in <strong>der</strong> Analyse modelliert. An dieser o<strong>der</strong> auch an an<strong>der</strong>en Stellen<br />
wäre es also möglich, den aus <strong>der</strong> Redundanz hervorgehenden Aufwand zu verringern.<br />
In dem betrachteten Fall könnten beispielweise die Schnittstellen automatisch<br />
durch ein Werkzeug erstellt werden.<br />
Bei <strong>der</strong> Strukturierung möglicher Unterstützungen, können auf <strong>der</strong> einen Seite allgemeine<br />
Konzepte herausgearbeitet werden, die unabhängig von dem Inhalt einer Aufgabe<br />
sind, und auf <strong>der</strong> an<strong>der</strong>en Seite aufgabenspezifische Hilfestellungen.<br />
4.1.1 Allgemeine Konzepte<br />
Angelehnt an das Agenten-Konzept von WayPointer, könnte für die Entwicklung mit<br />
MeDUSA die Bearbeitung einer Aufgabe jeweils durch einen Wizard unterstützt werden.<br />
Eine Menüstruktur, welche die Disziplinen und Aufgaben wi<strong>der</strong>spiegelt, könnte<br />
das Starten eines solchen Wizards ermöglichen. Weiterhin wären folgende, allgemeine<br />
Hilfestellungen geeignet, die im Abschnitt 5 aufgegriffen werden:<br />
1. Validierung: Unabhängig von dem Gegenstand <strong>der</strong> Aufgabe, sollte jedes verwendete<br />
Modell zunächst validiert werden.<br />
2. Korrekturvorschläge: Bei <strong>der</strong> Verletzung einer Validierungsregel (Constraint)<br />
könnten Korrekturmöglichkeiten vorgeschlagen werden, die zu einer Aufhebung<br />
des Verstoßes führen.<br />
3. Sicherstellung <strong>der</strong> Nachverfolgbarkeit und Durchgängigkeit: Bei <strong>der</strong> Entwicklung<br />
mit MeDUSA werden in den einzelnen Disziplinen verschiedene Elemente<br />
modelliert, die allerdings eine implizite Beziehung untereinan<strong>der</strong> aufweisen.<br />
Beispielsweise werden alle Analyseobjekte im Entwurf aufgegriffen und entsprechend<br />
in die Architektur integriert. Im Detailed Design werden für alle modellierten<br />
Objekte Klassen erstellt. Solche Beziehungen treten vermehrt zwischen<br />
den unterschiedlichen Abstraktionsniveaus <strong>der</strong> Arbeitsergebnisse unterschiedlicher<br />
Disziplinen auf. Um eine dahingehende Durchgängigkeit <strong>der</strong> Arbeitsergbnisse<br />
sicherstellen zu können ist es notwendig die impliziten Abhängigkeiten<br />
durch ein Werkzeug explizit festzuhalten. Dadurch kann eine Nachverfolgbarkeit<br />
sichergestellt werden, mit <strong>der</strong> Wi<strong>der</strong>sprüche zwischen den Arbeitsergebnisse<br />
unterschiedlicher Disziplinen aufgedeckt werden können (beispielsweise,<br />
dass ein Analyseobjekt nicht im Entwurf berücksichtigt wurde).<br />
4.1.2 Aufgabenspezifische Hilfestellungen<br />
In vielen Aufgaben kann dem Benutzer fehlerproduzierende Arbeit abgenommen und<br />
damit die Qualität des Modells zusätzlich verbessert werden. Beson<strong>der</strong>s für die folgenden<br />
Aufgaben, kann eine sinnvolle spezielle Unterstützung realisiert werden.<br />
42
Context Modelling<br />
4.1 Methodenunterstützung<br />
Die interface und trigger Objekte spiegeln direkt die primären bzw. sekundären Akteure<br />
<strong>der</strong> Use Cases wi<strong>der</strong>, so dass sie unmittlebar aus den Informationen <strong>der</strong> Use<br />
Case-Diagrammen erstellt werden könnten. Durch den Entwickler wäre lediglich die<br />
Kommunikationsrichtung <strong>der</strong> interface Objekten zu spezifizieren.<br />
Task Modelling<br />
Im Task Modelling werden Task-Kandidaten ermittelt und es wird in einer ersten<br />
Schätzung analysiert, ob die Modellierung <strong>der</strong> Problemwelt mit den Einschränkungen<br />
durch die Hardware in Einklang zu bringen ist. Das Verhalten des Systems im Kontext<br />
eines Use Cases wird entwe<strong>der</strong> durch ein trigger Objekt angestoßen o<strong>der</strong> durch einen<br />
referenzierenden Use Case. Dem Entwickler könnte also für die Aufstellung <strong>der</strong> Task-<br />
Kandidaten eine Auflistung entsprechen<strong>der</strong> Objekte geliefert werden. Die Schätzung<br />
anhand eines Verfahrens könnte ebenfalls durch die Unterstützung eines aufgabenspezifischen<br />
Wizards übernommen werden, <strong>der</strong> die Berechnung durch die möglichen<br />
Verfahren anbietet.<br />
System Identification<br />
Nach <strong>der</strong> Analyse werden die identifizierten und für die Interaktionen notwendigen<br />
Objekte durch die Bildung von Subsystemen partitioniert. Ohne eine spezielle Unterstützung<br />
müsste ein Entwickler für jedes Subsystem (mindestens) ein Diagramm<br />
erstellen und dabei die entsprechenden Analyseobjekte im Entwurf berücksichtigen.<br />
Die dadurch modellierten Objekte müssten wie<strong>der</strong>um <strong>der</strong>art in Beziehung zu einan<strong>der</strong><br />
gesetzt werden, wie es bereits für die Analyseobjekte durchgeführt wurde. Eine solche<br />
Verfahrensweise wäre sehr aufwändig und vorallem sehr fehlerträchtig. Das Übersehen<br />
eines einzigen Analyseobjekts bei <strong>der</strong> Partitionierung könnte schwerwiegende<br />
Auswirkungen auf das spätere System haben.<br />
Neben dieser technischen Aufteilung <strong>der</strong> Analyseobjekte muss ein Entwickler sich um<br />
eine effektive Aufteilung bemühen, so dass eine effiziente Kommunikation <strong>der</strong> Objekte<br />
unterschiedlicher Subsysteme im späteren System gewährleistet ist. Das Erstellen<br />
einer Architektur, die nicht den einschränkenden Anfor<strong>der</strong>ungen an das Softwaresystem<br />
genügt, würde zu einer Verän<strong>der</strong>ung entsprechen<strong>der</strong> UML-Diagramme führen und<br />
ebenso die ports und interfaces <strong>der</strong> jeweiligen Subsysteme beeinflussen.<br />
Eine geeignete Hilfestellung für diese Aufgabe könnte eine Unterstützung <strong>der</strong> Partitionierung<br />
vereinfachen, indem anstelle von UML-Diagrammen Ansichten auf das<br />
Analyse- und Architekturmodell angeboten werden, so dass eine Abbildung <strong>der</strong> Objekte<br />
auf die Subsysteme durch entsprechende Interaktionen vorgenommen werden<br />
können (z. B. durch drag&drop). Dabei könnte zusätzlich überprüft werden, ob alle<br />
Analyseobjekte und entsprechende Nachrichten zwischen Objekten verschiedener<br />
43
4 Vision<br />
Subsysteme im Entwurf aufgegriffen wurden. Die Architektur könnte während <strong>der</strong><br />
Partitionierung bereits durch die Anwendung von Metriken evaluiert werden. Durch<br />
eine direkte Anwendung <strong>der</strong> Metriken sind vermutlich sehr viel weniger <strong>It</strong>erationen<br />
notwendig, denn sollte die Anwendung einer Metrik auf ein starkes Defizit des Modells<br />
hinweisen, könnte die Modellierung abgebrochen o<strong>der</strong> die letzten Schritte wi<strong>der</strong>rufen<br />
werden. Der Entwickler könnte einen an<strong>der</strong>en Ansatz wählen. Ohne eine solche<br />
Entwicklung würde das Defizit des Modells vermutlich erst sehr viel später erkannt<br />
werden.<br />
Structural System Architecture Modelling<br />
Die in <strong>der</strong> Subsystem Identification modellierten Subsysteme werden im Kontext des<br />
Systems betrachtet und ihre Interaktionspunkte werden miteinan<strong>der</strong> verbunden. Die<br />
modellierten interface Objekte werden durch ihre Signaturen verfeinert. Es müssen<br />
also wie<strong>der</strong>holt die Interaktionspunkte erstellt und die <strong>der</strong> verschiedenen Subsysteme<br />
entsprechend miteinan<strong>der</strong> verbunden werden.<br />
Auch bei diesem Vorgang könnten einige <strong>der</strong> Informationen aus den bisherigen Modellen<br />
gezogen werden. Interaktionspunkte dienen <strong>der</strong> Übermittlung von Nachrichten<br />
zwischen Objekten verschiedener Subsysteme. Da die Nachrichten bereits bekannt<br />
sind, kann entschieden werden, inwiefern Subsystem-Schnittstellen miteinan<strong>der</strong> zu<br />
verknüpfen sind.<br />
Behavioural System Architecture Modelling<br />
Interaktionsdiagramme <strong>der</strong> Analyse, <strong>der</strong>en Objekte sich in mehr als einem Subsystem<br />
befinden, müssen für den Entwurf im Behavioral System Architecture Modelling erneut<br />
unter Berücksichtigung <strong>der</strong> Interaktionspunkte und den damit verbundenen interface<br />
Objekten modelliert werden.<br />
Für jedes Interaktionsdiagramm kann im Sinne einer aufgabenspezifischen Unterstützung<br />
entschieden werden, ob die damit modellierten Objekte auf mehr als ein Subsystem<br />
verteilt sind. Im Prinzip sollte es möglich sein, die Diagramme bzw. das zugrunde<br />
liegende Modell zu erstellen bzw. anzupassen, indem das Analysemodell, die modellierten<br />
Interaktionspunkte und interface-Objekte inklusive ihrer Signaturen herangezogen<br />
werden. Zumindest könnte das zu erweiternde Diagramm <strong>der</strong> Analyse zunächst<br />
kopiert werden, um dem Entwickler durch die Herstellung dieses initialen Zustands,<br />
Arbeit abzunehmen.<br />
Class Design Modelling<br />
In <strong>der</strong> letzten Aufgabe des Detailed Designs wird die Abbildung <strong>der</strong> Objekte auf<br />
Klassen vorgenommen. Durch eine geeignete Unterstützung könnte dem Benutzer bei<br />
44
4.2 Prozessintegration<br />
dieser Abbildung eine Hilfestellung angeboten werden, indem die Klassen unter berücksichtigung<br />
<strong>der</strong> akkumulierten Signaturen <strong>der</strong> Objekte erstellt werden. Sollte ein<br />
Objekt nicht durch eine entsprechenden Klasse berücksichtigt worden sein, sollte <strong>der</strong><br />
Entwickler darauf hingewiesen werden.<br />
4.2 Prozessintegration<br />
Im Kapitel 3 wurden zwei Modellierungswerkzeuge bezüglich <strong>der</strong> Methodenunterstützung<br />
und Prozessintegration untersucht. Es wurde festgehalten, dass we<strong>der</strong> <strong>der</strong> Way-<br />
Pointer noch <strong>der</strong> Rational Systems Developer eine konkrete Durchführung des Prozesses<br />
im Sinne eines Ablaufs unter Berücksichtigung <strong>der</strong> zeitlichen Abhängigkeiten<br />
unterstützen. Der Entwickler ist für die Reihenfolge <strong>der</strong> Aufgabenbearbeitung verantwortlich<br />
und kann sich an einer Prozessbeschreibung und Menüstrukturen bei seinem<br />
Vorgehen orientieren. Eine <strong>der</strong>artige Menüstruktur, wie sie durch WayPointer (vgl. Abschnitt<br />
3.1) bereitgestellt wird, reflektiert streng genommen nur die Disziplinen und<br />
Aufgaben. Diese Hilfestellung fällt also in die Kategorie Methodenunterstützung.<br />
Für die Unterstützung von MeDUSA hinsichtlich <strong>der</strong> Prozessintegration würde neben<br />
einer Prozessbeschreibung, wie sie im Rational Systems Developer realisiert wurde<br />
(vgl. Abschnitt 3.2), eine Ablaufmodellierung durch die im Abschnitt 2.3.1 vorgestellten<br />
CheatSheets eine geeignete Hilfestellung leisten. Ein CheatSheet könnte die<br />
zeitlichen Abhängigkeiten wi<strong>der</strong>spiegeln und für die jeweiligen Aufgaben die aufgabenspezifischen<br />
Methodenunterstützung anbieten. Mit <strong>der</strong> Hilfe-Schaltfläche eines<br />
CheatSheets könnte die Prozessbeschreibung kontextabhängig referenziert werden. Eine<br />
Prozessbeschreibung könnte durch erstellte HTML-Dateien in das Eclipse Hilfesystem<br />
(vgl. Abschnitt 2.3.1) eingebunden und so in <strong>ViPER</strong> integriert werden.<br />
4.3 Infrastruktur<br />
Im Abschnitt 2.3 wurde das UML-Modellierungswerkzeug <strong>ViPER</strong> mit dem zugrunde<br />
liegenden Eclipse-SDK vorgestellt, das um eine Prozessunterstützung für MeDUSA<br />
erweitert werden soll. Um eine Prozessintegration und insbeson<strong>der</strong>e eine Methodenunterstützung<br />
realisieren zu können, sind einige infrastrukturelle Maßnahmen durchzuführen.<br />
MeDUSA-Projekt<br />
Die Erstellung eines Softwaresystems beinhaltet das Erstellen von Modellressourcen<br />
und die Code-Generierung. Um die entstehenden Ressourcen geeignet ablegen zu können,<br />
sollte es möglich sein, MeDUSA-Projekte anlegen zu können. Dafür ist die Erstellung<br />
einer speziellen Nature (vgl. S. 21) erfor<strong>der</strong>lich, um die im Workspace befindlichen<br />
MeDUSA-Projekte identifizieren zu können. Das Anlegen eines Projekts<br />
45
4 Vision<br />
wird in Eclipse unabhängig von <strong>der</strong> Nature über einen Projektwizard realisiert. Ein<br />
spezieller Wizard für die Erstellung von MeDUSA-Projekten könnte neben <strong>der</strong> Markierung<br />
des neuen Projekts durch die Nature unmittelbar Modellressourcen erstellen<br />
und gegebenfalls initialisieren.<br />
Einstellungen<br />
In einer Eclipse-basierten Entwicklungsumgebung gibt es zwei Ebenen <strong>zur</strong> allgemeinen<br />
Speicherung von Einstellungen. Unter Preferences versteht man projektunabhängige<br />
Konfigurationen, die <strong>zur</strong> Anpassung des Werkzeugs aber auch als Standardwerte<br />
für projektspezifische Einstellungen eingesetzt werden. Die projektspezifischen Einstellungen<br />
(Properties o<strong>der</strong> Settings) werden im Projekt selbst abgelegt und sind haben<br />
im allgemeinen keine Auswirkungen auf an<strong>der</strong>e Projekte. Sie sind im Gegensatz<br />
zu den Preferences unabhängig von <strong>der</strong> Entwicklungsumgebung. Wird das Projekt in<br />
verschiedenen <strong>Umgebung</strong>en bearbeitet, sind die projektspezifischen Einstellung verfügbar.<br />
Die Standardnamen <strong>der</strong> UML-Modelle und -ressourcen können als Preferences definiert<br />
werden, die dann bei <strong>der</strong> Projekterstellung herangezogen werden. Für MeDUSA-<br />
Projekte sollen einige Einstellungen projektspezifisch anpassbar sein, z. B. das für die<br />
Prozessdurchführung zu verwendende CheatSheet.<br />
4.4 Kosten/Nutzen-Analyse<br />
Die Realisierung aller genannten Hilfestellung ist im Rahmen dieser Arbeit nicht möglich.<br />
Aus diesem Grund muss durch Anwendung einer Kosten/Nutzen-Analyse entschieden<br />
werden, welche Unterstützungen umgesetzt werden sollen. Sowohl die Prozessintegration<br />
als auch die Infrastruktur werden bei dieser Betrachtung außen vor<br />
gelassen, da beide Realisierung als obligatorisch angesehen werden.<br />
Der größte Nutzen wird wohl aus einer Realisierung <strong>der</strong> allgemeinen Konzepte gezogen.<br />
Das Aufstellen einer Lösung für die allgemeine Unterstützung einer beliebigen<br />
Aufgabe hat Vorteile für jede spezifischen Hilfestellung. Neben einer Berücksichtigung<br />
von Validierungen und Korrekturvorschlägen, kann die Handhabung <strong>der</strong> Modellressourcen<br />
durch ein Framework geeignet abgedeckt werden. Zusätzlich würde<br />
ein gemeinsames Konzept <strong>zur</strong> Sicherstellung <strong>der</strong> Durchgängigkeit einen hohen Nutzen<br />
bringen, indem die Möglichkeit bestünde, Wi<strong>der</strong>sprüche zwischen den Arbeitsergebnissen<br />
unterschiedlicher Disziplinen erkennen zu können. Die Realisierung eines<br />
Frame<strong>works</strong>, das die angesprochenen Konzepte vereint, ist trotz eines hohen Implementierungsaufwand<br />
gerechtfertigt, da die Umsetzung je<strong>der</strong> speziellen Hilfestellungen<br />
sowohl konzeptionell als auch technisch vereinfacht wird.<br />
Die aufgabenspezifischen Unterstützungen besitzen unterschiedliche Komplexitäten.<br />
Die Partitionierung <strong>der</strong> Analyseobjekte in <strong>der</strong> Subsystem Identification hat sehr star-<br />
46
4.4 Kosten/Nutzen-Analyse<br />
ken Einfluss auf die spätere Leistung des zu erstellenden Softwaresystems. Zum einen<br />
kann eine Unterstützung dieser Aufgabe die Effizienz <strong>der</strong> Entwicklung verbessern, indem<br />
eine Partitionierung <strong>der</strong> Analyseobjekte durch eine Hilfestellung vereinfacht wird.<br />
Zum an<strong>der</strong>en kann die Sicherstellung <strong>der</strong> Durchgängigkeit die Qualität <strong>der</strong> Modelle<br />
positiv beeinflussen. Durch die zusätzliche Anwendung von Metriken, kann ein Entwickler<br />
frühzeitig erkennen, ob das entwickelte Modell Defizite aufweist. Auch wenn<br />
<strong>der</strong> Implementierungsaufwand <strong>zur</strong> Unterstützung dieser Aufgabe vermutlich den <strong>der</strong><br />
an<strong>der</strong>en übersteigt, ist er in Anbetracht des großen Nutzens für den Entwickler in Kauf<br />
zu nehmen.<br />
Aus diesem Grund wird im Rahmen dieser Arbeit <strong>der</strong> Schwerpunkt sowohl auf die<br />
Umsetzung <strong>der</strong> Prozessintegration und Infrastruktur als auch auf die Erstellung eines<br />
allgemeinen Frame<strong>works</strong> und die prototypische Unterstützung <strong>der</strong> Subsystem Identification<br />
gelegt.<br />
47
4 Vision<br />
48
5 Methodenunterstützung<br />
Die Methodenunterstützung soll dem Entwickler Hilfestellung bei <strong>der</strong> Ausübung <strong>der</strong><br />
Tätigkeiten <strong>zur</strong> Bearbeitung einer Aufgabe leisten. Dazu gehört insbeson<strong>der</strong>e eine Unterstützung<br />
für die Fertigstellung <strong>der</strong> mit den Aufgaben verbundenen Arbeitsergebnisse.<br />
In <strong>der</strong> im Kapitel 4 vorgestellten Vision wurden auf <strong>der</strong> einen Seite einige allgemeine<br />
Arten <strong>der</strong> Unterstützung herausgearbeitet, die für jede Aufgabe Anwendung finden<br />
sollen, und auf <strong>der</strong> an<strong>der</strong>en Seite mögliche aufgabenspezifische Hilfestellungen.<br />
Eine Realisierung aller identifizierten Unterstützungsmöglichkeiten ist im Rahmen<br />
dieser Arbeit nicht möglich. Deshalb wird im Folgenden <strong>der</strong> Schwerpunkt auf allgemeine,<br />
aufgabenunabhängige Konzepte und die prototypische Erstellung eines Wizards<br />
<strong>zur</strong> Unterstützung <strong>der</strong> Subsystem Identification gelegt. Für die Erläuterungen ist<br />
die vorgezogene Beschreibung von zwei grundlegenden Entwurfsentscheidungen erfor<strong>der</strong>lich:<br />
• Disziplinspezifische Modelle: Der Methodeninhalt von MeDUSA wurde im Kapitel<br />
2 durch die Beschreibung <strong>der</strong> vier Disziplinen und den jeweiligen Aufgaben<br />
vorgenommen. Es wird nun festgelegt, dass für die einzelnen Disziplinen<br />
unterschiedliche UML-Modelle verwendet werden. Lediglich in den Aufgaben<br />
des Architectural Designs und des Detailed Designs wird ein identisches UML-<br />
Modell eingesetzt. Die Arbeitsergebnisse, die aus den Aufgaben <strong>der</strong> verschiedenen<br />
Disziplinen hervorgehen, haben keine gemeinsamen Inhalte. Die Verwendung<br />
mehrerer Modelle bewirkt somit keine (zusätzliche) Redundanz. Ein gemeinsames<br />
Modell beispielsweise in <strong>der</strong> Analyse und im Entwurf würde einige<br />
Probleme hervorrufen, da ohne weitere Hilfsmittel die in den Aufgaben <strong>der</strong> jeweiligen<br />
Disziplinen modellierten Inhalte (Objekte, Nachrichten) nicht voneinan<strong>der</strong><br />
unterschieden werden könnten.<br />
• Einsatz von Profilen: MeDUSA stellt für die identifizierten bzw. modellierten<br />
Objekte <strong>der</strong> unterschiedlichen Disziplinen Objekttaxonomien bereit, mit denen<br />
sie bezüglich ihrer Eigenschaften „typisiert“ werden können. Jedes Objekt wird<br />
damit genau einer Kategorie zugeordnet. Unter technischen Gesichtspunkten<br />
kann die Objekttaxonomie nicht sinnvoll durch eine Klassenhierarchie realisiert<br />
werden, so dass <strong>der</strong> Einsatz von UML-Profilen für die technische Umsetzung<br />
gewählt wird.<br />
5.1 Allgemeine Unterstützung<br />
Für eine allgemeine Hilfestellung bei <strong>der</strong> Bearbeitung von Aufgaben, sind im Kapitel<br />
4 einige Arten einer möglichen Unterstützung vorgestellt worden. Zum einen ist es<br />
49
5 Methodenunterstützung<br />
notwendig, die UML-Modelle vor <strong>der</strong> Bearbeitung zu validieren, zum an<strong>der</strong>en können<br />
dem Entwickler bei einigen Regelverstößen Korrekturvorschläge angeboten werden.<br />
Um zusätzlich die Durchgängigkeit <strong>der</strong> Modellinhalten sicherstellen zu können, ist<br />
die Speicherung von Abbildungsinformationen notwendig. Dadurch kann mittels einer<br />
Validierung beispielsweise überprüft werden, ob alle in <strong>der</strong> Analyse identifizierten<br />
Objekte im Entwurf berücksichtigt wurden.<br />
Im Folgenden wird ein einfaches Modell definiert, mit dem die Bearbeitung einer Aufgabe<br />
beschrieben werden kann. Dieses Modell wird im Abschnitt 5.1.3 durch die Integration<br />
von Validierungen und Korrekturvorschlägen auch hinsichtlich <strong>der</strong> Durchgängigkeit<br />
erweitert und dient als Grundlage für die technische Realisierung eines allgemeinen,<br />
aufgabenunabhängigen Frame<strong>works</strong>.<br />
5.1.1 Aufgabenmodell<br />
Jede Aufgabe einer Methode wird von einer Rolle bearbeitet. Mit einigen Arbeitsergebnisse<br />
als Grundlage, werden während <strong>der</strong> Bearbeitung neue Arbeitsergebnisse<br />
erstellt o<strong>der</strong> vorhandene verän<strong>der</strong>t 1 . Bei <strong>der</strong> Entwicklung mit MeDUSA sind die Arbeitsergebnisse<br />
in den meisten Fällen UML-Diagramme, die eine Sicht auf das Modell<br />
<strong>der</strong> jeweiligen Disziplin bilden. Das Erstellen o<strong>der</strong> Verän<strong>der</strong>n eines Arbeitsergebnisses<br />
hat also Verän<strong>der</strong>ungen des jeweiligen Modells <strong>zur</strong> Folge. Aus diesem Grund werden<br />
im Folgenden nur UML-Modelle betrachtet:<br />
• Eingabemodelle sind UML-Modelle, die als Grundlage bei <strong>der</strong> Bearbeitung einer<br />
Aufgabe verwendet werden<br />
• Analog sind Ausgabemodelle diejenigen Modelle, die bei <strong>der</strong> Bearbeitung einer<br />
Aufgabe verän<strong>der</strong>t o<strong>der</strong> erstellt werden und somit als Ergebnis hervorgehen<br />
Durch das iterative Vorgehen, sind alle Ausgabemodelle einer Aufgabe (nach eventuellen<br />
Än<strong>der</strong>ungen außerhalb des Aufgabenkontextes) gleichzeitig auch Eingabemodelle<br />
für den nächsten <strong>It</strong>erationsschritt. Bei <strong>der</strong> Bearbeitung <strong>der</strong> Subsystem Identification<br />
beispielsweise, wird im ersten <strong>It</strong>erationsschritt das Analysemodell herangezogen<br />
und das Initial Structural Subsystem Design Diagram modelliert (vgl. Abschnitt 2),<br />
das eine Sicht auf das Architekturmodell liefert. In allen folgenden <strong>It</strong>erationsschritten,<br />
wird das Architectural Design-Modell allerdings auch als Eingabemodell verwendet,<br />
um vorherige Verän<strong>der</strong>ungen des Analysemodells im Entwurf anzupassen, ohne das<br />
gesamte Architekturmodell neu erstellen zu müssen. Verallgemeinert lässt sich also<br />
festhalten, dass jedes Ausgabemodell auch immer ein Eingabemodell ist. Im Son<strong>der</strong>fall<br />
des ersten <strong>It</strong>erationsschritts kann das Architekturmodell als ein Modell ohne Inhalt<br />
betrachtet werden.<br />
Jede Aufgabe kann nun, wie in Abbildung 5.1 dargestellt, als eine abgeschlossene<br />
Einheit im Kontext eines iterativen Vorgehens betrachtet werden und die Bearbeitung<br />
durch ein einfaches Modell repräsentiert werden. Alle in einer Aufgabe durchgeführ-<br />
50<br />
1 Siehe dazu SPEM, UMA im Abschnitt 6.1)
Abbildung 5.1: Das Aufgabenmodell<br />
5.1 Allgemeine Unterstützung<br />
ten Modellän<strong>der</strong>ungen werden aus einer black-box Sicht heraus als eine Funktion definiert,<br />
durch <strong>der</strong>en Anwendung Eingabemodelle auf Ausgabemodelle abbildet werden.<br />
Da die Modellän<strong>der</strong>ungen teilweise durch das Werkzeug und teilweise durch den<br />
Entwickler bestimmt sind, ist die Funktionsvorschrift nicht eindeutig bestimmt. Die<br />
Signatur einer solchen Funktion <strong>zur</strong> Beschreibung von Modellän<strong>der</strong>ungen bei <strong>der</strong> Bearbeitung<br />
einer Aufgabe k im <strong>It</strong>erationsschritt i wird wie folgt definiert:<br />
g i k : M n UML → M n UML<br />
(5.1)<br />
Dabei ist MUML die Menge aller UML-konformen Modelle. Die Funktion bildet n<br />
Eingabemodelle auf n Ausgabemodelle ab. Die Eingabemodelle und Ausgabemodelle<br />
sind identische Modelle zu unterschiedlichen Zeitpunkten. Ihre Inhalte unterschei-<br />
den sich gerade durch die bei <strong>der</strong> Bearbeitung durchgeführten Modellän<strong>der</strong>ungen, die<br />
durch die Funktion f i k beschrieben werden.<br />
5.1.2 Durchgängigkeit<br />
Bei <strong>der</strong> modellgetriebenen Entwicklung, besteht vorallem bei einem iterative Vorgehen<br />
die Gefahr, dass sich die Modellinhalte <strong>der</strong> verschiedenen Disziplinen wi<strong>der</strong>sprechen<br />
und einige Teile unvollständig sind. Um eine Durchgängigkeit <strong>der</strong> disziplinspezifischen<br />
Modelle sicherstellen zu können, ist es deshalb notwendig, zusätzliche Information<br />
für die Nachverfolgbarkeit von Abbildungen festzuhalten.<br />
Zwischen den Elemente <strong>der</strong> disziplinspezifischen UML-Modelle existieren implizite<br />
Abhängigkeiten. Beispielsweise muss jedes Analyseobjekt muss im Entwurf aufgegriffen<br />
werden (vgl. Abb 5.2). Ein Wi<strong>der</strong>spruch des Analyse- und Architekturmodells<br />
kann die Entwicklung eines defizitären Systems bewirken. Das Auftreten eines solchen<br />
Wi<strong>der</strong>spruchs kann zwei Ursachen haben: Entwe<strong>der</strong> ist das Analyseobjekt zum aktuellen<br />
Zeitpunkt überflüssig und wurde nicht entfernt, o<strong>der</strong> es wurde bei <strong>der</strong> Modellierung<br />
des Entwurfs übersehen. Der zweite Grund kann unter Umständen die Entwicklung<br />
eines System bewirken, dass keine korrekte Lösung bezüglich <strong>der</strong> Anfor<strong>der</strong>ungen darstellt.<br />
51
5 Methodenunterstützung<br />
Abbildung 5.2: Implizite Abhängigkeiten zwischen UML-Modellen<br />
Der Zusammenhang zwischen diesen beiden aufeinan<strong>der</strong>folgenden Modellen, lässt<br />
sich auch an an<strong>der</strong>en Stellen wie<strong>der</strong>finden. Alle in <strong>der</strong> Disziplin Requirements identifizierten<br />
trigger-Akteure sollten ebenfalls in <strong>der</strong> Analyse als trigger-Objekte vorzufinden<br />
sein. Die im Entwurf modellierten Objekte <strong>der</strong> einzelnen Subsysteme sollten im<br />
Detailed Design durch erstellte Klassen wi<strong>der</strong>gespiegelt werden.<br />
Bei einer geeigneten Methodenunterstützung ist also, insbeson<strong>der</strong>e unter Berücksichtigung<br />
<strong>der</strong> iterativen Entwicklung, eine Nachverfolgbarkeit <strong>der</strong> durchgeführten Abbildungen<br />
notwendig, um die Durchgängigkeit <strong>der</strong> UML-Modelle gewährleisten zu können.<br />
Der Entwickler soll dabei unterstützt werden, eine Modellierung vorzunehmen,<br />
<strong>der</strong>en Ergbnisse sich als möglichst wi<strong>der</strong>spruchsfreie und vollständige gestalten.<br />
Lösungsansätze<br />
Die UML stellt grundsätzlich kein Konzept für die Modellierung von Abbildungsinformationen<br />
bereit. Die Nachverfolgbarkeit kann nur durch eine <strong>Erweiterung</strong> <strong>der</strong> Profile<br />
o<strong>der</strong> durch ein grundsätzlich neues Metamodell realisiert werden, indem Abbildungsinformationen<br />
in einem externen Modell abzulegen sind.<br />
Die <strong>Erweiterung</strong> <strong>der</strong> UML-Profile <strong>zur</strong> Informationsspeicherung bewirkt allerdings eine<br />
starke Kopplung zwischen den Modellen, aufgrund <strong>der</strong> festgehaltenen Referenzen<br />
untereinan<strong>der</strong>. Die Abbildungsinformationen werden lediglich dazu verwendet, Zusammenhänge<br />
zwischen den Elementen unterschiedlicher Modelle zu erkennen. Aus<br />
diesem Grund ist es sinnvoll, sie in einem externen Modell abzulegen, damit jedes<br />
UML-Modell für sich eine abgeschlossene Einheit bildet.<br />
Eine ähnliches Ziel wird im ATLAS Transformation Language (ATL) Projekt verfolgt<br />
[ATL]. Dieses Projekt beinhaltet (wie oAW) Frame<strong>works</strong> und Sprachen <strong>zur</strong> Modelltransformation<br />
und Code-Generierung. Bei einer Transformation besteht die Möglichkeit,<br />
auf Basis eines speziellen Weaving-Metamodells, Informationen darüber festzuhalten,<br />
wie die Elemente des Quellmodells auf Elemente des Zielmodells abgebildet<br />
worden sind [AMW]. Prinzipiell ist das genau die Art von Informationen, die für die<br />
Nachverfolgbarkeit relevant ist. Dieses Metamodell unterliegt allerdings starken Ein-<br />
52
5.1 Allgemeine Unterstützung<br />
schränkungen, so dass es für den betrachteten Kontext keine ausreichende Flexibilität<br />
aufweist. Beispielsweise ist es nicht möglich, Abbildungen zu gruppieren o<strong>der</strong> Elemente<br />
beliebiger Modelle zu verbinden.<br />
Aus diesem Grund wird eine neues Metamodell vorgestellt, das es ermöglichen soll,<br />
Informationen <strong>zur</strong> Gewährleistung <strong>der</strong> Nachverfolgbarkeit von Abbildungen festhalten<br />
zu können.<br />
Traceability-Modell<br />
Mit einem neuen Metamodell sollen die bislang impliziten Abhängigkeiten zwischen<br />
disziplinspezifischen Modellen nun explizit festgehalten werden. Der Zusammenhang<br />
zwischen den Modellen besteht darin, dass Elemente eines Modells auf Elemente eines<br />
an<strong>der</strong>en Modells abgebildet werden, wie in Abbildung 5.2 beispielhaft dargestellt.<br />
Eine solche Abbildung ist also durch eine Menge von Quellobjekten und durch eine<br />
Menge von Zielobjekten bestimmt und wird im Folgenden als Mapping bezeichnet.<br />
Abbildung 5.3: Beispiel für Abbildungsinformationen<br />
In <strong>der</strong> Abbildung 5.3 sind beispielhaft einige Mappings skizziert. Betrachtet wird <strong>der</strong><br />
Zusammenhang zwischen Elementen des Requirements-Modells, des Analysemodells<br />
und des Entwurfs. Ein Analyseobjekt wird durch potentiell mehrere Elemente repräsentiert<br />
(z. B. durch Lifeline3a und InstanceSpec3b). Dessen Repräsentanten werden<br />
dementsprechend auf ein einziges Property-Element eines Subsystems abgebildet. Mit<br />
dem angedeutete Step werden alle Mappings zusammengefasst, die für die Partitionierung<br />
eingesetzt werden. Eine Trace ist eine Folge von Mappings. Ausgehend von<br />
einem Akteur des Requirements-Modells werden Analyseobjekte und zuletzt Objekte<br />
im Entwurf explizit miteinan<strong>der</strong> in Beziehung gesetzt. Ausgehend vom trigger actor<br />
könnten die Elemente des Entwurfs bestimmt werden, die diesen Akteur (bzw. die<br />
53
5 Methodenunterstützung<br />
Schnittstelle) wi<strong>der</strong>spiegeln, vorausgesetzt das Traceability-Modell wurde bei <strong>der</strong> gesamten<br />
Methodenunterstützung geeignet verwendet.<br />
Alle Klassen eines mit EMF realisierten Metamodells sind Spezialisierungen <strong>der</strong> Klasse<br />
EObject (vgl. Abschnitt 2.3.2). Um das Metamodell in einem an<strong>der</strong>en Kontext (jenseits<br />
<strong>der</strong> UML) wie<strong>der</strong>verwenden zu können, wird deshalb verallgemeinert eine Abbildung<br />
von EObjects auf EObjects betrachtet. Somit können Abbildungen zwischen<br />
den Elementen beliebiger Metamodelle berücksichtigt werden, insofern die Metamodelle<br />
durch Verwendung des Eclipse Modeling Framework (EMF) in das Werkzeug<br />
integriert sind.<br />
Abbildung 5.4: Das Traceability Modell<br />
Die wesentlichen Elemente des Traceability-Metamodells sind in Abbildung 5.4 dargestellt.<br />
Ein Mapping kann, wie im Beispiel motiviert, unter verschiedenen Gesichtspunkten<br />
betrachtet werden:<br />
• Step: Ein Step dient <strong>der</strong> Zusammenfassung von gleichartigen Mappings. Bei<br />
<strong>der</strong> Partitionierung von Analyseobjekte wird für jedes Analyseobjekt genau ein<br />
Mapping eingesetzt. Die Mappings aller Analyseobjekte können zu einem Step<br />
gruppiert werden.<br />
• Trace: Für die Durchgängigkeit <strong>der</strong> Abbildungen von Elementen bezüglich mehrerer<br />
Modelle, kann eine Sequenz von Mappings als Trace modelliert werden.<br />
Die Abbildungen weniger Objekte werden schrittweise über verschiedene Modelle<br />
hinweg berücksichtigt. Durch den Einsatz von OCL-Bedingungen wird sichergestellt,<br />
dass die Quell- und Zielobjekte <strong>der</strong> geordneten Folge von Abbildungen<br />
übereinstimmen.<br />
• Eine Traceability beinhaltet alle Mappings, Traces und Steps und soll die Nachverfolgbarkeit<br />
bei <strong>der</strong> Entwicklung eines Softwaresystems sicherstellen.<br />
Damit auch die Möglichkeit besteht, gespeicherte Abbildungsinformationen aus dem<br />
Traceability-Modell zuordnen zu können und zu extrahieren, müsssen den einzelnen<br />
Steps, Traces und Mappings je nach Verwendung verschiedene Attribute zugeteilt werden.<br />
Das Element PropertyOwningElement ist eine Generalisierung aller vier genann-<br />
54
5.1 Allgemeine Unterstützung<br />
ten Elemente. Jedem PropertyOwningElement können beliebig viele Properties zugewiesen<br />
werden (vgl. Abb. 5.5), wobei jede Property ein key-value Paar beinhaltet.<br />
Damit besteht zum Beispiel für eine Section die Möglichkeit, zu einem Schlüssel<br />
sectionId den Wert ANALYSIS_OBJECT_PARTITIONING abzulegen.<br />
Abbildung 5.5: Zusätzliche Informationen<br />
Nachdem nun mit einem Metamodell die Möglichkeit besteht, Wi<strong>der</strong>sprüche zwischen<br />
disziplinspezifischen UML-Modell zu erkennen, wird im nächsten Abschnitt das Aufgabenmodell<br />
erweitert, um Validierung und Korrekturvorschläge auch hinsichtlich <strong>der</strong><br />
Durchgängigkeit zu berücksichtigen.<br />
5.1.3 Validierungen und Korrekturvorschläge<br />
Immer dann, wenn Modelle für eine Bearbeitung verwendet werden, sollten sie zunächst<br />
auf eventuelle Vorbedingungen überprüft werden. Ein UML-Modell kann auf<br />
unterschiedlichen Arten Fehler aufweisen, die bezüglich ihrer Ursachen durch die folgenden<br />
Begriffe gruppiert werden:<br />
1. Integritätsverletzungen: Eine Integritätsverletzung kann durch ein einzelnes o<strong>der</strong><br />
mehrere UML-Modelle hervorgerufen werden. Fehler bei <strong>der</strong> Serialisierung, Referenzen<br />
auf nicht erreichbare Elemente an<strong>der</strong>er Modelle o<strong>der</strong> auch Verletzungen<br />
gegen UML-Constraints könnten die Ursachen dafür sein.<br />
2. Inkonsistenzen: Inkonsistenzen sind Verletzungen MeDUSA-spezifischer Vorbedingungen<br />
und obligatorischer Konventionen (z. B. die Kategorisierung jedes<br />
modellierten Objekts hinsichtlich <strong>der</strong> Objekttaxonomie).<br />
3. Unstimmigkeiten treten auf, wenn die Durchgängigkeit mehrerer Modelle nicht<br />
gewährleistet ist, und bilden daher den Grund für Wi<strong>der</strong>sprüche zwischen disziplinspezifischen<br />
Modellen. Unstimmigkeiten können auf <strong>der</strong> Basis des beschriebenen<br />
Traceability-Modells erkannt werden.<br />
Die Vermeidung und das Beheben von Integritätsverletzungen wird durch das Eclipse<br />
Modeling Framework (EMF) gewährleistet. Inkonsistenzen und Unstimmigkeiten müs-<br />
55
5 Methodenunterstützung<br />
sen durch die Methodenunterstützung vermieden, beziehungsweise erkannt und in Interaktion<br />
mit dem Entwickler behoben werden. Aus diesem Grund werden die UML-<br />
Modelle vor je<strong>der</strong> Bearbeitung einer Validierung unterzogen, um aufgabenspezifische<br />
Vor- und Nachbedingungen zu überprüfen. Wie in Abbildung 5.6 dargestellt, wird dazu<br />
das beschriebene Aufgabenmodell erweitert.<br />
Vor- und Nachbedingungen<br />
Abbildung 5.6: Das erweiterte Aufgabenmodell<br />
Im Kontext einer Aufgabe werden an die Eingabemodelle Vorbedingungen und an die<br />
Ausgabemodelle Nachbedingungen gestellt. Welche Bedingungen das konkret sind, ist<br />
abhängig von <strong>der</strong> jeweiligen Aufgabe. Allgemein kann aber festgestellt werden, dass<br />
Unstimmigkeiten nicht durch Vorbedingungen an die Eingabemodelle ausgeschlossen<br />
werden sollten, denn die Bearbeitung einer Aufgabe beinhaltet gerade die Behebung<br />
von Unstimmigkeiten (z. B. das Partitionieren neuer Analyseobjekte). Die Nachbedingungen<br />
<strong>der</strong> Ausgabemodelle sollten hingegen Unstimmigkeiten ausschließen o<strong>der</strong><br />
zumindest auf <strong>der</strong>en Existenz hinweisen.<br />
Die für eine Aufgabe k spezifischen Vorbedingungen prek und Nachbedingungen<br />
postk eines n-Tupels von UML-Modellen kann durch Anwendung <strong>der</strong> Funktionen<br />
cpre und cpost überprüft werden:<br />
cpre : M n UML → B (5.2)<br />
cpost : M n UML → B (5.3)<br />
Die Funktion gi k aus Abschnitt 5.1.1 wird <strong>zur</strong> Berücksichtigung <strong>der</strong> Vor- und Nachbedingungen<br />
angepasst. Alle während einer werkzeugunterstützten Aufgabe k durchgeführten<br />
Aktionen über den n Eingabemodellen im <strong>It</strong>erationsschritt i werden durch die<br />
neue Funktion f i k beschrieben:<br />
56<br />
f i k : M n UML, pre → M n UML, post<br />
(5.4)
5.1 Allgemeine Unterstützung<br />
Der Ursprung von f i k ist dadurch definiert, dass für jedes m ∈ M n UML, pre<br />
den zwei Eigenschaften gelten müssen:<br />
1. m ∈ M n UML<br />
2. cpre(m) = true<br />
die folgen-<br />
Entsprechend muss für jedes Element des Bildbereiches f i k (m) ∈ M n UML, post , gelten,<br />
dass:<br />
1. f i k (m) ∈ M n UML<br />
2. cpost(f i k (m)) = true<br />
Jedes ausgehende Modell einer Aufgabe wird im nächsten potentiellen <strong>It</strong>erationsschritt<br />
ein Eingabemodell <strong>der</strong> gleichen Aufgabe sein. Deshalb wird festgelegt, dass die an<br />
die Eingabemodelle gestellten Bedingungen ebenfalls durch die Ausgabemodelle erfüllt<br />
werden müssen. Das heißt, die Nachbedingungen bezüglich <strong>der</strong> Ausgabemodelle<br />
beinhalten mindestens die Vorbedingungen an die entsprechenden Eingabemodelle.<br />
Damit ist sichergestellt, dass die Modellän<strong>der</strong>ungen einer Aufgabe nicht den eigenen<br />
Vorbedingungen wi<strong>der</strong>sprechen. Somit wird von je<strong>der</strong> Funktion f i k gefor<strong>der</strong>t, dass:<br />
und somit<br />
Korrekturvorschläge<br />
Auch wenn bei <strong>der</strong> Anwendung von f i k<br />
f i k (m) ∈ M n UML, pre<br />
M n UML, post ⊆ M n UML, pre<br />
(5.5)<br />
(5.6)<br />
im <strong>It</strong>erationsschritt i eine Menge von Modellen<br />
hervorgeht, die die Nachbedingungen und somit auch die Vorbedingungen erfüllen, ist<br />
nicht automatisch gewährleistet, dass im nächsten <strong>It</strong>erationsschritt i + 1 die Vorbedingungen<br />
<strong>der</strong> Eingabemodelle erfüllt sind. Bei <strong>der</strong> Bearbeitung an<strong>der</strong>er Aufgaben,<br />
werden vermutlich ebenfalls einige <strong>der</strong> Modelle verän<strong>der</strong>t. Die Vor- o<strong>der</strong> Nachbedingungen<br />
an<strong>der</strong>er Aufgaben werden nicht berücksichtigt.<br />
Wenn die Modelle jeweils nicht alle Vor- o<strong>der</strong> Nachbedingungen erfüllen, können die<br />
Inkonsistenzen durch festgelegte Korrekturvorschläge behoben werden. Für eine Vorbedingung<br />
prej kann eine Korrektur durch ein Funktion rpostj definiert werden:<br />
Für jedes m ∈ M n UML,pre<br />
1. m ∈ M n UML<br />
2. cprei (m) = true, ∀1 ≤ i ≤ k<br />
rpostj : M n UML,pre → M n UML,pre<br />
gilt dann, dass es eine Vorbedingung k gibt, so dass:<br />
3. cprek (m) = false und deshalb m /∈ M n UML,pre<br />
(5.7)<br />
57
5 Methodenunterstützung<br />
Analog können Korrekturvorschläge für die Nachbedingungen festgelegt werden.<br />
Konfiguration<br />
Das Aufgabenmodell verlangt für die Unterstützung einer Aufgabe also eine ganze<br />
Reihe von Parametern. Neben den UML-Modelle m, die von ihnen zu erfüllenden<br />
l Vorbedingungen und den jeweiligen Korrekturen {rprej }1≤j≤l, gehören dazu<br />
die während <strong>der</strong> Bearbeitung durchgeführten Modellän<strong>der</strong>ungen repräsentiert durch<br />
f i k , die durch cpost zu prüfenden p Vorbedingungen, die zugehörigen Korrekturen<br />
{rpostj }1≤j≤p und schließlich das Traceability-Modell T <strong>zur</strong> Erkennung von Unstimmigkeiten.<br />
Eine Konfiguration des Modells für eine Aufgabe ist wie folgt definiert:<br />
K = (m, cpre, {rprej }1≤j≤l, f i k , cpost, {rpostj }1≤j≤p, T ) (5.8)<br />
Auf <strong>der</strong> Basis einer solchen Konfiguration und den entsprechenden Parametern wird<br />
das Aufgabenmodell in <strong>der</strong> technischen Umsetzung berücksichtigt.<br />
5.1.4 Technische Umsetzung<br />
Die Realisierung <strong>der</strong> vorgestellten konzeptionellen Lösung wird hauptsächlich durch<br />
ein <strong>It</strong>erative Task Framework geprägt. Die Unterstützung einer Aufgabe kann durch die<br />
Realisierung eines TaskWizards geleistet werden, wie beispielsweise in Abschnitt 5.2.4<br />
für die Unterstützung <strong>der</strong> Subsystem Identification beschrieben wird. Das <strong>It</strong>erative Task<br />
Framework überwacht den Lebenszyklus eines solchen aufgabenspezifischen TaskWizards<br />
und berücksichtigt die vom Aufgabemodell definierten Eigenschaften (z. B. die<br />
Prüfung von Vor- und Nachbedingungen).<br />
Bearbeitungssequenz<br />
Das zentrale Konzept bei <strong>der</strong> technischen Umsetzung des Aufgabenmodells ist die<br />
Bearbeitungssequenz, durch die eine feste Reihenfolge bei <strong>der</strong> Bearbeitung einer Aufgabe<br />
festgelegt wird. Es bedient sich <strong>der</strong> Paramatere einer aufgabenspezifischen Konfiguration<br />
K:<br />
58<br />
1. Einlesen <strong>der</strong> Eingabemodelle m<br />
2. Prüfung <strong>der</strong> Vorbedingungen (Integritätsverletzungen und Inkonsistenzen) durch<br />
cpre und Anbieten eventueller Korrekturvorschläge<br />
3. Modellän<strong>der</strong>ungen während <strong>der</strong> aufgabenspezfischen Bearbeitung (f i k )<br />
4. Prüfung <strong>der</strong> Nachbedingungen (Vorbedingungen, Unstimmigkeiten) durch cpost<br />
und Anbieten eventueller Korrekturvorschläge<br />
5. Speicherung <strong>der</strong> Ausgabemodelle bei erfolgreicher Beendigung
5.1 Allgemeine Unterstützung<br />
Die Bearbeitung anhand dieser festen Reihenfolge kann allerdings nur dann zu einem<br />
gültigen Ergebnis führen, wenn <strong>der</strong> Kontrollfluss während <strong>der</strong> Bearbeitung einer<br />
Aufgabe sichergestellt werden kann. Es ist zu gewährleisten, dass keine Modellän<strong>der</strong>ungen<br />
während <strong>der</strong> Bearbeitung einer Aufgabe im Hintergrund vorgenommen werden<br />
(z. B. durch den Entwickler). Ein Modell zu validieren, bevor es bearbeitet wird, hat<br />
erst dann einen Nutzen, wenn während <strong>der</strong> Bearbeitung auch ausgeschlossen werden<br />
kann, dass das Modell an<strong>der</strong>weitig verän<strong>der</strong>t wird.<br />
Nicht zuletzt aus diesem Grund, sollte jede aufgabenspezifische Methodenunterstützung<br />
durch einen Wizard realisiert werden. Zum einen eignet er sich durch sein Anwendungsfeld<br />
(vgl. Abschnitt 2.3.1) für die sequentielle Bearbeitung und zum an<strong>der</strong>en<br />
kann <strong>der</strong> Kontrollfluss sehr einfach sichergestellt werden. Nach dem Starten können<br />
keine Aktionen außerhalb dieses Wizards im Werkzeug durchgeführt werden, bis die<br />
Bearbeitung beendet o<strong>der</strong> abgebrochen wurde.<br />
Auf <strong>der</strong> einen Seite garantiert die Sicherstellung des Kontrollflusses durch einen Wizard<br />
zwar die Einhaltung <strong>der</strong> Bearbeitungssequenz und die Gültigkeit einer durchgeführten<br />
Validierung, aber auf <strong>der</strong> an<strong>der</strong>en Seite muss auf allgemeine Funktionalität<br />
verzichtet werden, die durch das Werkzeug bereitgestellt wird. Das beinhaltet insbeson<strong>der</strong>e<br />
die Wi<strong>der</strong>rufbarkeit von (Modell-)Än<strong>der</strong>ungen.<br />
Zunächst wird <strong>der</strong> allgemeine Aufbau eines TaskWizards beschrieben und anschließend<br />
die Architektur des <strong>It</strong>erative Task Frame<strong>works</strong> und die Berücksichtigung von<br />
Validierungen und <strong>der</strong> Wi<strong>der</strong>rufbarkeit von Modellän<strong>der</strong>ungen.<br />
Aufbau eines TaskWizards<br />
In einem TaskWizard kann die Bearbeitungssequenz unmittelbar durch die Reihenfolge<br />
<strong>der</strong> Wizard-Seiten abgedeckt werden. Wie in Abbildung 5.7 am Beispiel <strong>der</strong> Subsystem<br />
Identification demonstriert wird, besteht ein TaskWizard aus (mindestens) vier Seiten,<br />
die folgend beschrieben werden:<br />
1. ShowTaskDescriptionAndSelectModelWizardPage: Die erste Seite dient <strong>der</strong> Auswahl<br />
des MeDUSA Projekts. Mit <strong>der</strong> Bereitstellung eines Projektwizards durch<br />
die Infrastruktur (vgl. Abschnitt 4.3) kann ein MeDUSA-Projekt mit den zugehörigen<br />
UML-Modellen erstellen. Die erste Seite eines TaskWizards bietet die<br />
vorhandenen MeDUSA-Projekte <strong>zur</strong> Auswahl an. Sollten die Modellressourcen<br />
seit <strong>der</strong> Erstellung durch den Projektwizard nicht umbenannt worden sein, werden<br />
automatisch die entsprechenden Dateien durch Berücksichtigung <strong>der</strong> Standardeinstellungen<br />
selektiert.<br />
2. ValidationPage: Die zweite Seite dient <strong>der</strong> Überprüfung von Vorbedingungen.<br />
Sollte eine Verletzung aufgetreten sein, kann, falls vorhanden, <strong>der</strong> entsprechende<br />
Korrekturvorschlag angeboten werden. Dieser Aspekt wird im Abschnitt 5.1.4<br />
vertieft.<br />
59
5 Methodenunterstützung<br />
60<br />
Abbildung 5.7: Seiten eines TaskWizards<br />
3. TaskInteractionPage: Die dritte Seite ist abhängig von <strong>der</strong> zu bearbeitenden Aufgabe.<br />
In Abbildung 5.7 wird eine Unterstützung für die Subsystem Identification<br />
angeboten. Die genauere Erläuterung dieser aufgabenspezifischen Funktionalität<br />
wird im Abschnitt 5.2.4 vorgenommen.<br />
4. ValidationPage: Die letzte Seite dient <strong>der</strong> Überprüfung <strong>der</strong> Nachbedingungen.<br />
Sind keine Inkonsistenzen o<strong>der</strong> Unstimmtigkeiten aufgetreten, kann die Bearbeitung<br />
im Anschluß durch Speicherung aller Modellän<strong>der</strong>ungen beendet werden.
Architektur<br />
5.1 Allgemeine Unterstützung<br />
Bei <strong>der</strong> Betrachtung <strong>der</strong> Bearbeitungssequenz und insbeson<strong>der</strong>e <strong>der</strong> Konfiguration des<br />
Aufgabenmodells geht hervor, dass die Erstellung eines TaskWizards nur zu einem<br />
geringen Teil von <strong>der</strong> eigentlichen Aufgabe abhängig ist. Die aufgabenunabhängigen<br />
Bearbeitungssequenz wird im <strong>It</strong>erative Task Frame<strong>works</strong> durch einen TaskController<br />
gewährleistet, <strong>der</strong> den gesamten Lebenszyklus eines TaskWizards überwacht. Alle<br />
identifizierten Parameter einer Konfiguration K des Aufgabenmodells werden in einer<br />
Instanz <strong>der</strong> Klasse TaskConfiguration gekapselt. Diese beinhaltet also alle UML-<br />
Modelle, das Traceability-Modell, alle Vor- und Nachbedingungen und die dazugehörigen<br />
Korrekturvorschläge einer Aufgabe. Zusätzlich kann eine Beschreibung <strong>der</strong><br />
Aufgabe angegeben werden, die auf <strong>der</strong> ersten Seite des TaskWizards angezeigt wird<br />
(vgl. 5.7). Bis auf die Erstellung <strong>der</strong> aufgabenspezifischen Seiten ist <strong>der</strong> TaskController<br />
dafür verantwortlich, alle aufgabenunabhängigen Wizard-Seiten in <strong>der</strong> Reihenfolge<br />
entsprechend <strong>der</strong> Bearbeitungssequenz zu erstellen.<br />
Für die Unterstützung einer konkreten Aufgabe ist also lediglich die Realisierung eines<br />
speziellen TaskWizards erfor<strong>der</strong>lich, mit dem die TaskConfiguration spezifiziert wird<br />
und aufgabenabhängige Wizard-Seiten hinzugefügt werden.<br />
Abbildung 5.8: Architektur des <strong>It</strong>erative Task Framework<br />
Die genau Architektur des <strong>It</strong>erative Task Frame<strong>works</strong> wird in Abbildung 5.8 dargestellt.<br />
Für die Kapselung verschiedener Funktionalitäten verwendet <strong>der</strong> Controller unterschiedliche<br />
Hilfsklassen:<br />
1. ModelHandler: Der ModelHandler ist verantwortlich für das Laden und Speichern<br />
von Modellressourcen. Die Funktionalität wird immer durch den TaskController<br />
angestoßen.<br />
61
5 Methodenunterstützung<br />
2. UMLHelper: Jegliche Logik, die sich auf die Struktur des UML-Metamodells<br />
bezieht (z. B. das Berechnen aller Lifelines <strong>der</strong> Interaktionen eines Modells),<br />
wird durch die Klasse UMLHandler bereitgestellt.<br />
3. TraceabilityHelper: Analog wird die Logik für die Handhabung des Traceability-Metamodells<br />
in einer eigenen Klasse gekapselt.<br />
4. TaskLogic: Für die Kapselung <strong>der</strong> Funktionalität für die Unterstützung einer<br />
konkreten Aufgabe wird ein TaskPerformingHelper vordefiniert. Spezialisierungen<br />
dieser Klasse besitzen über den TaskController Zugriff auf die jeweiligen<br />
notwendigen Hilfsklassen. Aufgabenspezifische TaskLogicPages verwenden die<br />
TaskLogic als Funktionskomponente.<br />
5. ValidationHelper: Die Validierung <strong>zur</strong> Prüfung <strong>der</strong> Vor- und Nachbedingungen<br />
wird vom ValidationHelper durchgeführt. Validierungen sind auf <strong>der</strong> Basis des<br />
EMF Validation Frame<strong>works</strong> realisiert und werden im folgenden Abschnitt erläutert.<br />
Validierung und Korrekturvorschläge<br />
Die Vor- und Nachbedingungen werden durch Conditions als Teil <strong>der</strong> TaskConfiguration<br />
beschrieben (vgl. Abb. 5.8). Jede Condition kann mehrere Constraints beinhalten,<br />
die auf <strong>der</strong> Basis des EMF Validation-Frame<strong>works</strong> implementiert werden. Durch eine<br />
<strong>Erweiterung</strong> dieses Frame<strong>works</strong>, ist es bei <strong>der</strong> Verletzung eines Constraints außerdem<br />
möglich, dem Entwickler die betroffenen Elemente anzeigen zu lassen und eventuelle<br />
Korrekturvorschläge anzubieten.<br />
62<br />
Abbildung 5.9: Beispiel einer Validierung mit Korrekturvorschlag
5.2 Unterstützung <strong>der</strong> Subsystem Identification<br />
Das Anzeigen einer ValidationPage wie in Abbildung 5.9 bewirkt unmittelbar die<br />
Auswertung <strong>der</strong> definierten Constraints nach einer festgelegten Reihenfolge, wie es<br />
im Aufgabenmodell durch die Funktion cpre definiert wurde. Dazu verwendet <strong>der</strong><br />
TaskController einen ValidationHelper, <strong>der</strong> die programmatische Schnittstelle zum<br />
EMF Validation Framework bildet, um die Vor- o<strong>der</strong> Nachbedingungen zu überprüfen.<br />
Sollte ein Constraint nicht erfüllt sein, wird die Validierung abgebrochen und,<br />
falls verfügbar, ein Korrekturvorschlag angeboten. Abbildung 5.9 zeigt eine solche<br />
Validierungsseite.<br />
Wi<strong>der</strong>rufbarkeit von Modellän<strong>der</strong>ungen<br />
Um dem Entwickler einen zusätzlichen Komfort bieten zu können, wird ihm die Möglichkeit<br />
geboten, alle angestoßenen Än<strong>der</strong>ungen des aktuellen Schritts <strong>der</strong> Bearbeitungsequenz<br />
einer Aufgabe zu wi<strong>der</strong>rufen aber auch zu wie<strong>der</strong>holen. Jede TaskWizardPage<br />
kann in ihrer Oberfläche die entsprechende Funktionalität anbieten, durch<br />
eine ValidationPage wird sie generell angeboten.<br />
Modellän<strong>der</strong>ungen werden technisch durch die Verwendung des EMF Command Frame<strong>works</strong><br />
realisiert, indem sie in Commands gekapselt werden. Für das Verschmelzen<br />
von mehreren Commands zu einem Einzigen stellt das Framework CompoundCommands<br />
bereit. Dieser Zusammenhang wurde bereits in Abschnitt 2.3.2 beschrieben.<br />
Damit jede für den Entwickler scheinbar atomare Aktion (Modellän<strong>der</strong>ung) in einem<br />
Schritt wi<strong>der</strong>rufen werden kann, ist eine konsequente Kombination <strong>der</strong> entsprechenden<br />
Commands zu einem einzigen CompoundCommand zwingend erfor<strong>der</strong>lich. Sollten<br />
mehrere Elemente bei <strong>der</strong> Durchführung einer Korrektur betroffen sein, darf <strong>der</strong><br />
mit je<strong>der</strong> Än<strong>der</strong>ung verbundene Command nicht einzeln ausgeführt werden. Möchte<br />
<strong>der</strong> Entwickler nach <strong>der</strong> Durchführung einer Korrektur den vorherigen Zustand wie<strong>der</strong>herstellen,<br />
so müsste er mehrere Än<strong>der</strong>ungen wi<strong>der</strong>rufen, obwohl er lediglich eine<br />
einzige Aktion durchgeführt hat.<br />
Nachdem nun ein allgemeines Framework beschrieben wurde, mit die Unterstützung<br />
einzelner Aufgaben nach einem vordefinierten Schema realisiert werden kann, wird im<br />
nächsten Abschnitt die prototypische Unterstützung <strong>der</strong> Subsystem Identification unter<br />
Verwendung des <strong>It</strong>erative Task Frame<strong>works</strong> vorgestellt. Der Fokus dieser aufgabenspezifischen<br />
Unterstützung liegt eher darauf, die Eignung des beschriebenen Frame<strong>works</strong><br />
vorzuweisen, ohne dabei einen Anspruch auf die Vollständigkeit des prototypischen<br />
TaskWizards zu erheben.<br />
5.2 Unterstützung <strong>der</strong> Subsystem Identification<br />
Im Abschnitt 2 wurde die Subsystem Identification als eine Aufgabe des Architectural<br />
Designs vorgestellt, in <strong>der</strong> die Analyseobjekte durch Subsysteme zu partitionieren<br />
sind. Neben <strong>der</strong> Beschreibung dieser Partitionierung wird in diesem Abschnitt erläutert,<br />
welche Vor- und Nachbedingungen definiert werden müssen und wie die Model-<br />
63
5 Methodenunterstützung<br />
lierung durch eine Bewertung mittels Metriken unterstützt werden kann. Zuletzt wird<br />
die technische Umsetzung durch die Verwendung des <strong>It</strong>erative Task Frame<strong>works</strong> erläutert.<br />
5.2.1 Partitionierung <strong>der</strong> Analyseobjekte<br />
Nachdem in <strong>der</strong> Analyse versucht wurde, alle Objekte <strong>der</strong> realen Anwendungswelt zu<br />
identifizieren, wird in <strong>der</strong> ersten Aufgabe des Architectural Design ein Entwurf modelliert,<br />
<strong>der</strong> entscheidend die Leistung des zu erstellenden Softwaresystems beeinflusst.<br />
Bislang wurde allerdings nicht erläutert, auf welche Art und Weise Objekte mit <strong>der</strong><br />
UML realisiert werden können. Es entsteht eine Problematik durch den instanzgetriebenen<br />
Ansatz von MeDUSA, da dieser durch die UML nicht unmittelbar abgedeckt<br />
werden kann. Neben <strong>der</strong> Partitionierung selbst wird daher diese Problemstellung und<br />
mögliche Lösungsalternative im folgenden Abschnitt diskutiert. Anschließend wird<br />
<strong>der</strong> Aufbau eines Architekturmodells beschrieben, und es wird erläutert, wie die Analyseobjekte<br />
und die modellierten Nachrichten auf entsprechende Elemente des Architekturmodells<br />
abgebildet werden können.<br />
Repräsentierung <strong>der</strong> Analyseobjekte<br />
Mit <strong>der</strong> MeDUSA-Methode wird ein objektbasierter Ansatz verfolgt (vgl. Abschnitt<br />
2), so dass in den Aufgaben aller Disziplinen Objekte modelliert werden, die mit Stereotypen<br />
entsprechend <strong>der</strong> Objekttaxonomie versehen werden. Erst am Ende des Detailed<br />
Design ist eine Erstellung von Klassen für die modellierten Objekte vorgesehen.<br />
Im Gegensatz zu diesem instanzgetriebenen Ansatz definiert die UML das Konzept <strong>der</strong><br />
Abbildung 5.10: Diskrepanz zwischen MeDUSA und <strong>der</strong> UML<br />
Classifier als ihr grundlegendes Modellierungskonzept (vgl. Abschnitt 2.2). Instanzen<br />
von Classifiern werden in den unterschiedlichen Spracheinheiten nicht durchgängig repräsentiert.<br />
Interaktionen können miteinan<strong>der</strong> kommunizierende Lifelines beinhalten,<br />
um somit das Verhalten von Instanzen zu einem bestimmten Zeitpunkt zu beschreiben.<br />
64
5.2 Unterstützung <strong>der</strong> Subsystem Identification<br />
Mit <strong>der</strong> Spracheinheit Classes können Objektdiagramme erstellt werden, in denen die<br />
Objekte durch InstanceSpecification-Elemente repräsentiert werden. Unter Repräsentanten<br />
eines Analyseobjekts werden im Folgenden alle Instanzen von UML-Elementen<br />
verstanden, die in einem erstellten Modell Analyseobjekte repräsentieren.<br />
Es gibt in <strong>der</strong> UML kein gemeinsames Konzept <strong>der</strong> einzelnen Sprachpakete, mit dem<br />
beispielsweise definiert werden kann, dass eine Lifeline und eine InstanceSpecifications<br />
als Repräsentanten des gleichen Objekts zu interpretieren sind. Diese Diskrepanz<br />
<strong>der</strong> instanzgetriebenen Methode und <strong>der</strong> Classifier-getriebenen Beschreibungssprache<br />
wird in Abbildung 5.10 verdeutlicht.<br />
Der Zusammenhang zwischen <strong>der</strong> statischen Sicht auf identifizierte Objekte und <strong>der</strong><br />
dynamischen Sicht auf das Verhalten identischer Objekte ist bei <strong>der</strong> Entwicklung mit<br />
MeDUSA ein sehr grundlegen<strong>der</strong> Aspekt. Ohne eine konkrete Methodenunterstützung<br />
bliebe es dem Entwickler selbst überlassen, auf welche Art und Weise er zusammengehörende<br />
Elemente berücksichtigt, beispielsweise durch Namenskonventionen, zusätzlicher<br />
Dokumentation o<strong>der</strong> schlicht seinem Erinnerungsvermögen. Noch schwerwiegen<strong>der</strong><br />
wird die Problematik durch den Einsatz <strong>der</strong> modellgetriebenen Entwicklung.<br />
Wie kann <strong>der</strong> Code eines Objekts bzw. einer Klasse generiert werden, wenn nicht klar<br />
festgelegt werden kann, durch welche Elemente ein Objekt beschrieben wurde?<br />
Im Sinne einer geeigneten Unterstützung, auch hinsichtlich des modellgetriebenen Ansatzes,<br />
muss also eine Lösung gefunden werden, mit <strong>der</strong> die Diskrepanz zwischen <strong>der</strong><br />
UML und MeDUSA (s. Abb. 5.10) bezüglich dieser Problematik ausgeglichen werden<br />
kann.<br />
Lösungsansätze Da die allgemeine und einheitliche Repräsentierung von Analyseobjekten<br />
nicht durch die Verwendung <strong>der</strong> UML gewährleistet werden kann, müssen<br />
die unterschiedlichen Repräsentanten auf ein im Modell semantisch nicht explizit modellierbares<br />
Objekt abgebildet werden. Dafür sind folgende Ansätze denkbar:<br />
• Namenskonventionen: Durch eine bestimmte Namenskonvention <strong>der</strong> Repräsentanten<br />
kann die Zusammengehörigkeit ausgedrückt werden. Diese Möglichkeit<br />
entspricht allerdings we<strong>der</strong> den Modellierungskonzepten <strong>der</strong> UML, noch<br />
ist es für den Entwickler intuitiv und würde eine starke Einschränkung bei <strong>der</strong><br />
Modellierung erzwingen. Schreibfehler könnten zudem unkontrollierbare Auswirkungen<br />
haben.<br />
• Einsatz von Classifiern: Eine bessere Lösung für den betrachteten Kontext bietet<br />
<strong>der</strong> Einsatz von Classifiern, indem jedes Analyseobjekt durch genau einen<br />
Classifier im Modell repräsentiert wird. Sowohl InstanceSpecifications als auch<br />
Lifelines könnten dann (über Umwege) mit einem Classifier verbunden werden.<br />
Ein Analyseobjekt könnte als eine Singleton-Instanz eines solchen Classifiers<br />
verstanden werden. Auch wenn dieses Konzept mit den Standardmitteln <strong>der</strong><br />
UML realisierbar ist, wird <strong>der</strong> Entwickler auch hier zu einer Modellierungsart<br />
gezwungen, <strong>der</strong>en Ursache nur durch eine technische Notwendigkeit begründet<br />
wird. Die Repräsentanten aus den unterschiedlichen Diagrammtypen <strong>der</strong><br />
65
5 Methodenunterstützung<br />
Sprachpakete, müssten sehr speziell zu einem gemeinsames Konzept gezwungen<br />
werden. Zusätzlich wäre es wohl sehr irreführend in den Augen eines Entwickler,<br />
wenn er eine objektbasierte Modellierung betreiben würde und im Modell<br />
Classifier-Elemente vorfände.<br />
• Verwendung von Stereotypen: Völlig unabhängig von dem Typ des Repräsentanten,<br />
können Abbildungsinformationen in den Stereotypen <strong>der</strong> jeweiligen<br />
Modellelemente abgelegt werden. Element und Abbildungsinformation befänden<br />
sich damit im gleichen Modell. Mit diesem Konzept können also beliebige<br />
Elemente durch Metainformationen miteinan<strong>der</strong> verbunden werden, indem die<br />
für die Objekttaxonomie verwendeten Profile und Stereotypen hinsichtlich einer<br />
Möglichkeit erweitert werden, diese Information ablegen zu können. Diese<br />
Realisierung könnte beliebige Sprachpakete berücksichtigen werden.<br />
Damit jedes UML-Modell eine in sich abgeschlossene Einheit bildet, sollten alle Modellierungsinformationen<br />
in dem Modell selbst vorliegen, so dass die <strong>Erweiterung</strong> <strong>der</strong><br />
UML-Profile als Lösungs gewählt wird. Die Analyseobjekte werden implizit durch<br />
einen eindeutigen Identifier dargestellt. Die Repräsentanten eines Objekts besitzen<br />
durch die UML-Profile für die MeDUSA Objekttaxonomie genau einen angewendeten<br />
Stereotypen. Der Identifier des repräsentierten Analyseobjekts kann in einem zusätzlichen<br />
Attribut aller Stereotypen festgehalten werden.<br />
Nach o<strong>der</strong> während <strong>der</strong> Erstellung <strong>der</strong> einzelnen Arbeitsergebnisse in <strong>der</strong> Analyse<br />
müssen die modellierten Repräsentanten den so implizit identifizierten Objekten zugeordnet<br />
werden, indem <strong>der</strong> Identifier des Objekts dem (angewendeten Stereotyps des)<br />
Repräsentanten zugewiesen wird.<br />
Aufbau des Architekturmodells<br />
Entsprechend dem MeDUSA Methodeninhalt (vgl. Abschnitt 2.1.1) wird bei <strong>der</strong> Entwicklung<br />
des Architectural Design Models für jedes Subsystem ein Komponentendiagramm<br />
erstellt. Eine Betrachtung <strong>der</strong> Subsysteme im Systemkontext wird erst im darauf<br />
folgenden Structural System Architecture Modelling vorgenommen. In <strong>der</strong> zweiten<br />
Aufgabe des Architectural Design werden u. a. die provided bzw. required-Interfaces<br />
<strong>der</strong> einzelnen Subsysteme miteinan<strong>der</strong> in Beziehung gesetzt werden.<br />
Die Methodenunterstützung für die Subsystem Identification erstellt neben den Komponenten<br />
für die Subsysteme bereits auch die System-Komponente. Die durch den Entwickler<br />
modellierten Subsysteme werden durch Properties, die die jeweiligen Subsysteminstanzen<br />
darstellen, im Gesamtsystem repräsentiert. Die Schnittstellen <strong>der</strong> Subsystemkomponenten<br />
werden dabei außer Acht gelassen, um eine klare Trennung <strong>zur</strong><br />
Unterstützung <strong>der</strong> darauffolgenden Aufgabe zu bilden.<br />
Der Zusammenhang zwischen System und Subsystemen wird in Abbildung 5.11 aufgeführt.<br />
Die Subsystemkomponenten beinhalten bereits einige Objekte, mit denen die<br />
„partitionierten“ Analyseobjekte wi<strong>der</strong>gespiegelt werden.<br />
66
5.2 Unterstützung <strong>der</strong> Subsystem Identification<br />
Abbildung 5.11: Subsystem als Komponente und Property <strong>der</strong> System-Komponente<br />
Abbilden <strong>der</strong> Analyseobjekte<br />
Die Partitionierung <strong>der</strong> Analyseobjekte ist eine sehr bildhafte Bezeichnung. Genau genommen,<br />
werden die Objekte nicht in Subsystemen gruppiert, son<strong>der</strong>n für sie werden<br />
neue Elemente im Architekturmodell erstellt.<br />
Mit Hilfe <strong>der</strong> Methodenunterstützung muss <strong>der</strong> Entwickler Subsysteme erstellen und<br />
entfernen können und die Analyseobjekte auf die einzelnen Subsysteme abbilden. Das<br />
neue Element (eine Property, vgl. Abb. 5.11) wird durch den Einsatz eines Traceability-Modells<br />
mit den Repräsentanten des Analyseobjekts verbunden. Die so entstehenden<br />
Mappings werden zu einem Step zusammengefasst, wie es beispielhaft bereits in<br />
<strong>der</strong> Abbildung 5.3 im Abschnitt 5.1.2 dargestellt wurde.<br />
Gruppierung von Nachrichten<br />
Neben <strong>der</strong> Partitionierung <strong>der</strong> Analyseobjekte, müssen die Nachrichten zwischen den<br />
Repräsentanten im Entwurf berücksichtigt werden. Kommunizieren die Repräsentanten<br />
von Objekten miteinan<strong>der</strong>, die auf das gleiche Subsystems abgebildet wurden, erfor<strong>der</strong>t<br />
das kein beson<strong>der</strong>es Augenmerk. Befinden sich miteinan<strong>der</strong> kommunizierende<br />
Objekte allerdings in unterschiedlichen Subsystemen, müssen die Nachrichten über<br />
Ports und Interfaces (vgl. Abschnitt 2.2) realisiert werden. Die Unterscheidung bei<strong>der</strong><br />
Fälle kann durch eine geeignete Werkzeugunterstützung vorgenommen werden.<br />
Die Erstellung <strong>der</strong> Ports als auch die Zuteilungen <strong>der</strong> Interface-Elemente zu den Ports<br />
wird durch den Entwickler durchgeführt.<br />
67
5 Methodenunterstützung<br />
5.2.2 Validierung und Korrekturvorschläge<br />
Für die Methodenunterstützung <strong>der</strong> Subsystem Identification muss vor <strong>der</strong> Bearbeitung<br />
sichergestellt werden, dass je<strong>der</strong> potentielle Repräsentant auch tatsächlich einem Analyseobjekt<br />
zugeordnet ist. Je<strong>der</strong> Repräsentant muss genau einen angewendeten Stereotypen<br />
des MeDUSA-Analyseprofils besitzen, <strong>der</strong> einen gültigen Identifier beinhaltet.<br />
Für die Korrektur einer auftretenden Inkonsistenz könnte dem Entwickler die Möglichkeit<br />
gegeben werden, unspezifizierte Repräsentanten zu identifizieren und die Zuordnung<br />
anzupassen. Es sind folgende Vorbedingungen durch das Analysemodell zu<br />
erfüllen, die unter einan<strong>der</strong> Abhängigkeiten besitzen und deshalb wie im Aufgabenmodell<br />
spezifiziert eine Ordnung besitzen:<br />
1. Je<strong>der</strong> Repräsentant muss genau einen angewendeten Stereotypen besitzen<br />
2. Die angewendeten Stereotypen aller Repräsentanten eines Analyseobjekts müssen<br />
von <strong>der</strong> gleichen Art sein<br />
3. Für jeden Repräsentanten muss ein gültiger Identifier spezifiziert worden sein,<br />
durch den das Analyseobjekt implizit definiert wird<br />
Analog muss das Architectural Design Model vor <strong>der</strong> Fertigstellung <strong>der</strong> Bearbeitung<br />
die Nachbedingungen erfüllen, dass keine Unstimmigkeiten vorhanden sind. Mit Hilfe<br />
des Traceability-Modells kann die Durchgängikeit des Analysemodells und des Entwurfs<br />
sichergestellt werden. Es ist zu prüfen, ob jedes Analyseobjekt durch eine Property<br />
berücksichtigt wurde und diese Property den gleichen Stereotypen besitzt.<br />
5.2.3 Bewertung durch Metriken<br />
Alle vom Entwickler durchgeführten Modellän<strong>der</strong>ungen können durch Metriken bewertet<br />
werden, damit diesem bei <strong>der</strong> Modellierung ein Indiz für die relative Qualitätsän<strong>der</strong>ung<br />
während <strong>der</strong> Bearbeitung <strong>der</strong> aktuellen Aufgabe gegeben werden kann. Die<br />
Erstellung <strong>der</strong> Subsysteme und die Verteilung <strong>der</strong> Interfaces auf Ports eines Subsystems<br />
bestimmen die grobe Architektur und haben starken Einfluss auf die Leistung des<br />
zu erstellenden Softwaresystems.<br />
Auswahl <strong>der</strong> Metriken Eine Bewertung <strong>der</strong> Subsystem Partitionierung und <strong>der</strong><br />
Aufteilung <strong>der</strong> Interfaces kann auf zwei Ebenen stattfinden:<br />
68<br />
• Bewertung des Subsystems: Unabhängig vom Systemkontext kann jedes Subsystem<br />
einzeln bewertet werden<br />
• Bewertung des Systems: Zusätzlich kann das Gesamtsystem abhängig von <strong>der</strong><br />
Partitionierung <strong>der</strong> Subsysteme bewertet werden
5.2 Unterstützung <strong>der</strong> Subsystem Identification<br />
Die Anwendung von Metriken für ein einzelnes Subsystems hat nur eine begrenzte<br />
Aussagekraft. Selbst wenn die Bewertung sehr schlecht ausfällt, kann im Systemkontext<br />
eine ausreichende Lösung vorzufinden sein. An<strong>der</strong>erseits kann aber auch eine<br />
defizitäre Modellierung vorliegen, obwohl sich keine Bewertung eines Subsystem als<br />
negativ hervorhebt. Der kombinierte Einsatz von Metriken bei<strong>der</strong> Ebenen bietet eine<br />
sinnvolle Hilfestellung.<br />
Werkzeuge und Metamodelle Es gibt zwei gründsätzlich verschiedene Ansätze<br />
für die Integration von Metriken in Eclipse-basierte Entwicklungumgebungen:<br />
• Die meisten existierenden Werkzeuge berechnen Metriken auf <strong>der</strong> Basis des<br />
Quelltextes eines Softwaresystems o<strong>der</strong> Teilen davon. Beispielhaft kann hier das<br />
Eclipse Plugin Metrics [Sau] aufgeführt werden.<br />
• Eine völlig an<strong>der</strong>e Herangehensweise wird durch das ATLAS Transformation<br />
Language (ATL) Projekt in Zusammenarbeit mit <strong>der</strong> Université de Nantes vorangetrieben.<br />
Durch eine Modell-zu-Modell Transformation wird für ein vorliegendes<br />
UML-Modell die Instanz eines Metrik-Metamodells berechnet. Auf <strong>der</strong><br />
Basis dieses Metrikmodells wird eine Modell-zu-Code Generierungen durchgeführt,<br />
um verschiedene Diagramme und Übersichten zu erstellen, mit denen die<br />
zu den Metriken gehörenden Maßzahlen visualisiert werden [VBBJ06].<br />
Lei<strong>der</strong> kann keines <strong>der</strong> beiden Ergebnisse eingesetzt werden. Ein Werkzeug, das seine<br />
Berechnungen durch Evaluierung des Quelltextes durchführt, ist im Rahmen <strong>der</strong> modellgetriebenen<br />
Entwicklung für die Bewertung eines UML-Modells nicht anwendbar.<br />
Der zweite Ansatz eignet sich zwar konzeptionell, kann aber aufgrund technischer Hin<strong>der</strong>nisse<br />
nicht eingesetzt werden. Die Abbildung auf ein Metrikmodell kann nur dann<br />
erfolgen, wenn das zu transformierenden UML-Modelle keine angewendeten Profile<br />
besitzt. Zusätzlich ist die Transformation bzw. Generierung ein langwieriger Prozess,<br />
<strong>der</strong> nicht ständig während <strong>der</strong> Modellierung durch den Entwickler ausgeführt werden<br />
kann.<br />
Visualisierung Das Anwenden von Metriken ist die Berechnung Maßzahlen, die<br />
zusammen mit einer Interpretion ein Indiz für die Qualität des Modells liefern. Das<br />
Anzeigen <strong>der</strong> einzelnen Maßzahlen ist nicht sehr aussagekräftig, da aufgrund <strong>der</strong> Unübersichtlichkeit<br />
Än<strong>der</strong>ungen nur sehr schwer wahrgenommen und interpretiert werden<br />
können. Es sollte somit eine geeignete grafische Visualisierung eingesetzt werden.<br />
Eine übersichtliche Darstellung <strong>der</strong> Maßzahlen ist z. B durch Kiviat-Charts möglich<br />
(vgl. Abb. 5.12). In einem Diagramm können mehrere Metriken gleichzeitig berücksichtigt<br />
werden, indem auf einer geordneten Skala vom Nullpunkt ausgehend die berechneten<br />
Maßzahlen eingetragen, und die Werte benachbarter Metriken miteinan<strong>der</strong><br />
verbunden werden. Bei einer ausreichend großen Menge von Metriken entspricht eine<br />
Än<strong>der</strong>ung <strong>der</strong> aufgespannten Fläche annäherungsweise einer Än<strong>der</strong>ung <strong>der</strong> Gesamtbewertung.<br />
69
5 Methodenunterstützung<br />
Abbildung 5.12: Beispiel eines Kiviat-Charts (Quelle: [Sof])<br />
Nachdem nun die Inhalte <strong>der</strong> Methodenunterstützung für die Subsystem Identification<br />
erläutert wurden, wird im nächsten Abschnitt die technische Realisierung vorgestellt.<br />
5.2.4 Technische Umsetzung<br />
Die technische Umsetzung <strong>der</strong> beschriebenen Unterstützung <strong>der</strong> Subsystem Identification<br />
beruht auf <strong>der</strong> Verwendung des <strong>It</strong>erative Task Frame<strong>works</strong> und <strong>der</strong> Definition einer<br />
TaskConfiguration. Neben <strong>der</strong> Nutzung des Frame<strong>works</strong> wird die zusätzliche, aufgabenspezifische<br />
Seite für die spezielle Unterstützung <strong>der</strong> Analyseobjekt-Partitionierung<br />
beschrieben. Die Umsetzung von Metriken <strong>zur</strong> Bewertung des Systems bzw. <strong>der</strong> Subsysteme<br />
konnte aus zeitlichen Gründen nicht fertiggestellt werden.<br />
Nutzung des <strong>It</strong>erative Task Frame<strong>works</strong><br />
Die Unterstützung einer Aufgabe wird durch die Erstellung eines speziellen TaskWizards<br />
realisiert. Sowohl die Seite <strong>zur</strong> Auswahl eines MeDUSA-Projekts, als auch die<br />
für die Validierung <strong>der</strong> UML-Modelle notwendigen Seiten werden durch das Framework<br />
automatisiert erstellt. Durch den SubsystemIdentificationWizard ist also lediglich<br />
eine TaskConfiguration zu definieren und die zusätzliche aufgabenspezifische Seite bereitzustellen.<br />
Abbildung 5.13 zeigt die Verwendung des Framework für die Unterstützung<br />
<strong>der</strong> Subsystem Identification, wobei die neuen Klassen farblich hervorgehoben<br />
sind.<br />
70
5.2 Unterstützung <strong>der</strong> Subsystem Identification<br />
Abbildung 5.13: Verwendung des <strong>It</strong>erative Task Frame<strong>works</strong><br />
Die aufgabenspezifische Konfiguration enthält neben dem Traceability-Modell sowohl<br />
das Analyse- und Architekturmodell als auch die Vor- und Nachbedingungen und<br />
eventuelle Korrekturvorschläge, die im Abschnitt 5.2.2 beschrieben wurden. Die für<br />
die Erstellung <strong>der</strong> Konfiguration nötige Logik ist aus dem TaskWizard extrahiert worden<br />
und im SubsystemIdentificationController implementiert. Die AnalysisObjectPartitioningLogic<br />
beinhaltet die Anwendungslogik für die Partitionierung und interagiert<br />
dafür mit dem UMLHandler und dem TraceabilityHandler, die durch das Framework<br />
<strong>zur</strong> Verfügung gestellt werden (vgl. Abschnitt 5.1.4).<br />
Aufbau <strong>der</strong> aufgabenspezifischen Seite<br />
Für die Bearbeitung <strong>der</strong> Subsystem Identification wird eine Hauptansicht auf das System<br />
mit den Subsystemen geboten und verschiedene Ansichten auf ein ausgewähltes<br />
Subsystem, wie in Abbildung 5.14 dargestellt. Es gibt eine Detailansicht für die Partitionierung<br />
<strong>der</strong> Analyseobjekte, indem Parts im Subsystem erstellt werden, eine Ansicht<br />
für das Verteilen von Interfaces auf Ports, um damit die Nachrichten zwischen<br />
Repräsentanten zu berücksichtigen, und eine Ansicht für die Bewertung durch Metriken.<br />
System-Ansicht In <strong>der</strong> Hauptansicht können Subsysteme erstellt, umbenannt und<br />
gelöscht werden. Das Selektieren eines Subsystems aktualisiert den Inhalt <strong>der</strong> Subsystemansichten.<br />
Jede Detailansicht wird durch einen Kartenreiter realisiert und implementiert<br />
eine abstrakte Schnittstelle, über welche die aktuelle Subsystemauswahl<br />
71
5 Methodenunterstützung<br />
in <strong>der</strong> oberen Systemansicht zu den Subsystemansichten propagiert wird. Durch diese<br />
Nachricht kann jede Detailansicht ihren Inhalt gemäß dem gewählten Subsystem<br />
anpassen.<br />
Abbildung 5.14: Aufgabenspezifische Seite <strong>zur</strong> Partitionierung <strong>der</strong> Analyseobjekte<br />
Parts-Ansicht In <strong>der</strong> Parts-Ansicht werden die zu partitionierenden Analyseobjekte<br />
auf <strong>der</strong> linken Seite durch eine Baumstruktur angezeigt. Die bereits auf Subsysteme<br />
verteilten Objekte werden in dem Ordner Assigend zusammengefasst und die noch zu<br />
verteilenden entsprechend im Ordner Remaining. Jedes Analyseobjekt wird durch die<br />
Angabe seines Identifier dargestellt. Die Repräsentanten eines Analyseobjekts werden<br />
als untergeordnete Knoten in die Ansicht eingefügt. Durch einen einfachen drag&drop<br />
Mechansimus können Analyseobjekte aus <strong>der</strong> Gruppe Remaining einem selektierten<br />
Subsystem durch das „Ziehen“ <strong>der</strong> Elemente auf die rechte Seite zugeordnet werden.<br />
Die Parts <strong>der</strong> Subsysteme werden auf <strong>der</strong> rechten Seite als untergeordnete Knoten des<br />
betrachteten Subsystems angezeigt. Auch diese Elemente können umbenannt, gelöscht<br />
o<strong>der</strong> einem an<strong>der</strong>en Subsystem zugewiesen werden. Letzteres ist ebenfalls durch einen<br />
drag&drop Mechanismus realisiert. Parts eines Subsystems können auf <strong>der</strong> rechten<br />
Seite ausgewählt und an<strong>der</strong>en Subsystemen über die Systemansicht zugeteilt werden.<br />
72
5.2 Unterstützung <strong>der</strong> Subsystem Identification<br />
Abbildung 5.15: Abbilden <strong>der</strong> Nachrichten auf Interfaces und Ports<br />
Ports-Ansicht Neben <strong>der</strong> Abbildung <strong>der</strong> Analyseobjekte auf Parts <strong>der</strong> Subsystemen,<br />
müssen, wie in Abschnitt 5.2.1 erläutert, die Nachrichten zwischen Objekten<br />
verschiedener Subsysteme durch Interfaces im Entwurf wi<strong>der</strong>gespiegelt werden. Abbildung<br />
5.15 zeigt den Inhalt <strong>der</strong> entsprechenden Detailansicht. Ähnlich wie bei Analyseobjekten<br />
und Parts werden für Nachrichten Interfaces erstellt, wenn diese einem<br />
modellierten Port zugewiesen werden. Die Entscheidung, ob es sich bei dem neuen<br />
Interface-Element um ein required o<strong>der</strong> provided Interface handelt, kann unmittelbar<br />
durch das Werkzeug getroffen werden, da die Richtung <strong>der</strong> Nachricht lediglich davon<br />
abhängt, ob sich das sendende o<strong>der</strong> das empfangende Objekt im aktuellen Subsystem<br />
befindet. Es werden nur diejenigen Nachrichten auf <strong>der</strong> linken Seite repräsentiert, <strong>der</strong>en<br />
Empfänger o<strong>der</strong> Sen<strong>der</strong> im aktuell betrachteten Subsystem liegen. Sollten beide<br />
Objekte im gleichen Subsystem liegen, ist keine Abbildung auf Interfaces notwendig.<br />
Nach <strong>der</strong> Definition eines festen Rahmens für mögliche Aufgabenunterstützungen und<br />
<strong>der</strong> Beschreibung einer konkrete Unterstützung für die Subsystem Identification in diesem<br />
Kapitel, wird im Anschluß die Umsetzung <strong>der</strong> Prozessintegration vorgestellt.<br />
73
5 Methodenunterstützung<br />
74
6 Prozessintegration<br />
Die Kapitel 4 als Teil <strong>der</strong> Vision beschriebenen Aspekte einer möglichen Prozessintegration,<br />
werden in diesem Kapitel aufgegriffen und analysiert, um im Anschluß sowohl<br />
die konzeptionelle als auch die technische Lösung zu präsentieren. Die Prozessintegration<br />
beinhaltet die folgenden zwei Punkten:<br />
1. Prozessbeschreibung: Auf <strong>der</strong> Basis von HTML-Dateien kann ein Beschreibung<br />
von MeDUSA in das Eclipse-Hilfesystem integriert werden. Für diese <strong>Erweiterung</strong><br />
ist neben <strong>der</strong> Erstellung <strong>der</strong> eigentlichen Inhalte die Bereitstellung einer<br />
Navigationsstruktur erfor<strong>der</strong>lich, mit <strong>der</strong> die Inhalte referenziert werden können<br />
(vgl. Abbildung 6.1, rechte Seite).<br />
2. Ablaufmodellierung: Eine Durchführung des MeDUSA-Prozesses soll durch die<br />
Ausführung von CheatSheets ermöglicht werden (vgl. Abb. 6.1, linke Seite). Für<br />
jede Aufgabe wird kontextabhängig eine Hilfe angeboten, mit <strong>der</strong> die entsprechenden<br />
Inhalte <strong>der</strong> Prozessbeschreibung referenziert werden können.<br />
6.1 Analyse<br />
Abbildung 6.1: CheatSheets und Prozessbeschreibung<br />
Die Erstellung <strong>der</strong> CheatSheets und <strong>der</strong> Prozessbeschreibung (in Form von HTML-<br />
Dateien) wäre wohl sehr aufwändig, wenn die Realisierung bei<strong>der</strong> Konzepte ohne weitere<br />
Hilfsmittel durchgeführt werden müsste. Än<strong>der</strong>ungen an <strong>der</strong> MeDUSA-Methode<br />
wären in beiden Arbeitsergebnissen entsprechend zu aktualisieren, so dass eine schlechte<br />
Wartbarkeit vorläge. Im folgenden Abschnitt wird daher untersucht, wie ein Modell<br />
75
6 Prozessintegration<br />
<strong>der</strong> Methode erstellt werden kann, um daraus sowohl die Prozessbeschreibung als auch<br />
die CheatSheets generieren zu können (vgl. Abbildung 6.2).<br />
Abbildung 6.2: Generieren <strong>der</strong> Prozessbeschreibung und des Ablaufmodells<br />
Durch die automatisierte Erstellung unter <strong>der</strong> Verwendung eines speziellen Modells<br />
wird die Än<strong>der</strong>barkeit verbessert, denn durch das erneute Generieren <strong>der</strong> Arbeitsergebnisse<br />
würden Modifikationen des Modells unmittelbar berücksichtigt werden. Zusätzlich<br />
könnte ein Nutzen im Sinne <strong>der</strong> Wie<strong>der</strong>verwendung gezogen werden, da dieser<br />
Vorgang auch für an<strong>der</strong>e Prozessmodelle durchgeführbar wäre. Der beschriebene Ansatz<br />
würde die Umsetzung eines Werkzeuges herbeiführen, das kein Bestandteil <strong>der</strong><br />
eigentlichen Prozessintegration darstellt, mit dem aber sehr wohl die Erstellung <strong>der</strong><br />
CheatSheets und Prozessbeschreibung automatisiert und werkzeuggestützt durchgeführt<br />
werden kann.<br />
6.1.1 Modellierung von Entwicklungsprozessen<br />
Entwicklungsprozesse bestehen im Wesentlichen aus vier Elementen: in einer speziellen<br />
Rolle bearbeitet ein Softwareentwickler Aufgaben, in denen er Arbeitsergebnisse<br />
produziert (vgl. Abbildung 6.3). Die Bearbeitung <strong>der</strong> verschiedenen Aufgaben erfolgt<br />
dabei nach einem bestimmten Ablauf (Workflow).<br />
Abbildung 6.3: Kollaboration Rolle, Arbeitsergebnis und Aufgabe [SPE05]<br />
Für die Modellierung von Prozessen gibt es unterschiedliche Notationen und Begriffsmodelle.<br />
Prozesse, bzw. die darin enthaltenen zeitlichen Abläufe, werden oft durch<br />
grafische Notationen modelliert. Für die Realisierung von geschäftlichen Prozessen<br />
in <strong>der</strong> Betriebswirtschaftslehre wird die so genannte Business Process Management<br />
76
6.1 Analyse<br />
Notation (BPMN) verwendet. Prozesse können auf einem Application-Server anhand<br />
des erstellten Modells ausgeführt werden. Dieser Ansatz ist allerdings nicht mit dem<br />
Werkzeug <strong>ViPER</strong> vereinbar und somit für den betrachteten Kontext nicht von Relevanz.<br />
In <strong>der</strong> Softwaretechnik werden für die Modellierung von Prozessen beispielsweise<br />
Flußdiagramme o<strong>der</strong> UML-Aktivitätsdiagramme verwendet, wobei <strong>der</strong> Schwerpunkt<br />
auf <strong>der</strong> Ablaufbeschreibung liegt.<br />
Eine an<strong>der</strong>e Herangehensweise bildet die Modellierung entlang des Software Process<br />
Engineering Metamodels (SPEM). Im Vor<strong>der</strong>grund dieses Metamodells steht nicht die<br />
Ablaufmodellierung, son<strong>der</strong>n vielmehr die Beschreibung eines gesamten Prozessmodells.<br />
Die nächste Version dieser Spezifikation soll sich auf die Unified Method Architecture<br />
(UMA) stützen. UMA stammt zu großen Teilen aus <strong>der</strong> Industrie und wurde<br />
von einigen namhaften Firmen entwickelt.<br />
Hinsichtlich <strong>der</strong> oben genannten Elemente <strong>der</strong> Prozessmodellierung wird zunächst die<br />
Ausdrucksstärke von UML-Aktivitätsdiagramme untersucht und im Anschluss SPEM<br />
und UMA vorgestellt.<br />
UML (Aktivitätsgraphen)<br />
Die UML wurde bereits im Abschnitt 2.2 als Beschreibungssprache vorgestellt. Sie<br />
stellt diverse Sprachpakete und Diagrammtypen <strong>zur</strong> Verfügung, mit denen Softwaresysteme<br />
sowohl aus einer statischen als auch aus einer dynamischen Sicht beschrieben<br />
werden können. Aktivitätsdiagramme bilden eine grafische Notation <strong>der</strong> UML<br />
für Aktivitätsgraphen, durch die dynamisches Verhalten geeignet dargestellt werden<br />
kann[Obj07], um z. B. Algorithmen und Geschäftsprozesse zu modellieren [Bal01]:<br />
An activity state represents the execution of statements in a procedure or<br />
the performance of an activity in a workflow. [Rum99]<br />
Aktivitätsdiagramme bestehen aus Aktionszuständen, Zustandsübergängen, Entscheidungspunkten<br />
und Synchronisationsbalken. Ein Aktionszustand wird genau dann verlassen,<br />
wenn die mit ihm verbundene Verarbeitung beendet ist [Rum99]. Mittels Entscheidungspunkten<br />
an Zustandsübergängen kann eine Verzweigung des Kontrollflusses<br />
(in Abhängigkeit von Bedingungen) spezifiziert werden. Nebenläufigkeit <strong>der</strong> Verarbeitungsschritte<br />
kann durch den fork- und join-Synchronisationsbalken modelliert<br />
werden, um eine Aufteilung bzw. Zusammenführung des Kontrollflusses abzubilden<br />
[Bal01].<br />
Aufgaben eines Entwicklungsprozesses könnten also durch Aktivitäten (Aktionszuständen)<br />
repräsentiert werden. Für die Modellierung von Aufgaben, die von einer Rolle<br />
gleichzeitig bearbeitet werden können, eignet sich die Verwendung von den genannten<br />
forks und joins <strong>zur</strong> Modellierung <strong>der</strong> Nebenläufigkeit.<br />
77
6 Prozessintegration<br />
Es besteht die Möglichkeit, dass die „ [. . . ] Aktions-Zustände eines Aktivitätsdiagramms<br />
[. . . ] in »Schwimmbahnen« (swim lanes) angeordnet werden, um die Verantwortung<br />
für diese Aktionen Klassen o<strong>der</strong> organisatorischen Einheiten zuzuordnen.“<br />
[Bal01] Durch swim lanes könnten also Rollen repräsentiert werden.<br />
Damit bestünde die Möglichkeit, Rollen, Aufgaben und die damit verbundenen Abläufe<br />
in einem Aktivitätsdiagramm zu erfassen. Neben ein paar technischen Problemen,<br />
wie <strong>der</strong> Darstellung von Arbeitsergebnissen, birgt die Modellierung mit einer <strong>der</strong>artigen<br />
grafischen Notation allerdings ein schwerwiegendes Problem, da keine klare Semantik<br />
des Modellierten vorliegt. Beispielsweise ist nicht klar, was ein Aktionszustand<br />
genau repräsentiert: eine Aufgabe, eine Aktivität o<strong>der</strong> eine Phase? Des weiteren können<br />
lediglich die Bestandteile des Prozesses bzw. <strong>der</strong> Methode dargestellt werden, eine<br />
Beschreibung <strong>der</strong> jeweiligen Elemente ist nicht möglich.<br />
Es fehlt also ein semantischer Rahmen und eine Terminologie <strong>zur</strong> allgemeinen Beschreibung<br />
von Prozessmodellen. Diese Sichtweise wird von den folgend beschriebenen<br />
Metamodellen aufgegriffen.<br />
SPEM 1.0<br />
Heutzutage gibt es diverse Methoden und Prozesse <strong>zur</strong> Durchführung eines Softwareentwicklungsprojekts.<br />
Die unterschiedlichen Metamodelle, aber auch die sich teilweise<br />
wi<strong>der</strong>sprechenden Begrifflichkeiten, machen es fast unmöglich, eine Kombination<br />
von Konzepten o<strong>der</strong> best practices verschiedener Methoden für ein einzelnes Projekt<br />
zu nutzen. Die Object Management Group (OMG) versucht deshalb seit dem Jahr 2002<br />
mit dem Software Process Engineering Metamodel (SPEM), dieser entstandenen Diskrepanz<br />
zu begegnen [Gau06].<br />
Ziel von SPEM ist die Einführung einer einheitlichen und allgemeingültigen Terminologie<br />
und Semantik <strong>zur</strong> Beschreibung von Methoden und Entwicklungsprozessen.<br />
Die Spezifikation [SPE05] macht sehr deutlich, dass das Metamodell vornehmlich <strong>der</strong><br />
Beschreibung eines Prozesses und nicht <strong>der</strong> Planung o<strong>der</strong> Durchführung eines Projekts<br />
dienen soll. Das zentrale Konzept wird durch den in Abbildung 6.3 betrachteten<br />
Zusammenhang von Rolle, Aufgabe und Arbeitsergebnissen gebildet.<br />
Obwohl das SPEM Metamodell als UML 1.4 Profil verfügbar ist und damit potentiell<br />
jedes UML 1.4-konforme Werkzeug <strong>zur</strong> Modellierung verwendet werden kann, wurde<br />
in <strong>der</strong> Praxis kein damit modellierter Prozess veröffentlicht [Gau06]. Des Weiteren<br />
erfolgte auch keine Realisierung eines Werkzeuges, mit dem explizit die Modellierung<br />
von Prozessen unterstützt werden sollte. Im Jahr 2005 wurde die Spezifikation mit<br />
kleinen Än<strong>der</strong>ungen in <strong>der</strong> Version 1.1 veröffentlicht, die sich ebenfalls nicht in <strong>der</strong><br />
Praxis hat durchsetzen können [SPE07].<br />
78
SPEM 2.0 / UMA<br />
6.1 Analyse<br />
Die OMG hat im November 2004 dazu aufgerufen, Vorschläge für SPEM 2.0 ein<strong>zur</strong>eichen<br />
[SPE07]. Die Unified Method Architecture (UMA) bildet die Basis für die<br />
Einreichung <strong>der</strong> Firmen Adaptive Ltd., Fujitsu & Fujitsu Consulting, Fundacion European<br />
Software Institute, IBM Corporation und Softeam. Nach dem aktuellen Stand<br />
wird sich die neue Spezifikation zu großen Teilen auf das UMA-Metamodell stützen<br />
[Hau07], und im Oktober 2007 veröffentlicht werden [SPE07].<br />
Im Folgenden werden die grundlegenden Konzepte und ein Teil <strong>der</strong> Terminologie vorgestellt.<br />
Ein umfangreiche Übersicht <strong>der</strong> Terminologie mit jeweiligen Übersetzungen<br />
und dem Vergleich zu Begriffen vorhandener Entwicklungsprozessmodelle wurde aus<br />
[Gau06] übernommen und kann am Ende dieses Kapitels auf <strong>der</strong> Seite 97 betrachtet<br />
werden.<br />
Abbildung 6.4: Trennung von Methodeninhalt und Prozess (Quelle: [Hau07])<br />
Trennung von Methodeninhalt und Prozess Das grundlegende Prinzip von<br />
UMA ist die strikte Trennung des Methodeninhalts von dem Prozess, wie Abbildung<br />
6.4 verdeutlichen soll. Während <strong>der</strong> Methodeninhalt die Aufgaben, Rollen und Arbeitsergebnisse<br />
beinhaltet und Disziplinen für <strong>der</strong>en Gruppierung bereitstellt, definiert<br />
<strong>der</strong> Prozess die zeitliche Abfolge <strong>der</strong> einzelnen Aufgaben unter Verwendung von <strong>It</strong>erationen,<br />
Phasen und Aktivitäten. Durch die Betrachtung des Methodeninhalts und des<br />
Prozesses als unabhängige Dimensionen, werden die Elemente bei<strong>der</strong> Kategorien nicht<br />
nur strukturell von einan<strong>der</strong> getrennt, son<strong>der</strong>n es besteht zusätzlich die Möglichkeit,<br />
identische Methodeninhalte durch verschiedene Prozessen zu referenzieren. Dadurch<br />
kann eine Wie<strong>der</strong>verwendung <strong>der</strong> Methodeninhalte und damit eine Verringerung von<br />
Redundanzen gewährleistet werden.<br />
Prozess Das wichtigste Element bei <strong>der</strong> Modellierung von Prozessen ist die Aktivität.<br />
Eine Aktivität kann an<strong>der</strong>e Aktivitäten beinhalten, aber auch Meilensteine definieren<br />
o<strong>der</strong> beispielsweise Aufgaben und Rollen aus dem Methodeninhalt referenzieren.<br />
UMA definiert darauf aufbauend verschiedene Typen von Aktivitäten [SPE07]:<br />
79
6 Prozessintegration<br />
• Phase: „Eine Phase repräsentiert eine Periode in einem Projekt, <strong>der</strong>en Ende<br />
durch bedeutende Kontrollpunkte des Managements, einen Meilenstein o<strong>der</strong> einer<br />
Menge fertigzustellen<strong>der</strong> Ergebnisse definiert ist.“<br />
• <strong>It</strong>eration: „Eine <strong>It</strong>eration gruppiert eine Menge von Aktivitäten, die mehrfach<br />
wie<strong>der</strong>holt werden können. Sie repräsentiert also ein wichtiges strukturelles Element,<br />
um Aktivitäten in einem iterativen Zyklus zu organisieren.“<br />
• Prozess: „Ein Prozess ist eine spezielle Aktivität, die eine Struktur für eine spezielle<br />
Art von Entwicklungprojekten o<strong>der</strong> Teilen von solchen beschreibt.“<br />
Die Modellierung einer Aktivität und damit auch die eines Prozesses wird auf zwei<br />
Stufen durchgeführt. Wie Abbildung 6.5 verdeutlicht wird <strong>der</strong> Prozess zunächst als<br />
eine Hierarchie von Aktivitäten, Phasen und <strong>It</strong>erationen durch einen Arbeitsstrukturbaum<br />
repräsentiert. Die zeitlichen Abläufe <strong>der</strong> referenzierten Aufgaben und untergeordenten<br />
Aktivitäten können des Weiteren durch Aktivitätsdiagramm beschrieben werden.<br />
Wohlbemerkt wird das im Abschnitt 6.1.1 hervorgehobene Problem einer fehlenden<br />
Semantik <strong>der</strong> Aktionszustände durch die Anwendung des UMA-Metamodells<br />
behoben.<br />
Abbildung 6.5: Arbeitsstrukturbaum und Aktivitätsdiagramm einer Aktivität<br />
Wie<strong>der</strong>verwendbare Aktivitäten können durch Prozessmuster definiert werden, die in<br />
dem Arbeitstrukturbaum eines Prozesses an verschiedenen Stellen durch die Angabe<br />
des Aktivitätstypen (Aktivität, Phase, <strong>It</strong>eration) eingesetzt werden können.<br />
Das Referenzieren des Methodeninhalts in Prozesselementen wird durch den Einsatz<br />
von Deskriptoren im Arbeitsstrukturbaum ermöglicht, die anstelle des eigentlichen<br />
Elements eingesetzt werden. In Abbildung 6.5 werden beispielsweise Aufgaben indirekt<br />
durch die Verwendung von Aufgabendeskriptoren eingefügt. Die Eigenschaften<br />
referenzierter Elemente können durch Deskriptoren für eine spezielle Verwendung erweitert<br />
o<strong>der</strong> verän<strong>der</strong>t werden, wobei das ursprüngliche Element unverän<strong>der</strong>t bleibt.<br />
80
6.1 Analyse<br />
Hilfestellungen Hilfestellungen dienen <strong>der</strong> Bereitstellung von zusätzlichem Material<br />
für die Beschreibung an<strong>der</strong>er Elemente und sind deshalb sowohl Bestandteil des<br />
Methodeninhalts als auch des Prozesses. Genau wie bei dem Aktivitäten-Element gibt<br />
es für eine Hilfestellung verschieden Ausprägungen. Ein vordefinierter Typ einer Hilfestellung<br />
ist <strong>der</strong> Werkzeugmentor, durch dessen Nutzung eine Bedienungsanleitung<br />
für ein Werkzeug, das bei <strong>der</strong> Bearbeitung von Aufgaben verwendet wird, erstellt werden<br />
kann. Es besteht dann die Möglichkeit, einen modellierten Werkzeugmentor durch<br />
die entsprechenden Aufgabe zu referenzieren.<br />
Methodenbibliothek und Konfiguration Der Methodeninhalt und die Prozesse<br />
werden durch eine Methodenbibliothek zusammenfasst. Für die konkrete Verwendung<br />
eines Prozessmodells in einem Projekt können durch eine Methodenkonfiguration<br />
beliebige Elemente <strong>der</strong> Methodenbibliothek gewählt und projektspezifisch angepasst<br />
werden. Auch bei dieser Referenzierung an<strong>der</strong>er Elemente bleiben die ursprünglichen<br />
Elemente unverän<strong>der</strong>t.<br />
Zusammenfassung UMA stellt also eine Begriffshierarchie für die Modellierung<br />
von Methoden und Entwicklungsprozessen <strong>zur</strong> Verfügung und erklärt wie Methodeninhalte<br />
für verschiedene Prozessmodelle verwendet werden können. Die statische<br />
Struktur des Prozesses wird durch Arbeitsstrukturbäume definiert; die zeitliche Abfolge<br />
durch Aktivitätsdiagramme. Aus dem Methodeninhalt und dem Prozess kann<br />
schließlich für ein konkretes Projekt eine Konfiguration erstellt werden.<br />
Die Modellierung auf Basis des UMA Metamodells wird aktuell durch den EPF-<br />
Composer unterstützt, <strong>der</strong> Teil des Eclipse Process Framework (EPF) ist.<br />
Eclipse Process Framework (EPF)<br />
Das Eclipse Process Framework (EPF) ist ein Eclipse-Technologieprojekt, das sich<br />
<strong>der</strong> Entwicklung eines Modellierungswerkzeuges (dem EPF-Composer) auf <strong>der</strong> Basis<br />
des UMA-Metamodells widmet und sich zusätzlich mit <strong>der</strong> (Re-)Modellierung vorhandener<br />
Entwicklungsprozesse beschäftigt [EPF]. Zum aktuellen Zeitpunkt werden<br />
Methodenbibliotheken für Scrum, XP und OpenUP 1 angeboten.<br />
Der EPF-Composer nutzt das gesamte UMA-Metamodell und ermöglicht damit neben<br />
dem Modellieren von Methodeninhalt und Prozessen innerhalb einer Methodenbibliothek<br />
das Erstellen einer Methodenkonfiguration im Sinne des Tailoring. Das erstellte<br />
Modell des Prozesses, bzw. die Methodenkonfiguration als projektspezifische Anpassung,<br />
kann in das HTML-Format exportiert werden, so dass eine Betrachtung <strong>der</strong> generierten<br />
Prozessbeschreibung durch einen geeigneten Browser ermöglicht wird. Beispielhaft<br />
wird in Abbildung 6.6 die Beschreibung des OpenUP-Modells gezeigt. Die<br />
Verwendung des EPF-Composer orientiert sich im Wesentlichen an dem beschriebe-<br />
1 eine minimale, aber frei verfügbare Version des RUP<br />
81
6 Prozessintegration<br />
Abbildung 6.6: Exportierte HTML-Seiten des OpenUP (Quelle: [EPF])<br />
nen Metamodell und wird nicht näher erläutert. Wichtig für die folgende Betrachtung<br />
ist jedoch die Tatsache, dass für jedes Prozesselement eine eigene HTML-Ressource<br />
generiert wird.<br />
6.2 Konzept<br />
Für die Realisierung <strong>der</strong> Prozessintegration hat die Verwendung des UMA-Modells<br />
und des EPF-Composers insbeson<strong>der</strong>e durch den HTML-Export einen hohen Nutzen.<br />
Aus einer konzeptionellen Sicht muss entschieden werden, wie ein mit UMA modellierter<br />
Prozess (z. B. MeDUSA) auf die Navigationsstruktur des Eclipse-Hilfesystems<br />
und die CheatSheets abgebildet werden kann. Der aus <strong>der</strong> Navigationsstruktur referenzierte<br />
Inhalt könnte durch die generierten HTML-Ressourcen geprägt werden. Beide<br />
Abbildungen werden zunächst durch mathematische Funktionen definiert. Im Anschluss<br />
wird vorgestellt, wie die Schnittstelle <strong>der</strong> Prozessintegration und Methodenunterstützung<br />
realisiert werden kann, um später aus den CheatSheets die Gegenstände<br />
<strong>der</strong> Methodenunterstützung - die TaskWizards - aufrufen zu können.<br />
82
6.2.1 Abbildung auf die Navigationsstruktur<br />
6.2 Konzept<br />
Die Abbildung eines UMA-Modells auf die Navigationsstruktur des Eclipse-Hilfesystems<br />
ist eine Funktion mit <strong>der</strong> folgenden Signatur:<br />
fuma2help : MUMA → GT OC<br />
(6.1)<br />
Der Ursprung MUMA ist die Menge aller konform zum UMA-Metamodell definierten<br />
Modelle. Die Menge aller Navigationsstrukturen des Eclipse-Hilfesystems ist <strong>der</strong><br />
Bildbereich und wird mit MT OC bezeichnet. Der Aufbau des UMA-Metamodells wurde<br />
bereits im Abschnitt 6.1.1 erläutert, so dass an dieser Stelle lediglich <strong>der</strong> Aufbau<br />
<strong>der</strong> Navigationsstruktur vorgestellt wird.<br />
Abbildung 6.7: Beispiel einer Navigationsstruktur<br />
Aufbau <strong>der</strong> Navigationstruktur<br />
Die Navigationstruktur des Eclipse-Hilfesystems wird durch eine Sprache über einer<br />
seitens Eclipse definierten Grammatik festgelegt. Die Struktur beinhaltet so genannte<br />
toc-Elemente (table-of-contents), die ihrerseits topic-Elemente enthalten können.<br />
Durch die topic-Elemente werden einerseits die darzustellenden HTML Inhalte referenziert.<br />
An<strong>der</strong>erseits kann jedes topic-Elemente wie<strong>der</strong>um beliebig viele gleichartige<br />
83
6 Prozessintegration<br />
Elemente beinhalten, so dass eine Verschachtelung <strong>der</strong> topic Elemente von beliebiger<br />
Tiefe bewirkt werden kann.<br />
Abbildung 6.7 zeigt beispielhaft eine Navigationsstruktur mit zugehöriger Definition<br />
auf <strong>der</strong> Basis <strong>der</strong> angesprochenen XML-Grammatik. Das toc-Element „MeDUSA Delivery<br />
Process“ auf <strong>der</strong> linken Seite enthält ineinan<strong>der</strong> verschachtelte topic-Elemente<br />
<strong>zur</strong> Repräsentierung von Phasen und <strong>It</strong>erationen. Die dargestellte HTML-Seite wird<br />
von dem markierten topic-Element referenziert.<br />
Abbildung 6.8: Abbildung des MeDUSA-Modells auf das Hilfesystem<br />
Zuordnungsvorschrift<br />
Die konzeptionelle Abbildung eines UMA-Modells auf die Navigationstruktur des Hilfesystems<br />
ist im Wesentlichen eine identische Abbildung des Arbeitsstrukturbaums.<br />
Für die ineinan<strong>der</strong> verschachtelten Aktivitäten, ausgehend vom Prozess selbst als toc-<br />
84
6.2 Konzept<br />
Element, muss analog eine Hierarchie von Navigationsknoten (topic-Elemente) erstellt<br />
werden, die jeweils die Inhalte <strong>der</strong> entsprechenden Aktivitäten bzw. Aufgaben in die<br />
Navigationsstruktur einbinden. Abbildung 6.8 zeigt beispielhaft eine <strong>der</strong>artige Abbildung.<br />
6.2.2 Abbildung auf CheatSheets<br />
Die Repräsentierung eines Prozessmodells durch die Navigationsstruktur des Hilfesystems<br />
gestaltet sich als sehr einfach, da bei beiden Metamodellen eine Verschachtelung<br />
beliebiger Tiefe vorgenommen werden kann. Die Abbildung auf CheatSheets ist etwas<br />
komplizierter und unterliegt einigen Einschränkungen. Die Signatur <strong>der</strong> zugehörigen<br />
Funktion ist folgen<strong>der</strong>maßen definiert:<br />
fuma2cs : MUMA → GCS<br />
(6.2)<br />
Der Ursprung MUMA ist wie<strong>der</strong>um die Menge aller Modelle, die konform zu dem<br />
UMA-Metamodell sind. Der Bildbereich GCS ist die Menge aller CheatSheets und<br />
Composite-CheatSheets, die entsprechend ihrer Grammatiken definiert sind. Zunächst<br />
wird <strong>der</strong> Aufbau <strong>der</strong> (Composite-)Cheatsheets vorgestellt und anschließend die Zuordnungsvorschrift<br />
von fuma2cs informal beschrieben.<br />
Abbildung 6.9: Beispiel eines CheatSheets<br />
85
6 Prozessintegration<br />
Aufbau <strong>der</strong> (Composite-) CheatSheets<br />
Composite-CheatSheets als auch die CheatSheets werden jeweils durch eine eigene<br />
XML-Grammatik definiert. Der Aufbau eines Composite-CheatSheet ist im Wesentlichen<br />
durch die Anwendung eines Composite-Entwurfsmuster ([LL06]) bestimmt. Es<br />
beinhaltet entwe<strong>der</strong> genau ein task- o<strong>der</strong> genau ein taskGroup-Element. Während die<br />
mit den task-Elemente CheatSheets referenziert werden, können taskGroup-Elemente<br />
beliebig viele an<strong>der</strong>e task- o<strong>der</strong> taskGroup-Elemente beinhalten.<br />
Analog zum Aufbau <strong>der</strong> Navigationsstruktur in Abbildung 6.7 wird in Abbildung<br />
6.9 <strong>der</strong> Aufbau eines einfachen Composite-CheatSheets dargestellt (oben), mit dem<br />
ein CheatSheet (unten) referenziert wird. Im oberen Teil ist die Verschachtelung <strong>der</strong><br />
taskGroup-Elemente ersichtlich.<br />
Wenn für ein CheatSheet eingebettete Aktionen, wie ein Command zum Starten eines<br />
Wizards, eingesetzt werden, beschränkt sich die Anzahl <strong>der</strong> modellierbaren Hierarchiestufen<br />
dieses CheatSheets auf maximal zwei Stufen. Im unteren Teil <strong>der</strong> Abbildung<br />
6.9 ist ein referenziertes CheatSheet mit dem zugehörigen Quelltext dargestellt. Ein<br />
CheatSheet beinhaltet beliebig viele item-Elemente. Jedes item-Element kann höchstens<br />
ein sub<strong>It</strong>em-Element beinhalten. Somit wird aus konzeptioneller Sicht durch die<br />
sub<strong>It</strong>em-Elemente keine weitere Hierarchiestufe definiert, auch wenn es im Quelltext<br />
als eigenes Element repräsentiert wird (vgl. Abb. 6.9). Die rot markierten Punkte gehören<br />
nicht zu <strong>der</strong> eigentlichen Definition. Sie ersetzen in <strong>der</strong> Darstellung den Identifier<br />
des durch den entsprechenden Commands zu startenden Wizards.<br />
Abbildungsvorschrift<br />
Da CheatSheets bei <strong>der</strong> Verwendung von eingebetteten Aktionen nur die Modellierung<br />
einer zweistufigen Hierarchie erlauben, müssen bei <strong>der</strong> konzeptionellen Abbildung<br />
zwangsläufig Composite-CheatSheets eingesetzt werden, so dass bei <strong>der</strong> Zuordnungsvorschrift<br />
fuma2help nur wenig Spielraum bleibt.<br />
Jede Aktivität, die Aufgaben referenziert, wird auf ein CheatSheet abgebildet, damit<br />
für die referenzierten Aufgaben eine ausführbare Aktion angeboten werden kann.<br />
Abbildung 6.10 zeigt, wie die <strong>It</strong>eration des Architectural Design Modelling auf ein<br />
CheatSheet abgebildet wird. Die vier referenzierten Aufgaben <strong>der</strong> <strong>It</strong>eration werden innerhalb<br />
des CheatSheets durch item-Elemente wie<strong>der</strong>gespiegelt und bieten das Starten<br />
des zugehörigen TaskWizards an. Gleichzeitig wird diese <strong>It</strong>eration aber auch auf ein<br />
task-Element innerhalb des Composite-CheatSheets abgebildet, um das CheatSheet zu<br />
referenzieren.<br />
Die Aktivitäten <strong>der</strong> höheren Hierarchieebenen müssen folglich durch das Composite-<br />
CheatSheet abgedeckt werden, das sich oben rechts im Bild befindet. Zunächst scheint<br />
sich die Abbildung <strong>der</strong> UMA-Modelle auf die CheatSheets als relative einfach zu<br />
gestalten. Allerdings gibt es sowohl durch das UMA-Metamodells bzw. den EPF-<br />
Composer als auch von Seiten <strong>der</strong> CheatSheets einige Einschränkungen.<br />
86
6.2 Konzept<br />
Abbildung 6.10: Abbildung des MeDUSA-Modells auf (Composite-)CheatSheets<br />
Einschränkungen bei <strong>der</strong> Abbildung<br />
Die zeitlichen Abhängigkeiten <strong>der</strong> Aktivitäten und Aufgaben, die durch Aktivitätsdiagramme<br />
spezifiert wurden, werden nicht im UMA-Modell abgelegt. Das hat <strong>zur</strong> Folge,<br />
dass <strong>der</strong> Ablauf nur durch die statische Sicht im Arbeitsstrukturbaum nachempfunden<br />
werden kann. Eine Abbildung <strong>der</strong> zeitlichen Abhängigkeiten <strong>der</strong> Aktivitätsdiagramme<br />
kann für eine Abbildung nicht genutzt werden. Weitere Einschränkungen beziehen<br />
sich auf die Ausdrucksstärke <strong>der</strong> CheatSheets.<br />
Aufgrund <strong>der</strong> Beschaffenheit <strong>der</strong> CheatSheets ist die Abbildung eines Modells nur<br />
dann durchführbar, wenn es keine Aktivitäten beinhaltet, die sowohl an<strong>der</strong>e Aktivitäten<br />
als auch referenzierte Aufgaben enthalten. Interpretiert man (Composite-)CheatSheets<br />
als Bäume, so sind die Knoten von Composite-CheatSheets immer innere Knoten, und<br />
die Knoten von CheatSheets immer Blätter. Würde eine Aktivität im UMA-Modell<br />
sowohl eine Aufgabe als auch eine Aktivität enthalten, so wäre ein inneren Knoten neben<br />
einem Blatt vorhanden, was aber we<strong>der</strong> durch CheatSheets noch durch Composite-<br />
CheatSheets realisierbar ist. Wegen dieser Einschränkung durch die unterschiedlichen<br />
Ausdrucksstärken des UMA-Metamodells und <strong>der</strong> CheatSheet-Grammatik muss die<br />
Abbildung hinsichtlich <strong>der</strong> mit 6.2 definierten Signatur angepasst werden. Der Ursprung<br />
M ′ UMA von fuma2cs wird <strong>der</strong>art eingeschränkt, dass er nur UMA-Modelle<br />
beinhaltet, in <strong>der</strong> keine Aktivität sowohl an<strong>der</strong>e Aktivitäten als auch Aufgaben referenziert:<br />
fuma2cs : M ′ UMA → GCS<br />
(6.3)<br />
87
6 Prozessintegration<br />
6.2.3 Schnittstelle <strong>zur</strong> Methodenunterstützung<br />
Unter Berücksichtigung <strong>der</strong> im letzten Kapitel vorgestellte Methodenunterstützung<br />
und als Grundlage für die Abbildungen <strong>der</strong> Prozessintegration muss im Modell des<br />
Entwicklungsprozesses die Verwendung <strong>der</strong> TaskWizards <strong>zur</strong> Unterstützung <strong>der</strong> einzelnen<br />
Aufgaben berücksichtigt werden. Die Unterstützung einer Aufgabe erfolgt durch<br />
die Realisierung eines spezifischen TaskWizards. Um einen solchen Wizard für jede<br />
Aufgabe aus den CheatSheets heraus starten zu können, wird den Aufgaben im UMA-<br />
Modell ein Werkzeugmentor zugeordnet. Mit dem Werkzeugmentor kann <strong>der</strong> TaskWizards<br />
durch die Angabe eines Identifiers spezifiziert werden. Zusätzlich besteht durch<br />
den Werkzeugmentor die Möglichkeit, die Verwendung <strong>der</strong> aufgabenspezfischen Unterstützung<br />
zu erläutern.<br />
Die Angabe des Wizard-Identifier im Werkzeugmentor ermöglicht bei <strong>der</strong> Abbildung<br />
des UMA-Modells auf die CheatSheets das Erstellen eines Command-Elements (vgl.<br />
Abb. 6.9), mit dem <strong>der</strong> spezifierte Wizard zu einer Aufgabe gestartet werden kann.<br />
6.3 Technische Umsetzung<br />
Für die technische Umsetzung <strong>der</strong> Prozessintegration kann <strong>der</strong> EPF-Composer dahingehend<br />
erweitert werden, dass er neben dem HTML-Export eines erstellten Prozessmodells<br />
ebenfalls die Generierung einer Prozessbeschreibung und eines Ablaufmodells<br />
in Form von CheatSheets anbietet. EPF definiert gerade für eine solche <strong>Erweiterung</strong><br />
einen speziellen Extension-Point.<br />
Zunächst wird die Realisierung <strong>der</strong> CheatSheet-Erstellung und <strong>der</strong> Prozessbeschreibung<br />
inklusive <strong>der</strong> Navigationsstruktur geschil<strong>der</strong>t. Die eigentliche <strong>Erweiterung</strong> des<br />
EPF-Composers unter Nutzung des Extension-Points <strong>zur</strong> Realisierung <strong>der</strong> beschriebenen<br />
Abbildungen wird anschliessend vorgestellt.<br />
6.3.1 Realisierung <strong>der</strong> CheatSheet Erstellung<br />
Die Sprache <strong>der</strong> CheatSheets und Composite-CheatSheets wird jeweils durch eine<br />
Grammtik in <strong>der</strong> Form einer XML Schema Definition (XSD) festgelegt. Die Umsetzung<br />
<strong>der</strong> durch die Signatur 6.3 definierten konzeptionellen Abbildung von UMA-Modellen<br />
muss also Wörter <strong>der</strong> mit dieser Grammatik definierten Sprache MCS erstellen.<br />
Auf <strong>der</strong> technischen Ebene ist diese Abbildung als eine Modell-zu-Code Generierung<br />
g ′ := fuma2cs zu betrachten. Aus einem Modell konform des UMA Metamodells muss<br />
<strong>der</strong> Code eines CheatSheets entsprechend <strong>der</strong> zugehörigen XML-Grammatik generiert<br />
werden. Diese Generierung kann durch zwei sinnvolle Strategien durchgeführt werden.<br />
88
Transformationsstrategie<br />
6.3 Technische Umsetzung<br />
Mit <strong>der</strong> Anwendung einer einfachen Transformationsstrategie könnte eine direkte Generierung<br />
des Ziel-Codes durch einen Lauf über das UML-Modell verfolgt werden.<br />
Um aber die konzeptionelle Abbildung von <strong>der</strong> eigentlichen Code-Generierung und<br />
damit die Semantik und Syntax zu trennen, kann eine komplexere Strategie durch<br />
die Realisierung einer Funktionsvorschrift g ′ als Komposition einer Modell-zu-Modell<br />
Transformation t und einer Modell-zu-Code Generierung g realisiert werden:<br />
g ′ =: g ◦ t (6.4)<br />
Die Trennung <strong>der</strong> Transformation von <strong>der</strong> Code-Generierung erfor<strong>der</strong>t ein zusätzliches<br />
CheatSheet-Metamodell, das im Wesentlichen die Grammatiken <strong>der</strong> (Composite-<br />
) CheatSheets wi<strong>der</strong>spiegelt. Sei MCS die Menge aller Instanzen dieses Metamodells,<br />
dann ist die Signatur <strong>der</strong> Transformation t und Code-Generierung g wie folgt bestimmt:<br />
t : M ′ UMA → MCS<br />
(6.5)<br />
g : MCS → GCS<br />
(6.6)<br />
Durch die klare Trennung <strong>der</strong> konzeptionellen Abbildung von <strong>der</strong> syntaktischen Code-<br />
Erstellung ist mehr Implementierungsaufwand erforlich als bei einer direkten Generierung.<br />
Zum einen muss die Abbildung zweistufig erfolgen, zum an<strong>der</strong>en ist damit die<br />
Erstellung eines CheatSheet-Metamodells erfor<strong>der</strong>lich. Auf <strong>der</strong> an<strong>der</strong>en Seite unterstützt<br />
diese Strategie aber das Verständnis und verbessert die Qualität hinsichtlich <strong>der</strong><br />
Wartbarkeit.<br />
Auf eine detaillierte Beschreibung <strong>der</strong> Grammatik als auch auf eine Erläuterung des<br />
zugehörige Metamodells wird an dieser Stelle verzichtet, da die genaue Syntax <strong>der</strong><br />
CheatSheets für die weitere Betrachtung nicht relevant ist. Stattdessen wird im Folgenden<br />
die Durchführung <strong>der</strong> zweistufigen Strategie durch den Einsatz des oAW Frame<strong>works</strong><br />
(vgl. Abschnitt 2.3.3) geschil<strong>der</strong>t.<br />
Entwurf <strong>der</strong> Transformationsdurchführung<br />
Auf <strong>der</strong> Basis <strong>der</strong> im letzten Abschnitt diskutierten Trennung <strong>der</strong> semantischen und<br />
syntaktischen Abbildung wird nun die technische Umsetzung durch die Verwendung<br />
von oAW beschrieben. Das Framework unterstützt die Modell-zu-Modell Transformation<br />
durch die Sprache xTend und gleichermassen die Modell-zu-Code Generierung<br />
durch die Sprache xPand. Abbildung 6.11 zeigt den gesamten Vorgang <strong>der</strong> Code-<br />
Generierung.<br />
Ausgehend vom UMA-Modell wird ein MCS-Modell durch die Anwendung von Extensions<br />
<strong>der</strong> oAW-Sprache xTend erstellt. Aus diesem Modell wird dann <strong>der</strong> eigentliche<br />
Code durch xPand-templates generiert. Bevor ein Modell für eine Bearbeitung<br />
herangezogen wird, muss die Konsistenz des Modells sichergestellt sein. Während<br />
EPF (bzw. EMF) die Integrität des Modells und die Konformität bezüglich des UMA-<br />
Metamodells gewährleistet, bleibt durch Regeln zu prüfen, dass das UMA-Modell die<br />
89
6 Prozessintegration<br />
Abbildung 6.11: Ablauf <strong>der</strong> Transformation und CheatSheet-Generierung<br />
in Abschnitt 6.2.2 beschriebene Bedingung erfüllt: Eine Aktivität darf nicht an<strong>der</strong>e<br />
Aktivitäten beinhalten und gleichzeitig Aufgaben referenzieren.<br />
Das erstellte CheatSheet-Modell unterliegt keinen Einschränkungen. Aus Gründen <strong>der</strong><br />
Erweiterbarkeit wird aber eine mögliche Validierung im Entwurf berücksichtigt. An<br />
dieser Stelle wird davon abgesehen, den Quelltext <strong>der</strong> einzelnen Extensions und Templates<br />
vorzustellen.<br />
6.3.2 Realisierung <strong>der</strong> Prozessbeschreibung<br />
Der EPF-Composer bietet bereits die Möglichkeit, ein mit UMA erstelltes Prozessmodell<br />
in das HTML-Format zu exportieren. Um nun die Prozessbeschreibung in das<br />
Eclipse-Hilfesystem integrieren zu können, muss die in Abschnitt 6.2.1 beschriebene<br />
Abbildung fuma2help eines UMA-Modells auf eine Navigationsstruktur realisiert<br />
werden.<br />
Da <strong>der</strong> Arbeitsstrukturbaum eines UMA-Modells ordnungserhaltend 2 auf die Knoten<br />
<strong>der</strong> Navigationsstruktur abgebildet wird (vgl. Abbildung 6.8), ist keine Trennung <strong>der</strong><br />
semantischen von <strong>der</strong> syntaktischen Abbildung erfor<strong>der</strong>lich. Der Navigationsstruktur<br />
enthält lediglich gleichartige Knoten, so dass eine zweistufige Transformationsstrategie<br />
nur einen unnötigen Aufwand darstellen würde. Dementsprechend wird eine einfache<br />
Code-Generierung durchgeführt.<br />
Das einzige Problem, das sich bei <strong>der</strong> technischen Realisierung stellt, ist die Bereitstellung<br />
<strong>der</strong> URLs 3 , die für das Referenzieren des Inhaltes durch die Navigationsstruktur<br />
benötigt werden.<br />
2 die Hierarchieordnungen werden beibehalten<br />
3 Uniform Resource Locator, Identifikation einer Ressource über ein Netzwerkprotokoll<br />
90
Verfügbarkeit <strong>der</strong> Inhaltsreferenzen<br />
6.3 Technische Umsetzung<br />
Damit die URLs bei <strong>der</strong> Erstellung <strong>der</strong> Navigationsstruktur bekannt und verfügbar<br />
sind, könnte eine <strong>Erweiterung</strong> des EPF-Composers dafür sorgen, dass während <strong>der</strong><br />
Generierung <strong>der</strong> HTML-Dateien die resultierenden URLs zwischengespeichert werden.<br />
Die xPand-Sprache (und ebenso xTend) erlaubt das Einbinden von Java-Extensions<br />
(vgl. Abschnitt 2.3.3). Somit können die zwischengespeicherten URLs in die Code-<br />
Generierung durch den Zugriff auf statische Java-Methoden einbezogen werden. Gerade<br />
durch dieses Vorgehen können in <strong>der</strong> CheatSheet-Transformation die den Aufgaben<br />
entsprechenden Inhalte <strong>der</strong> Prozessbeschreibung referenziert werden, wie es eingangs<br />
durch die Abbildung 6.1 dargestellt wurde.<br />
Eine Übersicht des Generierungsvorgangs wird nicht explizit geliefert. Der Vorgang<br />
ist eine Vereinfachung des in Abbildung 6.11 dargestellen, da keine Transformation<br />
durchgeführt wird. Zudem ist eine Validierung des UMA-Modells nicht notwendig, da<br />
für die Generierung <strong>der</strong> Navigationsstruktur keine Einschränkungen gelten.<br />
Nachdem nun die beiden Vorgänge <strong>zur</strong> Erstellung <strong>der</strong> CheatSheets und <strong>der</strong> Prozessbeschreibung<br />
erläutert wurden, wird im nächsten Abschnitt die <strong>Erweiterung</strong> des EPF-<br />
Composers vorgestellt, in <strong>der</strong> die beschriebenen Transformationen und Generierungen<br />
eingesetzt werden.<br />
6.3.3 Architektur<br />
In den letzten beiden Abschnitten wurde erklärt, wie das oAW Framework für die einzelnen<br />
Abbildungen genutzt werden kann. Die technische Realisierung könnte ebenfalls<br />
durch die Nutzung an<strong>der</strong>er Technologien durchgeführt werden. Allerdings hat die<br />
Verwendung von oAW den Vorteil, dass dieses Framework bereits in <strong>ViPER</strong> eingesetzt<br />
wird. Eine Benutzung ist dementsprechend erprobt und erfor<strong>der</strong>t keinen zusätzlichen<br />
Verwaltungsaufwand hinsichtlich des Einsatzes.<br />
Integration von UMA in EPF<br />
Wichtig für die technische Realisierung eines Werkzeuges, mit dem ein modellierter<br />
Prozess auf CheatSheets bzw. auf eine Prozessbeschreibung abgebildet werden<br />
kann, ist die Tatsache, das dass Prozessmodell in einem verwertbaren Format vorliegt.<br />
Wie die Übersicht <strong>der</strong> Architektur in Abbildung 6.12 zeigt, ist das UMA-Metamodell<br />
durch Nutzung des beschriebenen Eclipse Modeling Framework (EMF) 2.3.2 im EPF-<br />
Composer integriert. Somit ist also sichergestellt, dass ein im EPF-Composer erstelltes<br />
Prozessmodell für Modell-zu-Modell Transformationen o<strong>der</strong> Prozess-zu-Code Generierungen<br />
unter Verwendung des oAW Frame<strong>works</strong> herangezogen werden kann.<br />
91
6 Prozessintegration<br />
Abbildung 6.12: Architektur des EPF-Composer [EPF]<br />
Werkzeugkomposition: EPF-Composer und <strong>ViPER</strong>-PF<br />
Prinzipiell soll die Erstellung <strong>der</strong> Prozessbeschreibung und <strong>der</strong> CheatSheets selbst kein<br />
Bestandteil von <strong>ViPER</strong> sein, da lediglich die entstehenden Arbeitsergebnisse für die<br />
Unterstützung von MeDUSA von Relevanz sind. Da <strong>ViPER</strong> aber gerade mit dem Feature<br />
<strong>ViPER</strong> MTF und dem verwendeten Framework oAW die Modelltransformation<br />
auf <strong>der</strong> Basis von EMF unterstützt, ist es durchaus sinnvoll, die von <strong>ViPER</strong> bereitgestellten<br />
Hilfsmittel für die Realisierung einzusetzen. Es wird ein neues Werkzeug<br />
<strong>ViPER</strong> PF (Process Framework) erstellt, das neben dem EPF-Composer Bestandteile<br />
von <strong>ViPER</strong> nutzt, um durch zusätzliche Funktionalität den HTML-Export des EPF-<br />
Composers zu erweitern.<br />
Die in Abbildung 6.13 dargestellte Architektur von <strong>ViPER</strong> beinhaltet ein optionales<br />
Feature bootstrap, das nicht Teil <strong>der</strong> eigentlichen IDE ist, aber für das Arbeiten an<br />
<strong>ViPER</strong> selbst genutzt werden kann. <strong>ViPER</strong> kann also mit diesem Feature in <strong>ViPER</strong><br />
selbst angepasst werden. Die <strong>Erweiterung</strong> von <strong>ViPER</strong> bootstrap schafft die Grundlage<br />
für die Erstellung einer Prozessbeschreibung und CheatSheets, um sie beim eigentlichen<br />
Arbeiten mit <strong>ViPER</strong> nutzen zu können.<br />
Das Feature <strong>ViPER</strong> PF verwendet EPF und das seinerseits genutzte GMF Feature. Die<br />
Generierung <strong>der</strong> Navigationsstruktur <strong>der</strong> Prozessbeschreibung wird in dem Plug-In<br />
uma2cs realisiert, die Transformation und Code-Generierung <strong>der</strong> CheatSheets mit dem<br />
dazugehörigen Metamodell stellt das Plug-In uma2help bereit. Der nächste Abschnitt<br />
erläutert, wie beide Abbildungen mit dem Plug-In publishing durch Verwendung eines<br />
EPF Extension-Points in den Vorgang des HTML-Exports eingebunden werden.<br />
<strong>Erweiterung</strong> des HTML-Exports<br />
Bei <strong>der</strong> Generierung von HTML <strong>zur</strong> Beschreibung eines Prozessmodells im EPF-<br />
Composer wird <strong>der</strong> Benutzer mit Hilfe eines Wizards durch verschiedene Schritte ge-<br />
92
6.3 Technische Umsetzung<br />
Abbildung 6.13: <strong>Erweiterung</strong> von <strong>ViPER</strong> für die Prozessintegration<br />
führt. Der Benutzer wählt diverse Einstellungen, z. B. die zu exportierende Methodenkonfiguration<br />
(die projektspezifische Auswahl <strong>der</strong> Methodenbibliothek, vgl. Abschnitt<br />
6.1.1) und den Zielordner <strong>der</strong> zu generierenden HTML-Dateien. Die so gewählten<br />
Einstellungen werden bei erfolgreicher Beendigung des Wizards an einen PublishManager<br />
übergeben, <strong>der</strong> die Generierung <strong>der</strong> Dateien auf <strong>der</strong> Basis dieser Einstellungen<br />
durchführt.<br />
EPF definiert einen Extension-Point, mit dem einerseits <strong>der</strong> Kontrollfluss bei <strong>der</strong> sequentiellen<br />
Abarbeitung <strong>der</strong> einzelnen Wizard-Seiten durch einen WizardExten<strong>der</strong> übernommen<br />
werden kann, mit dem an<strong>der</strong>erseits aber auch zusätzliche Wizard-Seiten hinzugefügt<br />
o<strong>der</strong> ersetzt werden können. Das publishing Plug-In verwendet beide Mechanismen<br />
dieses Extension-Points. Mit Hilfe einer zusätzlichen Wizard-Seite können,<br />
wie in Abbildung 6.14 dargestellt, relevante Einstellungen vorgenommen werden. Zum<br />
einen ist <strong>der</strong> zu verwendene Prozess auszuwählen, <strong>der</strong> durch die generierten CheatSheets<br />
ausgeführbar ist, zum an<strong>der</strong>en müssen die Zielordner <strong>der</strong> jeweiligen Arbeitsergebnisse<br />
spezifiziert werden.<br />
In Abbildung 6.15 sind sowohl die seitens EPF definierten Klassen (oben), als auch<br />
die für das publishing Plug-In erstellten Klassen (unten) dargestellt. Der für den Export<br />
zuständige PublishManager wird durch den PFPublishManager spezialisiert, um<br />
93
6 Prozessintegration<br />
Abbildung 6.14: Wizard-Seite für die Generierung:CheatSheets, Prozessbeschreibung<br />
neben den HTML-Dateien die Prozessbeschreibung und die CheatSheets zu erstellen.<br />
Dadurch, dass <strong>der</strong> WizardExten<strong>der</strong> im Besitz des Kontrollflusses ist, kann für den<br />
Export anstelle des PublishManagers <strong>der</strong> PFPublishManager eingesetzt werden. Um<br />
zusätzlich die Einstellungen zu kapseln, die auf <strong>der</strong> in Abbildung 6.14 dargestellten<br />
Seite auswählbar sind, wird durch die Klasse PFPublishingOptions die seitens EPF<br />
definierte Klasse PublishingHTMLOptions spezialisiert.<br />
Abbildung 6.15: <strong>Erweiterung</strong> <strong>der</strong> HTML-Exports<br />
Bei <strong>der</strong> Erstellung <strong>der</strong> Navigationsstruktur und <strong>der</strong> CheatSheets müssen die Inhaltsreferenzen<br />
(URLs) <strong>der</strong> Prozessbeschreibung bekannt sein. Für die Erstellung <strong>der</strong> HTML-<br />
Seiten nutzt <strong>der</strong> PublishManager einen HTMLBuil<strong>der</strong>. Um nun die URLs <strong>der</strong> einzelnen<br />
HTML-Seiten zwischenspeichern zu können, wird durch den PFHTMLBuil<strong>der</strong><br />
diejenige Methode überschrieben, mit <strong>der</strong> das Generieren je<strong>der</strong> einzelnen HTML-<br />
Seite angestoßen wird. Wie bereits erwähnt, wird für jedes Prozesselement eine eigene<br />
94
6.4 Durchführung <strong>der</strong> Prozessintegration<br />
HTML-Seite exportiert. In <strong>der</strong> vom PFHTMLBuil<strong>der</strong> überschriebenen Methode ist<br />
also lediglich die <strong>zur</strong>ückgegebene URL zu dem exportierten Element in einem URL-<br />
Cache abzulegen.<br />
Bisher wurde immer angenommen, dass die vom EPF-Composer generierten HTML-<br />
Dateien direkt als Prozessbeschreibung verwendet werden. Allerdings soll <strong>der</strong> Export-<br />
Vorgang durch das publishing Plug-In lediglich erweitert werden, so dass die Generierung<br />
<strong>der</strong> HTML-Seiten zweifach durchgeführt wird:<br />
1. Export des Prozessmodells: Die von EPF vorgesehene Veröffentlichung wird<br />
beibehalten.<br />
2. Erstellen <strong>der</strong> Prozessbeschreibung: Die eingesetzte Funktionalität wird zusätzlich<br />
für die Erstellung <strong>der</strong> Prozessbeschreibung genutzt. Die HTML-Dateien<br />
werden also ein zweites Mal generiert, nun allerdings in einen an<strong>der</strong>en, vom<br />
Benutzer gewählten, Zielpfad (vgl. Abb. 6.14).<br />
Verwendung von <strong>ViPER</strong> MTF<br />
Nach <strong>der</strong> Generierung <strong>der</strong> Prozessbeschreibung wird durch den PFPublishManager<br />
die anschließende Erstellung <strong>der</strong> Navigationsstruktur und <strong>der</strong> CheatSheets angestoßen<br />
und dabei die durch Funktionalität <strong>der</strong> uma2help und uma2cs Plug-Ins verwendet. Der<br />
eigentliche Transformationsvorgang wurde bereits in den Abschnitten 6.3.2 und 6.3.1<br />
beschrieben. Beide Abbildungen werden durch oAW realisiert, indem das <strong>ViPER</strong> MTF<br />
Framework eingesetzt wird, dessen Nutzung bereits im Abschnitt 2.3.6 beschrieben<br />
wurde.<br />
Wohlbemerkt werden die Transformation des UMA-Modells in ein CheatSheet-Modell<br />
und die anschliessende Code-Generierung durch den PFPublishManager hintereinan<strong>der</strong><br />
ausgeführt. Beide Vorgänge können aber auch völlig unabhängig von einan<strong>der</strong><br />
durchgeführt werden. Somit besteht die Möglichkeit, CheatSheets indirekt durch die<br />
Verwendung des mit EMF definierten Metamodells zu generieren, ohne die nötigen<br />
XML-Ressourcen anlegen zu müssen. Mit Eclipse 3.3 wurde diese Tatsache allerdings<br />
überflüssig, da für die Erstellung von CheatSheets ein Editor entwickelt wurde, <strong>der</strong><br />
direkt auf den XML-Ressourcen arbeitet, allerdings <strong>der</strong>en Syntax verbirgt.<br />
6.4 Durchführung <strong>der</strong> Prozessintegration<br />
Die eigentliche Prozessintegration für MeDUSA in <strong>ViPER</strong> kann nun unter Zuhilfenahme<br />
von <strong>ViPER</strong> PF vorgenommen werden. Dafür muss MeDUSA zunächst im EPF-<br />
Composer anhand des UMA-Metamodells definiert werden.<br />
Bereits die Beschreibung von MeDUSA im Kapitel 2 erfolgte unter Verwendung <strong>der</strong><br />
UMA-Terminologie. Der Methodeninhalt wurde vom Prozess separiert und die Aufgaben<br />
<strong>der</strong> verschiedenen Disziplinen geschil<strong>der</strong>t. Auch <strong>der</strong> Aufbau des Prozesses wurde<br />
95
6 Prozessintegration<br />
anhand <strong>der</strong> einzelnen Aktivitätsdiagramme vorgestellt. Dementsprechend kann sich<br />
die Modellierung im EPF-Composer daran anlehnen.<br />
Die analog zu den Disziplinen benannten <strong>It</strong>erationen treten mehrfach auf, so dass für<br />
<strong>der</strong>en Modellierung Prozessmuster (vgl. Abschnitt 6.1.1) verwendet werden können,<br />
die an den entsprechenden Stellen <strong>der</strong> Phasen eingesetzt werden. Beispielsweise ist<br />
die <strong>It</strong>eration Requirements Modelling in je<strong>der</strong> <strong>der</strong> vier Phase vorhanden, muss aber<br />
mit Hilfe <strong>der</strong> Prozessmuster nur ein einziges Mal modelliert werden.<br />
Nach <strong>der</strong> Modellierung können daraus die Prozessbeschreibung (inklusive <strong>der</strong> Navigationsstruktur)<br />
und die CheatSheets generiert und im <strong>ViPER</strong> Plug-In Processes<br />
abgelegt werden (vgl. Abb. 6.13). Für die Verwendung in <strong>ViPER</strong> müssen nur die in<br />
Abschnitt 2.3.1 vorgestellten Extension-Points des Eclipse-Hilfesystems aufgegriffen<br />
werden, um die Navigationsstruktur und die CheatSheets durch Extension in <strong>der</strong> Entwicklungsumgebung<br />
(<strong>ViPER</strong>) zu registrieren.<br />
Damit ist zunächst die Erläuterung <strong>der</strong> konzeptionellen und technischen Lösung für<br />
die Prozessintegration abgeschlossen. Im nächsten Kapitel werden die Ergebnisse <strong>der</strong><br />
Prozessintegration und <strong>der</strong> Methodenunterstützung hinsichtlich verschiedener Qualitätsmerkmale<br />
evaluiert. Im letzten Kapitel wird eine Zusammenfassung und Ausblick<br />
geliefert.<br />
96
6.4 Durchführung <strong>der</strong> Prozessintegration<br />
UMA dt. Übersetzung RUP 2003 V-Modell XT<br />
Methodeninhalt<br />
Role Rolle Role Role<br />
Work Product Arbeitsergebnis(-typ) Produkttype<br />
- Artifact Artefakt Artifact Produkt<br />
- Outcome Resultat<br />
- Deliverable Liefergegenstand<br />
- External Input Externe Zulieferung externes Produkt<br />
Task Aufgabe Activity Teilaktivität<br />
Step Schritt Step<br />
Prozesselemente<br />
Phase Phase Phase Projektabschnitt<br />
<strong>It</strong>eration <strong>It</strong>eration <strong>It</strong>eration<br />
Activity Aktivität Workflow Detail Aktivität<br />
Milestone Meilenstein Entscheindungspunkt<br />
impacted Work beeinflusstes Work Product Produktabhängigkeit<br />
Product Arbeitsergebnis Dependency<br />
Capability Pattern Prozessmuster Vorgehensbaustein<br />
Delivery Process Bereitstellungsprozess Lifecycle / Projektdurch-<br />
Configuration führungsstrategie<br />
Kategorisierung<br />
Discipline Disziplin Discipline Aktivitätsgruppe<br />
Domain Domäne (Artifact Set) Produktgruppe<br />
Role Set Rollenmenge (Role Set)<br />
Tool Werkzeug Tool<br />
Process Family Vorgehensfamilie Projekttyp<br />
Paketierung<br />
Method Library Methodenbibliothek<br />
Method Plug-In Methoden-Plugin Process Model Plug-In<br />
Method Package Methodenpaket Process Component<br />
Content Package Inhaltspaket<br />
Process Component Prozesskomponente<br />
Hilfestellung<br />
Guideline Leitfaden Guideline<br />
Concept Konzept Concept<br />
Whitepaper Informationsschrift Whitepaper<br />
Checklist Checkliste Checklist<br />
Tool Mentor Werkzeugmentor Tool Mentor<br />
Template Schablone Templates<br />
Report Report Report<br />
Estimate Schätzung<br />
Example Beispiel Example<br />
Roadmap Strategieplan Roadmap<br />
Term Definition Glossareintrag Glossary<br />
Practice Verfahrensweise<br />
Tabelle 6.1: Übersicht und Vergleich <strong>der</strong> Terminologien [Gau06]<br />
97
6 Prozessintegration<br />
98
7 Evaluierung<br />
Eine Evaluierung <strong>der</strong> technischen Umsetzung sollte durch die Prüfung von Qualitätsmerkmalen<br />
erfolgen, damit die Zielerfüllung bezüglich konkreter Anfor<strong>der</strong>ungen bewertet<br />
werden kann. Da im Rahmen dieser Arbeit keine festen Vorgaben an die Realisierung<br />
gestellt wurden, wird eine Evaluierung unter Berücksichtigung <strong>der</strong> in Kapitel<br />
4 herausgearbeiteten Anfor<strong>der</strong>ungen vorgenommen.<br />
Abbildung 7.1: Qualitätenbaum nach Boehm, Brown und Lipow (Quelle: [LL06])<br />
In den folgenden drei Abschnitten werden sowohl die Prozessintegration, das dafür<br />
erstellte und genutzte Werkzeug <strong>ViPER</strong> PF, als auch die Methodenunterstützung, einer<br />
Bewertung unterzogen werden, indem anwendbare Qualitätsmerkmale des in Abbildung<br />
7.1 dargestellten (und auf Produktqualitäten reduzierten) Qualitätenbaums berücksichtigt<br />
werden.<br />
Bei <strong>der</strong> Bewertung <strong>der</strong> Warbarkeit wird die Portabilität nicht berücksichtigt. Sie ist<br />
durch die Eclipse-IDE und <strong>ViPER</strong> bestimmt. Die technische Umsetzung <strong>der</strong> Prozessintegration<br />
und Methodenunterstützung unterliegt keinen Einschränkungen hinsichtlich<br />
dieses Qualitätsmerkmals, da im Wesentlichen vorhandene Technologien genutzt<br />
wurden.<br />
7.1 Prozessintegration<br />
Die Prozessintegration wurde durch eine Ablaufmodellierung mittels CheatSheets und<br />
durch eine Prozessbeschreibung realisiert.<br />
99
7 Evaluierung<br />
Än<strong>der</strong>barkeit Anstelle einer programmatischen Lösung wurde <strong>der</strong> Quelltext bei<strong>der</strong><br />
Arbeitsergebnisse durch ein zusätzliches Werkzeug unter Verwendung des Eclipse<br />
Process Frame<strong>works</strong> (EPF) generiert. Dadurch ist eine sehr hohe Än<strong>der</strong>barkeit gewährleistet.<br />
Modifizierungen - auch im Sinne von <strong>Erweiterung</strong>en innerhalb <strong>der</strong> MeDU-<br />
SA Methode werden durch erneutes Generieren automatisch in <strong>der</strong> Prozessbeschreibung<br />
und den CheatSheets berücksichtigt.<br />
Bedienbarkeit Beide Arbeitsergebnisse <strong>der</strong> Prozessintegration sind durch allgemeine<br />
Technologien <strong>der</strong> Eclipse-Benutzerassistenz in das Werkzeug integriert. Damit<br />
ist die Bedienbarkeit als sehr hoch einzustufen. Sowohl das Hilfesystem, als auch die<br />
CheatSheets sind als Standardtechnologien <strong>der</strong> Eclipse-IDE ausführlich dokumentiert<br />
und einfach zu bedienen. Durch die Verknüpfung <strong>der</strong> CheatSheets mit dem Hilfesystem<br />
mittels einer kontextabhängige Referenz wird die Bedienbarkeit zusätzlich erhöht.<br />
7.2 <strong>ViPER</strong> PF<br />
Das Werkzeug <strong>ViPER</strong> PF ist we<strong>der</strong> ein Teil <strong>der</strong> Unterstützung für MeDUSA noch<br />
ein direkter Bestandteil von <strong>ViPER</strong>. Es dient lediglich <strong>der</strong> <strong>Erweiterung</strong> von <strong>ViPER</strong><br />
für die Unterstützung eines Prozesses. Da dieses Nebenprodukt aber auch im Rahmen<br />
dieser Arbeit realisiert wurde, werden dessen grundlegenden Eigenschaften evaluiert.<br />
Die wesentliche Funktionalität ist die Transformation eines erstellten UMA-Modells<br />
in ein CheatSheet-Modell und die anschließende Code-Generierung (vgl. Abschnitt<br />
6.3.1).<br />
Prüfbarkeit Durch die Definition von Regeln, Extensions und Templates für die<br />
Abbildungslogik <strong>zur</strong> automatisierten Erstellung <strong>der</strong> CheatSheets wurde eine hohe Lokalität<br />
diesbezüglich erreicht. Die mit Hilfe <strong>der</strong> oAW-Sprachen definierte Logik hat<br />
keine Auswirkung auf an<strong>der</strong>e Teile <strong>der</strong> Realisierung. Zusätzlich wird durch die Trennung<br />
<strong>der</strong> semantischen Abbildung von <strong>der</strong> syntaktischen Code-Generierung eine hohe<br />
Testbarkeit erzielt. Es besteht die Möglichkeit ein Prozessmodell auf <strong>der</strong> Basis von<br />
UMA zu definiert und es für eine Transformation als Eingabe zu verwenden, wobei<br />
das entstandene CheatSheet-Modell durch geeignete Testfälle überprüft werden kann.<br />
Bei einer direkten Code-Generierung, wie bei <strong>der</strong> Abbildung <strong>der</strong> Navigationsstruktur,<br />
müsste ein Vergleich auf Basis des erstellten XML-Quelltextes durchgeführt werden,<br />
um die Abbildung systematisch testen zu können.<br />
Än<strong>der</strong>barkeit Durch die Trennung <strong>der</strong> Transformation von <strong>der</strong> Generierung und<br />
das Kapseln <strong>der</strong> Abbildungslogik ist darüberhinaus eine hohe Än<strong>der</strong>barkeit erzielt<br />
worden. Än<strong>der</strong>ungen in <strong>der</strong> semantischen Transformation haben keine Auswirkung<br />
auf die syntaktische Code-Erstellung. Durch die Verwendung eines Postprocessors<br />
nach <strong>der</strong> Code-Generierung durch <strong>ViPER</strong> MTF ist die Lesbarkeit des erstellten Codes<br />
gewährleistet. Zusätzlich ist aber auch die Lesbarkeit des erstellenden Codes si-<br />
100
7.3 Methodenunterstützung<br />
chergestellt, da keine Formatierung für das Ergebnis berücksichtigt werden muss. Die<br />
Verwendung <strong>der</strong> oAW Sprachen <strong>zur</strong> Kapselung <strong>der</strong> Logik bewirkt zudem eine hohe<br />
Knappheit und Strukturiertheit. Die definierten Regeln <strong>zur</strong> Transformation und Generierung<br />
sind in separaten Dateien abgelegt und besitzen keine Abhängigkeit zu an<strong>der</strong>en<br />
Komponenten, abgesehen von <strong>der</strong> Nutzung des URLCaches (vgl. Abschnitt 6.3.3). Die<br />
Simplizität ist hingegen als niedrig einzustufen, da die Syntax bei<strong>der</strong> Sprachen nicht<br />
intuitiv verständlich und zudem schlecht dokumentiert ist.<br />
Zuverlässigkeit Die Zuverlässigkeit des Werkzeugs wird stark durch die Nutzung<br />
des Eclipse Process Frame<strong>works</strong> (EPF) und <strong>der</strong> verwendeten Schnittstelle des HTML-<br />
Exports beeinflusst. Da sich in <strong>der</strong> Vergangenheit die Schnittstelle zu diesem Framework<br />
des Öfteren geän<strong>der</strong>t hat, muss davon ausgegangen werden, dass <strong>der</strong> erweiternde<br />
Code auch in Zukunft bezüglich weiterer Än<strong>der</strong>ungen seitens EPF, anzupassen ist.<br />
Nützlichkeit Aufgrund <strong>der</strong> zweifachen Ausführung <strong>der</strong> HTML-Generierung (vgl.<br />
Abschnitt 6.3.3) ist die Erstellung <strong>der</strong> HTML-Dateien und <strong>der</strong> Prozessbeschreibung<br />
ein langwieriger Prozess. Das Kopieren <strong>der</strong> einmalig generierten Dateien für die Prozessbeschreibung<br />
könnte die Effizienz verbessern. Da jedoch <strong>der</strong> Vorgang nicht allzu<br />
oft angestoßen wird, ist dieser Aspekt von geringfügiger Bedeutung. Die Leistungsvollständigkeit<br />
ist bei dem Generierungsvorgang nicht gewährleistet, da bei <strong>der</strong> ersten<br />
Durchführung eine Integration <strong>der</strong> erstellten Arbeitsergebnisse durch Extensions im<br />
Werkzeug vorgenommen werden muss.<br />
Bedienbarkeit Die Generierung <strong>der</strong> CheatSheets und die Erstellung <strong>der</strong> Prozessbeschreibung<br />
werden über die einfache Angabe <strong>der</strong> jeweiligen Zielordner durch einen<br />
Benutzer gestartet. Die hohe Einfachheit wird dadurch eingeschränkt, dass die Arbeitsergebnisse<br />
bei <strong>der</strong> ersten Erstellung durch die Verwendung von Extensions im<br />
Werkzeug registriert werden müssen (vgl. Abschnitte 2.3.1, 6.4). Die automatische<br />
Erstellung <strong>der</strong> Extensions konnte aus technischen Gründen nicht durch <strong>ViPER</strong> PF abgedeckt<br />
werden.<br />
7.3 Methodenunterstützung<br />
Die bisherige Methodenunterstützung stellt ein Framework für aufgabenspezifische<br />
Unterstützung bereit, das prototypisch für die Subsystem Identification eingesetzt worden<br />
ist. Analog dazu wird die Evaluierung bei<strong>der</strong> Teile getrennt voneinan<strong>der</strong> durchgeführt.<br />
101
7 Evaluierung<br />
7.3.1 <strong>It</strong>erative Task Framework<br />
Mit dem <strong>It</strong>erative Task Framework wird ein Framework bereitgestellt, dass die Bearbeitung<br />
einer Aufgabe nach einer festen Bearbeitungssequenz (vgl. Abschnitt 5.1.4)<br />
sicherstellt. Zudem beinhaltet es Hilfsklassen für aufgabenunabhängige Funktionalität,<br />
die für die Unterstützung einer Aufgabe verwendet werden können.<br />
Bei <strong>der</strong> Realisierung des <strong>It</strong>erative Task Frame<strong>works</strong> wurde sehr viel Wert auf die Trennung<br />
von Zuständigkeiten 1 gelegt. Um den Lebenszyklus eines TaskWizards zu überwachen<br />
und den Ablauf steuern zu können, verwendet <strong>der</strong> TaskController verschiedene<br />
Hilfsklassen, denen unterschiedliche Aufgabenbereiche zugeordnet sind. Funktionalität<br />
für die Speicherung von Modellressource wurde von <strong>der</strong> Anwendungslogik <strong>zur</strong><br />
Handhabung <strong>der</strong> UML-Modelle und des Traceability-Modells getrennt.<br />
Prüfbarkeit Durch die gewählte Architektur des <strong>It</strong>erative Task Frame<strong>works</strong>, unter<br />
Berücksichtung des Prinzips <strong>der</strong> Trennung von Zuständigkeiten, liegt eine relativ hohe<br />
Testbarkeit vor. Die Funktionalität <strong>der</strong> einzelnen Hilfsklassen (vgl. Abschnitt 5.1.4)<br />
kann unabhängig vom restlichen Framework relativ einfach durch Testfälle überprüft<br />
werden. Die Testbarkeit des TaskControllers ist allerdings nur zu einem geringen Teil<br />
gewährleistet.<br />
Än<strong>der</strong>barkeit Neben einer hohen Prüfbarkeit besitzt das erstellte Framework auch<br />
eine gute Än<strong>der</strong>barkeit. Wie<strong>der</strong>um durch die Separierung <strong>der</strong> verschiedenen Aufgabenbereiche<br />
wurde auch eine hohe Strukturiertheit und Simplizität erreicht.<br />
Portabilität Durch die Realisierung des Traceability-Metamodells (vgl. Abschnitt<br />
5.1.2) besitzen die UML-Modelle eine gute Portabilität. Unabhängig von den Abbildungsinformationen<br />
<strong>zur</strong> Sicherstellung <strong>der</strong> Nachverfolgbarkeit und damit <strong>der</strong> Durchgängigkeit,<br />
bildet jedes UML-Modell eine abgeschlossene Einheit. Somit kann es für<br />
sich allein stehend in einem an<strong>der</strong>en Kontext ohne Einschränkung bearbeitet werden.<br />
Brauchbarkeit Bei <strong>der</strong> Bewertung des Frame<strong>works</strong> sind die Qualitätsmerkmale<br />
<strong>der</strong> Brauchbarkeit nicht unmittelbar auf die Nutzung durch einen Entwickler anwendbar,<br />
da eine Schnittstelle erst durch die eigentliche Unterstützung zustande kommt.<br />
Daher wird das Framework hinsichtlich <strong>der</strong> Brauchbarkeit für eine mögliche Hilfestellung<br />
bewertet. Für die Verwendung des Frame<strong>works</strong> ist neben <strong>der</strong> aufgabenspezifischen<br />
Anwendungslogik die Erstellung einer TaskConfiguration notwendig. Prinzipiell<br />
können damit sehr einfach und verständlich die Parameter <strong>zur</strong> Unterstützung <strong>der</strong> Aufgaben<br />
(z. B. Vor-, Nachbedingungen, Modelle, vgl. Abschnitte 5.1.3, 5.1.4) festgelegt<br />
werden. Für die eigentliche Implementierung von Constraints durch die Verwendung<br />
des EMF Validation Frame<strong>works</strong> ist allerdings zusätzliches Wissen erfor<strong>der</strong>lich, da<br />
1 separation of concerns, [LL06]<br />
102
7.3 Methodenunterstützung<br />
die Schnittstelle zum Validation Framework nicht sinnvoll verborgen werden kann.<br />
Die Realisierung solcher Constraints auf <strong>der</strong> Basis von Java o<strong>der</strong> OCL ist allerdings<br />
ausführlich in <strong>der</strong> dazugehörigen Dokumentation beschrieben.<br />
Bedienbarkeit Die allgemeine Bedienbarkeit beschränkt sich auf den generellen<br />
Aufbau eines TaskWizards. Durch die einheitliche Struktur und Oberfläche <strong>der</strong> aufgabenunabängigen<br />
Seiten, wird eine hohe Verständlichkeit und Konsistenz erzielt. Ebenso<br />
gewährleistet die einfache Handhabung von Validierungen und entsprechenden Korrekturvorschlägen<br />
eine hohe Einfachheit, die allerdings bei <strong>der</strong> aufgabenspezifischen<br />
Konfiguration durch die Formulierung von Vor- und Nachbedingungen, beeinflusst<br />
wird. Die Verwendung des Traceability-Modells wird vor dem Entwickler gänzlich<br />
verborgen und wirkt sich nicht nachteilig auf die Bedienbarkeit aus.<br />
Alle Modellän<strong>der</strong>ungen, die bei <strong>der</strong> Bearbeitung einer Aufgabe mit einem TaskWizard<br />
durchgeführt werden, können durch den Entwickler wi<strong>der</strong>rufen (undo) und wie<strong>der</strong>holt<br />
(redo) werden. Dazu gehören sowohl die Än<strong>der</strong>ungen durch Korrekturvorschläge<br />
als auch Än<strong>der</strong>ungen im aufgabenspezifischen Teil. Damit dieser Mechanismus auf<br />
eine konsistente Art und Weise genutzt werden kann, muss die aufgabenspezifische<br />
Unterstützung die in Commands (s. Abschnitt 2.3.2) gekapselten Modellän<strong>der</strong>ungen<br />
geeignet miteinan<strong>der</strong> kombinieren. Bei <strong>der</strong> Verwendung des Frame<strong>works</strong> sollte gewährleistet<br />
sein, dass die für den Entwickler scheinbar atomaren Än<strong>der</strong>ungen, dementsprechend<br />
durch einen einzigen CompoundCommand gekapselt und geeignet benannt<br />
werden (vgl. Abschnitt 5.1.4). Wird dieser Aspekt berücksichtigt, bietet <strong>der</strong> undo/redo-<br />
Mechanismus ein sehr mächtiges Hilfsmittel, das die Bedienbarkeit enorm verbessert.<br />
7.3.2 Unterstützung <strong>der</strong> Subsystem Identification<br />
Die Umsetzung einer aufgabenspezifische Unterstützung <strong>der</strong> Subsystem Identification<br />
beschränkt sich, neben <strong>der</strong> Nutzung des TaskControllers, im Wesentlichen auf die Realisierung<br />
einer Wizard-Seite für die Partitionierung <strong>der</strong> Analyseobjekte. Abgesehen<br />
von den grafischen Komponenten ist dazu Anwendungslogik erfor<strong>der</strong>lich, die durch<br />
die zugehörige AnalysisObjectPartitioningLogic bereitgestellt wird.<br />
Prüfbarkeit Durch die Auslagerung <strong>der</strong> Anwendungslogik aus <strong>der</strong> Wizard-Seite in<br />
den AnalysisObjectPartitioningLogic nach dem Prinzip <strong>der</strong> Trennung von Funktion<br />
und Interaktion kann eine hohe Prüfbarkeit erzielt werden, indem die Hilfsklasse unabhängig<br />
von <strong>der</strong> Wizard-Seite relativ einfach getestet werden kann. Da die Analysis-<br />
ObjectPartitioningLogic nur Zugriff auf durch das Framework festgelegte Komponente<br />
besitzt, ist auch die Lokalität aus einer programmatischen Sicht hoch einzustufen.<br />
Die Lokalität <strong>der</strong> UML-Modelle ist aufgrund möglicher Än<strong>der</strong>ungen in je<strong>der</strong> Aufgabe<br />
relativ gering, ist allerdings unvermeidbar. Die Wizard-Seite kann, wie grafische<br />
Komponenten im Allgemeinen, nur sehr schlecht getestet werden.<br />
103
7 Evaluierung<br />
Än<strong>der</strong>barkeit Typisch für grafische Komponenten ist eine hohe Kopplung zwischen<br />
den einzelnen Bestandteilen. Durch die Aufteilung in eine System- und mehrere<br />
Subsystemansichten (vgl. Abschnitt 5.2.4) wurde die Strukturiertheit bis zu einem gewissen<br />
Maße verbessert. Mit Hilfe <strong>der</strong> Implementierung einer gemeinsamen abstrakten<br />
Schnittstelle werden die Subsystemansichten über das aktuell betrachtete Subsystem<br />
benachrichtigt und können die jeweiligen Inhalte anpassen. Die Realisierung durch eine<br />
Art Observer-Muster (vgl. [LL06]) ermöglicht eine einfache Erweiterbarkeit und<br />
eine hohe Simplizität.<br />
Bedienbarkeit Mit <strong>der</strong> Methodenunterstützung wird das Ziel verfolgt, einen Entwickler<br />
bei <strong>der</strong> Bearbeitung einer Aufgabe eine möglichst optimale Unterstützung zu<br />
bieten.<br />
Die grundlegende, konzeptionelle Entscheidung für die Unterstützung <strong>der</strong> Subsystem<br />
Identification bezieht sich auf die Repräsentierung von Analyseobjekten. Konzept<br />
wirkt sich sowohl auf eine mögliche Unterstützung für die Aufgaben <strong>der</strong> Analyse aus,<br />
als auch auf die Validierung und die Korrekturvorschläge für die Subsystem Identification.<br />
Die Art <strong>der</strong> Analyseobjekt-Repräsentierung kann dementsprechend nicht vor dem<br />
Entwickler verborgen werden. Die Realisierung mit <strong>der</strong> <strong>Erweiterung</strong> von Stereotypen<br />
<strong>zur</strong> Speicherung eines Identifiers ist vermutlich sehr leicht von einem Entwickler nachzuvollziehen.<br />
Jedes Analyseobjekt wird durch einen Identifier berücksichtigt, <strong>der</strong> bei<br />
den angewendeten Stereotypen <strong>der</strong> Repräsentanten festgehalten werden muss. Diese<br />
Realisierung bietet somit eine hohe Einfachheit und Verständlichkeit.<br />
Der zweite wesentliche Aspekt bei <strong>der</strong> prototypisch realisierten Unterstützung ist die<br />
Oberfläche <strong>der</strong> aufgabenspezifischen Wizard-Seite. Da dem Entwickler durch diese<br />
Seite sehr viel Funktionalität bereitgestellt wird (vgl. Abschnitt 5.2.4), ist eine intuitive<br />
Oberflächengestaltung wichtig. Ganz allgemein wurden, wie auch bei dem Design<br />
aller an<strong>der</strong>en Oberflächen, die Eclipse User Interface Guidelines [EHLK04] berücksichtigt.<br />
Mit ihnen wird empfohlen verschiedene Eigenschaften, wie die zu verwendenen<br />
Icons (z. B. zum Erstellen, Löschen o<strong>der</strong> auch Umbennen) o<strong>der</strong> auch das Verhalten<br />
und das Layout von Wizards zu berücksichtigen. Ziel dabei ist es, dem „Benutzer“ ein<br />
einheitliches und intuitives Look & Feel im gesamten Werkzeug präsentieren zu können.<br />
Neben <strong>der</strong> Berücksichtigung dieser Richtlinien wurde bei <strong>der</strong> Strukturierung <strong>der</strong> Seite<br />
darauf geachtet, dass die Bearbeitung immer von oben nach unten und von links nach<br />
rechts durchgeführt wird. Diese Reihenfolge entspricht im europäischen Raum <strong>der</strong> Leserichtung<br />
und begünstigt die Verständlichkeit. Die Auswahl eines Subsystems in <strong>der</strong><br />
Hauptansicht (vgl. Abb. 5.14, 5.15) im oberen Teil bewirkt ein Anpassung <strong>der</strong> Detailansichten<br />
in <strong>der</strong> unteren Hälfte. Die Partitionierung <strong>der</strong> Analyseobjekte und die Zuteilung<br />
<strong>der</strong> Interfaces durch Nachrichten ist in Form eines drag&drop-Mechanismus<br />
realisiert, <strong>der</strong> eine Ausrichtung von links nach rechts besitzt.<br />
Desweiteren wurden alle Modellän<strong>der</strong>ungen geeignet durch Commands gekapselt, damit<br />
<strong>der</strong> allgemeine undo/redo-Mechanismus <strong>der</strong> TaskWizard-Seite ein für den Ent-<br />
104
7.3 Methodenunterstützung<br />
wickler konsistentes Verhalten aufweist. Alle Modellän<strong>der</strong>ungen, die vom Entwickler<br />
durch eine einzige Aktion durchgeführt werden, bilden eine scheinbar atomare Einheit.<br />
Löscht <strong>der</strong> Entwickler beispielsweise mehrere parts eines Subsystems, werden alle dafür<br />
notwendigen Commands durch einen CompoundCommand zusammengefasst. Das<br />
Wi<strong>der</strong>rufen <strong>der</strong> letzten Än<strong>der</strong>ung bewirkt also das Wie<strong>der</strong>herstellen aller gelöschten<br />
Parts. Die daraus resultierende Steigerung <strong>der</strong> Konsistenz und Verständlichkeit konnte<br />
zusätzlich durch eine geeignete Benennung dieser Commands erzielt werden.<br />
Als beson<strong>der</strong>s negativ für die Parts-Ansicht (vgl. Abschnitt 5.2.4) muss hervorgehoben<br />
werden, dass die Gruppierung <strong>der</strong> Analyseobjekte bezüglich <strong>der</strong> bereits partitionierten<br />
Objekte und <strong>der</strong> noch nicht zugewiesenen Objekte ab einer gewissen Komplexität sehr<br />
unübersichtlich wird. In <strong>der</strong> baumartigen Struktur werden alle Analyseobjekte durch<br />
Angabe ihres Identifiers dargestellt. Die Repräsentanten bilden Unterknoten des jeweiligen<br />
Objekts. Sollten in einem Analysemodell sehr viele Objekte identifiziert worden<br />
sein, ist es für den Entwickler wohl sehr schwierig, nachzuvollziehen, in welchem<br />
Kontext die jeweiligen Objekte modelliert wurden. An dieser Stelle fehlt die Möglichkeit,<br />
die in <strong>der</strong> Analyse erstellten UML-Diagramme zu betrachten o<strong>der</strong> sogar mit in<br />
die Interaktion einbeziehen zu können, um dadurch einen hohen Wie<strong>der</strong>erkennungsgrad<br />
zu erzielen, <strong>der</strong> durch die bisher realisierte baumartige Ansicht nicht gewährleistet<br />
wird.<br />
105
7 Evaluierung<br />
106
8 Zusammenfassung<br />
Im Rahmen dieser Arbeit sollte das Werkzeug <strong>ViPER</strong> für die modellgetriebene Entwicklung<br />
um die Unterstützung <strong>der</strong> MeDUSA-Methode erweitert werden. Verbunden<br />
durch gemeinsame Konzepte wie <strong>der</strong> Use Case- und modellgetriebenen-Entwicklung<br />
bilden sie zusammen mit <strong>der</strong> UML ein Systemdreieck. Während mit <strong>ViPER</strong> eine prototypische<br />
Entwicklungsumgebung für den UML-basierten Entwurf bereitgestellt wird,<br />
ist MeDUSA ist eine Methode <strong>zur</strong> Entwicklung von kleinen eingebetten Systemen.<br />
Um eine geeignete Unterstützung von MeDUSA in <strong>ViPER</strong> vornehmen zu können,<br />
wurden bereits in <strong>der</strong> Einleitung zwei Leitfragen hervorgehoben, die die Richtung <strong>der</strong><br />
dann folgenden konzeptionellen und technischen Realisierung vorgaben:<br />
• Methodenunterstützung: Wodurch kann <strong>der</strong> Entwickler bei den Aufgaben einer<br />
Methode möglichst optimal unterstützt werden?<br />
• Prozessintegration: Wie kann <strong>der</strong> zeitliche Ablauf eines Entwicklungsprozesses<br />
in einem Werkzeug abgebildet werden?<br />
Zunächst wurde im Kapitel 2 das Systemdreieck - MeDUSA, UML und <strong>ViPER</strong> - vorgestellt<br />
und alle für diese Arbeit relevanten Teile wurden erläutert. Insbeson<strong>der</strong>e wurden<br />
wichtige Sprachpakete <strong>der</strong> UML und von <strong>ViPER</strong> genutzte Frame<strong>works</strong> beschrieben.<br />
Im dem sich anschließenden Kapitel 3 wurden aktuelle Werkzeuge für die modellgetriebene<br />
Entwicklung bezüglich ihrer Unterstützung hinsichtlich <strong>der</strong> identifizierten<br />
Leitfragen untersucht. Während mit dem Werkzeug WayPointer <strong>der</strong> Firma jaczone primär<br />
die Validierung und Korrekturvorschläge von UML-Diagrammen unterstützt wird,<br />
bietet <strong>der</strong> Rational System Developer eine umfangreiche integrierte Prozessbeschreibung.<br />
Diese Prozessbeschreibung kann als statische Referenz aber auch als kontextabhängige<br />
Hilfe verwendet werden.<br />
Die in Kapitel 4 vorgestellte Vision griff die Erkenntnisse aus <strong>der</strong> Untersuchung <strong>der</strong><br />
beiden Werkzeuge auf, und es wurden verschiedene Ideen einer möglichen Unterstützung<br />
herausgearbeitet. Für die Methodenunterstützung wurden einige allgemeine Anfor<strong>der</strong>ungen<br />
hervorgehoben, die bei einer Hilfestellung für jede Aufgabe Verwendung<br />
finden könnte. Des Weiteren wurden aufgabenspezifische Unterstützungen beschrieben.<br />
Eine Realisierung aller identifizierten Aspekte konnte im Rahmen dieser Arbeit<br />
nicht vorgenommen werden. Deshalb wurde <strong>der</strong> Schwerpunkt auf die Erstellung eines<br />
Frame<strong>works</strong> für die Methodenunterstützung eines Prototypen für die Unterstützung<br />
<strong>der</strong> Subsystem Identification gelegt. Durch eine zusätzliche Prozessintegration sollte<br />
die Möglichkeit bestehen, den MeDUSA-Prozess auf <strong>der</strong> Basis von CheatSheets<br />
durchführen zu können, um damit die Unterstützung <strong>der</strong> einzelnen Aufgaben anzusto-<br />
107
8 Zusammenfassung<br />
ßen. Zusätzlich war eine Prozessbeschreibung in das Eclipse-Hilfesystem zu integrierenwerden.<br />
Die Beschreibung <strong>der</strong> Methodenunterstützung im Kapitel 5 wurde unterteilt in einen<br />
allgemeinen Teil und in einen speziellen Teil für die Unterstützung <strong>der</strong> Subsystem<br />
Identification. Im allgemeinen Teil wurde ein einfaches konzeptionelles Modell entwickelt,<br />
mit dem eine Aufgabe im Kontext eines iterativen Vorgehens beschrieben werden<br />
kann. Neben den Än<strong>der</strong>ungen <strong>der</strong> in einer Aufgabe verwendeten UML-Modelle<br />
berücksichtigt dieses Aufgabenmodell zum einen Vor- und Nachbedingungen, die an<br />
die Modelle vor beziehungsweise nach <strong>der</strong> Bearbeitung gestellt werden und unterbreitet<br />
zum an<strong>der</strong>en eventuelle Korrekturvorschläge. Zusätzlich wurde ein Traceability-<br />
Modell entwickelt, das aus <strong>der</strong> Notwendigkeit heraus erfor<strong>der</strong>lich geworden war, Abbildungsinformationen<br />
zwischen UML-Modellen für die Nachverfolgbarkeit in einem<br />
externen Modell ablegen zu können. Durch diese Informationen kann die Durchgängigkeit<br />
<strong>der</strong> disziplinspezifischen Modelle überprüft werden. Auf <strong>der</strong> Basis des Aufgabenmodells<br />
wurde auf <strong>der</strong> technischen Seite das <strong>It</strong>erative Task Framework realisiert,<br />
mit dem die Bearbeitung einer Aufgabe in einer festgelegten Sequenz durchgeführt<br />
wird. Die Unterstützung einer Aufgabe erfolgt durch die Implementierung eines<br />
TaskWizards, wobei lediglich die für die Aufgabe spezifischen Teile realisiert werden<br />
müssen. Sowohl die Ordnung <strong>der</strong> Seiten <strong>zur</strong> Einhaltung <strong>der</strong> Bearbeitungssequenz als<br />
auch die Erstellung <strong>der</strong> allgemeinen Seiten wird durch das Framework sichergestellt.<br />
Die Unterstützung <strong>der</strong> Subsystem Identification wurde durch die Nutzung dieses Frame<strong>works</strong><br />
implemeniert. Die instanzgetriebene Entwicklung mit MeDUSA bildet ein<br />
gegenläufiges Konzept <strong>zur</strong> Classifier-getriebenen Entwicklung mit <strong>der</strong> UML. Somit<br />
musste eine Lösung gefunden werden, mit <strong>der</strong> Analyseobjekte in den UML-Modellen<br />
abgebildet werden können. Durch die <strong>Erweiterung</strong> <strong>der</strong> für die Objekttaxonomie von<br />
MeDUSA verwendeten Stereotypen kann jedem Repräsentanten eines Objekts im jeweiligen<br />
Sprachpaket ein Identifier zugeordnet werden. Durch die Erstellung einer aufgabenspezifischen<br />
Wizard-Seite wird nicht nur die Partitionierung <strong>der</strong> Analyseobjekte<br />
durch Subsysteme im Architekturmodell son<strong>der</strong>n auch die Zuordnung von Nachrichten<br />
auf Ports <strong>der</strong> Subsysteme unterstützt. Dazu wurde eine Oberfläche mit verschiedenen<br />
Ansichten auf die jeweiligen Subsysteme realisiert.<br />
Die zukünftige Entwicklung <strong>der</strong> in dieser Arbeit begonnenen <strong>Erweiterung</strong> für die Unterstützung<br />
<strong>der</strong> MeDUSA-Methode kann bezüglich verschiedener Ansätze weiter getrieben<br />
werden. Zum einen ist natürlich die Unterstützung aller bislang nicht betrachteten<br />
Aufgaben denkbar, die unter Verwendung des <strong>It</strong>erative Task Frame<strong>works</strong> realisiert<br />
werden können. Zum an<strong>der</strong>en gibt es aber auch bezüglich <strong>der</strong> Unterstützung für die<br />
Subsystem Identification, <strong>der</strong>en Realisierung im Rahmen dieser Arbeit prototypisch<br />
begonnen wurde, noch einige offene Punkte.<br />
Für den Vorgang <strong>der</strong> Abbildung <strong>der</strong> Repräsentanten auf Analyseobjekte könnte eine<br />
ähnliche Hilfestellung wie bei <strong>der</strong> Partitionierung <strong>der</strong> Analyseobjekte geleistet werden.<br />
Neben <strong>der</strong> Nutzung während <strong>der</strong> Bearbeitung <strong>der</strong> Analyseaufgaben könnte diese<br />
Funktionalität in <strong>der</strong> Unterstützung <strong>der</strong> Subsystem Identification eingesetzt werden,<br />
um damit Korrekturvorschläge anbieten zu können.<br />
108
Außerdem sollte, wie in <strong>der</strong> Evaluierung beschrieben, eine bessere Sicht auf die Analyseobjekte<br />
geliefert werden, als durch eine einfache Unterteilung in partitionierte und<br />
nicht partitionierte Objekte. Durch eine Einbettung <strong>der</strong> vorhandenen UML-Diagramme<br />
in die Detailansichten könnte dem Enwickler <strong>der</strong> Kontext des von ihm Modellierten<br />
besser dargestellt werden. Dadurch könnte er leichter nachvollziehen, um welches Objekt<br />
es sich handelt, da <strong>der</strong> Name als einziger Hinweis ab einer gewissen Anzahl von<br />
Objekten nicht sehr aussagekräftig ist.<br />
Nichtzuletzt ist die Fertigstellung <strong>der</strong> Metrik-Ansicht ein sehr wichtiger Punkt, <strong>der</strong> im<br />
Rahmen dieser Arbeit aus zeitlichen nicht zu Ende geführt werden konnte.<br />
Für die Prozessintegration wurden dann im Kapitel 6 Möglichkeiten vorgestellt, mit<br />
denen Methoden und allgemeine Entwicklungsprozesse modelliert werden können.<br />
Mit dem EPF-Composer steht ein Werkzeug <strong>zur</strong> Verfügung, mit dem auf <strong>der</strong> Basis<br />
<strong>der</strong> Unified Modeling Architecture sehr einfach ein Prozessmodell von MeDUSA erstellt<br />
werden kann. Mit diesem Modell konnten dann die CheatSheets und die Prozessbeschreibung<br />
automatisch generiert werden. Für die Generierung wurde <strong>der</strong> EPF-<br />
Composer durch einige Bestandteile von <strong>ViPER</strong> erweitert, womit durch zusätzliche<br />
Funktionalität ein neues Werkzeug entstand. Mit <strong>der</strong> Verwendung von <strong>ViPER</strong> PF können<br />
nun beliebige Prozessmodelle in Eclipse-basierte Entwicklungsumgebungen integriert<br />
werden. Die TaskWizards als Hilfemittel einer Methodenunterstützung können<br />
aus den CheatSheet heraus gestartet werden.<br />
Die Realisierung <strong>der</strong> Prozessintegration liefert einen wichtigen Beitrag für die Unterstützung<br />
<strong>der</strong> Methode, da sowohl <strong>der</strong> Ablauf als auch die komplette Prozessbeschreibung<br />
damit in <strong>ViPER</strong> integriert werden konnte. Durch die Methodenunterstützung<br />
wurde ein klar definierter Rahmen festgelegt, auf dessen Basis die Hilfestellung<br />
einer konkreten Aufgabe realisiert werden kann, wie es protypisch durch die Unterstützung<br />
<strong>der</strong> Subsystem Identification gezeigt wurde.<br />
109
8 Zusammenfassung<br />
110
Literaturverzeichnis<br />
[AFM00] ALEX, JÜRGEN, HERMANN FLESSNER und WILHELM MONS: Konrad<br />
Zuse - Der Vater des Computers, 2000.<br />
[AMW] ATLAS Model Weaver. http://wiki.eclipse.org/index.php/AMW.<br />
[APF] WayPointer Active Process Framework. http://www.jaczone.com.<br />
[ATL] ATLAS Transformation Language. http://www.eclipse.org/m2m/atl.<br />
[Bal01] BALZERT, HELMUT: Lehrbuch <strong>der</strong> Softwaretechnik, 2. Auflage. Spektrum<br />
Akademischer Verlag, 2001.<br />
[Bar99] BARR, MICHAEL: Programming Embedded Systems in C and C++.<br />
O’Reilly, 1999.<br />
[BSM + 03] BUDINSKY, FRANK, DAVID STEINBERG, ED MERKS, RAYMOND EL-<br />
LERSICK und TIMOTHY J. GROSE: Eclipse Modeling Framework: A Developer’s<br />
Guide, 2003.<br />
[DFK + 04] D´ANJOU, JIM, SCOTT FAIRBROTHER, DAN KEHN, JOHN KELLER-<br />
MAN und PAT MCCARTHY: The Java Developer´s Guide to Eclipse, Second<br />
Edition. Addison-Wesley, 2004.<br />
[DI006] Diagram Interchange, 2006. http://www.omg.org/docs/formal/06-04-<br />
04.pdf.<br />
[Dij72] DIJKSTRA, EDSGER W.: The Humble Programmer, 1972.<br />
http://www.cs.utexas.edu/users/EWD/ewd03xx/EWD340.PDF.<br />
[Dou99] DOUGLASS, BRUCE POWEL: Doing Hard Time. ADDISON-WESLEY,<br />
1999.<br />
[Dou06] DOUGLASS, BRUCE POWEL: Real-Time UML Workshop for Embedded<br />
Systems. Butterworth Heinemann, 2006.<br />
[Ecl] Eclipse. http://www.eclipse.org.<br />
[EHLK04] EDGAR, NICK, KEVIN HAALAND, JIN LI und PETER<br />
KIMBERLEY: Eclipse User Interface Guidelines, 2004.<br />
http://www.eclipse.org/articles/Article-UI-Guidelines/Index.html.<br />
[EPF] http://www.eclipse.org/epf.<br />
111
Literaturverzeichnis<br />
[Gau06] GAU, THORSTEN: UMA und EPF: Einführung und Anwendung in <strong>der</strong><br />
Praxis. ObjektSpektrum, 06:43–46, 2006.<br />
[Gom00] GOMAA, HASSAN: Designing Concurrent, Distributed, and Real-Time<br />
Applications with UML. Addison-Wesley, 2000.<br />
[Hau07] HAUMER, PETER: Eclipse Process Framework<br />
Composer, Part 1: Key Concepts, 2007.<br />
http://www.eclipse.org/epf/general/EPFComposerOverviewPart1.pdf.<br />
[Inf07] Unified Modeling Language: Infrastructure, 2007.<br />
http://www.omg.org/docs/formal/07-02-04.pdf.<br />
[Jac06] JACZONE AB: User Guide, Waypointer 6.0, 2006. Im Lieferumfang <strong>der</strong><br />
Testversion vorhanden.<br />
[Jav] Java. http://www.java.sun.com.<br />
[JCJv92] JACOBSON, IVAR, MAGNUS CHRISTERSON, PATRIK JONSSON und<br />
GUNNAR ÖVERGAARD: Object-Oriented Software Engineering - A Use<br />
Case Driven Approach. Addison-Wesley, 1992.<br />
[Kru99] KRUCHTEN, PHILIPPE: Rational Unified Process, An Introduction.<br />
Addison-Wesley, 1999.<br />
[LL06] LUDEWIG, JOCHEN und HORST LICHTER: Software Engineering -<br />
Grundlagen, Menschen, Prozesse, Techniken. dpunkt.verlag, 2006.<br />
[LN07] LICHTER, HORST und ALEXANDER NYSSEN: MeDUSA - Method for<br />
UML2-based Design of Embedded Software Applications, 2007.<br />
[NL] NYSSEN, ALEXANDER und HORST LICHTER: Weakness of Use Case<br />
Modeling in te Context of Embedded Sofware Applications. Zu veröffentlichen.<br />
[Obj07] OBJECT MANAGEMENT GROUP: Unified Modeling Language: Superstructure,<br />
2007. http://www.omg.org/docs/formal/07-02-03.pdf.<br />
[OCL06] Object Constraint Language, 2006. http://www.omg.org/docs/formal/06-<br />
05-01.pdf.<br />
[RSD] Rational Software Developer. http://www.ibm.com.<br />
[Rum99] RUMBAUGH, JAMES, IVAR JACOBSON UND GRADY BOOCH: The Unified<br />
Modeling Language Reference Manual. Addison-Wesley, 1999.<br />
[Sau] SAUER, FRANK: Metrics. http://metrics.sourceforge.net/.<br />
[SHNM05] SCARPINO, MATTHEW, STEPHEN HOLDER, STANFORD NG und LAU-<br />
RENT MIHALKOVIC: SWT/JFace IN ACTION. Manning Publications Co.,<br />
112
2005.<br />
[Sof] SOFTWARE RESEARCH, INC. http://e-valid.com/.<br />
Literaturverzeichnis<br />
[SPE05] Software Process Metamodel Specification, 2005.<br />
http://www.omg.org/docs/formal/05-01-06.pdf.<br />
[SPE07] Software Process Metamodel Specification, 2007.<br />
http://www.omg.org/docs/formal/03-03-07.pdf.<br />
[UML] Unified Modeling Language. http://www.uml.org.<br />
[VBBJ06] VEPA, ERIC, JEAN BEZIVIN, HUGO BRUNELIERE und FREDERIC JOU-<br />
AULT: Measuring Model Repositories, 2006.<br />
[ViP] <strong>ViPER</strong> Project Site. http://www.viper.sc.<br />
[WNHL] WALTER, ANDREAS, ALEXANDER NYSSEN, VEIT HOFFMANN und<br />
HORST LICHTER: Towards the integration of UML and text based use<br />
case modeling. Noch nicht veröffentlicht.<br />
[XMI05] Meta Object Facility (MOF) 2.0 XMI Mapping Specification, 2005.<br />
http://www.omg.org/docs/formal/05-09-01.pdf.<br />
113