27.06.2013 Aufrufe

Erweiterung der ViPER-Umgebung zur ... - It works!

Erweiterung der ViPER-Umgebung zur ... - It works!

Erweiterung der ViPER-Umgebung zur ... - It works!

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!