Modellbasierte Entwicklung einer COBOL-Anwendung
Modellbasierte Entwicklung einer COBOL-Anwendung
Modellbasierte Entwicklung einer COBOL-Anwendung
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Technische Universität München<br />
Fakultät für Informatik<br />
Diplomarbeit<br />
<strong>Modellbasierte</strong> <strong>Entwicklung</strong> <strong>einer</strong><br />
<strong>COBOL</strong>-<strong>Anwendung</strong><br />
Sebastian Winter<br />
moCa
Technische Universität München<br />
Fakultät für Informatik<br />
Diplomarbeit<br />
<strong>Modellbasierte</strong> <strong>Entwicklung</strong><br />
<strong>einer</strong> <strong>COBOL</strong>-<strong>Anwendung</strong><br />
Sebastian Winter<br />
Aufgabensteller:<br />
Betreuer:<br />
Externe Betreuer:<br />
Prof. Dr. Manfred Broy<br />
Dr. Andreas Rausch<br />
TU München<br />
Oliver Engelhardt<br />
IZB SOFT<br />
Dr. Klaus Bergner<br />
4Soft GmbH<br />
Abgabedatum: 15. November 2003
Erklärung<br />
Ich versichere, dass ich diese Diplomarbeit<br />
selbständig verfasst und nur die angegebenen<br />
Quellen und Hilfsmittel verwendet habe.<br />
(Sebastian Winter)<br />
München, den 15. November 2003
Danksagung<br />
An dieser Stelle darf ich mich bei meinen beiden Betreuern, Andreas Rausch und<br />
Oliver Engelhardt, bedanken. Ihr Blick für das Wesentliche sowie die vielen hilfreichen<br />
Gespräche unterstützten mich sehr bei der Erstellung dieser Arbeit.<br />
Auch möchte ich mich bei dem PROFiL-Team bedanken, das trotz eines hohen Termindrucks<br />
sich immer die Zeit genommen hat, mir neue Sachverhalte zu erklären.<br />
Außerdem hat das Team die Einarbeitungszeit in das <strong>Entwicklung</strong>sumfeld der<br />
IZB SOFT sehr freundlich gestaltet.<br />
Nicht zuletzt geht mein Dank an die beiden Firmen, 4Soft und IZB SOFT, die es mir<br />
ermöglicht haben, meine Diplomarbeit nicht im stillen Kämmerlein, sondern eingebunden<br />
in ein laufendes Projekt zu schreiben. Die Mittel, die mir beide Firmen zur<br />
Verfügung stellten, sowie die Unterstützung waren weit mehr als ein Student erwarten<br />
darf. Es war für mich eine tolle Erfahrung, im Umfeld von zwei Firmen meine Diplomarbeit<br />
zu schreiben.<br />
S. W.
Inhalt<br />
1 Einleitung und Motivation................................................................................ 1<br />
1.1 Ausgangssituation.......................................................................................2<br />
1.2 Problemstellung ..........................................................................................3<br />
1.3 Zielsetzung..................................................................................................4<br />
1.4 Aufbau der Arbeit .......................................................................................4<br />
2 Das Umfeld in der IZB SOFT............................................................................ 7<br />
2.1 Die IZB SOFT.............................................................................................7<br />
2.2 Der Softwareentwicklungsprozess..............................................................8<br />
2.3 Die Architektur der <strong>Anwendung</strong>en...........................................................10<br />
2.4 <strong>COBOL</strong>: Begriffe & Konzepte .................................................................15<br />
3 <strong>Modellbasierte</strong> Softwareentwicklung............................................................ 23<br />
3.1 Grundlagen der modellbasierten <strong>Entwicklung</strong>..........................................23<br />
3.2 Das bisherige Vorgehen der IZB SOFT....................................................27<br />
3.3 Die Modelle der neuen Methodik im Überblick.......................................33<br />
4 Das Fallbeispiel »Kundenmappe«................................................................. 35<br />
4.1 Systemvision.............................................................................................35<br />
4.2 <strong>Anwendung</strong>sfallmodell.............................................................................37<br />
4.3 Fachliches Modell.....................................................................................44<br />
4.4 Designmodell ............................................................................................53<br />
4.5 Implementierungsmodell ..........................................................................64<br />
4.6 Zusammenfassung.....................................................................................71<br />
5 UML-Profil für moCa ...................................................................................... 73<br />
5.1 <strong>Anwendung</strong>sfallmodell.............................................................................74<br />
5.2 Fachliches Modell.....................................................................................76<br />
5.3 Designmodell ............................................................................................81<br />
5.4 Implementierungsmodell ..........................................................................88<br />
6 Zusammenfassung und Ausblick ................................................................. 91<br />
Literatur .................................................................................................................. 95
1 Einleitung und Motivation<br />
Als IT-Dienstleister entwickelt die IZB SOFT 1 <strong>Anwendung</strong>en für Bank- und Kreditinstitute.<br />
Bei den Hauptkunden, den bayerischen Sparkassen, werden, wie für ein Informationssystem<br />
der Finanzdienstleistung typisch, Terminals und Großrechner eingesetzt.<br />
In den Filialen der Sparkassen stehen die mit dem Großrechner verbundenen<br />
Terminals und wickeln die Geschäftsprozesse unter Verwendung der vom Großrechner<br />
angebotenen Dienste ab.<br />
Realisiert werden diese Dienste auf dem Großrechner mit <strong>COBOL</strong>-Programmen. Solche<br />
<strong>Anwendung</strong>en, die in <strong>COBOL</strong> geschrieben sind, werden als »Legacy«-<br />
<strong>Anwendung</strong>en bezeichnet – also als Altlast, da sie in <strong>einer</strong> Sprache verfasst sind, die<br />
schon seit 1959 existiert und die keine Unterstützung für moderne Konzepte bietet.<br />
Aus verschiedenen Gründen ist die vollständige Ablösung der <strong>COBOL</strong>-Systeme für<br />
die Banken nicht möglich:<br />
Erstens, es existiert eine komplette Infrastruktur, die auf diese Technologie zugeschnitten<br />
ist, sowie funktionierende <strong>Anwendung</strong>en, die im Kern auf mehrere Millionen<br />
Zeilen <strong>COBOL</strong>-Quelltext basieren.<br />
Zweitens, wurde jahrzehntelang Know-how auf diesem Gebiet gesammelt. Das hat<br />
zur Folge, dass die Erfahrung und das Wissen des Unternehmens in den Köpfen der<br />
Mitarbeiter stecken, die auf <strong>COBOL</strong> spezialisiert sind.<br />
Und nicht zuletzt, der wirtschaftliche Aspekt: Die Kosten, welche bei der vollständigen<br />
Migration der <strong>COBOL</strong>-Systeme zu <strong>einer</strong> modernen Technologie anfallen würden,<br />
könnten, gerade in der derzeit herrschenden wirtschaftlichen Situation, nicht aufgebracht<br />
werden.<br />
Anfänglich wurden diese <strong>Anwendung</strong>en monolithisch implementiert. Für die Struktur<br />
wurde die Variante »Ein großer Klotz« gewählt. Ein solches, schlecht strukturiertes<br />
Innenleben war selbst für ein paar Auserwählte schwer zu verstehen. So etwas ist,<br />
wenn überhaupt, nur sinnvoll bei <strong>einer</strong> Software, die nicht erweitert werden muss oder<br />
deren Komplexität gering ist. Heutzutage sind die Softwaresysteme sehr komplex und<br />
Flexibilität ist eine Schlüsselanforderung.<br />
Diese Schlüsselanforderung gilt auch für die IZB SOFT: Deren <strong>Anwendung</strong>en werden<br />
laufend weiterentwickelt und neue Anforderungen der Sparkassen integriert. Um wei-<br />
1 Informatik-Zentrum Bayern – Software-Gesellschaft der bayerischen Sparkassen – GmbH & Co KG<br />
1
2 Einleitung und Motivation<br />
terhin erfolgreich zu sein, muss das Unternehmen seine Software flexibel und effizient<br />
entwickeln. Deswegen wird eine <strong>Anwendung</strong>sarchitektur gewählt, die das System<br />
klar nach Zuständigkeiten zerlegt und die einzelnen Bauteile geschickt hierarchisch,<br />
z. B. in Schichten, anordnet.<br />
1.1 Ausgangssituation<br />
Einerseits ist es nur mit Komponentenbildung überhaupt möglich, flexible Software<br />
zu entwickeln; andererseits darf nicht außer Acht gelassen werden, dass ein komplexes<br />
System, welches in Komponenten zerlegt wird, ein komplexes System bleibt.<br />
Setzt man Modelle ein, um unterschiedliche Abstraktionsebenen zu modellieren, entsteht<br />
eine beträchtliche Menge an Information: Komponenten, Schnittstellen, Datenstrukturen<br />
– alles muss spezifiziert werden. Oft werden Teile des Systems aus verschiedenen<br />
Perspektiven mehrmals beschrieben; diese Zusammenhänge gilt es, konsistent<br />
zu halten.<br />
Einen Weg diese Komplexität beherrschbar zu machen, beschreiten modellbasierte<br />
<strong>Entwicklung</strong>smethoden. Ein entscheidender Aspekt ist, dass Beziehungen zwischen<br />
den einzelnen Modellen definiert werden und somit eine Modellstruktur geschaffen<br />
wird. Diese Modellstruktur stellt die zentrale Grundlage für die Bewältigung der Information<br />
dar. Die Beziehungen zwischen den Modellen ermöglichen es, die verschiedenen<br />
Abstraktionsebenen konsistent zu halten. Auch ist es möglich, bei der Erstellung<br />
eines Modells einen ersten Rahmen aus anderen Modellen abzuleiten, d. h.,<br />
dass Modelle als zentrale Elemente den <strong>Entwicklung</strong>sprozess steuern. Die für die verschiedenen<br />
Abstraktionsebenen definierten Modelle haben, neben ihrer Rolle als visualisierende<br />
Elemente, die Aufgabe, das System aus dieser Perspektive vollständig zu<br />
beschreiben. Auf der Grundlage dieser Beschreibung ist es dann möglich, Werkzeuge<br />
zu konzipieren, welche die Aufgaben während der <strong>Entwicklung</strong> automatisieren.<br />
Die IZB SOFT hat bereits einige Aspekte der modellbasierten Methodik in ihren <strong>Entwicklung</strong>sprozess<br />
integriert. Als Notationsmittel wird die Unified Modeling Language<br />
(UML) 2 eingesetzt – ein Hilfsmittel, um Software einheitlich zu modellieren. In dieser<br />
Arbeit wird auf die Version 1.5. [OMG] Bezug genommen. Die einzelnen Modelle<br />
sind in den jeweiligen internen Standards definiert. Im Rahmen der Projekte KBS 3<br />
und PROFiL 4 sind Konzepte und Leitfäden [IZB 2003a] entstanden, die auf diesen<br />
Standards aufbauen.<br />
2<br />
3<br />
4<br />
OMG-UML-Quellen im Internet: www.omg.org/uml.<br />
KBS steht für Kernbankensystem.<br />
Vgl. Abschnitt 2.1.
Problemstellung 3<br />
1.2 Problemstellung<br />
Die modellbasierte Vorgehensweise wirft Probleme auf, die im Folgenden vor dem<br />
Hintergrund des <strong>Entwicklung</strong>sprozesses der IZB SOFT behandelt werden. Der Prozess<br />
lässt sich wie folgt kurz skizzieren:<br />
Zuerst werden die Anforderungen analysiert und modelliert, danach wird das System<br />
anhand der Anforderungen nach fachlichen Gesichtspunkten entworfen. Dieser erste<br />
Entwurf wird dann in den technischen Modellen verf<strong>einer</strong>t, d. h. Implementierungsdetails<br />
der verwendeten technischen Plattform werden eingearbeitet. Zuletzt werden<br />
die technischen Modelle in <strong>COBOL</strong>-Programme umgesetzt und getestet.<br />
Auf fachlicher Ebene werden Modelle bereits erfolgreich eingesetzt, um über das zu<br />
entwickelnde System zu diskutieren. Auch Teile der Generierung wurden bereits realisiert.<br />
So ist es möglich, das Fachkonzept aus den Modellen zu generieren.<br />
Jedoch kommt es, wenn die fachliche Modellierung abgeschlossen ist, zu Brüchen in<br />
der <strong>Entwicklung</strong>, wie Abbildung 1-1 zeigt.<br />
Fachliches Modell<br />
1. Bruch<br />
Technische Modelle<br />
2. Bruch<br />
<strong>COBOL</strong>-Programme<br />
Abbildung 1-1 Brüche in der <strong>Entwicklung</strong><br />
Der erste Bruch findet zwischen dem fachlichen Modell und den technischen Modellen<br />
statt, d. h. es gibt hier keinen durchgängigen Übergang. Deswegen besteht die<br />
Gefahr, dass die erstellten technischen Modelle nicht mit den fachlichen Modellen<br />
zusammenpassen. Dazu kommt, dass der Übergang von Hand umgesetzt wird. Diese<br />
Vorgehensweise ist zum einen aufwendig und birgt zum anderen ein Risiko, da die<br />
Konsistenz der Modelle nicht automatisch überprüft wird.<br />
Der zweite Bruch ist zwischen den technischen Modellen und den <strong>COBOL</strong>-Programmen,<br />
d. h. die Entwickler implementieren die <strong>COBOL</strong>-Programme unabhängig<br />
von den spezifizierten Modellen. Wenn nicht auf der Grundlage der bereits spezifizierten<br />
Modelle entwickelt wird, hat dies zur Folge, dass <strong>einer</strong>seits die Architektur der
4 Einleitung und Motivation<br />
Software nicht konsistent mit den Modellen ist, und andererseits wichtige Designentscheidungen<br />
verloren gehen. Auch hier fehlt ein klarer Zusammenhang zwischen dem<br />
Modell und den Implementierungs-Konzepten von <strong>COBOL</strong>.<br />
1.3 Zielsetzung<br />
Kernziel dieser Arbeit ist die modellbasierte <strong>Entwicklung</strong>smethodik der IZB SOFT<br />
unter Berücksichtigung der bestehenden Standards weiterzuentwickeln. Dabei sollen<br />
die Brüche in der bisherigen Vorgehensweise behoben, die Entwickler entlastet und<br />
die Effizienz der Methodik gesteigert werden. Dieses Ziel lässt sich in folgende Teilziele<br />
zerlegen:<br />
<strong>Entwicklung</strong> <strong>einer</strong> Methode für die Umsetzung der fachlichen Modelle zu technischen<br />
Modellen: Die Beziehungen zwischen den Elementen aus den technischen<br />
Modellen und dem fachlichen Modell sollen definiert werden. Zusätzlich<br />
ist die genaue Spezifikation der Komponenten-Schnittstellen sicherzustellen.<br />
<strong>Entwicklung</strong> <strong>einer</strong> Methode für die Umsetzung der technischen Modelle nach<br />
<strong>COBOL</strong>-Quelltext: Die Menge von Abbildungen, welche die Elemente der technischen<br />
Modelle in <strong>COBOL</strong>-Quelltext umsetzen, soll definiert werden.<br />
Integration der Methoden und Weiterentwicklung der Modelle: Die verschiedenen<br />
Methoden sollen zu <strong>einer</strong> durchgängigen Methodik integriert werden. Die<br />
Anforderungen der Methodik an die Modelle sind zusammen mit den Erweiterungen<br />
der Standards zu dokumentieren. Auch sind Metamodelle für die einzelnen<br />
Modelle zu erstellen und die Beziehungen zwischen den Elementen der<br />
verschiedenen Metamodelle zu erfassen. Schließlich soll die Methodik eine<br />
Grundlage für die Erstellung von Werkzeugen schaffen, um Schritte des systematischen<br />
Vorgehens zu automatisieren.<br />
Erprobung der Ergebnisse anhand eines durchgängigen Fallbeispiels: Für einen<br />
Ausschnitt aus dem laufenden PROFiL-Teilprojekt »Kundenmappe« sollen die<br />
entsprechenden Modelle erstellt und auf Durchgängigkeit geprüft werden. Darüber<br />
hinaus soll auf die Verständlichkeit, Durchgängigkeit und Einfachheit der<br />
Methodik geachtet werden.<br />
1.4 Aufbau der Arbeit<br />
Die Arbeit beginnt im zweiten Kapitel mit der Beschreibung des Umfelds bei der<br />
IZB SOFT. Nach <strong>einer</strong> kurzen Vorstellung des Unternehmens folgt eine Einführung<br />
in den dort verwendeten Softwareentwicklungsprozess und die Beschreibung <strong>einer</strong><br />
typischen <strong>Anwendung</strong>sarchitektur. Im letzten Abschnitt werden die wichtigsten Konzepte<br />
der Programmiersprache <strong>COBOL</strong> zusammengefasst.
Aufbau der Arbeit 5<br />
Das dritte Kapitel erläutert den Begriff modellbasierte Softwareentwicklung und führt<br />
in die Konzepte der modellbasierten Methoden ein. Mit dem Ziel, das bisherige Vorgehen<br />
der IZB SOFT zu beschreiben, werden zunächst die firmeninternen Standards<br />
zusammengefasst. Danach wird ein Überblick über die Modelle der entwickelten Methodik<br />
gegeben.<br />
Das vierte Kapitel behandelt ein durchgängiges Beispiel, welches als Grundlage für<br />
die Beschreibung der Methodik dient. Nach <strong>einer</strong> kurzen Einführung werden alle Modelle,<br />
von dem <strong>Anwendung</strong>sfallmodell bis hin zum Implementierungsmodell, vorgestellt<br />
und mit <strong>einer</strong> Beschreibung der Erweiterung versehen. Danach folgt eine kurze<br />
Bewertung der wesentlichsten Änderungen.<br />
Das fünfte Kapitel ist eine Zusammenstellung aller Modelle, die von der Methodik<br />
genutzt werden. Für jedes Modell wird das zugrunde liegende Metamodell beschrieben<br />
und ein Überblick über die Elemente gegeben.<br />
Das letzte Kapitel fasst das Vorgehen und die Ergebnisse der Arbeit zusammen. Darauf<br />
folgt ein Ausblick auf die möglichen Weiterentwicklungen mit der vorgestellten<br />
Methodik als Grundlage. Der Ausblick schließt eine Bewertung von erforderlichen<br />
Werkzeugen mit ein.
2 Das Umfeld in der IZB SOFT<br />
Dieses Kapitel gibt einen Überblick über das Umfeld in der IZB SOFT. Zunächst wird<br />
das Unternehmen kurz vorgestellt und das Projekt PROFil beschrieben. Darauf folgt<br />
eine Einführung in den Softwareentwicklungsprozess sowie eine Erläuterung der Architektur<br />
der <strong>Anwendung</strong>en. Das Kapitel schließt mit <strong>einer</strong> Zusammenfassung der<br />
wichtigsten <strong>COBOL</strong>-Konzepte.<br />
Eine weitere Aufgabe dieses Kapitels ist es, in die Begriffswelt der Firma einzuführen.<br />
Es ist – wie immer bei Begriffen – Vorsicht geboten. Softwaretechnik ist, vergleicht<br />
man sie mit anderen Bereichen, eine junge Kunst. Deshalb sind die meisten<br />
Begrifflichkeiten nicht als Definition zu verstehen: Jede Methode, jeder Entwickler<br />
versteht in der Regel etwas anderes unter einem Begriff. Besonders kritisch ist die<br />
Verwendung von Begriffen für verschiedene Abstraktionsebenen. Es genügt nicht,<br />
von den Begriffen auf die Bedeutung zu schließen, sondern die Definition des Begriffs<br />
muss genau studiert werden. Diese Arbeit bemüht sich, zu den Begriffen immer<br />
eine Beschreibung zu liefern, welche die Bedeutung in dem vorliegenden Kontext<br />
verdeutlichen soll.<br />
2.1 Die IZB SOFT<br />
Die IZB SOFT entwickelt seit 30 Jahren <strong>Anwendung</strong>ssoftware für Banken und Versicherungen.<br />
Hauptkunden sind die bayerischen Sparkassen; insgesamt sind es<br />
82 bayerische Sparkassen, welche die IT-Dienstleistungen in Anspruch nehmen. Die<br />
IZB SOFT beschäftigt an den Standorten München und Nürnberg rund<br />
900 Mitarbeiter; im Jahre 2002 wurde eine Bilanzsumme von rund 144 Millionen<br />
Euro 5 erreicht.<br />
Ein Produkt, das die IZB SOFT für die bayerischen Sparkassen entwickelt hat und<br />
weiterentwickelt, ist PROFil. Im Umfeld dieses Projekts ist die vorliegende Arbeit<br />
entstanden. PROFil umfasst eine Reihe von Systemen, welche die Geschäftsprozesse<br />
der Sparkassen unterstützen. Als Beispiel kann etwa ein Teilschritt eines sehr einfachen<br />
Geschäftsprozesses dienen: Ein Mitarbeiter <strong>einer</strong> Filiale der Sparkassen, der<br />
einen Kunden berät, möchte sich die Daten des Kunden anzeigen lassen. Die <strong>Anwendung</strong><br />
stellt diesen Dienst zur Verfügung.<br />
5<br />
Diese Daten stammen von den Internetseiten der IZB SOFT: www.izb-soft.de.<br />
7
8 Das Umfeld in der IZB SOFT<br />
Die Ansprüche an die Qualität der Software für Finanzdienstleistung sind sehr hoch.<br />
Die technische Infrastruktur ist aufgrund der vielen Zugriffe <strong>einer</strong> hohen Belastung<br />
ausgesetzt. Zum Beispiel besteht das Service-Netz der bayerischen Sparkassen aus<br />
3100 Geschäftsstellen, welche die Infrastruktur nutzen. Insgesamt sind an die<br />
22 Millionen Konten zu verwalten – daraus ergibt sich eine hohe Anzahl an Buchungen,<br />
die täglich abgewickelt werden müssen.<br />
2.2 Der Softwareentwicklungsprozess<br />
Die <strong>Entwicklung</strong> <strong>einer</strong> <strong>Anwendung</strong> ist keine triviale Aufgabe. Um den Projektverlauf<br />
und die Ergebnisse planbar machen zu können, wird ein Softwareentwicklungsprozess<br />
eingesetzt. Ein Prozess behandelt die Gesamtheit aller Aktivitäten, d. h. sowohl die<br />
Aktivitäten, die den Ablauf koordinieren und den <strong>Entwicklung</strong>stand überwachen, als<br />
auch die Aktivitäten, die sich mit der <strong>Entwicklung</strong> der Software beschäftigen. Ein<br />
Prozess verfolgt immer auch eine Philosophie. Er wählt also eine bestimmte Anschauung<br />
auf die Sachverhalte und gibt Leitbilder vor, an denen man sich orientieren<br />
kann. Der Prozess mit dem die IZB SOFT ihre Software entwickelt, ist durch einen<br />
Standard vorgegeben, der im nächsten Abschnitt beschrieben wird.<br />
2.2.1 Systembereitstellungsprozess<br />
Der Systembereitstellungsprozess (SBP) [IZB 2003b] definiert einen Rahmen für die<br />
Abwicklung von Softwareprojekten, mit dem Ziel, für einen reibungslosen und effizienten<br />
Projektablauf zu sorgen. Deswegen werden in dem SBP z. B. Verantwortungen<br />
verteilt.<br />
Der Prozess, den die IZB SOFT anwendet, um ihre Produkte zu entwickeln, orientiert<br />
sich an dem Rational Unified Process (RUP) 6 , ein Softwareentwicklungsprozess, der<br />
von dem Unternehmen Rational Software entwickelt worden ist. Der RUP versucht<br />
einige »Best Practices« umzusetzen, die auch im SBP Verwendung finden. Im Folgenden<br />
werden die wichtigsten Eigenschaften des Prozesses vorgestellt.<br />
Iterative Vorgehensweise. Der SBP basiert auf <strong>einer</strong> iterativen Vorgehensweise,<br />
d. h. die Vorgehensweise ist eine bewusste Abgrenzung zum Wasserfallmodell. Die<br />
Disziplinen, die in der Softwareentwicklung mittlerweile gängig sind, nämlich Analyse,<br />
Entwurf, Implementierung und Test, werden zu <strong>einer</strong> Iteration zusammengefasst<br />
und während eines Projektes mehrfach durchlaufen (vgl. Abbildung 2-1). Eine Iteration<br />
schließt immer mit einem ausführbaren Programm ab, das einen Teil der Anforderungen<br />
bereits erfüllt. In den weiteren Iterationen werden Anforderungen hinzuge-<br />
6<br />
Der RUP ist in [Jacobson1999] genau beschrieben.
Der Softwareentwicklungsprozess 9<br />
nommen, in den Entwurf des Systems eingearbeitet und implementiert. Ein solches<br />
Vorgehen wird als inkrementell bezeichnet.<br />
Test<br />
Analyse<br />
Implementierung<br />
Entwurf<br />
Abbildung 2-1 Disziplinen <strong>einer</strong> Iteration<br />
Im Folgenden werden die Disziplinen <strong>einer</strong> Iteration erklärt:<br />
Analyse. In der Analyse werden die Anforderungen ermittelt. Diese ergeben sich<br />
aus dem <strong>Anwendung</strong>sbereich, wie z. B. dann, wenn ein bestimmter Geschäftsprozess<br />
der Sparkassen unterstützt werden soll. Die Anforderungen werden zu-<br />
¡<br />
sammen mit den Experten des <strong>Anwendung</strong>sbereichs ermittelt.<br />
Entwurf. Kernaufgabe beim Entwurf ist die Erstellung <strong>einer</strong> Architektur. Dazu<br />
muss eine Struktur des Systems entworfen und eine geeignete Zerlegung des<br />
¡<br />
Systems gefunden werden. Aus Gründen der Wiederverwendbarkeit und zur<br />
Bewältigung der Komplexität wird das System in Komponenten zerlegt.<br />
Implementierung. Gegenstand der Implementierung ist die Umsetzung der Komponenten<br />
in Quelltext. Die Vorgaben, die im Entwurf spezifiziert wurden, sollen<br />
¡<br />
eingehalten werden.<br />
Test. Das Testen von Software ist eine sehr wichtige Aufgabe, nicht nur um die<br />
Qualität der Software zu sichern, sondern auch um frühzeitig Fehler und Risiken<br />
¡<br />
zu erkennen. Auch für den Test sind modellbasierte Verfahren geeignet. In dieser<br />
Arbeit wird das Testen nicht behandelt – später wäre es jedoch möglich, anhand<br />
der Modelle, ein Verfahren für automatisiertes Testen zu entwickeln.<br />
Da ein Prozess und damit u. a. auch die Planbarkeit der <strong>Entwicklung</strong> von hoher Bedeutung<br />
sind, wird die Folge von Iterationen in Phasen unterteilt. Jede dieser Phasen<br />
legt einen Schwerpunkt in den Aktivitäten der Iteration fest und definiert einen Meilenstein,<br />
der akzeptiert werden muss, um in die nächste Phase zu gelangen. In der<br />
IZB SOFT werden diese Phasen Konzeption, Entwurf, Konstruktion und Übergang<br />
genannt.<br />
Ein anwendungsfallzentrierter Prozess. <strong>Anwendung</strong>sfälle bilden den Ausgangspunkt<br />
für viele der durchzuführenden Aktivitäten. Die Funktionalität, die in <strong>einer</strong> Iteration<br />
umgesetzt wird, orientiert sich an den <strong>Anwendung</strong>sfällen. Damit ist gewährleistet,<br />
dass alle Aktivitäten auf die Erfüllung von Anforderungen zurückzuführen sind.
10 Das Umfeld in der IZB SOFT<br />
Ein architekturzentrierter Prozess. Ziel ist es, so früh wie möglich eine grobe Systemstruktur<br />
zu entwickeln. Die Architektur, die bei der IZB SOFT zum Einsatz<br />
kommt, wird im folgenden Abschnitt beschrieben. Ausgangsbasis ist der Standard,<br />
d. h. eine definierte Architekturbeschreibung.<br />
2.3 Die Architektur der <strong>Anwendung</strong>en<br />
In diesem Abschnitt wird die Architektur der <strong>Anwendung</strong>en genauer betrachtet. Die<br />
Beschreibung <strong>einer</strong> Architektur gibt einen Überblick über das System und hilft dem<br />
Entwickler die Aufgabenstellung zu verstehen. An dieser Stelle wird die Architektur<br />
<strong>einer</strong> allgemeinen <strong>Anwendung</strong> beschrieben – später wird diese, anhand des Fallbeispiels,<br />
konkretisiert.<br />
Eine Architektur betrachtet die <strong>Anwendung</strong> aus verschiedenen Sichten und zeigt immer<br />
nur so viel Information an, wie zum Verständnis notwendig ist. Dadurch umreißt<br />
sie die <strong>Anwendung</strong> und macht deutlich, welche Prinzipien verfolgt werden müssen,<br />
um bereits bekannte Problemfelder zu vermeiden. Insbesondere wird darauf geachtet,<br />
dass die Zusammenhänge zwischen den einzelnen Teilen des Systems deutlich gemacht<br />
werden.<br />
Um die Architektur zu beschreiben, wird ein Teil des von [Kruchten] vorgeschlagenen<br />
»4+1«-Sichten-Modells genutzt, nämlich die physische und die logische Architektur;<br />
die weiteren Sichten werden ausgespart, da sie Teile der <strong>Anwendung</strong> beschreiben,<br />
die nicht zum allgemeinen Verständnis beitragen und für die Arbeit nicht relevant<br />
sind.<br />
Zunächst wird auf die physische Architektur eingegangen. Schwerpunkt dieser Betrachtungsweise<br />
ist die eingesetzte Hardware und die daraus resultierende Infrastruktur.<br />
Beschrieben wird auch, welche Plattformen die einzelnen Knoten bereitstellen.<br />
Besonders für Leser, die nicht mit dem Bereich der Großrechner vertraut sind, ist dieser<br />
Überblick interessant.<br />
Im Anschluss wird die logische Architektur der <strong>Anwendung</strong> erläutert. Dort wird<br />
hauptsächlich auf die grobe Zerlegung des Systems eingegangen, insbesondere auf die<br />
Schichtenarchitektur. Hinzu kommt eine Einführung in die Entwurfsprinzipien.<br />
2.3.1 Physische Architektur<br />
Die Welt der Großrechner besteht aus Terminals und Mainframes, die über ein Netzwerk<br />
verbunden sind. Abbildung 2-2 zeigt eine typische Client/Server-Architektur,<br />
wie sie im Bereich der Finanzanwendungen häufig zu finden ist. Auf den Clients läuft<br />
eine 3270-Terminal-Emulation, die über ein LAN/WAN auf IBM-Großrechner zugreift.<br />
Für die Datenverwaltung benutzen die Großrechner verschiedene Datenbanken.<br />
Ursprünglich waren die Arbeitsplatz-Rechner 3270 Display Stations, die über einen
Die Architektur der <strong>Anwendung</strong>en 11<br />
eigenen Controller mit dem Großrechner verbunden waren. Heutzutage werden PCs<br />
mit dem Betriebsystem Windows NT verwendet, auf denen eine Software läuft, die<br />
ein 3270-Terminal emuliert.<br />
LAN/WAN<br />
DB2<br />
Windows NT<br />
3270 Emulation<br />
IBM S/390<br />
Großrechner<br />
ADABAS<br />
Abbildung 2-2 Eine typische Client/Server-Architektur<br />
Die Hauptarbeit wird vom Großrechner erledigt. Ein 3270-Terminal zeigt lediglich<br />
Masken (Screen Maps) an. Unter <strong>einer</strong> Maske wird ein festgelegtes Layout mit diversen<br />
Eingabefeldern verstanden. Der Großrechner schickt mit dem 3270-Protokoll die<br />
Masken an das Terminal. Dieser zeigt sie an und interagiert mit dem Benutzer. Die<br />
mit den Benutzerdaten angereicherten Masken werden an den Großrechner zurückgeschickt.<br />
Dieser kann dann die Daten aus den Eingabefeldern verarbeiten.<br />
Der Großrechner bietet als Plattform einen S/390-Mainframe von IBM auf dem<br />
OS/390 läuft an. OS/390 ist ein System mit Stapelbetrieb (batch operation). Programme<br />
werden in Batch Jobs aufgeteilt, die nacheinander in den Speicher geladen<br />
und ausgeführt werden. Ein Batch Job stellt einen vollständig spezifizierten Auftrag<br />
dar und erhält Rechenzeit solange bis er fertig ist. Der Begriff stammt aus den Zeiten,<br />
als Programme noch in Form von Lochkarten stapelweise in den Großrechner geladen<br />
worden sind. Interagieren kann der Benutzer mit einem Batch Job natürlich nicht.<br />
Abhilfe schafft das Customer Information Control System (CICS). Dieses System<br />
läuft als Batch Job unter OS/390. [Menendez] schlägt vor:<br />
[…] you can think of CICS as an operating system within an operating system.<br />
CICS ermöglicht es, nicht nur interaktive Software zu entwickeln, sondern auch<br />
Online Transaction Processing zu unterstützen, d. h. es bestehen Funktionen, um<br />
Transaktionen zu verwalten. Außerdem werden Schnittstellen für den Datenbankzugriff<br />
angeboten. Für DB2 steht z. B. die Schnittstelle CICS/DB2 Attachment Facility<br />
zur Verfügung. Als Datenbank wird auch ADABAS eingesetzt.<br />
CICS-Programme sind in der Regel in <strong>COBOL</strong> geschrieben. Im folgenden Abschnitt<br />
werden die Teile, aus denen sich eine CICS/<strong>COBOL</strong>-<strong>Anwendung</strong> zusammensetzt,<br />
sowie Strategien zur Vermeidung eines Monolithen beschrieben.
12 Das Umfeld in der IZB SOFT<br />
2.3.2 Logische Architektur<br />
Die logische Architektur gibt einen Überblick über die Organisation der Softwarebausteine<br />
des Systems. Diese ist so gewählt, dass die funktionalen Anforderungen klar<br />
strukturiert realisiert werden können. Für die betrachtete <strong>Anwendung</strong> ergeben sich die<br />
funktionalen Anforderungen aus den zu unterstützenden Geschäftsprozessen der<br />
Sparkassen.<br />
In der IZB SOFT ist der Rahmen für die Architektur der <strong>Anwendung</strong>en in einem<br />
Standard definiert [IZB 2002b]. Dieser hat die Aufgabe, für weitere <strong>Entwicklung</strong>en<br />
eine einheitliche Architektur zu schaffen. Der Kern besteht aus zwei Konzepten:<br />
(1) Zerlegung der <strong>Anwendung</strong> in Komponenten; und (2) Organisation der Komponenten<br />
in Form <strong>einer</strong> Schichtenarchitektur. Im Folgenden werden die für diese Arbeit<br />
relevanten Punkte zusammengefasst.<br />
Kapselung. Kapselung ist ein wichtiges Konzept, das auf verschiedenen Ebenen<br />
eingesetzt wird. Es basiert auf dem Prinzip, Implementierungsdetails zu verstecken<br />
und eine Abstraktion nur durch eine Schnittstelle zugänglich zu machen. [Booch] definiert<br />
Kapselung als:<br />
The process of compartmentalizing the elements of an abstraction that constitute<br />
its structure and behavior; encapsulation serves to separate the contractual<br />
interface of an abstraction and its implementation.<br />
Diese Trennung von Innenansicht (white box) und Außenansicht (black box) wird bei<br />
Prozeduren, Modulen und Komponenten angewendet.<br />
Komponenten. Unter <strong>einer</strong> Komponente wird in dieser Arbeit ein Konzept verstanden,<br />
um Bauteile der <strong>Anwendung</strong> zusammenzufassen. Eine Komponente kapselt<br />
diese Menge von Bauteilen und spezifiziert die Schnittstellen, über die mit der Komponente<br />
kommuniziert werden kann. Die Implementierung der Schnittstellen, also die<br />
gekapselten Bauteile, ist von außen nicht sichtbar. Eine Schnittstelle besteht aus <strong>einer</strong><br />
Menge von Signaturen von Operationen sowie aus Vereinbarungen von Datenstrukturen.<br />
Schichtenarchitektur. Die Zerlegung eines Systems in Schichten ist eine weit verbreitete<br />
Architekturform. Jede Schicht bietet höhere Dienste an, aufbauend auf den<br />
Basisdiensten der untergeordneten Schichten. Dabei ist eine Schicht nur von untergeordneten<br />
Schichten abhängig und besitzt kein Wissen über höhere Schichten. Neben<br />
der geschlossenen Architektur, in der jede Schicht nur von der ihr untergeordneten<br />
Schicht abhängig sein darf, definiert [Buschmann] die Variante Relaxed Layered Sys-
Die Architektur der <strong>Anwendung</strong>en 13<br />
tem. In dieser gelockerten Variante darf jede Schicht alle, ihr untergeordneten,<br />
Schichten benutzen 7 .<br />
Die folgenden Absätze beschreiben die Aufgaben der einzelnen Schichten und grenzen<br />
sie voneinander ab.<br />
Präsentation. Gegenstand der Präsentationsschicht ist die Realisierung der Benutzerschnittstelle.<br />
Dazu werden die Daten dem Benutzer angezeigt und die Ereignisse,<br />
die der Benutzer auslöst, sei es durch seine Tastatur oder durch einen<br />
¢<br />
Mausklick, verarbeitet. Auch die Dialogsteuerung ist Aufgabe der Präsentation.<br />
Hierfür werden die entsprechenden Geschäftsvorfälle (Basisdienste der Steuerungsschicht)<br />
aufgerufen und Daten, die während eines Ablaufes benötigt werden,<br />
temporär gespeichert.<br />
Steuerung. Die von der Steuerungsschicht angebotenen Dienste repräsentieren<br />
Geschäftsvorfälle. Unter einem Geschäftsvorfall wird ein, in sich abgeschlossener,<br />
fachlicher Vorgang verstanden. Beispiele für Geschäftsvorfälle sind »Kunde<br />
¢<br />
finden« oder »Kundenmappe zusammenstellen«. Ein Geschäftsvorfall wird weiter<br />
in fachliche Funktionen (Basisdienste der Geschäftslogikschicht) unterteilt.<br />
Zur Abarbeitung eines Geschäftsvorfalles wird eine Reihe von fachlichen Funktionen<br />
ausgeführt. Zudem gibt es technische Aufgaben zu erfüllen: Ein Geschäftsvorfall<br />
ist zustandslos. Für jeden Aufruf wird eine Transaktion geöffnet,<br />
die mit der Übergabe eines konsistenten Ergebnisses abschließt.<br />
Geschäftslogik. Die Geschäftslogikschicht bietet fachliche Funktionen an und<br />
stellt somit Dienste zur Verfügung. Diese arbeiten die Teilschritte der Geschäftsvorfälle<br />
ab. Eine Kombination von fachlichen Funktionen ergibt einen Ge-<br />
¢<br />
schäftsvorfall. Die fachlichen Funktionen werden im Rahmen <strong>einer</strong> bestehenden<br />
Transaktion ausgeführt.<br />
Datenzugriff. Kernaufgabe der Datenzugriffsschicht ist die Kapselung der Datenzugriffe<br />
auf ein konkretes Datenbankmanagementsystem (DBMS). Ziel ist die<br />
¢<br />
Verbergung der verschiedenen Zugriffe auf die DBMS der unterschiedlichen<br />
Hersteller. Dazu wird eine einheitliche Schnittstelle für den Datenzugriff angeboten.<br />
Querschnittsschicht. Die Querschnittsschicht bietet technische Basisdienste an.<br />
Diese reichen von Logging über Druckfunktionen bis hin zum Fehlermanagement.<br />
Oft bietet sie auch eine Schnittstelle für Dienste des Betriebsystems ¢ an.<br />
7<br />
Der Standard gibt eine geschlossene Architektur vor. Allerdings wird in den Projekten aus Gründen<br />
der Performance meist die gelockerte Variante eingesetzt; z. B. dürfen in den meisten Fällen die<br />
Steuerungskomponenten auch auf die Datenstrukturen der Datenzugriffsschicht zugreifen.
14 Das Umfeld in der IZB SOFT<br />
In dieser Schichtenarchitektur werden logische Schichten betrachtet. Eine Aussage,<br />
wie diese Schichten in eine physische Architektur abgebildet werden könnten, wurde<br />
noch nicht getroffen. Im Abschnitt 2.3.1 wurde eine Client/Server-Architektur beschrieben.<br />
Heutzutage wird oft noch ein weiterer Server zwischen dem Terminal und<br />
dem Großrechner verwendet. Es gibt dann verschiedenen Möglichkeiten, die logischen<br />
Schichten auf diese beiden physischen Knoten abzubilden. Alle zu besprechen,<br />
würde den Rahmen dieser Arbeit sprengen. Im Folgenden wird eine Abbildung exemplarisch<br />
gewählt, um die Prinzipien der logischen Schichtentrennung erläutern zu<br />
können.<br />
Trennung in Front- und Backend. Wird eine scharfe Linie zwischen der Präsentationsschicht<br />
und der Geschäftslogikschicht gezogen, wird die Präsentation Frontend<br />
genannt. Die darunter liegenden Schichten werden mit Backend bezeichnet. In der<br />
Regel wird das Frontend auf einem eigenen Application Server laufen und das Backend<br />
auf dem Host. Die Aufgabe des Backends ist es, die Dienste für das Frontend<br />
bereitzustellen. Somit wird eine Multikanalstrategie verfolgt: verschiedene Präsentationen<br />
wie z. B. Web oder 3270 rufen die Geschäftsvorfälle des Backends auf.<br />
Schwerpunkt dieser Arbeit ist die modellbasierte <strong>Entwicklung</strong> der vom Backend angeboten<br />
Dienste (vgl. Abbildung 2-3). Die Anordnung der Präsentationsschicht ist<br />
dafür nicht relevant, da in beiden Fällen die Geschäftsvorfälle auf dem Großrechner<br />
mit <strong>COBOL</strong> realisiert werden. Somit liegt eine klassische dienstorientierte Architektur<br />
vor. Die Dienste des Backends sind zustandslos und können innerhalb <strong>einer</strong><br />
Transaktion abgearbeitet werden. Diese Art von Diensten ist für ein Frontend mit<br />
Web-Technologie vorteilhaft.<br />
Web Server<br />
OS/390<br />
CICS<br />
Präsentationsschicht<br />
CICS Transaktions<br />
Gateway<br />
Präsentationsschicht<br />
Steuerungsschicht<br />
Geschäftslogikschicht<br />
Datenzugriffsschicht<br />
Querschnittsschicht<br />
Fokus dieser Arbeit<br />
Abbildung 2-3 Fokus dieser Arbeit
<strong>COBOL</strong>: Begriffe & Konzepte 15<br />
2.4 <strong>COBOL</strong>: Begriffe & Konzepte<br />
Innerhalb der Schichten werden die Komponenten vorwiegend in <strong>COBOL</strong> realisiert.<br />
Um bei der Modellierung ein Ziel vor Augen zu haben, ist es wichtig die Grundkonzepte<br />
zu verstehen, die <strong>COBOL</strong> bietet. Genauso wichtig ist es, die Grenzen von<br />
<strong>COBOL</strong> zu kennen. Der folgende Abschnitt gibt eine Einführung in die wichtigsten<br />
Konzepte und Begriffe.<br />
Welche Punkte sind für diese Arbeit relevant Ein Schwerpunkt der Modellierung<br />
liegt in der Spezifikation der Schnittstellen. Hierfür wird das Konzept der Module<br />
erklärt sowie die Technik, welche von den Modulen verwendet wird, um andere Module<br />
aufzurufen. Für die Übergabe von Parametern wird das Konzept der Variablen<br />
und der Datenstrukturen benötigt. Außerdem wird die copy-Anweisung, Zeiger und<br />
ein Muster für Modulaufrufe erklärt.<br />
<strong>COBOL</strong> steht für Common Business Orientated Language. Die Sprache existiert seit<br />
1959 und wurde seit ihrer Schöpfung mehrmals erneuert. Der letzte offizielle Standard<br />
ist <strong>COBOL</strong> 85, ein Standard der 1985 verabschiedet worden ist und in dem auch<br />
die meisten Programme der IZB SOFT verfasst sind. In den Bereichen der Finanzgeschäfte<br />
konnte sich <strong>COBOL</strong> eindeutig durchsetzen: 65% aller kritischen <strong>Anwendung</strong>en<br />
nutzten 1995 <strong>COBOL</strong> [Brown]; die meisten dieser <strong>Anwendung</strong>en existieren auch<br />
heute noch – so bleibt <strong>COBOL</strong> eine Sprache, mit der man sich auch in Zeiten von<br />
Java und C# auseinandersetzen muss.<br />
2.4.1 Programme, Paragraphen und Module<br />
<strong>COBOL</strong> ist eine imperative und prozedurale Programmiersprache, d. h. Programme<br />
sind Folgen von Anweisungen. Diese Anweisungen ändern Variablen und somit den<br />
Zustand des Programms. Seit den Anfängen der Informatik, als noch hauptsächlich in<br />
Assembler programmiert wurde, wird versucht, Abstraktionen zu finden, mit denen<br />
sich das Programmieren übersichtlicher gestalten lässt. Die Prozedur ist ein solches<br />
Konstrukt. Eine Prozedur umfasst eine logisch zusammengehörige Folge von Anweisungen.<br />
Damit Abstraktionen funktionieren, müssen die ausgesparten Details auch<br />
versteckt und somit abkapselt werden, d. h. das Geheimnisprinzip (information hiding)<br />
muss umgesetzt werden. Für eine Prozedur würde das bedeuten, dass lokale Variablen<br />
außerhalb der Prozedur nicht sichtbar sind – dies ist unter <strong>COBOL</strong> nicht möglich.<br />
Anweisungen, die einen abgeschlossenen Programmteil darstellen, können zwar<br />
zu einem Paragraphen zusammengefasst werden, aber die Variablen bleiben immer<br />
im ganzen Programm sichtbar.<br />
Beim Zerlegen größerer Programme genügen Prozeduren nicht als Abstraktionsmittel.<br />
Deswegen werden große Programme in Module zerlegt. Jedes Modul hat eine Schnitt-
16 Das Umfeld in der IZB SOFT<br />
stelle über die mit dem Modul kommuniziert wird. Ein Modul kann als Einheit übersetzt<br />
werden (compilation unit)<br />
Ein Modul fasst Prozeduren und die benötigten Datenstrukturen zu <strong>einer</strong> Einheit zusammen.<br />
Auch hier sollen die Details, d. h. die Implementierung der Prozeduren und<br />
die benötigten Variablen eines Moduls, gekapselt werden. Diese Abstraktion wird von<br />
<strong>COBOL</strong> unterstützt. Allerdings sind die Möglichkeiten für die Definition der Schnittstellen<br />
unzureichend. Weiter unten wird erklärt, wie ein Modul, das von außen einen<br />
schwarzen Kasten darstellt, über eine Schnittstelle aufzurufen ist.<br />
Ein Modul ist in vier Bereiche unterteilt:<br />
identification division. In diesem Bereich findet der Compiler oder der Entwickler<br />
Informationen über das Programm. Vorgeschrieben ist die program-id,<br />
£<br />
die den Namen des Moduls spezifiziert.<br />
environment division. Dieser Bereich enthält Informationen über das Umfeld,<br />
in dem das Modul ausgeführt wird. Hier wird z. B. spezifiziert, dass der decimal-point<br />
ein Komma £ ist.<br />
data division. In diesem Bereich werden Daten definiert. Er ist weiter unterteilt<br />
in die working-storage section und die linkage section.<br />
£<br />
procedure division. Dieser Bereich enthält Anweisungen, um die Daten in der<br />
data division zu manipulieren. Die procedure division ist hierarchisch gegliedert<br />
in section, paragraph, sentence und £ statement.<br />
2.4.2 Daten<br />
Daten sind für <strong>Anwendung</strong>en ein wichtiger Bestandteil: Fachliche Informationen aus<br />
dem Gegenstandsbereich der <strong>Anwendung</strong> werden durch Daten repräsentiert. In diesem<br />
Abschnitt wird beschrieben, wie Daten in <strong>COBOL</strong> definiert und benutzt werden.<br />
Um Daten innerhalb eines Moduls zu bearbeiten, werden Variablen benutzt. Variablen<br />
besitzen eine Referenz und einen Wert. Die Vereinbarungen werden in der working-storage<br />
section festgelegt. Hier werden die Variablen an einen Namen gebunden.<br />
Der Gültigkeitsbereich (scope) der Vereinbarungen ist das ganze Modul. Somit<br />
kann innerhalb des Moduls auf den Wert der Variable durch den Namen zugegriffen<br />
werden.<br />
Die Variablen besitzen eine Wertesemantik, d. h. die Referenz der Variable bestimmt<br />
eindeutig den Speicherbereich, der den Wert der Variable enthält. Wenn eine Variable<br />
deklariert wird, wird automatisch ein Speicherbereich reserviert, der den Wert der<br />
Variable aufnehmen kann.
<strong>COBOL</strong>: Begriffe & Konzepte 17<br />
Beim deklarieren <strong>einer</strong> Variable wird zwischen zwei Arten von Variablen unterschieden.<br />
Es gibt die einfache Variable (elementary item) und die zusammengesetzte Variable<br />
(group item).<br />
Einfache Variable. Bei <strong>einer</strong> Deklaration <strong>einer</strong> einfachen Variablen weiß der Compiler<br />
wie groß der Speicherbereich sein muss und kennt die Menge der möglichen<br />
Werte, die dort gespeichert werden können.<br />
Eine Deklaration <strong>einer</strong> einfachen Variablen besteht aus <strong>einer</strong> Level Number, einem<br />
Namen, und <strong>einer</strong> picture-Klausel.<br />
01 DER-NAME PICTURE X(30) VALUE "HEINZ".<br />
Die picture-Klausel definiert den Typ und die Größe der Variablen, also die Menge<br />
ihrer möglichen Werte. Es gibt drei Datentypen: (1) Alphabetic, (2) Alphanumeric<br />
und (3) Numeric.<br />
Eine Variable kann mit der value-Klausel initialisiert werden. Die Länge <strong>einer</strong> Variablen<br />
kann auf zwei verschiedene Arten spezifiziert werden. Soll z. B. eine numerische<br />
Variable mit genau 4 Stellen definiert werden, wird entweder<br />
oder<br />
01 NUMMER PICTURE 9(4)<br />
01 NUMMER PICTURE 9999<br />
verwendet 8 .<br />
Zusammengesetzte Variable. Mit <strong>einer</strong> zusammengesetzten Variable (group item)<br />
werden mehrere Variablen zu <strong>einer</strong> Gruppe zusammengefasst. Eine zusammengesetzte<br />
Variable ergibt eine Datenstruktur oder einfach eine Struktur. Der Wert, den eine<br />
Struktur annehmen kann, ist das kartesische Produkt von den Werten der enthaltenen<br />
Variablen. Die Struktur kann beliebig geschachtelt werden (nested structure), d. h.<br />
eine Struktur kann auch eine Variable enthalten, die wiederum eine Struktur darstellt.<br />
Der entscheidende Unterschied zu anderen Sprachen ist, dass eine Datenstruktur nicht<br />
an eine Typbezeichnung gebunden werden kann. Somit ist es auch nicht möglich,<br />
Variablen an diese Typbezeichnung zu binden. Sollen zwei Variablen mit derselben<br />
Struktur definiert werden, muss für jede Variable die Struktur beschrieben werden. Es<br />
gibt in <strong>COBOL</strong> einen Mechanismus, um diese doppelte Schreibarbeit zu umgehen.<br />
Dieser Mechanismus wird durch die Vorübersetzer-Anweisung copy realisiert, die<br />
weiter unten erklärt wird.<br />
8<br />
Weiter gibt es die Möglichkeit, Vorzeichen zu definieren, Dezimalpunkte festzulegen oder noch<br />
genauere Angaben zu den Typen zu machen. Eine ausführliche Darstellung, würde den Rahmen dieser<br />
Arbeit sprengen.
18 Das Umfeld in der IZB SOFT<br />
Die Deklaration <strong>einer</strong> Struktur-Variablen hat eine Level Number und einen Namen –<br />
keine picture-Klausel. Für eine Strukturvariable wird die Größe des zu reservierenden<br />
Speichers aus den einfachen Nachfahren berechnet. Eine Strukturvariable bezeichnet<br />
nur ein Aggregat von tatsächlichen Variablen.<br />
01 RECORD<br />
05 ELEMENTARY-ITEM-A PIC 9(4)<br />
05 ELEMENTARY-ITEM-B PIC X<br />
05 GROUP-ITEM<br />
10 ELEMENTARY-ITEM-C PIC X(20)<br />
10 ELEMENTARY-ITEM-D PIC X(20)<br />
Die Level Number bestimmt die Anordnung des Feldes in der Hierarchie der Datenstruktur.<br />
Wichtig ist, dass diese eine relative Nummer darstellt, d. h. eine Nummer ist<br />
nicht absolut, sondern immer relativ zu der Nummer des ihr über- oder untergeordneten<br />
Feldes zu sehen. Je höher die Nummer ist, desto tiefer liegt die Variable in der<br />
Hierarchie. Auf der tiefsten Ebene sind alle Variablen einfach. Die Top-Level Variable,<br />
also die Variable mit der Level Number »1«, wird Record genannt.<br />
Eine Datenstruktur repräsentiert einen Baum: an ihren Blättern sind die einfachen<br />
Variablen; die inneren Knoten sind die zusammengesetzten Variablen. Innerhalb der<br />
IZB SOFT regelt der Standard »Programmierrichtlinien <strong>COBOL</strong>« [IZB 2002d] den<br />
Stil der Programme. Für die Variablen ist z. B. vorgegeben, dass die Namen der Variablen<br />
innerhalb eines Moduls eindeutig sind.
<strong>COBOL</strong>: Begriffe & Konzepte 19<br />
2.4.3 Aufruf eines Moduls<br />
Ein großes Programm wird in der Regel in Module zerlegt. Diese Module können sich<br />
gegenseitig aufrufen. Allerdings darf ein Modul, das Modul von dem es aufgerufen<br />
worden ist, selbst nicht aufrufen. Der Aufruf erfolgt mit der call-Anweisung, die<br />
auch die Parameterübergabe steuert. Im Folgenden wird dieses Konzept anhand eines<br />
Beispiels erklärt. Es wird davon ausgegangen, dass ein Modul A ein Modul B mit den<br />
Argumenten a1, a2 und a3 aufruft.<br />
Modul A:<br />
IDENTIFICATION DIVISION.<br />
PROGRAM-ID. A.<br />
DATA DIVISION.<br />
...<br />
WORKING-STORAGE SECTION.<br />
01 A1 PIC X.<br />
01 A2 PIC X.<br />
01 A3 PIC X.<br />
...<br />
PROCEDURE DIVISION<br />
...<br />
CALL B USING A1 A2 A3.<br />
Modul B:<br />
IDENTIFICATION DIVISION.<br />
PROGRAM-ID. B.<br />
DATA DIVISION.<br />
...<br />
LINKAGE SECTION.<br />
01 P1 PIC X.<br />
01 P2 PIC X.<br />
01 P3 PIC X.<br />
...<br />
PROCEDURE DIVISION USING P1 P2 P3.<br />
Das Modul A deklariert drei Variablen und ruft mit der call-Anweisung das Modul B<br />
auf. Die Argumente werden in der using-Klausel spezifiziert.<br />
Das Modul B spezifiziert die Parameter in der using-Klausel der procedure<br />
division. Parameter, die in der using-Klausel vorkommen, müssen in der<br />
linkage section deklariert sein. Im Gegensatz zu <strong>einer</strong> Deklaration in der workingstorage<br />
section handelt es sich hier um eine Referenzsemantik: Es wird kein Speicher<br />
reserviert und auf die Variable, die an den Parameter gebunden wird, können<br />
mehrere Referenzen verweisen.<br />
Nach dem Aufruf werden im Modul B die Parameter initialisiert. Dieser Vorgang<br />
wird als Parameterübergabe bezeichnet. Der Mechanismus, der von <strong>COBOL</strong> für die
20 Das Umfeld in der IZB SOFT<br />
Parameterübergabe angewandt wird, ist standardmäßig ein Referenzaufruf: Der Parameter<br />
wird mit der Referenz des Arguments initialisiert. Der Typ des Arguments<br />
muss äquivalent zum Typ des Parameters sein. Argument und Parameter greifen auf<br />
denselben Speicherbereich zu.<br />
Die Semantik ändert sich je nachdem, was innerhalb des Moduls mit dem Parameter<br />
passiert. Dabei werden drei Fälle unterschieden (vgl. [Goos] S. 27):<br />
Eingabeparameter (in). Wird der Wert des Parameters innerhalb des Moduls<br />
nicht geändert, wird von einem Eingabeparameter gesprochen.<br />
¤<br />
Ausgabeparameter (out). Wird der Parameter innerhalb eines Moduls, unabhängig<br />
von seinem ursprünglichen Wert, mit einem Wert belegt, wird er Ausgabeparameter<br />
¤ genannt.<br />
Übergangsparameter (inout). Ist ein Eingabeparameter zugleich ein Ausgabeparameter,<br />
so heißt er Übergangsparameter.<br />
¤<br />
2.4.4 COPY-Dateien<br />
Das erste, was man als Student in <strong>einer</strong> Firma mitbekommt, die <strong>Anwendung</strong>en für<br />
Großrechner entwickelt, ist, dass »Copydateien«, »Copystrecken« oder »Copys« viele<br />
Eigenschaften haben: Sie können »übergeben werden« oder »eine Schnittstelle darstellen«.<br />
Welche Funktionen erfüllt also dieses Zaubermittel, von dem [Budlong]<br />
schreibt:<br />
The COPY statement to the rescue!<br />
Wichtig ist, den Mechanismus, den die copy-Anweisung anbietet, klar von den verschiedenen<br />
<strong>Anwendung</strong>smöglichkeiten zu trennen.<br />
Der Mechanismus. Mit der copy-Anweisung wird Quelltext aus <strong>einer</strong> Datei in eine<br />
Moduldatei eingebunden. Die Anweisung selber wird nicht übersetzt, sondern vor<br />
dem Übersetzen wird der Quelltext aus den Dateien, die in den copy-Anweisungen<br />
spezifiziert sind, an den entsprechende Stellen eingefügt; erst danach wird das Modul<br />
übersetzt.<br />
Der Nutzen. In dem Abschnitt über Daten wurde festgestellt, dass es keine Möglichkeit<br />
gibt, eine Datenstruktur an einen Typbezeichner zu binden und mehrmals zu verwenden.<br />
Stattdessen muss alles mehrfach getippt werden. Mit Hilfe der copy-<br />
Anweisung kann eine Datenstruktur, die von mehreren Modulen genutzt werden soll,<br />
einmal definiert und dann an verschiedenen Variablen »gebunden« werden. Eine<br />
copy-Datei steht also für eine konkrete Datenstruktur, die wiederverwendet werden<br />
soll.
<strong>COBOL</strong>: Begriffe & Konzepte 21<br />
Für die Variablen innerhalb <strong>einer</strong> copy-Datei machen die Programmierrichtlinien der<br />
IZB SOFT eine Einschränkung: Der Feldname darf maximal 6 Stellen lang sein.<br />
2.4.5 Zeiger<br />
Als Erweiterung gibt es in <strong>COBOL</strong> Zeiger; das folgende Listing zeigt die Deklaration<br />
des Zeigers:<br />
IDENTIFICATION DIVISION.<br />
PROGRAM-ID. ZEIGER-BEISPIEL.<br />
...<br />
WORKING-STORAGE SECTION.<br />
01 EINE-STRUKTUR.<br />
...<br />
DATA DIVISION.<br />
...<br />
LINKAGE SECTION.<br />
01 EINGABE-ZEIGER USAGE IS POINTER.<br />
01 STRUKTUR-DEFINITION.<br />
...<br />
PROCEDURE DIVISION USING EINGABE-ZEIGER.<br />
Ausgehend von dem Listing können zwei Szenarien betrachtet werden:<br />
Szenario #1. Dem Modul wird ein Zeiger übergeben, von dem der Entwickler weiß,<br />
dass der Zeiger auf eine Struktur vom Typ struktur-definition zeigt. Um die<br />
Struktur, auf die der Zeiger zeigt, nutzen zu können, muss der Zeiger erst dereferenziert<br />
werden. Dazu wird der Zeiger mit der folgenden Anweisung an die Struktur gebunden:<br />
SET ADDRESS OF STRUKTUR-DEFINITION TO EINGABE-ZEIGER.<br />
In [Rechenberg] ist »Dereferenzieren« wie folgt definiert:<br />
Der Übergang zum Wert <strong>einer</strong> durch Zeiger gegebenen Variablen heißt Dereferenzieren.<br />
Die Variable struktur-definition wird in der Regel nie als Parameter übergeben.<br />
Sie wird als Datenstrukturdefinition benötigt.<br />
Szenario #2. Dem Modul wird ein Zeiger übergeben, und der Entwickler möchte,<br />
dass dieser auf die Struktur eine-struktur zeigt. Dazu wird dem Zeiger auf folgende<br />
Weise die Adresse von eine-struktur zugewiesen:<br />
SET EINGABE-ZEIGER TO ADDRESS OF EINE-STRUKTUR.
22 Das Umfeld in der IZB SOFT<br />
2.4.6 Muster für den Modulaufruf<br />
Wie bereits festgestellt wurde, sind die Konzepte, die <strong>COBOL</strong> für die Kapselung auf<br />
verschiedenen Ebenen anbietet, sehr bescheiden. Darum werden Muster verwendet,<br />
mit denen weitere Konstrukte realisiert werden können.<br />
Ein Modul stellt logisch eine Menge von Prozeduren dar. Jede Prozedur hat eine Signatur,<br />
welche die Parameter spezifiziert. Die tatsächliche Schnittstelle eines <strong>COBOL</strong>-<br />
Moduls bietet jedoch nur einen Satz von Parametern an (vgl. Abschnitt 2.4.3). Das im<br />
Folgenden beschriebene Muster zeigt eine Abhilfe für diese Beschränkung:<br />
Es werden eine Enumeration und ein Zeiger übergeben. Die Enumeration spezifiziert,<br />
welche Operation aufgerufen werden soll; der Zeiger zeigt auf die Datenstruktur, in<br />
welche die Argumente für den Aufruf stehen. Das Modul, welches aufgerufen wird,<br />
evaluiert die Enumeration und legt dann die entsprechende Parameter-Struktur über<br />
das Argument. Danach wird die section ausgeführt, welche die spezifizierte Operation<br />
realisiert.<br />
2.4.7 Komponenten in <strong>COBOL</strong><br />
Eine Zerlegung in Module reicht für die in dieser Arbeit vorgestellten <strong>Anwendung</strong>en<br />
nicht aus: Sie sind zu groß. Es wird demnach ein Konstrukt benötigt, um mehrere<br />
Module zu gruppieren, die einen abgeschlossenen Dienst realisieren.<br />
In der Zusammenfassung der Architektur-Rahmenbedingungen (vgl. Abschnitt 2.3.2)<br />
wurde der Begriff »Komponente« bereits allgemein definiert. Im Folgenden wird dieser<br />
Begriff auf der Basis von <strong>COBOL</strong>-Konstrukten konkretisiert:<br />
Eine Komponente stellt ein rein logisches Konstrukt dar: Es gibt keinen Mechanismus<br />
in <strong>COBOL</strong>, der eine Komponente realisiert.<br />
Eine Komponente umfasst eine Menge von Modulen, Datenstrukturen und wiederverwendbaren<br />
Datenstrukturen (Copystrecken). Die gruppierten Module realisieren<br />
einen abgeschlossenen Dienst. Komponenten sind, wenn sie von außen betrachtet<br />
werden, schwarze Kästen.<br />
Nur über die definierten Schnittstellen kann mit <strong>einer</strong> Komponente kommuniziert<br />
werden. Eine Schnittstelle enthält Definitionen von Datenstrukturen und Signaturen<br />
von Operationen. Neben den Schnittstellen exportiert eine Komponente nur die wiederverwendbaren<br />
Datenstrukturen, welche in den Signaturen der Operationen vorkommen.<br />
Damit wird die Implementierung der Komponente, also die Module, welche<br />
die Operationen der Schnittstelle realisieren, vollständig gekapselt. Dazu muss der<br />
Entwickler sicherstellen, dass nur Module aufgerufen werden, für die logisch auch<br />
eine Schnittstelle definiert worden ist.
3 <strong>Modellbasierte</strong> Softwareentwicklung<br />
Diese Arbeit untersucht <strong>einer</strong>seits systematische Vorgehensweisen, um Software modellbasiert<br />
zu entwickeln, und betrachtet andererseits <strong>COBOL</strong>, eine Programmiersprache,<br />
die speziell bei IT-Systemen von Finanzdienstleistern oft eingesetzt wird.<br />
Auf den ersten Blick passen diese beiden Techniken nicht zusammen. <strong>Modellbasierte</strong><br />
Softwareentwicklung ist eine junge Vorgehensweise und muss erst noch beweisen, ob<br />
sie die erhoffte Verbesserung der <strong>Entwicklung</strong> auch in der Praxis leisten kann 9 . Die<br />
Legacy-Programmiersprache <strong>COBOL</strong>, die es schon seit 1959 gibt, ist gleichzeitig eine<br />
der meistverwendeten und meistkritisierten Programmiersprachen. Sie wird zwar den<br />
höheren Programmiersprachen zugeordnet, bietet aber kaum Mechanismen, mit denen<br />
man größerer <strong>Anwendung</strong>en effektiv zerlegen kann.<br />
Das ist jedoch der Grund, warum die beiden Techniken sich gut vereinbaren lassen:<br />
Wenn die verwendete Programmiersprache wenige Konzepte für die Modularisierung<br />
und Kapselung bietet, ermöglichen modellbasierte Softwareentwicklungsverfahren,<br />
auf logischer Ebene die Software zu zerlegen und deren Implementierungsdetails zu<br />
verstecken. 10<br />
3.1 Grundlagen der modellbasierten <strong>Entwicklung</strong><br />
Unter modellbasierter <strong>Entwicklung</strong> wird der Einsatz von systematischen Vorgehensweisen<br />
verstanden, die auf Modelle basieren. Ziel ist es, große Mengen an anfallenden<br />
Informationen sowie deren Komplexität in den Griff zu bekommen. Allerdings gibt es<br />
für solche Verfahren noch keine allgemeingültige Definition [Schätz].<br />
Modelle eignen sich ideal für die Aussparung von unnötigen Details und werden<br />
schon seit langem zum Entwickeln von Software eingesetzt. Viele der in der <strong>Entwicklung</strong><br />
eingesetzten Konzepte basieren auf Abstraktion und die Modellierung ist ein<br />
geeignetes Mittel, um die Abstraktion zu visualisieren [Booch].<br />
In <strong>einer</strong> modellbasierten Methodik sind aber Modelle viel mehr als reine Visualisierungsmittel<br />
von Software: Sie steuern die <strong>Entwicklung</strong> und sind die zentrale Stelle für<br />
9<br />
In diesem Bereich wird zurzeit viel geforscht. Einen Standard gibt es bereits: die Model Driven<br />
Architecture (MDA) der OMG. Internetseite: www.omg.org/mda.<br />
10 Dies könnte auch ein Grund dafür sein, warum im Bereich Embedded Systems vermehrt versucht<br />
wird, modellbasierte Methoden einzusetzen. Vgl. dazu [Schätz].<br />
23
24 <strong>Modellbasierte</strong> Softwareentwicklung<br />
die Informationserfassung des jeweiligen Arbeitsablaufes. Diese erweiterte Rolle beschreibt<br />
[Nobe] auf folgende Weise:<br />
Wenn wir einen <strong>Entwicklung</strong>sprozess auf Modellen aufbauen, werden diese<br />
zu den zentralen koordinierenden Elementen des Prozesses.<br />
Eine solche Rolle kann sowohl ein einziges Modell, als auch eine Menge von unabhängigen<br />
Modellen, nicht erfüllen. Deswegen beruht eine modellbasierte Methodik<br />
immer auf einem Modellsystem.<br />
Die wichtigsten Konzepte eines Modellsystems sind im Folgenden beschrieben, sowie<br />
in Abbildung 3-1 anhand eines Beispiels dargestellt. 11<br />
Modell. Ein Modellsystem ist in Modellebenen untergliedert. Jede Modellebene<br />
wird durch genau ein Modell repräsentiert, dessen Abstraktionsgrad von der Höhe der<br />
Ebene abhängt. Wichtig ist, dass zwischen den Modellen Zusammenhänge bestehen.<br />
Ein Modell hat die Aufgabe, das System aus seinem Blickwinkel vollständig zu beschreiben<br />
(self-contained view). Das heißt, der Betrachter benötigt keine weiteren<br />
Modelle, um diese Ebene des Systems zu verstehen [Jacobson1999].<br />
Zusammengenommen enthalten alle Modelle die gesamte Information, die für die<br />
<strong>Entwicklung</strong> notwendig ist. Es ist jedoch nicht zwingend, dass alle Informationen<br />
<strong>einer</strong> Ebene als Modell dargestellt werden. Verschiedene Repräsentationen von Informationen,<br />
wie z. B. Textdateien, können in die Modelle eingebunden werden. Um<br />
die Modelle zu repräsentieren, wird eine graphische Modellierungssprache gewählt.<br />
Bei der IZB SOFT wird die UML eingesetzt.<br />
Metamodelle. Ein Modell beschreibt eine Ebene des Systems. Dabei werden Modellierungskonzepte<br />
der Modellierungssprache angewendet, um die entsprechenden<br />
Aspekte des Systems zu modellieren. Diese Modellierungskonzepte zu beschreiben<br />
und deren Verwendung einzuschränken, ist Gegenstand der Metamodelle. Die Elemente<br />
eines Metamodells M Meta beschreiben und spezifizieren die Konzepte, die in<br />
dem Modell M eingesetzt werden. Jedes Modell wird durch ein Metamodell spezifiziert.<br />
Sichten. Für jedes Modell kann eine Menge von Sichten definiert werden. Eine<br />
Sicht ist ein Ausschnitt, also eine Teilmenge der Modellelemente. Alle Sichten zusammen<br />
enthalten alle Elemente des Modells. Die Sichten werden in Rational Rose 12<br />
durch Diagramme repräsentiert. Wie viele Diagramme benutzt werden und welche<br />
Elemente aus der Sicht dargestellt werden, ist schwer vorzugeben, da es stark von der<br />
Situation abhängt: Ein Paket mit 100 Klassen wird anders dargestellt als ein Paket mit<br />
3 Klassen. Deswegen ist die Wahl der Diagramme nicht zu restriktiv vorzugeben.<br />
11 Vgl. »Architektur von Informationssystemen« von E. J. Sinz in [Rechenberg].<br />
12 Rational Rose ist ein UML-basiertes <strong>Entwicklung</strong>swerkzeug. Es wird in der IZB SOFT eingesetzt.
Grundlagen der modellbasierten <strong>Entwicklung</strong> 25<br />
Zusammenhänge zwischen den Modellen. Entscheidend für die Bewältigung der<br />
Komplexität ist die Beschreibung der Zusammenhänge zwischen den Modellen. Dadurch<br />
lassen sich redundante Informationen automatisch ableiten und konsistent halten.<br />
Die Beziehungen dokumentieren auch die Rückverfolgbarkeit (traceability). Die<br />
Zusammenhänge der Modelle werden spezifiziert, in dem die Elemente der jeweiligen<br />
Metamodelle in Beziehung gestellt werden.<br />
Modellebenen<br />
Fachliche Sicht<br />
Sichten<br />
Komponentensicht<br />
Diagramme<br />
(Ergeben zusammen eine<br />
Instanz der Sicht)<br />
Fachliches Metamodell<br />
Fachliches<br />
Modell<br />
Abbildung<br />
Fachliches<br />
Modell auf<br />
Designmodell<br />
Designmetamodell<br />
Metamodelle<br />
Instanzen der<br />
Elemente des<br />
Metamodells<br />
Zusammenhänge<br />
zwischen den<br />
Metamodellen<br />
Modulsicht<br />
Designmodell<br />
Abbildung 3-1 Beispiel für ein Modellsystem<br />
Auf der Basis des Modellsystems wird ein systematisches Vorgehen für die Übergänge<br />
zwischen den Modellen definiert. Dieses systematische Vorgehen schafft eine<br />
Grundlage für die Generierung: Aus Modellen können Dokumente, Programme oder<br />
weitere Modelle generiert werden. Je nachdem was generiert werden soll, ändert sich<br />
die Genauigkeit der Modelle. So kann es sein, dass Modelle durch formale Spezifikationen,<br />
wie z. B. OCL 13 angereichert werden. Es ist nicht möglich, aus einem Modell<br />
gleichzeitig ein rein fachliches Konzept und ein Quelltext für eine spezifische<br />
<strong>COBOL</strong>-Umgebung zu erzeugen.<br />
Ein Modell mit einem hohen Abstraktionsgrad kann z. B. die Fachlichkeit eines Systems<br />
vermitteln. Mit einem solchen Modell wäre es möglich, über ein System zu diskutieren<br />
– ohne die technischen Details zu kennen. Außerdem wäre es möglich, aus<br />
einem solchen Modell ein Fachkonzept zu generieren.<br />
13 Mit der Object Constraint Language (OCL) können Beschränkungen der Modellelemente formuliert<br />
werden.
26 <strong>Modellbasierte</strong> Softwareentwicklung<br />
Ein Modell mit einem niedrigen Abstraktionsgrad kann z. B. einen vollständigen<br />
Bauplan <strong>einer</strong> Implementierung darstellen. Solch ein Modell würde es erlauben, Programmrahmen<br />
zu generieren.<br />
Vor folgender falschen Annahme sei gewarnt:<br />
Falsche Annahme. Aus einem einzigen Modell kann alles generiert werden. Ein<br />
Modell abstrahiert von Details. Bei der Generierung können nur Rahmen erzeugt<br />
werden. Die Details für die generierten Artefakte muss der Entwickler selbst hinzufügen.<br />
So kann z. B. aus einem fachlichen Modell ein technisches Modell nicht komplett<br />
generiert werden. Der automatische Übergang zwischen einem rein fachlichen<br />
Modell in ein technisches Modell kann nur folgendes leisten: Bereits definierte Rahmen<br />
für das technische Design können erzeugt werden. Die fachlichen Elemente können<br />
in die technischen Konzepte abgebildet werden. Alle rein technischen Aspekte<br />
müssen von den Entwicklern entworfen werden.<br />
Bei einem modellbasierten Vorgehen ist der Einsatz von Werkzeugen entscheidend.<br />
Sie unterstützen die <strong>Entwicklung</strong> an verschiedenen Stellen: Zum einen können sie die<br />
Übergänge zwischen den Modellebenen automatisieren, und zum anderen bei Änderungen<br />
in den tieferen Ebenen die höheren Ebenen nachziehen. Die Modelle der verschiedenen<br />
Ebenen per Hand konsistent zu halten, ist mit sehr viel Aufwand verbunden.<br />
Deswegen beschleunigen Werkzeuge die <strong>Entwicklung</strong>.
Das bisherige Vorgehen der IZB SOFT 27<br />
3.2 Das bisherige Vorgehen der IZB SOFT<br />
In diesem Abschnitt werden die internen Standards der IZB SOFT vorgestellt. Die<br />
Beschreibung der in den Standards definierten Modellen und Vorgehensweisen, stellt<br />
die Grundlage für die in dieser Arbeit entwickelte Methodik dar.<br />
Einige Aspekte der modellbasierten Methodik, welche bereits in der Praxis eingesetzt<br />
werden, hat die IZB SOFT bereits in ihren <strong>Entwicklung</strong>sprozess integriert. Die notwendigen<br />
Tätigkeiten, um die Modelle zu erstellen und zu pflegen, sind in Arbeitsabläufen<br />
14 (workflows) zusammengefasst. Alle Arbeitsabläufe (ausgenommen der Ablauf<br />
Umsetzen) sind in einem entsprechenden internen Standard beschrieben. Die<br />
Standards erläutern u. a. die für die Arbeitsabläufe benötigten Modelle. Diese Modelle<br />
erfassen die wichtigsten Konzepte, Spezifikationen, Entscheidungen und Dokumentationen<br />
eines Arbeitsablaufes.<br />
Anforderungsanalyse<br />
Analyse<br />
Fachliche<br />
Modellierung<br />
Disziplin<br />
Entwurf<br />
Implementierung<br />
Arbeitsablauf<br />
Technische<br />
Modellierung<br />
Umsetzung<br />
Abbildung 3-2 Einbettung der Arbeitsabläufe: Innerhalb der Iteration werden<br />
die Arbeitsabläufe, bei denen die Modelle erstellt werden, eingesetzt.<br />
In Abbildung 3-2 werden die Arbeitsabläufe den Disziplinen zugeordnet. Die Abläufe<br />
beschäftigen sich nicht ausschließlich mit der Modellierung. Deshalb werden in den<br />
folgenden Abschnitten, die nach Arbeitsabläufen gegliedert sind, nur die für die Modellierung<br />
relevanten Inhalte der Standards zusammengefasst. Die Beschreibung der<br />
14 Diese Arbeit lehnt sich bei den Begriffen an den RUP [Jacobson1999] an. Innerhalb der IZB SOFT<br />
werden andere Begriffe verwendet. So heißen z. B. Arbeitsabläufe bei der IZB SOFT Prozessschritte.
28 <strong>Modellbasierte</strong> Softwareentwicklung<br />
Arbeitsabläufe soll die Motivation der einzelnen Modelle erläutern sowie die Modelle<br />
voneinander abgrenzen.<br />
3.2.1 Anforderungsanalyse<br />
Gegenstand der Anforderungsanalyse ist die Untersuchung des Problembereichs und<br />
das Ermitteln von Anforderungen. Unter <strong>einer</strong> Anforderung wird eine Funktionalität,<br />
die das System zu erbringen hat, oder eine Eigenschaft, die von dem System verlangt<br />
wird, verstanden. Anforderungen werden in funktionale und nicht-funktionale Anforderungen<br />
aufgeteilt. Eine funktionale Anforderung spezifiziert, wie der Name schon<br />
sagt, eine Funktionalität, die das System anbieten soll. Diese Funktionalität kann z. B.<br />
ein fachlicher Dienst für den Gegenstandsbereich sein. Nicht-funktionale Anforderungen<br />
beschreiben Merkmale, die von dem System gefordert werden, wie z. B. Performance,<br />
Qualität, Bedienbarkeit, etc. Die Anforderungsanalyse betrachtet also das<br />
System vor dem Hintergrund des Gegenstandsbereichs von außen und definiert<br />
»Was« das System zu leisten hat.<br />
Die bestimmten funktionalen Anforderungen werden in Form von Modellen dokumentiert;<br />
die nicht-funktionalen Anforderungen werden entweder als Beschränkungen<br />
in die Modelle integriert oder als Text hinzugefügt. Die Dokumentation ist sehr wichtig,<br />
da sie die Grundlage für die weitere Modellierung darstellt. Die Anforderungsanalyse<br />
ist als Arbeitsablauf in den SBP eingegliedert. Der Standard »Anforderungsanalyse«<br />
[IZB 2002a] beschäftigt sich u. a. mit der Modellierung. Die relevanten Teile<br />
werden in den folgenden Abschnitten zusammengefasst.<br />
<strong>Anwendung</strong>sfallmodell. Ein <strong>Anwendung</strong>sfallmodell enthält Akteure, die mit <strong>Anwendung</strong>sfällen<br />
in Beziehung stehen. Ein Akteur liegt außerhalb des Systems und<br />
repräsentiert alles, was mit dem System interagiert. Das kann ein Mensch oder ein<br />
anderes System sein. Der Akteur verlangt funktionale Anforderungen, die das System<br />
zu leisten hat. Diese werden mit <strong>Anwendung</strong>sfällen dokumentiert. Nach [IZB 2002a]<br />
beschreibt ein <strong>Anwendung</strong>sfall »eine Abfolge von Aufgaben, in der die Interaktion<br />
des Akteurs mit dem System beschrieben wird, sowie die Aktivitäten, die im System<br />
erfolgen«.<br />
Nachdem ein Akteur einen <strong>Anwendung</strong>sfall initiiert, durchläuft der <strong>Anwendung</strong>sfall<br />
Aktivitäten – nicht notwendigerweise Interaktionen mit dem Akteur – bis er mit einem<br />
Ergebnis endet. Dieses Ergebnis muss dem Akteur in irgend<strong>einer</strong> Weise Nutzen<br />
bringen. Somit ist die Funktionalität, die das System zu erbringen hat, vollständig<br />
über <strong>Anwendung</strong>sfälle dokumentiert. 15<br />
15 Es gibt einige Punkte auf die beim Erstellen von <strong>Anwendung</strong>sfällen geachtet werden sollte;<br />
[Cockburn] behandelt ausführlich das effektive Schreiben von <strong>Anwendung</strong>sfällen.
Das bisherige Vorgehen der IZB SOFT 29<br />
Mit Paketen werden die <strong>Anwendung</strong>sfälle gruppiert. Diese Strukturierung hat keinen<br />
Einfluss auf die spätere Systemstruktur. Zum Beispiel könnte man die Anforderungen<br />
in »must-have«, »should-have« oder »can-do« strukturieren.<br />
<strong>Anwendung</strong>sfall-Feinbeschreibung. Eine Feinbeschreibung ist eine genaue Beschreibung<br />
des Ablaufes aus der Sicht der Akteure und muss zu jedem <strong>Anwendung</strong>sfall<br />
erstellt werden. Hierbei ist wichtig, alles im Aktiv zu formulieren und keine Details<br />
der Oberfläche oder Implementierung zu erläutern.<br />
Problembereichsmodell. Die Konzepte des Problembereichs werden durch Klassen<br />
dargestellt und ergeben ein konzeptionelles Modell. Die Klassen enthalten Attribute,<br />
die keinen Typ erfordern, und haben keine Operationen. Beziehungen zwischen<br />
den Konzepten werden dargestellt. Dabei ist zu beachten, dass bei Assoziationen die<br />
Kardinalitäten anzugeben sind. In der neuen Methodik ist dieses Modell in dem <strong>Anwendung</strong>sfallmodell<br />
enthalten.<br />
Oberflächen-Prototyp.Der Prototyp hat die Aufgabe, die Anforderungen zu verdeutlichen,<br />
damit man sich vom System ein Bild machen kann. Die Gestaltung kann<br />
und wird sich noch ändern. Das Prinzip des Rapid Prototyping wird verfolgt.<br />
Der Standard beschreibt die Verwendung von Prototypen, schließt aber die Nutzung<br />
anderer Möglichkeiten, sich ein Bild von dem System zu machen, nicht aus. Es muss<br />
nicht immer ein programmierter Prototyp sein. Oft werden einfach nur Storyboards<br />
gezeichnet, welche die graphische Oberfläche und den Ablauf grob darstellen.<br />
3.2.2 Fachliche Modellierung<br />
Die fachliche Modellierung ist ein Arbeitsablauf, der im <strong>Entwicklung</strong>sprozess ausgeführt<br />
wird. Gleichzeitig ist es der erste Arbeitsablauf des Systementwurfs. Ausgehend<br />
von der Anforderungsanalyse werden der generelle Aufbau sowie die grundlegende<br />
Struktur des Systems nach fachlichen Kriterien entworfen. Der hier zusammengefasste<br />
Standard »Fachliche Modellierung« [IZB 2002c] gibt eine Richtlinie für die<br />
Modellierung vor.<br />
Das fachliche Modell. Das fachliche Modell bietet eine Sicht auf das System, die<br />
von technischen Details abstrahiert. Das heißt, alle Entscheidungen, die einen technischen<br />
Hintergrund haben oder sich auf die Implementierungsumgebung beziehen,<br />
werden offen gelassen. Es zeigt die wesentlichen Abläufe, die sich aus den funktionalen<br />
Anforderungen ergeben und testet dabei, ob sie schlüssig und ohne Widersprüche<br />
sind.<br />
Da sich technische Details noch häufiger ändern als funktionale Anforderungen und<br />
diese Änderungen sich nicht im fachlichen Modell auswirken, ist es sinnvoll ein rein<br />
fachliches Modell, das technischen Details ausspart, zu entwerfen. Darüber hinaus<br />
lassen sich Änderungen der funktionalen Anforderungen leichter in ein fachliches
30 <strong>Modellbasierte</strong> Softwareentwicklung<br />
Modell integrieren, da auf keine technischen Beschränkungen Rücksicht genommen<br />
werden muss.<br />
Das Modell betrachtet sowohl die statische Struktur, wie z. B. die Anordnung der E-<br />
lemente und deren Beziehungen, als auch die dynamischen Interaktionen, welche die<br />
<strong>Anwendung</strong>sfälle aus der Analyse realisieren.<br />
Fachliche Klassen repräsentieren die Elemente des Systems auf <strong>einer</strong> fachlichen Ebene.<br />
Sie haben Attribute und Operationen, welche die Verantwortlichkeiten der Klasse<br />
repräsentieren. Außerdem stehen die fachlichen Klassen untereinander in Beziehung<br />
und erzeugen somit eine fachliche Struktur. Die fachlichen Klassen werden in drei<br />
Klassen unterteilt:<br />
¥<br />
¥<br />
¥<br />
Steuerungsklassen (control). Klassen, die den Ablauf steuern.<br />
Dialogklassen (boundary). Klassen, die mit Akteuren interagieren.<br />
Entitäten (entity). Klassen, welche die Schlüsselkonzepte aus dem <strong>Anwendung</strong>sbereich<br />
repräsentieren.<br />
Die Modellierung der Abläufe in separaten Steuerungsklassen verfolgt das Ziel, Abläufe,<br />
die sich häufiger ändern als die robusteren Entitäten, von diesen zu trennen.<br />
Fachliche Klassen werden mit fachlichen Paketen hierarchisch angeordnet. Diese dürfen<br />
weitere fachliche Pakete enthalten. Daraus ergibt sich eine rekursive Struktur mit<br />
der auch größere Systeme organisiert werden können. Die Pakete werden nach fachlichen<br />
Gesichtspunkten geschnitten. Dabei wird darauf geachtet, dass ein Paket sich in<br />
s<strong>einer</strong> Funktion von den anderen Paketen abgrenzt. Abhängigkeiten zwischen den<br />
Paketen, die sich aus den Beziehungen der fachlichen Klassen ergeben, werden gezeigt.<br />
Die Umsetzung der <strong>Anwendung</strong>sfälle in einem fachlichen Modell wird mit Sequenzdiagrammen<br />
beschrieben. Diese dokumentieren die <strong>Anwendung</strong>sfall-Realisierungen.<br />
Der Standard lässt es frei, weitere Diagramme zu nutzen.<br />
Der Leitfaden »Modellierung« konkretisiert die Vorgaben des Standards für das Umfeld<br />
von PROFiL. Die Bedeutung der verschiedenen fachlichen Klassen wird verf<strong>einer</strong>t.<br />
Insbesondere wird der Vorschlag gemacht, die Steuerungsklassen weiter zu unterteilen.<br />
Außerdem ist eine Namenskonvention für die Operationen darin enthalten.<br />
3.2.3 Technische Modellierung<br />
Die technische Modellierung verf<strong>einer</strong>t das fachliche Modell. Vor dem Hintergrund<br />
<strong>einer</strong> konkreten <strong>Entwicklung</strong>sumgebung wird der fachliche Entwurf mit technischen<br />
Details gefüllt. Hauptaufgabe ist es, bei der Verf<strong>einer</strong>ung die bereits besprochenen<br />
Architekturvorgaben umzusetzen. Der Arbeitsablauf technische Modellierung umfasst,<br />
wie auch die Abläufe zuvor, mehr als nur den Vorgang der Modellierung. Die
Das bisherige Vorgehen der IZB SOFT 31<br />
Ergebnisse des Ablaufes, nämlich die Modelle, werden durch den Standard: »Technische<br />
Modellierung« 16 [IZB 2003c] festgelegt. Auch hier ist es das Ziel, die Modelle<br />
mit <strong>einer</strong> standardisierten Notation zu vereinheitlichen. 17<br />
Designmodell.Gegenstand des Designmodells ist es, die Verteilung der Funktionalität<br />
auf die Designkomponenten aufzuzeigen. Die fachliche Aufgliederung aus dem<br />
fachlichen Modell wird hier in <strong>einer</strong> konkreten, technischen Umgebung modelliert.<br />
Außerdem sollen die Schnittstellen der Komponenten spezifiziert und die Abhängigkeiten<br />
der Komponenten gezeigt werden. Viele Elemente des Designmodells sind<br />
architekturrelevant. Deswegen sind auch die Konzepte »Schicht«, »Komponente« und<br />
»Schnittstelle« aus dem Standard »Architektur Rahmenbedingungen« [IZB 2002b]<br />
übernommen (vgl. Abschnitt 2.3.2).<br />
Eine Designkomponente ist ein Baustein, der wiederverwendet werden soll. Über eine<br />
oder mehrere Schnittstellen stellt eine Komponente ihre Dienste bereit. Eine Komponente<br />
kann ihre Dienste auf den Diensten <strong>einer</strong> anderen Komponente aufbauen und ist<br />
dann abhängig von der Schnittstelle der genutzten Komponente. Jede Komponente ist<br />
<strong>einer</strong> Schicht zugeordnet und kann aus weiteren Komponenten bestehen. Die Ausarbeitung<br />
der Komponenten und die Spezifikation der Elemente, welche notwendig<br />
sind, um die, in der Schnittstelle vereinbarten Leistungen, umzusetzen, werden mit<br />
modelliert. 18<br />
Ein Designpaket ist ein Gruppierungselement, dessen Elemente nicht mit Schnittstellen<br />
gekapselt werden.<br />
3.2.4 Umsetzung<br />
Bei der Umsetzung werden die Elemente des Designmodells in <strong>COBOL</strong>-Quelltext<br />
transformiert. Bei der Erstellung von <strong>COBOL</strong>-Modulen sollte unbedingt beachtet<br />
werden, dass diese entsprechend den Programmierrichtlinien [IZB 2002d] implementiert<br />
werden. Denn diese verbieten die Verwendung einiger <strong>COBOL</strong>-Konstrukte und<br />
weisen auf »schlechten Stil« hin. Für die meisten Projekte gibt es Rahmenprogramme,<br />
die verwendet werden müssen. Dazu kommen Muster, die in den Projekten üblich<br />
16 Der Standard beschreibt neben dem Designmodell auch das Implementierungs- und Laufzeitmodell.<br />
Letztere sind dem Arbeitsablauf Umsetzung zuzuordnen.<br />
17 Allerdings kommt an dieser Stelle ein neuer Aspekt hinzu: Die Modelle sollen mit einem Werkzeug<br />
erfasst und ausgewertet werden. Dieses Werkzeug nennt sich Bauplan. Allerdings ist Vorsicht geboten:<br />
Keine werkzeugbedingten Einschränkungen dürfen auferlegt werden, bevor die Art und Weise<br />
der Modellierung erprobt wurde, und sich das Vorgehen gefestigt hat.<br />
18 In der neuen Methodik werden die Komponenten mit <strong>einer</strong> Innenansicht ergänzt. Es wird also die<br />
Realisierung der Schnittstellen innerhalb der Komponente mit Modulen, Datenstrukturen und Copystrecken<br />
modelliert
32 <strong>Modellbasierte</strong> Softwareentwicklung<br />
sind, um bestimmte Aufgaben zu lösen. Allgemein geht es um die Realisierung der in<br />
den Modellen spezifizierten Funktionalität.<br />
Implementierungsmodell. Das Implementierungsmodell dokumentiert, welche<br />
Dateien für die Realisierung der Designkomponenten notwendig sind. Allgemeine<br />
Möglichkeiten für den Inhalt der Dateien sind: Quelltext, Binärcode, Tabellen, etc. In<br />
dieser Arbeit wird zwischen zwei Arten von Dateien unterschieden:<br />
¦ Die Moduldatei (bisher: Modul) repräsentiert eine <strong>COBOL</strong>-Quelltext-Datei.<br />
Die Copystreckedatei (bisher: Copystrecke) repräsentiert eine Quelltext-Datei<br />
<strong>einer</strong> Datenstruktur-Deklaration. Mit <strong>einer</strong> Datenstruktur können Parameter und<br />
¦<br />
Argumente für den Modulaufruf definiert werden (vgl. Abschnitt 2.4.4).<br />
Die Module werden von einem Übersetzer in Objekt-Dateien transformiert. Diese<br />
werden dann automatisch gelinkt. Aus diesem Grund hat jedes Modul automatisch<br />
eine gleichnamige Laufzeitkomponente. Eine Laufzeitkomponente repräsentiert eine<br />
ausführbare Datei.<br />
Um die Verwaltung zu erleichtern, werden die Dateien in <strong>einer</strong> Implementierungskomponente<br />
zusammengefasst. Eine Implementierungskomponente repräsentiert ein<br />
Verzeichnis mit Dateien. Auch wenn eine Designkomponente wieder aus Designkomponenten<br />
bestehen kann, werden die daraus abgeleiteten Implementierungskomponenten<br />
im Dateisystem nicht in geschachtelten Verzeichnissen abgelegt.<br />
Laufzeitmodell. Ein Klassendiagramm im Laufzeitmodell zeigt die Verteilung der<br />
Elemente des Implementierungsmodells auf Hardware-Knoten. Auf die Modellierung<br />
wird in dieser Arbeit nicht eingegangen, da die Standardisierung im Moment noch<br />
vorläufig ist.
Die Modelle der neuen Methodik im Überblick 33<br />
3.3 Die Modelle der neuen Methodik im Überblick<br />
Ziel dieser Arbeit ist es, eine durchgängige Methodik für die <strong>Entwicklung</strong> von<br />
<strong>COBOL</strong>-<strong>Anwendung</strong>en zu erstellen. Diese Methodik ist nicht »auf der grünen Wiese«<br />
entstanden, sondern baut auf <strong>einer</strong> bereits eingesetzten Vorgehensweise auf. Im vorangegangenen<br />
Abschnitt wurden die Standards zusammengefasst, welche die bisherige<br />
Vorgehensweise definieren. Da diese Standards unternehmensweit gültig sind,<br />
werden sie in der Regel allgemein gehalten. Die vorliegende Arbeit beschränkt sich<br />
jedoch auf die <strong>Entwicklung</strong> von <strong>COBOL</strong>-Diensten auf dem Backend. Deshalb wird<br />
die bisherige Vorgehensweise in den folgenden Kapiteln an einigen Stellen konkretisiert<br />
und erweitert. Um den Einstieg in das Fallbeispiel zu erleichtern, wird an dieser<br />
Stelle ein Überblick über die Struktur der Modelle gegeben.<br />
Die neue Methodik nennt sich modellbasierte <strong>Entwicklung</strong> von <strong>COBOL</strong>-<br />
<strong>Anwendung</strong>en (moCa) und basiert im Wesentlichen auf einem Modellsystem, <strong>einer</strong><br />
Notation und <strong>einer</strong> systematischen Vorgehensweise.<br />
Das Modellsystem besteht aus folgenden vier Modellen: (1) <strong>Anwendung</strong>sfallmodell,<br />
(2) Fachliches Modell, (3) Designmodell und (4) Implementierungsmodell.<br />
Die Struktur der Modelle wird in Abbildung 3-3 anhand <strong>einer</strong>, mit Anmerkungen ergänzten,<br />
Browser-Sicht von Rational Rose 19 verdeutlicht.<br />
<br />
Use Case View<br />
«modell» <strong>Anwendung</strong>sfallmodell<br />
Logical View<br />
«modell» Fachliches Modell<br />
«modell» Designmodell<br />
1. Methodischer Übergang<br />
2. Methodischer Übergang<br />
«modell» Implementierungsmodell<br />
Abbildung 3-3 Browser-Sicht auf die Modelle<br />
Auf jedes Modell sind verschiedene Sichten 20<br />
Tabelle 3-1 zusammengefasst.<br />
definiert. Diese Sichten sind in<br />
19<br />
Rational Rose setzt die Verwendung zweier Sichten (Use Case View und Logical View) auf das<br />
System voraus. Ein beliebiges Systemgesamtmodell enthält demnach vier Modelle in zwei Sichten<br />
unterteilt.
34 <strong>Modellbasierte</strong> Softwareentwicklung<br />
Tabelle 3-1 Die Modell-Sichten im Überblick<br />
Modell Sicht Beschreibung<br />
<strong>Anwendung</strong>sfallmodell <strong>Anwendung</strong>sfallsicht Zeigt die <strong>Anwendung</strong>sfälle.<br />
Problembereichssicht<br />
Zeigt die Konzepte der Domäne.<br />
Fachliches Modell Statische Sicht Zeigt die Struktur der fachlichen Klassen.<br />
Designmodell<br />
Dynamische Sicht<br />
Statische Komponentensicht<br />
Dynamische Komponentensicht<br />
Statische Modulsicht<br />
Dynamische Modulsicht<br />
Zeigt das Zusammenspiel der fachlichen<br />
Klassen.<br />
Zeigt die Struktur der Komponenten<br />
und die Komponenten von »außen«.<br />
Zeigt das Zusammenspiel der Komponenten.<br />
Zeigt die Komponenten von »innen«.<br />
Zeigt das Zusammenspiel der Module.<br />
Implementierungsmodell Dateisicht Zeigt die Dateien auf der Festplatte.<br />
Quelltextsicht<br />
Zeigt den Inhalt der Dateien, also den<br />
Quelltext.<br />
Für die graphische Notation, also die graphische Repräsentation der Elemente, wird<br />
die Unified Modeling Language (UML) verwendet. Mit ihren Erweiterungsmechanismen<br />
können die Konzepte der verschiedenen Modelle definiert und mit der UML-<br />
Notation dargestellt werden.<br />
Die systematische Vorgehensweise umfasst die beiden methodischen Übergänge, welche<br />
auch in Abbildung 3-3 dargestellt sind. Der erste methodische Übergang ist die<br />
Ableitung des Designmodells aus dem fachlichen Modell, also der Übergang von<br />
einem fachlichen Entwurf in einen technischen Entwurf. Der zweite methodische Ü-<br />
bergang besteht aus der Umsetzung des Designmodells in ein Implementierungsmodell.<br />
Darin ist auch die Umsetzung des Designmodells in <strong>COBOL</strong>-Quelltext enthalten.<br />
20 Vgl. Abschnitt 3.1.
4 Das Fallbeispiel »Kundenmappe«<br />
In diesem Kapitel wird die neue Methodik modellbasierte <strong>Entwicklung</strong> von <strong>COBOL</strong>-<br />
<strong>Anwendung</strong>en (moCa) anhand eines Beispiels vorgestellt. Ziel ist es, die Durchgängigkeit<br />
der neuen Methodik zu zeigen. Für das Beispiel ist ein Ausschnitt aus dem<br />
Projekt »Kundenmappe« gewählt worden. Das Projekt »Kundenmappe« ist ein Teilprojekt<br />
von PROFil (vgl. Abschnitt 2.1).<br />
Für ein durchgängiges Beispiel ist es wichtig, dass der Problembereich einfach zu<br />
verstehen ist. Deshalb sind die Konzepte der Domäne vereinfacht worden. Trotzdem<br />
bleibt die Problemstellung anspruchsvoll genug, um die wichtigsten Konzepte der<br />
Methodik am Beispiel und somit praxisnah vermitteln zu können.<br />
Damit man die Stellen, an denen von der bisherigen Vorgehensweise abgewichen<br />
wird, schnell erkennt, sind sie mit einem Warndreieck in der Marginale gekennzeichnet<br />
(vgl. Abbildung 4-1).<br />
Abbildung 4-1 Das Warndreieck zur Kennzeichnung der Änderungen<br />
4.1 Systemvision<br />
Im Folgenden wird die geforderte Funktionalität der vereinfachten <strong>Anwendung</strong>, die<br />
als Fallbeispiel dient, grob umrissen. Ihre Hauptaufgabe ist es, den Berater bei den<br />
Kundengesprächen zu unterstützen, indem sie alle Informationen über den Kunden an<br />
<strong>einer</strong> Stelle sammelt und damit eine zentrale Sicht auf die Kundendaten bereitstellt.<br />
Die <strong>Anwendung</strong> benötigt Funktionen, um die Daten der Geschäftspartner des Finanzinstituts<br />
zu bearbeiten, d. h. sie muss u. a. über eine Lese-Schnittstelle für Kundendaten<br />
verfügen. Mit den gelesenen Daten kann die <strong>Anwendung</strong> die zentrale Sicht zusammenstellen.<br />
Abbildung 4-2 zeigt, wie eine mögliche Gestaltung für die Masken der <strong>Anwendung</strong><br />
ausschauen könnte. Dem Berater wird die Maske Kunde finden angezeigt. Im Eingabefeld<br />
gibt er die Nummer des Kunden ein. Daraufhin wird ihm mit der Maske Kundendaten<br />
eine Übersicht der Kundendaten präsentiert. Von dort aus wechselt der Berater<br />
zu der Maske Auswahl.<br />
35
36 Das Fallbeispiel »Kundenmappe«<br />
Der in der Übersicht angezeigte Kunde ist bereits in die Auswahl 21 aufgenommen.<br />
Jetzt hat der Berater folgende Möglichkeiten: Er entfernt einen Kunden aus der Auswahl;<br />
er fügt einen weiteren Kunden hinzu (über die Maske Kunde finden); er selektiert<br />
und deselektiert die Kunden der Auswahl. Hat der Berater die gewünschte Auswahl<br />
erstellt, wechselt er mit Anzeigen zu der Maske Kundenmappe. Diese Maske<br />
zeigt die Summen des Vermögens aller selektierten Kunden der Auswahl an.<br />
Kunde finden<br />
(1) Kundendaten (2)<br />
Kundennummer<br />
eingeben:<br />
374<br />
Anrede:<br />
Vorname:<br />
Nachname:<br />
Herr<br />
Peter<br />
Meier<br />
Auswahl<br />
Auswahl<br />
(3) Kundenmappe (4)<br />
Herr Peter Meier<br />
Entfernen<br />
Datum: 3.8.2003<br />
Peter Meier<br />
Summe Vermögen:<br />
300,- Euro<br />
Hinzufügen<br />
Anzeigen<br />
Auswahl<br />
Abbildung 4-2 Eine mögliche Gestaltung der Masken<br />
21 Das Konzept, zuerst eine Auswahl zu erstellen, und dann die Kundenmappe angezeigt zu bekommen,<br />
erscheint etwas ungewöhnlich. Dieses Vorgehen wurde aber vom Auftraggeber des PROFil-<br />
Projekts »Kundenmappe« so gewünscht. Deswegen wurde dieses Konzept auch für das Fallbeispiel<br />
übernommen.
<strong>Anwendung</strong>sfallmodell 37<br />
4.2 <strong>Anwendung</strong>sfallmodell<br />
Die Systemvision bietet ein erstes Verständnis über die zu erwartenden Leistungen<br />
der Systeme. In diesem Abschnitt soll nun die geforderte Funktionalität mit <strong>Anwendung</strong>sfällen<br />
genauer beschrieben werden. Abbildung 4-3 zeigt den Fokus dieses Abschnitts.<br />
<br />
Use Case View<br />
«modell» <strong>Anwendung</strong>sfallmodell<br />
Logical View<br />
«modell» Fachliches Modell<br />
«modell» Designmodell<br />
Abbildung 4-3 Das Modell der Analyse<br />
4.2.1 <strong>Anwendung</strong>sfallsicht<br />
«modell» Implementierungsmodell<br />
Dieser Abschnitt beschreibt die <strong>Anwendung</strong>sfallsicht auf das <strong>Anwendung</strong>sfallmodell.<br />
Zuerst wird aber eine Erweiterung erläutert: Da zwischen Backend und Frontend getrennt<br />
wird (vgl. Abschnitt 2.3.2), ist es wichtig, die Trennung auch bei der Beschreibung<br />
von <strong>Anwendung</strong>sfällen fortzusetzen. Demnach gibt es zwei Bereiche: Der erste<br />
Bereich beschreibt aus der Außenansicht des Anwenders die Anforderung an das<br />
Frontend. Der zweite Bereich beschreibt die Anforderung des Frontends an das Backend.<br />
Dadurch wird die Steuerung der weiteren Modellierung durch die <strong>Anwendung</strong>sfälle<br />
ermöglicht.<br />
Der Ausschnitt des Projekts »Kundenmappe« ist in zwei Systeme zerlegt: (1) das System<br />
Kundenmappe und (2) das System Partner. Die Kundenmappe benötigt die<br />
Dienste des Systems Partner. Somit werden auch Abhängigkeiten zwischen Systemen<br />
behandelt.<br />
Überblick über die <strong>Anwendung</strong>sfälle. Abbildung 4-4 zeigt ein <strong>Anwendung</strong>sfalldiagramm,<br />
in dem die <strong>Anwendung</strong>sfälle der Systeme Kundenmappe und Partner<br />
modelliert sind. Die Pakete mit dem Stereotypen «frontend» und «backend» zeigen<br />
die Unterteilung der <strong>Anwendung</strong>sfälle. Ein <strong>Anwendung</strong>sfall für das Backend stellt<br />
einen Geschäftsvorfall dar (vgl. Abschnitt 2.3.2).
38 Das Fallbeispiel »Kundenmappe«<br />
Berater<br />
«anwendungsfallsystem»<br />
Kundenmappe<br />
«frontend»<br />
«anwendungsfallsystem»<br />
Partner<br />
«frontend»<br />
«include»<br />
Kundenmappe<br />
anzeigen<br />
BeteiligteParteien<br />
auswählen<br />
Kunde finden<br />
«backend»<br />
«backend»<br />
Kundenmappe<br />
erstellen<br />
BeteiligtePartei<br />
finden<br />
Adresssatz<br />
finden<br />
Abbildung 4-4 Die <strong>Anwendung</strong>sfälle im Überblick<br />
Beschreibung der <strong>Anwendung</strong>sfälle. Im Folgenden werden alle <strong>Anwendung</strong>sfälle<br />
der Abbildung 4-4 in textueller Form beschrieben. Unter Bereich wird gekennzeichnet,<br />
ob es sich um einen <strong>Anwendung</strong>sfall des Front- oder des Backends handelt;<br />
unter Akteur wird der Initiator des <strong>Anwendung</strong>sfalls bestimmt; die Eingabe spezifiziert<br />
die Daten, die vom <strong>Anwendung</strong>sfall benötigt werden; die Ausgabe beschreibt<br />
welche Daten als Ergebnisse nach Beendigung des <strong>Anwendung</strong>sfalls vorhanden sind.<br />
Ein unterstrichener Name eines <strong>Anwendung</strong>sfalls (z. B. Adresssatz finden) bedeutet,<br />
dass der unterstrichene <strong>Anwendung</strong>sfall an dieser Stelle ausgeführt wird.
<strong>Anwendung</strong>sfallmodell 39<br />
<strong>Anwendung</strong>sfall 4-1 Kunde finden<br />
Der Berater möchte über das Terminal die Daten eines Kunden anzeigen lassen.<br />
Akteur: Berater.<br />
Bereich: Partner Frontend.<br />
Eingabe: Eine Adresssatznummer.<br />
Ausgabe: Die Daten des durch die Adresssatznummer spezifizierten Kunden.<br />
Standardablauf:<br />
1. Der Berater gibt die Adresssatznummer eines Kunden ein.<br />
2. Wenn über Adresssatz finden Daten gefunden wurden, bekommt der Berater eine<br />
Übersicht über die Kundendaten angezeigt.<br />
3. Ansonsten erscheint eine Fehlermeldung.<br />
Ausnahme: Wenn Kunde finden innerhalb eines Ausfluges ausgeführt wird, wird keine<br />
Übersicht angezeigt.<br />
<strong>Anwendung</strong>sfall 4-2<br />
BeteiligtePartei auswählen<br />
Es gilt eine Menge von beteiligten Parteien zusammenzufassen. Diese Menge wird<br />
»Auswahl« genannt. Innerhalb der Auswahl kann eine beteiligte Partei entweder selektiert<br />
oder deselektiert sein.<br />
Akteur: Berater.<br />
Bereich: Kundenmappe Frontend.<br />
Eingabe: Eine Auswahl von beteiligten Parteien.<br />
Ausgabe: Eine Auswahl von beteiligten Parteien.<br />
Standardablauf:<br />
1. Der Berater bekommt eine Liste von beteiligten Parteien angezeigt. Diese Liste wird<br />
mit Auswahl bezeichnet.<br />
2. Der Berater kann jetzt beliebig oft einen neuen Kunden hinzufügen:<br />
a) Mit Kunde finden wird ein Adresssatz gefunden;<br />
b) Mit Beteiligte Partei finden wird eine beteiligte Partei gefunden;<br />
c) Die beteiligte Partei wird der Auswahl hinzugefügt.<br />
3. Der Berater kann einen Kunden aus der Auswahl entfernen.<br />
4. Der Berater kann beliebig oft den Status <strong>einer</strong> beteiligten Partei in selektiert oder<br />
deselektiert ändern.<br />
<strong>Anwendung</strong>sfall 4-3 Kundenmappe anzeigen<br />
Aus der Auswahl wird die Kundenmappe erstellt und die Informationen dem Berater angezeigt.<br />
Akteur: Berater.<br />
Bereich: Kundenmappe Frontend.<br />
Eingabe: Eine Auswahl von beteiligten Parteien.<br />
Ausgabe: Die für die spezifizierte Auswahl erstellte Kundenmappe.<br />
Standardablauf:<br />
1. Der Berater fordert das System auf, für seine Auswahl an beteiligten Parteien die<br />
Kundenmappe anzuzeigen.<br />
2. Über Kundenmappe erstellen wird die Kundenmappe erstellt.<br />
3. Die Kundenmappe wird dem Berater angezeigt.
40 Das Fallbeispiel »Kundenmappe«<br />
<strong>Anwendung</strong>sfall 4-4 Übergreifendes <strong>Anwendung</strong>sszenario<br />
Standardablauf:<br />
1. Der Berater findet eine Kunden über Kunde finden.<br />
2. Der Berater bekommt über Beteiligte Partei auswählen die Auswahl angezeigt und<br />
kann jetzt neue Kunden zur Auswahl hinzufügen und den Status der beteiligten Parteien<br />
in der Auswahl ändern.<br />
4. Der Berater lässt sich mit Kundenmappe anzeigen die Informationen anzeigen.<br />
<strong>Anwendung</strong>sfall 4-5 Adresssatz finden<br />
Das Frontend benötigt Daten eines Kunden.<br />
Akteur: Frontend.<br />
Bereich: Partner Backend.<br />
Eingabe: Eine Adresssatznummer.<br />
Ausgabe: Ein Exemplar der Entität Adresssatz. Dies ist der Adresssatz für die spezifizierte<br />
Adresssatznummer.<br />
Standardablauf:<br />
1. Das Frontend übergibt die Adressnummer eines Kunden.<br />
2. Wenn ein Adresssatz existiert, wird der Adresssatz zurückgeliefert.<br />
3. Ansonsten wird ein Fehlercode zurückgeliefert.<br />
<strong>Anwendung</strong>sfall 4-6 BeteiligtePartei finden<br />
Neue <strong>Anwendung</strong>en kennen nur beteiligte Parteien. Deswegen muss die zu einem Adresssatz<br />
gehörige beteiligte Partei gefunden werden oder gegebenenfalls neu angelegt<br />
werden.<br />
Akteur: Frontend.<br />
Bereich: Partner Backend.<br />
Eingabe: Ein Exemplar der Entität Adresssatz.<br />
Ausgabe: Das Exemplar der Entität BeteiligtePartei, welches dem spezifizierten Adresssatz<br />
zugeordnet ist.<br />
Standardablauf:<br />
1. Das Frontend übergibt einen Adresssatz eines Kunden.<br />
2. Das Backend prüft, ob eine BeteiligtePartei für den Adresssatz existiert.<br />
3. Wenn nicht, wird eine neue BeteiligtePartei angelegt.<br />
4. Die BeteiligtePartei wird auf Konsistenz geprüft.<br />
5. Das Backend gibt die BeteiligtePartei zurück.
<strong>Anwendung</strong>sfallmodell 41<br />
<strong>Anwendung</strong>sfall 4-7 Kundenmappe erstellen<br />
Anhand <strong>einer</strong> Auswahl wird eine Kundenmappe erstellt.<br />
Akteur: Frontend.<br />
Bereich: Kundenmappe Backend.<br />
Eingabe: Ein Exemplar der Entität Auswahl.<br />
Ausgabe: Ein Exemplar der Entität Kundenmappe. Dieses Objekt wird aus der Auswahl<br />
erzeugt.<br />
Standardablauf:<br />
1. Das Frontend übergibt eine Auswahl von beteiligten Parteien. Innerhalb der Auswahl<br />
sind die beteiligten Parteien entweder selektiert oder deselektiert.<br />
2. Das Backend erstellt die Kundenmappe mit der berechneten Summe des Vermögens<br />
der beteiligten Parteien.<br />
3. Das Backend gibt die Kundenmappe zurück.<br />
4.2.2 Modellierung der Beschreibung<br />
Mithilfe eines Sequenzdiagramms kann der Ablauf eines <strong>Anwendung</strong>sfalls modelliert<br />
werden. Abbildung 4-5 und Abbildung 4-6 zeigen exemplarisch die Sequenzdiagramme<br />
für den <strong>Anwendung</strong>sfall Adresssatz finden und BeteiligtePartei finden.<br />
Die Sequenzdiagramme modellieren die Beschreibung. Dabei wird aus jedem Schritt<br />
der Beschreibung (ein Schritt ist durch eine Nummer gekennzeichnet) eine Nachricht,<br />
die durch einen Pfeil dargestellt wird. Eine Nachricht an das Backend wird mit einem<br />
durchgezogenen Pfeil modelliert; die Antwort des Backends wird mit einem gestrichelten<br />
Pfeil dargestellt. Die Argumente <strong>einer</strong> Nachricht werden innerhalb von runden<br />
Klammern spezifiziert.<br />
: Frontend partner : Backend<br />
Finde Adresssatz über Adresssatznummer (adresssatznummer)<br />
[Adresssatz gefunden] Adresssatz<br />
[Sonst] Fehlercode<br />
Abbildung 4-5 Das Sequenzdiagramm Adresssatz finden
42 Das Fallbeispiel »Kundenmappe«<br />
: Frontend partner : Backend<br />
Finde BeteiligtePartei über Adresssatz (adresssatz)<br />
Prüfe ob eine BeteiligtePartei für den Adresssatz existiert (adresssatz)<br />
[BeteiligtePartei existiert nicht] Erzeuge eine neue BeteiligtePartei (adresssatz)<br />
Überprüfe die Konsistenz der BeteiligtenPartei (beteiligtePartei)<br />
[Konsistent] Beteiligte Partei<br />
[Sonst] Fehlercode<br />
Abbildung 4-6 Das Sequenzdiagramm BeteiligtePartei finden<br />
4.2.3 Problembereichsicht<br />
Die Problembereichssicht ist eine konzeptionelle Sicht auf die Entitäten der Domäne.<br />
Die Konzepte des Problembereichs werden durch Klassen dargestellt, welche Attribute,<br />
aber keine Operationen enthalten. In Abbildung 4-7 sind die im Folgenden beschriebenen<br />
Konzepte modelliert.<br />
Kundendaten sind in Adresssätzen abgespeichert. Für einen Kunden können mehrere<br />
Adresssätze existieren. Solche Kunden sind in unserem Beispiel nicht zulässig: Es<br />
werden nur Kunden mit einem einzigen Adresssatz betrachtet.<br />
Adresssätze können in Kundeneinheiten (KU-Verknüpfung) zusammengefasst werden.<br />
Dieses Konzept würde die Komplexität des Fallbeispiels unnötig vergrößern, deswegen<br />
wird es im Fallbeispiel ausgespart.
<strong>Anwendung</strong>sfallmodell 43<br />
Die Daten aus den Adresssätzen, die zu einem Kunden gehören, werden in <strong>einer</strong> BeteiligtenPartei<br />
zusammengefasst. Das SKO-Datenmodell 22 definiert eine beteiligte<br />
Partei folgendermaßen:<br />
Eine beteiligte Partei ist eine natürliche Person, eine Organisation, eine Organisationseinheit<br />
oder eine Gemeinschaft, über die das Finanzinstitut Informationen<br />
führen möchte, um mit ihr optimal kooperieren zu können.<br />
Eine beteiligte Partei wird aus den Adresssätzen erzeugt. Die Zuordnung zwischen<br />
<strong>einer</strong> beteiligten Partei und den dazugehörigen Adresssätzen kann sehr kompliziert<br />
werden. Deswegen darf in unserem Beispiel die beteiligte Partei nur in Form <strong>einer</strong><br />
natürlichen Person auftreten, bei der die Zuordnung zwischen <strong>einer</strong> beteiligten Partei<br />
und dem Adresssatz 1:1 ist.<br />
Ergänzend zu den aus den Adresssätzen gesammelten Daten können weitere Informationen<br />
über den Kunden, wie z. B. seine Hobbys, in der beteiligten Partei gespeichert<br />
werden.<br />
Die Auswahl besteht aus <strong>einer</strong> Anzahl von beteiligten Parteien. Sie hat Kenntnis darüber,<br />
ob eine beteiligte Partei der Auswahl selektiert ist oder nicht. Bei der Berechnung<br />
der Summe der Vermögenswerte werden nur die beteiligten Parteien berücksichtigt,<br />
die auch selektiert sind.<br />
Die Kundenmappe dient zur Präsentation von Kundendaten. Sie stellt eine zentrale<br />
Sicht auf die Daten <strong>einer</strong> Menge von beteiligten Parteien dar. In diesem Fallbeispiel<br />
sind die Kundendaten auf das Vermögen begrenzt. Die Kundenmappe berechnet die<br />
Summe des Vermögens für die Menge der ausgewählten beteiligten Parteien. Normalerweise<br />
werden die verschiedenen Vermögenswerte aus unterschiedlichen Datenspeichern<br />
zusammengetragen. Im Fallbeispiel erhält jede beteiligte Partei einen Wert,<br />
der ihren Vermögensstand repräsentiert.<br />
Kundenmappe<br />
Auswahl<br />
WähltAus<br />
BeteiligtePartei<br />
Adresssatz<br />
+ datum 0..* 1<br />
0..* 0..* + vermögenswert 0..1 0..1 + adresssatznummer<br />
/+ summe des<br />
+ anrede<br />
Vermögens<br />
+ vorname<br />
+ nachname<br />
NatürlichePerson<br />
Abbildung 4-7 Die Entitäten der Problembereichsicht<br />
22 SKO steht für Sparkassen-Organisation. Das Datenmodell definiert, welche Daten von <strong>einer</strong> Sparkasse<br />
erfasst werden. Es ist innerhalb der IZB SOFT als CD erhältlich.
44 Das Fallbeispiel »Kundenmappe«<br />
4.3 Fachliches Modell<br />
Die <strong>Anwendung</strong>sfälle für das Backend spezifizieren die Anforderungen an die <strong>Anwendung</strong>.<br />
Das System wird dabei von außen betrachtet und es wird festgelegt, welche<br />
Funktionen von der <strong>Anwendung</strong> geleistet werden muss. Nun wird die Perspektive<br />
gewechselt und die <strong>Anwendung</strong> von innen angeschaut. Zunächst ist nur die Fachlichkeit<br />
von Interesse. Technische Gesichtspunkte werden außen vorgelassen. Das fachliche<br />
Modell beschreibt sowohl die statische Struktur, als auch die dynamischen Abläufe<br />
beider Systeme aus fachlicher Sicht. Abbildung 4-8 zeigt den Fokus dieses Abschnitts.<br />
<br />
Use Case View<br />
«modell» <strong>Anwendung</strong>sfallmodell<br />
Logical View<br />
«modell» Fachliches Modell<br />
«modell» Designmodell<br />
«modell» Implementierungsmodell<br />
Abbildung 4-8 Das Modell des fachlichen Entwurfs<br />
4.3.1 Statische Sicht: Die Hierarchie der fachlichen Klassen<br />
Die statische Sicht zeigt, wie die geforderte Funktionalität auf eine Struktur abgebildet<br />
werden kann. Dargestellt wird diese in einem oder mehreren Klassendiagrammen.<br />
Die Elemente der Struktur sind fachliche Klassen und fachliche Pakete. Die fachlichen<br />
Pakete gruppieren die fachlichen Klassen und können wiederum fachliche Pakete<br />
enthalten. Dadurch wird eine hierarchische Struktur geschaffen. Ein Paket auf der<br />
höchsten Ebene der Hierarchie wird mit dem Stereotyp «fachlichesSystem» 23 versehen,<br />
da es die Grenze eines Systems darstellt.<br />
Überblick über das fachliche Modell. Die Zerlegung der <strong>Anwendung</strong> in zwei Systeme,<br />
wie bereits im <strong>Anwendung</strong>sfallmodell gezeigt wurde (vgl. Abbildung 4-4), wird<br />
im fachlichen Modell übernommen. Abbildung 4-9 zeigt die vollständige Hierarchie<br />
der <strong>Anwendung</strong>. Beide Systeme Kundenmappe und Partner werden jeweils durch ein<br />
23 Für die Erweiterungsmechanismen der UML vgl. Kapitel 5.
Fachliches Modell 45<br />
fachliches Paket dargestellt. Da sie die höchsten Elemente in der Hierarchie sind (top<br />
level), haben sie das Stereotyp «fachlichesSystem».<br />
Für die Durchgängigkeit zu den technischen Modellen ist es wichtig, elementare Pakete<br />
bestimmen zu können. Deshalb gilt folgende Einschränkung: Wenn innerhalb<br />
eines fachlichen Pakets eine fachliche Klasse liegt, darf kein weiteres Paket im Paket<br />
enthalten sein.<br />
«fachlichesSystem»<br />
Kundemappe<br />
«fachlichesSystem»<br />
Partner<br />
«fachlichesPaket»<br />
BeteiligtePartei<br />
«fachlichesPaket»<br />
Adresssatz<br />
KundenmappeErsteller<br />
BeteiligteParteiVerwalter<br />
AdresssatzFinder<br />
Erstellt<br />
Findet, erzeugt und löscht<br />
Findet<br />
WähltAus<br />
0..*<br />
1 0..*<br />
0..*<br />
0..1 0..1<br />
Kundenmappe<br />
Auswahl<br />
BeteiligtePartei<br />
Adresssatz<br />
NatürlichePerson<br />
Abbildung 4-9 Das fachliche Modell im Überblick<br />
Das System Partner hat die Aufgabe, Kundendaten bereitzustellen. Um beide Konzepte,<br />
Adresssatz und BeteiligtePartei, zu trennen, ist das System in zwei fachlichen<br />
Pakete untergliedert. Beide Pakete stellen einen Dienst bereit und sind in ihrer Funktion<br />
klar abgegrenzt. Fachliche Pakete werden im Modell durch ein Paket mit dem<br />
Stereotyp «fachlichesPaket» repräsentiert.
46 Das Fallbeispiel »Kundenmappe«<br />
Das System Kundenmappe hat die Aufgabe, eine zentrale Sicht auf alle Daten <strong>einer</strong><br />
Menge von beteiligten Parteien zu erstellen. Es gruppiert die fachlichen Klassen, die<br />
diesen Dienst realisieren.<br />
Aus den Entitäten des Problembereichs (vgl. Abbildung 4-7) werden Entitäten im<br />
fachlichen Modell. Entitäten im fachlichen Modell haben, im Gegensatz zu den Entitäten<br />
im Problembereichsmodell, Operationen. Auch die Organisation der fachlichen<br />
Klassen in fachliche Pakete wird erst im fachlichen Modell getroffen.<br />
Die fachlichen Klassen in Beziehung zu setzen, ist eine wichtige Aufgabe, weil dadurch<br />
eine fachliche Struktur entsteht. Um die Wahl der Beziehungen zu erleichtern,<br />
werden die Empfehlungen aus dem Standard eingeschränkt: Abhängigkeiten bestehen<br />
nur zwischen den fachlichen Paketen. Die Beziehungen zwischen fachlichen Klassen<br />
sind beschränkt auf Assoziationen. Nur zwischen Entitäten dürfen die Assoziationen<br />
zu Aggregation verf<strong>einer</strong>t werden, und nur zwischen Entitäten darf eine Generalisierungsbeziehung<br />
vorkommen.<br />
Beziehungen zu den <strong>Anwendung</strong>sfällen. Um einen <strong>Anwendung</strong>sfall zu realisieren,<br />
wird in der Regel eine Steuerklasse («control») benötigt, die den Dienst anbietet<br />
und den Ablauf steuert. Das Zusammenspiel mehrerer Klassen, das durch eine Steuerklasse<br />
koordiniert wird, realisiert einen <strong>Anwendung</strong>sfall. Abbildung 4-10 zeigt welches<br />
Paket einen <strong>Anwendung</strong>sfall realisiert. Das heißt ein Paket, welches die Steuerungsklasse<br />
enthält, die den <strong>Anwendung</strong>sfall abwickelt, realisiert diesen <strong>Anwendung</strong>sfall<br />
24 .<br />
Das fachliche Paket Adresssatz enthält die Steuerungsklasse AdresssatzFinder, die<br />
den Geschäftsvorfall Adresssatz finden realisiert. Die Steuerungsklasse BeteiligteParteiVerwalter,<br />
die im Paket BeteiligtePartei enthalten ist, realisieren den <strong>Anwendung</strong>sfall<br />
Beteilige Partei finden. Der <strong>Anwendung</strong>sfall Kundenmappe erstellen wird durch<br />
das Paket Kundenmappe realisiert, da dieses Paket die Steuerungsklasse KundenmappeErsteller<br />
umfasst. Die Beziehung von einem Paket zum <strong>Anwendung</strong>sfall wird<br />
durch eine Abhängigkeit mit dem Stereotyp «realisiert» modelliert.<br />
Detailansicht der fachlichen Klassen. Eine fachliche Klasse kann Auskunft über<br />
die Werte ihrer Attribute liefern und diese ändern. Operationen für den Zugriff müssen<br />
dafür nicht zusätzlich modelliert werden. Attribute beginnen immer mit einem<br />
kleinen Buchstaben 25 . Zur Laufzeit hat eine Steuerklasse Verbindungen zu Instanzen<br />
von fachlichen Klassen (Parameter, Entitäten). Diese werden durch Assoziationen<br />
modelliert. In den folgenden Absätzen werden die Modellierungsdetails der fachlichen<br />
Klassen des Fallbeispiels beschrieben.<br />
24 Vgl. Abschnitt 4.3.2.<br />
25 Eine Zusammenstellung der fachlichen Typen sowie die Beschreibung der Syntax der Operationen<br />
sind im Abschnitt 5.2.1 enthalten.
Fachliches Modell 47<br />
Kundenmappe erstellen BeteiligtePartei finden Adresssatz finden<br />
<strong>Anwendung</strong>sfallmodell<br />
Fachliches Modell<br />
«realisiert» «realisiert» «realisiert»<br />
«fachlichesSystem»<br />
Kundenmappe<br />
«fachlichesPaket»<br />
BeteiligtePartei<br />
«fachlichesPaket»<br />
Adresssatz<br />
Abbildung 4-10 Die Beziehungen zu den <strong>Anwendung</strong>sfällen<br />
Eine Steuerklasse im Fallbeispiel ist AdresssatzFinder. Sie trägt die Verantwortung,<br />
zu <strong>einer</strong> Adresssatznummer einen Adresssatz zu finden. Abbildung 4-11 zeigt, wie<br />
diese Verantwortung mit der Operation findeAdresssatz modelliert wird. Zu beachten<br />
ist, dass sowohl der Typ der Parameter, als auch der Typ der Rückgabe spezifiziert ist.<br />
Mit <strong>einer</strong> Assoziation zwischen AdresssatzFinder und Adresssatz wird modelliert,<br />
dass die Steuerungsklasse zur Laufzeit eine Beziehung zu <strong>einer</strong> Instanz des Rückgabetyps<br />
Adresssatz hat. Die Assoziation ist gerichtet, ein Ende ist also navigierbar.<br />
Dies bedeutet, dass die Steuerklasse die fachliche Klasse findet und als Ergebnis ü-<br />
bergibt – die fachliche Klasse weiß jedoch nichts über die Steuerklasse.<br />
«control»<br />
AdresssatzFinder<br />
+ findeAdresssatz(adresssatzNummer : PositiveGanzzahl) : Adresssatz<br />
Abbildung 4-11 Die Steuerungsklasse Adresssatz Finder<br />
Der Adresssatz wird repräsentiert durch die Entität Adresssatz, deren Attribute in<br />
Abbildung 4-12 dargestellt sind. Ein Adresssatz kann über Anrede, Vornamen und<br />
Namen eines Kunden Auskunft geben. Er weiß auch, von welchem Typ sie sind. Diese<br />
Verantwortung wird mit Attributen modelliert.<br />
«primaryKey»<br />
«entity»<br />
Adresssatz<br />
+ adresssatzNummer : PositiveGanzzahl<br />
+ anrede : Zeichenkette<br />
+ vorname : Zeichenkette<br />
+ name : Zeichenkette<br />
Abbildung 4-12 Die Entität Adresssatz
48 Das Fallbeispiel »Kundenmappe«<br />
Die Attribute haben immer einen konzeptionellen Typ – dieser ermöglicht Abbildung<br />
der Attribute in ein technisches Modell, indem man den konzeptionellen Typ in <strong>einer</strong><br />
konkreten technischen Umgebung verf<strong>einer</strong>t.<br />
Ein Attribut kann mit Stereotypen genauer definiert werden. Zum Beispiel, bedeutet<br />
das Stereotyp «primaryKey», dass es sich beim Attribut um einen eindeutigen Schlüssel<br />
handelt, d. h. es ist ausgeschlossen, dass zwei Adresssätze dieselben Nummern<br />
haben können. Kann auf ein Attribut nur lesend zugegriffen werden, ist es mit dem<br />
Stereotyp «readonly» zu kennzeichnen.<br />
Der BeteiligteParteiVerwalter hat als öffentlichen Dienst, die Aufgabe zu einem Adresssatz<br />
eine beteiligte Partei zu finden. Dazu muss er prüfen können, ob eine beteiligte<br />
Partei für den Adresssatz existiert. Für den Fall, dass keine vorhanden ist, muss er<br />
in der Lage sein, eine neue beteiligte Partei zu erstellen. Wenn eine beteiligte Partei<br />
nicht konsistent ist, hat der Verwalter die Verantwortung diese zu löschen. Eine beteiligte<br />
Partei ist genau dann nicht konsistent, wenn der zugeordnete Adresssatz nicht<br />
existiert. Alle Verantwortungen, die keine öffentlichen Dienste darstellen, werden<br />
durch private Operationen spezifiziert (vgl. Abbildung 4-13). Während der Laufzeit<br />
steht eine Instanz von BeteiligteParteiVerwalter in Beziehung zu <strong>einer</strong> Instanz von<br />
der Klasse Adresssatz (als Parameter) und zu <strong>einer</strong> Instanz der Klasse BeteiligtePartei.<br />
Diese Beziehungen werden durch Assoziationen modelliert.<br />
«control»<br />
BeteiligteParteiVerwalter<br />
+ findeBeteiligtePartei(adresssatz : Adresssatz) : BeteiligtePartei<br />
- prüfeExistenz(adresssatz : Adresssatz) : Ja/Nein-Wert<br />
- erzeugeBeteiligtePartei(adresssatz : Adresssatz) : BeteiligtePartei<br />
- löscheBeteiligtePartei(beteiligtePartei : BeteiligtePartei)<br />
Abbildung 4-13 Die Steuerungsklasse BeteiligteParteiVerwalter<br />
Abbildung 4-14 betrachtet die fachliche Entität BeteiligtePartei im Detail. Das Attribut<br />
beteiligteParteiNummer stellt den eindeutigen Schlüssel für diese Klasse dar. Eine<br />
beteiligte Partei enthält einen Beschreibungstext, der einen beliebigen Inhalt haben<br />
kann. Das Attribut vermögenswert stellt das gesamte Vermögen <strong>einer</strong> beteiligten Partei<br />
dar – eine für das Fallbeispiel gewählte Vereinfachung. Neben Attributen enthält<br />
diese Entität auch eine Operation. Eine beteiligte Partei hat die Verantwortung ihre<br />
Konsistenz sicherzustellen. Die Operation prüfeKonsistenz() modelliert diese Eigenschaft.<br />
Als Rückgabetyp ist ein Ja/Nein-Wert spezifiziert. Die Zuordnung der beteiligten<br />
Partei zu einem Adresssatz ist durch eine Assoziation modelliert.<br />
Die Klasse BeteiligtePartei ist abstrakt, also nicht instanzierbar. Für das Fallbeispiel<br />
gibt es nur eine Ausprägung, nämlich die NatürlichePerson. Diese Entität erweitert<br />
die beteiligte Partei um die Attribute anrede, vorname und name. Die Werte der Att-
Fachliches Modell 49<br />
ribute ergeben sich aus den entsprechenden Attributwerten des zugeordneten Adresssatzes.<br />
«primaryKey»<br />
«entity»<br />
BeteiligtePartei<br />
+ beteiligteParteiNummer : PositiveGanzzahl<br />
+ beschreibungstext : Zeichenkette<br />
+ vermögenswert : Geldbetrag<br />
+ prüfeKonsistenz() : Ja/Nein-Wert<br />
Abbildung 4-14 Die Entität BeteiligtePartei<br />
Ein Attribut, dessen Wert aus anderen Elementen abgeleitet wird, heißt abgeleitetes<br />
Attribut (derived attribute). Ein solches Attribut wird mit dem Symbol »/« gekennzeichnet.<br />
Die Vorschrift, nach der das Attribut zu berechnen ist, wird mit <strong>einer</strong> Zusicherung<br />
spezifiziert. Ein abgeleitetes Attribut ist sonst wie ein normales Attribut zu<br />
behandeln, z. B. hat es auch einen Typ.<br />
«entity»<br />
NatürlichePerson<br />
/+ anrede : Zeichenkette<br />
/+ vorname : Zeichenkette<br />
/+ name : Zeichenkette<br />
{anrede, vorname, name = Werte aus dem<br />
zugeordneten Adresssatz}<br />
Abbildung 4-15 Die Entität NatürlichePerson<br />
Die Steuerungsklasse KundenmappeErsteller aus dem Paket Kundenmappe ist für die<br />
Erstellung der Kundenmappe für eine Auswahl von beteiligten Parteien verantwortlich<br />
(vgl. Abbildung 4-16). Zur Laufzeit steht sie in Beziehung zu <strong>einer</strong> Instanz der<br />
Auswahl (Parameter) sowie <strong>einer</strong> Instanz der erstellten Kundenmappe. Diese Beziehungen<br />
werden mit Assoziationen spezifiziert.<br />
«control»<br />
KundenmappeErsteller<br />
+ erstelleKundenmappe(auswahl : Auswahl) : Kundenmappe<br />
Abbildung 4-16 Die Steuerungsklasse KundenmappeErsteller<br />
Die Entität Kundenmappe kennt das Datum, an dem sie erstellt worden ist, und kann<br />
die Summe aller Vermögenswerte, der von ihr aggregierten beteiligten Parteien, angeben.<br />
Dafür wird ein abgeleitetes Attribut verwendet. Die Berechnungsvorschrift ist<br />
der Notiz zu entnehmen (vgl. Abbildung 4-17). Die Kundenmappe besteht aus genau<br />
<strong>einer</strong> Auswahl. Diese Teil/Ganzes-Beziehung wird mit <strong>einer</strong> Aggregation modelliert.
50 Das Fallbeispiel »Kundenmappe«<br />
«entity»<br />
Kundenmappe<br />
+ datum : Datum<br />
/ + summeVermögenswerte : Geldbetrag<br />
{summeVermögenswerte<br />
= Summe aller Vermögenswerte<br />
der enthaltenen BeteiligtenParteien}<br />
Abbildung 4-17 Die Entität Kundenmappe<br />
Die Entität Auswahl besteht aus <strong>einer</strong> Anzahl von beteiligten Parteien. Deswegen besteht<br />
zwischen ihr und der Entität BeteiligtePartei eine Aggregation. Die Auswahl hat<br />
Kenntnis darüber, ob eine beteiligte Partei der Auswahl selektiert ist. Diese Kenntnis<br />
wird durch die Operation istSelektiert spezifiziert (vgl. Abbildung 4-18). Bei der Berechnung<br />
der Summe der Vermögenswerte werden nur die beteiligten Parteien berücksichtigt,<br />
die auch selektiert sind.<br />
«entity»<br />
Auswahl<br />
+ istSelektiert(beteiligtePartei: BeteiligtePartei) : Ja/Nein-Wert<br />
Abbildung 4-18 Die Entität Auswahl<br />
4.3.2 Dynamische Sicht: Realisierung der <strong>Anwendung</strong>sfälle<br />
Die dynamische Sicht soll aufzeigen, wie die <strong>Anwendung</strong>sfälle von den fachlichen<br />
Klassen realisiert werden. In Sequenz- oder Kollaborationsdiagrammen wird das<br />
Durchspielen der <strong>Anwendung</strong>sfälle modelliert. Mehrere Diagramme werden zu <strong>einer</strong><br />
<strong>Anwendung</strong>sfall-Realisierung zusammengefasst; das ist ein Paket mit dem Stereotyp<br />
«use-case realization» 26 .<br />
Der Name der Realisierung sollte derselbe sein wie der des <strong>Anwendung</strong>sfalls. Dieser<br />
wird durch eine Bezeichnung »– Fachlich« ergänzt, um zu kennzeichnen, dass die<br />
Realisierung im fachlichen Modell stattfindet. Abbildung 4-19 zeigt, dass die <strong>Anwendung</strong>sfall-Realisierung<br />
BeteiligtePartei finden – Fachlich den <strong>Anwendung</strong>sfall BeteiligtePartei<br />
finden realisiert. Wie in Abbildung 4-10 gezeigt wurde, wird der <strong>Anwendung</strong>sfall<br />
BeteiligtePartei finden auch vom fachlichen Paket BeteiligtePartei realisiert.<br />
In diesem Fall muss folgenden Konsistenzbedingung beachtet werden: Die erste<br />
Nachricht in den Diagrammen der <strong>Anwendung</strong>sfall-Realisierung BeteiligtePartei<br />
finden – Fachlich muss an eine fachliche Steuerklasse geschickt werden, die im<br />
fachlichen Paket BeteiligtePartei enthalten ist.<br />
26 Dieses Stereotyp ist in der UML enthalten. Deswegen ist es Englisch und enthält Lehrzeichen.
Fachliches Modell 51<br />
<strong>Anwendung</strong>sfallmodell<br />
Fachliches Modell<br />
<strong>Anwendung</strong>sfall-Realisierung<br />
«realisiert»<br />
BeteiligtePartei finden<br />
BeteiligtePartei finden – Fachlich<br />
Abbildung 4-19 Realisierung eines <strong>Anwendung</strong>sfalls<br />
Exemplarisch wird für den <strong>Anwendung</strong>sfall Beteiligte Partei finden die fachliche<br />
Realisierung als Sequenzdiagramm (vgl. Abbildung 4-20) und als Kollaborationsdiagramm<br />
(vgl. Abbildung 4-21) vorgestellt.<br />
: Frontend<br />
: BeteiligteParteiVerwalter<br />
findeBeteiligtePartei(adresssatz : Adresssatz)<br />
existiert := prüfeExistenz(adresssatz : Adresssatz)<br />
[existiert nicht] erzeugeBeteiligtePartei(adresssatz : Adresssatz)<br />
[exisitiert] leseBeteiligtePartei()<br />
beteiligtePartei :<br />
BeteiligtePartei<br />
konsistent = prüfeKonsistenz( )<br />
[konsistent] beteiligtePartei<br />
[sonst] Fehlercode<br />
Abbildung 4-20 Das Sequenzdiagramm BeteiligtePartei finden – Fachlich
52 Das Fallbeispiel »Kundenmappe«<br />
Der im Folgenden beschriebene Ablauf, gilt für beide Diagrammarten. Das Frontend<br />
erzeugt ein Exemplar der Steuerungsklasse BeteiligteParteiVerwalter, welche den<br />
<strong>Anwendung</strong>sfall koordiniert. Dann schickt das Frontend die Nachricht findeBeteiligtePartei<br />
an den Verwalter. Als Argument liegt der Nachricht ein Adresssatz bei. Der<br />
Verwalter prüft, ob eine beteiligte Partei, die dem Adresssatz zugeordnet ist, bereits<br />
existiert; wenn ja, wird sie gelesen; wenn nicht, wird eine neue beteiligte Partei erzeugt.<br />
Anschließend prüft der Verwalter die Konsistenz der beteiligten Partei und<br />
übergibt sie dem Frontend, wenn sie konsistent ist.<br />
Beim Kollaborationsdiagramm repräsentieren die durchgezogenen Linien eine Verbindung<br />
(link) zwischen zwei Objekten; über die Verbindungen können Nachrichten<br />
verschickt werden. Der zeitliche Ablauf ist durch die Nummerierung spezifiziert.<br />
Welches Diagramm verwendet wird, hängt davon ab, ob die Struktur (Kollaborationsdiagramm)<br />
oder der zeitliche Ablauf (Sequenzdiagramm) in den Vordergrund gestellt<br />
werden soll.<br />
2: existiert := prüfeExistenz(adresssatz : Adresssatz)<br />
1: findeBeteiligtePartei(adresssatz : Adresssatz)<br />
P<br />
: Adresssatz<br />
: Frontend<br />
6: beteiligtePartei<br />
: BeteiligteParteiVerwalter<br />
3: [existiert] lese BeteiligtePartei<br />
4: [existiert nicht] erzeuge neue BeteiligtePartei<br />
5: prüfeKonsistenz( )<br />
beteiligtePartei : BeteiligtePartei<br />
Abbildung 4-21 Das Kollaborationsdiagramm BeteiligtePartei finden – Fachlich
Designmodell 53<br />
4.4 Designmodell<br />
Im Designmodell wird ausgehend von der fachlichen Struktur ein technischer Entwurf<br />
erstellt. Dazu wird die Funktionalität aus dem fachlichen Modell auf Komponenten<br />
<strong>einer</strong> Schichtenarchitektur verteilt. Die Komponenten und ihre Schnittstellen werden<br />
speziell für eine <strong>COBOL</strong>/HOST-Umgebung modelliert. Somit wird ein Bauplan für<br />
die Implementierung – die Umsetzung des Designs in <strong>COBOL</strong>-Quelltext – geschaffen.<br />
Abbildung 4-22 zeigt den Fokus dieses Abschnitts.<br />
<br />
Use Case View<br />
«modell» <strong>Anwendung</strong>sfallmodell<br />
Logical View<br />
«modell» Fachliches Modell<br />
1. Methodischer Übergang<br />
«modell» Designmodell<br />
«modell» Implementierungsmodell<br />
Abbildung 4-22 Das Modell des technischen Entwurfs<br />
Bei der bisherigen Vorgehensweise wurde ein Teil des Entwurfs im Implementierungsmodell<br />
spezifiziert. Der Standard für die technische Modellierung [IZB 2003c]<br />
beschreibt dies auf folgende Weise:<br />
Langfristig gesehen ist es Ziel, hauptsächlich auf der Designebene zu modellieren.<br />
Im HOST/<strong>COBOL</strong>-Umfeld wird gegenwärtig jedoch mehr auf der<br />
Implementierungsebene grafisch dargestellt.<br />
Das langfristige Ziel wurde aufgegriffen und umgesetzt. Ein Ansatz für die vollständige<br />
Modellierung der Spezifikationen auf der Designebene für HOST/<strong>COBOL</strong>-<br />
<strong>Anwendung</strong>en wird in den folgenden Abschnitten vorgestellt.<br />
4.4.1 Statische Komponentensicht<br />
Die statische Komponentensicht zeigt die Anordnung der Komponenten innerhalb der<br />
Schichtenarchitektur und die Schnittstellen der Komponenten. Außerdem werden die<br />
Abhängigkeiten zwischen den Komponenten und zwischen Komponenten und<br />
Schnittstellen modelliert.
54 Das Fallbeispiel »Kundenmappe«<br />
Übersicht über die Komponenten. In diesem Abschnitt wird eine Übersicht über<br />
die verwendeten Komponenten gegeben sowie die Spezifikation einiger Schnittstellen<br />
genauer betrachtet. Insbesondere wird besprochen, wie die Funktionalität und die<br />
Struktur des fachlichen Modells mit der Struktur des Designmodells zusammenhängen.<br />
Abbildung 4-23 zeigt eine Übersicht über die Komponenten des Designmodells.<br />
Beide Systeme sind durch zwei Pakete mit dem Stereotyp «designsystem» repräsentiert.<br />
Ein System des Designmodells ist in Schichten unterteilt. Dabei handelt es sich<br />
um die Umsetzung der im Abschnitt 2.3.2 beschriebene Schichtenarchitektur.<br />
«designsystem»<br />
Kundenmappe<br />
«designsystem»<br />
Partner<br />
KundenmappeErstellerSteuerung BeteiligteParteiVerwalterSteuerung AdresssatzFinderSteuerung<br />
«designkomponente»<br />
«designkomponente»<br />
KundenmappeSteuerung<br />
BeteiligteParteiSteuerung<br />
AdresssatzSteuerung<br />
Steuerungsschicht<br />
KundenmappeErsteller<br />
KundenmappeGeschäftslogik<br />
BeteiligteParteiVerwalter<br />
«designkomponente»<br />
BeteiligteParteiGeschäftslogik<br />
AdresssatzFinder<br />
«designkomponente»<br />
AdresssatzGeschäftslogik<br />
Geschäftslogikschicht<br />
BeteiligteParteiBearbeiter<br />
AdresssatzBearbeiter<br />
«designkomponente»<br />
BeteiligteParteiDatenzugriff<br />
«designkomponente»<br />
AdresssatzDatenzugriff<br />
Datenzugriffsschicht<br />
Abbildung 4-23 Die Komponenten im Überblick<br />
Im Modell wird eine Schicht durch ein Paket mit dem Stereotyp «schicht» repräsentiert<br />
– in den Diagrammen aber können die Pakete weggelassen werden und stattdessen<br />
gestrichelte Linien für die Trennung zwischen den Schichten eingesetzt werden.<br />
Die tatsächliche Paketstruktur ist in Abbildung 4-24 anhand der Browser-Sicht von<br />
Rational Rose verdeutlicht. Die einzelnen Schichten enthalten die Komponenten, wobei<br />
eine Komponente nur in <strong>einer</strong> Schicht enthalten sein darf. Die Komponenten werden<br />
durch Pakete mit dem Stereotyp «designkomponente» repräsentiert.
Designmodell 55<br />
«designsystem» Partner<br />
«schicht» Steuerungsschicht<br />
«designkomponente» BeteiligteParteiSteuerung<br />
«designkomponente» AdresssatzSteuerung<br />
«interface» AdressatzFinderSteuerung<br />
«schicht» Geschäftslogikschicht<br />
«schicht» Datenzugriffsschicht<br />
Abbildung 4-24 Eine Browser-Sicht auf das Designsystems Partner<br />
Im Folgenden wird wieder Abbildung 4-23 betrachtet. Nachdem die Komponenten<br />
die enthaltenen Schnittstellen exportieren, werden diese im Diagramm außerhalb der<br />
Komponenten mit der Lollipop-Notation dargestellt. Im Fallbeispiel hat jede Komponenten<br />
genau eine Schnittstelle. Diese Eigenschaft ist allerdings nicht zwingend, da<br />
eine Komponente mehrere Schnittstellen haben kann. Die gestrichelten Pfeile zwischen<br />
den Paketen repräsentieren Abhängigkeiten. Eine Abhängigkeit zu <strong>einer</strong><br />
Schnittstelle bedeutet, dass eine Komponente eine Operation der Schnittstelle aufruft;<br />
eine Abhängigkeit zwischen zwei Paketen zeigt, dass die Quell-Komponente öffentliche<br />
Elemente (das sind Schnittstellen und Datenstrukturen) der Ziel-Komponente<br />
nutzt.<br />
Die Struktur des Systems im Designmodell ist im Gegensatz zum fachlichen Modell<br />
technisch motiviert. Aus diesem Grund wird die Anordnung der fachlichen Pakete<br />
verworfen und nur die elementaren Pakete in das Designmodell abgebildet. Zum Beispiel,<br />
aus dem elementaren fachlichen Paket BeteiligtePartei (vgl. Abbildung 4-9)<br />
wurden die drei Komponenten BeteiligteParteiSteuerung, BeteiligteParteiGeschäftslogik<br />
und BeteiligteParteiDatenzugriff; aus dem zusammengesetzten fachlichen Paket<br />
Partner sind keine Komponenten entstanden. Abbildung 4-25 zeigt den Zusammenhang<br />
zwischen den Komponenten und dem fachlichen Paket.<br />
Aus einem elementaren fachlichen Paket wird für jede Schicht eine Komponente erstellt.<br />
Der Entwickler kann später gegebenenfalls eine Komponente entfernen, wenn<br />
sie nicht benötigt wird. Dies ist in Abbildung 4-23 ersichtlich: Die Komponenten der<br />
Datenzugriffsschicht, die aus dem fachlichen Paket Kundenmappe abgeleitet worden<br />
ist, wurde nachträglich aus dem Modell entfernt (vgl. Abbildung 4-9).<br />
Aus <strong>einer</strong> Steuerungsklasse mit öffentlichen Operationen entstehen die Schnittstellen,<br />
wobei die Funktionalität <strong>einer</strong> Steuerungsklasse auf mehrere Schnittstellen der verschiedenen<br />
Schichten abgebildet werden kann. Dies wird weiter unten anhand eines<br />
Beispiels verdeutlicht.<br />
Die Modellierung der Schnittstellen im Detail. Ein Ziel der neuen Methodik ist<br />
die genaue Spezifikation der Schnittstellen. Um dies zu erreichen, sind die Konzepte
56 Das Fallbeispiel »Kundenmappe«<br />
des Designmodells in dieser Arbeit für eine <strong>COBOL</strong>-Umgebung konkretisiert. Dazu<br />
gehört auch die Modellierung der Schnittstelle 27 .<br />
Fachliches Modell<br />
Designmodell<br />
«fachlichesPaket»<br />
BeteiligtePartei<br />
BeteiligteParteiVerwalterSteuerung<br />
«designkomponente»<br />
BeteiligteParteiSteuerung<br />
BeteiligteParteiVerwalter<br />
«realisiert»<br />
BeteiligteParteiVerwalter<br />
«designkomponente»<br />
BeteiligteParteiGeschäftslogik<br />
BeteiligteParteiBearbeiter<br />
«designkomponente»<br />
BeteiligteParteiDatenzugriff<br />
Abbildung 4-25 Zusammenhang zwischen Designkomponenten und fachlichen<br />
Paketen<br />
In den folgenden Absätzen wird eine Modellierung vorgestellt, die sich direkt auf<br />
<strong>COBOL</strong>-Quelltext abbilden lässt.<br />
Abbildung 4-26 zeigt die Operationen <strong>einer</strong> Schnittstelle und die Beziehungen zur<br />
fachlichen Klasse. Die Operation finde der Schnittstelle BeteiligteParteiVerwalterSteuerung<br />
hat drei Parameter:<br />
27 Die allgemeinen Konzepte der Schnittstellenmodellierung sowie die Syntax der Operationen werden<br />
im Abschnitt 5.3.1 vertieft.
Designmodell 57<br />
§<br />
§<br />
§<br />
Den Eingabeparameter in adresssatzRecord,<br />
den Ausgabeparameter out beteiligteParteiRecord und<br />
den Rückgabetyp RückgabeDaten.<br />
Der Unterschied zu der Steuerungsklasse aus dem fachlichen Modell ist, dass die O-<br />
peration der technischen Umgebung angepasst wird. Die Typen der Parameter sind<br />
<strong>COBOL</strong>-spezifisch und die Richtung wird spezifiziert. Der Rückgabetyp spezifiziert<br />
eine Datenstruktur, die den Status der Operation umfasst.<br />
Fachliches Modell<br />
«control»<br />
BeteiligteParteiVerwalter<br />
+ findeBeteiligtePartei(adresssatz : Adresssatz) : BeteiligtePartei<br />
- prüfeExistenz(adresssatz : Adresssatz) : Ja/Nein-Wert<br />
...<br />
«realisiert»<br />
Designmodell<br />
«interface»<br />
BeteiligteParteiVerwalterSteuerung<br />
+ finde( in adresssatzRecord : AdresssatzRecord,<br />
out beteiligteParteiRecord : BeteiligteParteiRecord) : RückgabeDaten<br />
Abbildung 4-26 Zusammenhang zwischen Schnittstellen und Steuerungsklassen<br />
Wird bei einem Operationsaufruf ein Zeiger als Argument übergeben, muss der entsprechende<br />
Parameter der Operation mit pointer spezifiziert werden. Abbildung 4-27<br />
zeigt die Schnittstelle BeteiligteParteiBearbeiter, die eine Operation mit einem<br />
pointer-Parameter enthält. Der Typ des Parameters spezifiziert den Datentyp, auf den<br />
der Zeiger zeigt.<br />
«interface»<br />
BeteiligteParteiBearbeiter<br />
+ lese(in adresssatznummer : PIC 9(4), out pointer beteiligteParteiPointer : BeteiligteParteiRecord)<br />
+ erzeuge(in pointer beteiligteParteiPointer : BeteiligteParteiRecord)<br />
Abbildung 4-27 Die Schnittstelle BeteiligteParteiBearbeiter<br />
Modellierung der Datenstrukturen. Um die Schnittstelle genau zu modellieren, ist<br />
die Spezifizierung der verwendeten Datenstrukturen wichtig. Abbildung 4-28 zeigt<br />
wie eine Datenstruktur modelliert wird und stellt die Beziehungen der Struktur zu den<br />
fachlichen Entitäten dar. Im Designmodell ändert sich der Typ der Attribute und technische<br />
Attribute kommen hinzu. Zum Beispiel wurde das fachliche Attribut beschrei-
58 Das Fallbeispiel »Kundenmappe«<br />
bungstext technisch mit <strong>einer</strong> Datenstruktur Textzeile realisiert. Als Attributtypen dürfen<br />
nur elementare <strong>COBOL</strong>-Typen oder Datenstrukturen verwendet werden. Die Art<br />
und Weise wie die Generalisierung aufgebrochen wird, hat der Designer im konkreten<br />
Fall zu bestimmen. Im Fallbeispiel wurde eine sehr einfache Art gewählt: Alle Attribute<br />
der Entitäten werden in <strong>einer</strong> Datenstruktur zusammengefasst und ein Attribut<br />
typ hinzugefügt, das den Typ der Datenstruktur spezifiziert. Die Entität BeteiligtePartei<br />
hat im fachlichen Modell eine gerichtete Assoziation zu der Entität Adresssatz.<br />
Dafür wird im Designmodell ein Attribut mit dem Stereotyp «foreignKey» hinzugefügt.<br />
Die berechneten Attribute werden übernommen (vgl. Abbildung 4-31, dort ist<br />
die Operation spezifiziert, die für die Berechnung der Attribute zuständig ist).<br />
Fachliches Modell<br />
Designmodell<br />
...<br />
«primaryKey»<br />
/+ anrede : Zeichenkette<br />
/+ vorname : Zeichenkette<br />
/+ name : Zeichenkette<br />
«entity»<br />
BeteiligtePartei<br />
+ beteiligteParteiNummer : PositiveGanzzahl<br />
+ beschreibungstext : Zeichenkette<br />
+ vermögenswert : Geldbetrag<br />
«entity»<br />
NatürlichePerson<br />
«realisiert»<br />
«datenstruktur»<br />
BeteiligteParteiRecord<br />
«primaryKey» + beteiligteParteiNummer : PIC 9(4)<br />
+ vermögenswert : PIC 9(8)<br />
+ typ : PIC X<br />
«foreignKey» + adresssatzNummer : PIC 9(4)<br />
/+ anrede : PIC X<br />
/+ vorname : PIC X(25)<br />
/+ name : PIC X(30)<br />
8 +beschreibung<br />
«datenstruktur»<br />
Textzeile<br />
+ text : PIC X(10)<br />
Abbildung 4-28 Zusammenhang zwischen Datenstrukturen und fachlichen<br />
Entitäten<br />
4.4.2 Dynamische Komponentensicht<br />
Die dynamische Komponentensicht zeigt wie die Komponenten und ihre Schnittstellen<br />
einen <strong>Anwendung</strong>sfall realisieren. Sie stellt also in den Diagrammen der <strong>Anwendung</strong>sfall-Realisierungen<br />
den dynamischen Ablauf <strong>einer</strong> Ausführung eines <strong>Anwendung</strong>sfalls<br />
dar. Abbildung 4-29 zeigt exemplarisch ein Kollaborationsdiagramm 28 für<br />
den <strong>Anwendung</strong>sfall BeteiligtePartei finden – Fachlich.<br />
Der Ablauf ist im folgenden Absatz beschrieben. Der Berater ruft den Dienst finden<br />
der Komponente BeteiligteParteiSteuerung auf. Der Dienst wird über die Schnittstelle<br />
BeteiligteParteiVerwalterSteuerung aufgerufen. Dieser Aufruf wird modelliert, indem<br />
28 Es sollte beachtet werden, dass im Kollaborationsdiagramm Instanzen von Komponenten verwendet<br />
werden. Eine Designkomponente erweitert das UML-Basiselement Subsystem. Ein Subsystem ist,<br />
im Gegensatz zu einem Paket, instanzierbar (vgl. Abschnitt 5.3.1). Unabhängig davon ist es nicht<br />
möglich, dieses Diagramm mit Rational Rose zu erstellen. Es gibt eine Reihe von Workarounds, die<br />
in dieser Arbeit nicht besprochen werden, da der Fokus hier auf eine allgemeine Notation mit der<br />
UML liegt.
Designmodell 59<br />
der Name der Schnittstelle durch zwei Doppelpunkte (::)<br />
mit dem Aufruf verknüpft wird. Die Komponente leitet den Aufruf an die Geschäftslogikkomponente<br />
weiter. Diese ruft die Datenzugriffskomponenten auf, um die beteiligte<br />
Partei zu lesen. Wird ein Fehlercode zurückgegeben, der spezifiziert, dass die<br />
beteiligte Partei nicht vorhanden ist, ruft die Komponente die Operation der Datenzugriffskomponenten<br />
auf, die eine neue beteiligte Partei erzeugt. Diese Datenstruktur<br />
der beteiligten Partei wird dann zurückgegeben.<br />
: Frontend<br />
1: BeteiligteParteiVerwalterSteuerung::finde(in AdresssatzRecord, out BeteiligteParteiRecord)<br />
«designkomponente»<br />
BeteiligteParteiSteuerung<br />
BeteiligteParteiRecord<br />
2: BeteiligteParteiVerwalter::finde(in AdresssatzRecord, out BeteiligteParteiRecord)<br />
«designkomponente»<br />
BeteiligteParteiGeschäftslogik<br />
3: BeteiligteParteiBearbeiter::lese(in adresssatznummer, out pointer BeteiligteParteiRecord) : Rückgabewert<br />
4: [Rückgabewert = Nicht gefunden] BeteiligteParteiBearbeiter::erzeuge(in pointer BeteiligteParteiRecord)<br />
«designkomponente»<br />
BeteiligteParteiDatenzugriff<br />
Abbildung 4-29 Das Kollaborationsdiagramm Beteiligte Partei finden – Design<br />
4.4.3 Statische Modulsicht<br />
Die statische Modulsicht zeigt die von <strong>einer</strong> Komponente gekapselten Elemente: Module,<br />
Datenstrukturen, Copystrecken, und auch die Schnittstellen, da diese innerhalb
60 Das Fallbeispiel »Kundenmappe«<br />
der Komponente liegen. Hier wird spezifiziert, welches Modul welche Schnittstelle<br />
realisiert und die Beziehungen zwischen den Modulen und Datenstrukturen modelliert.<br />
In diesem Abschnitt werden exemplarisch zwei Komponenten aus verschiedenen<br />
Schichten herausgegriffen und ihr innerer Aufbau beschrieben. Gegenstand der Beschreibung<br />
ist die Verf<strong>einer</strong>ung der Datenstrukturen und die Modulbildung. Auch hier<br />
wird der Bezug zum fachlichen Modell hergestellt.<br />
Im Designmodell wurde bisher für prozedurale Sprachen eine Komponente nur als<br />
schwarzer Kasten betrachtet. Die Beschreibung der Implementierung erfolgte im Implementierungsmodell<br />
[IZB 2003c].<br />
Eine Komponente wird in der neuen Methodik durch eine Innenansicht ergänzt. Die<br />
Innenansicht erfüllt die Funktion, die bisher das Implementierungsmodell eingenommen<br />
hat. Somit werden Konzepte des Implementierungsmodells in das Designmodell<br />
verschoben. Der Rest des Implementierungsmodells wird als »entkernt« bezeichnet.<br />
Zu beachten ist, dass sich bei der Übernahme der Konzepte aus dem Implementierungsmodell<br />
einige Sachverhalte verändert haben: Das Konzept der Datenstrukturen<br />
kommt hinzu; das Konzept der Copystrecken ist dahingehend geändert, dass jetzt eine<br />
Copystrecke eine spezielle Datenstruktur darstellt und somit die Beziehungen zwischen<br />
Modul und Copystrecke neu definiert sind (vgl. Abschnitt 5.3.1).<br />
Zur Verdeutlichung betrachten wir exemplarisch die Komponenten BeteiligtePartei-<br />
Geschäftslogik und BeteiligteParteiDatenzugriff. Abbildung 4-30 zeigt eine Übersicht<br />
über diese beiden Komponenten.<br />
Die Komponenten und die Schnittstellen sind dieselben Elemente wie in der Komponentensicht.<br />
Die Schnittstelle wird nur in einem anderen Format angezeigt und dort<br />
dargestellt, wo sie auch enthalten ist, nämlich in der Komponente. In der Modulsicht<br />
kommen Module und Datenstrukturen hinzu. Eine spezielle Form der Datenstruktur<br />
ist die Copystrecke. Ein Modul wird durch eine Klasse mit dem Stereotyp «modul»<br />
dargestellt. Der Name eines Moduls setzt sich aus seinem Dateinamen 29 und <strong>einer</strong><br />
Kurzbeschreibung zusammen.<br />
Die Realisierungsbeziehung des Moduls KG2100 zu der Schnittstelle BeteiligteParteiVerwalter<br />
spezifiziert, dass dieses Modul die Operationen der Schnittstelle realisiert.<br />
Die Abhängigkeitsbeziehungen mit dem Stereotyp «call» bedeutet, dass das<br />
Modul dazu Operationen anderer Module in Anspruch nimmt.<br />
Betrachten wir die verschiedenen Beziehungen des Moduls KG2110. Die Abhängigkeitsbeziehung<br />
zu der Schnittstelle BeteiligteParteiBearbeiter mit dem Stereotyp<br />
«call» spezifiziert, dass das Quell-Modul KG2110 während der Laufzeit das Ziel-<br />
Modul KL2111 aufruft.<br />
29 Der Dateiname wird nach den Konventionen [IZB 2002d] gebildet, z. B. KG2110, KS1000. Wobei<br />
der zweite Buchstabe die Schicht kennzeichnet. »S« steht z. B. für Steuerungsschicht.
Designmodell 61<br />
Die Assoziation zu der Datenstruktur BeteiligteParteiRecord bedeutet, dass das Modul<br />
auf die Datenstruktur, welche nicht im Speicherbereich des Moduls liegt, mit einem<br />
Zeiger zugreift. Dafür muss die Datenstruktur in der linkage section definiert<br />
werden.<br />
Die Kompositions-Beziehung des Moduls K2111 zu der Datenstruktur bedeutet, dass<br />
die Datenstruktur im Speicherbereich vom Modul liegt. Es lässt sich daraus ableiten,<br />
dass die Datenstruktur in der working-storage section definiert ist.<br />
«designkomponente»<br />
BeteiligteParteiGeschäftslogik<br />
«interface»<br />
BeteiligteParteiVerwalter<br />
«modul»<br />
KG2100 BeteiligteParteiVerwalterFassade<br />
«call»<br />
«modul»<br />
KG2110 BeteiligteParteiVerwalter<br />
«call»<br />
«modul»<br />
KG2120 BeteiligtePartei<br />
«call»<br />
«designkomponente»<br />
BeteiligteParteiDatenzugriff<br />
1 +dzDaten<br />
«interface»<br />
«copystrecke»<br />
BeteiligteParteiBearbeiter<br />
CKL2111 BeteiligteParteiRecord<br />
wird exportiert<br />
ist gekapselt<br />
1 +daten<br />
0..*<br />
8 +beschreibung<br />
«datenstruktur»<br />
Textzeile<br />
«modul»<br />
KL2111 BeteiligteParteiBearbeiter<br />
«indizierteDatei»<br />
BeteiligteParteiDatei<br />
Abbildung 4-30 Modulsicht auf zwei Komponenten
62 Das Fallbeispiel »Kundenmappe«<br />
Die Abbildung zeigt auch eine Klasse mit dem Stereotyp «indizierteDatei». Die Modellierung<br />
der indizierten Datei ist ein Beispiel, um zu zeigen, wie der Zugriff auf eine<br />
persistente Speicherung dargestellt werden kann. Die Komposition zur Datenstruktur<br />
spezifiziert das Format der in der Datei enthaltenen Datensätze.<br />
Die öffentlichen Operationen der Steuerungsklassen werden auf die Schnittstellen<br />
abgebildet. Die privaten Operationen der Steuerungsklassen und die Operationen der<br />
Entitäten werden in Module abgebildet. Abbildung 4-31 zeigt das Modul KG2120 im<br />
Detail, also die Verantwortungen der fachlichen Klassen, die das Modul implementiert.<br />
Das Modul spezifiziert eine Operation für die Prüfung der Konsistenz <strong>einer</strong> beteiligten<br />
Partei und eine Operation für die Berechnung der abgeleiteten Attribute der<br />
Klasse NatürlichePerson. Bei <strong>einer</strong> sturen Abbildung würde für jedes abgeleitete Attribut<br />
eine Operation entstehen. An dieser Stelle ist es jedoch schöner, diese zu <strong>einer</strong><br />
Operation zusammenzufassen.<br />
BeteiligtePartei<br />
BeteiligteParteiVerwalter<br />
Fachliches Modell<br />
Designmodell<br />
«modul»<br />
«realisiert»<br />
KG2120 BeteiligtePartei<br />
+ prüfeKonsistenz(in beteiligtePartei : BeteiligteParteiRecord)<br />
+ berechneNatürlichePerson( inout beteiligtePartei : BeteiligteParteiRecord,<br />
in adresssatzRecord : AdresssatzRecord)<br />
Abbildung 4-31 Zusammenhang zwischen Modulen und fachlichen Klassen<br />
4.4.4 Dynamische Modulsicht<br />
Die Dynamische Modulsicht zeigt die Realisierung der <strong>Anwendung</strong>sfälle mit den<br />
Elementen der Modulsicht. Diese stellt die letzte Stufe der <strong>Anwendung</strong>sfall-<br />
Realisierungen dar: Anhand von Modulen, Datenstrukturen und Copystrecken werden<br />
die <strong>Anwendung</strong>sfälle durchgespielt.<br />
Abbildung 4-32 zeigt, wie die Module den <strong>Anwendung</strong>sfall BeteiligtePartei finden<br />
realisieren. Der Ablauf ist in einem Sequenzdiagramm beschrieben und ist im Wesentlichen<br />
der gleiche wie der, der Komponentensicht. Hinzu kommen die Aktivitäten<br />
innerhalb <strong>einer</strong> Komponente. So zeigt das Diagramm, dass die Module der Komponente<br />
BeteiligteParteiGeschäftslogik die abgeleiteten Attribute berechnen und die<br />
Konsistenz der beteiligten Partei prüfen.
Designmodell 63<br />
: KS2000<br />
BeteiligteParteiVerwalter<br />
Steuerung<br />
: KG2100<br />
BeteiligteParteiVerwalter<br />
Fassade<br />
: KG2120<br />
BeteiligtePartei<br />
: KG2110<br />
BeteiligteParteiVerwalter<br />
: KL2111<br />
BeteiligteParteiBearbeiter<br />
findeBeteiligtePartei(in adresssatzRecord, out beteiligteParteiRecord)<br />
findeBeteiligtePartei(in adresssatzRecord, out beteiligteParteiRecord)<br />
rückgabe := lese(in adresssatznummer, out pointer beteiligteParteiPointer)<br />
[rückgabe = nicht vorhanden] erzeuge(in pointer beteiligteParteiPointer)<br />
berechneNatürlichePerson(inout beteiligtePartei, in adresssatzRecord)<br />
prüfeKonsistenz(in beteiligtePartei)<br />
Abbildung 4-32 Das Sequenzdiagramm BeteiligtePartei finden – Design
64 Das Fallbeispiel »Kundenmappe«<br />
4.5 Implementierungsmodell<br />
Im Designmodell wurde die technische Struktur modelliert. Nun wird beschrieben,<br />
welche Dateien aus dem Designmodell entstehen und welche Abhängigkeiten für die<br />
Kompilierung zwischen den Dateien existieren. In diesem Abschnitt wird die Demonstration<br />
der Durchgängigkeit mit der Ableitung einiger Designelemente in<br />
<strong>COBOL</strong>-Quelltext abgeschlossen. Abbildung 4-33 zeigt den Fokus dieses Abschnitts.<br />
<br />
Use Case View<br />
«modell» <strong>Anwendung</strong>sfallmodell<br />
Logical View<br />
«modell» Fachliches Modell<br />
«modell» Designmodell<br />
«modell» Implementierungsmodell<br />
2. Methodischer Übergang<br />
Abbildung 4-33 Das Modell der Implementierung<br />
4.5.1 Dateisicht: Organisation der Dateien<br />
Die Dateisicht beschreibt die Organisation der Dateien mit den Einheiten, die<br />
<strong>COBOL</strong> zur Verfügung stellt. Diese sind Moduldateien und Copystrecken. Gruppierungskonzepte<br />
aus dem Designmodell werden ebenfalls in das Implementierungsmodell<br />
abgebildet.<br />
Das in Abbildung 4-34 dargestellte Klassendiagramm zeigt die Komponenten<br />
BeteiligteParteiGeschäftslogik und BeteiligteParteiDatenzugriff. Diese sind aus<br />
dem Designmodell (vgl. Abbildung 4-30) entstanden.<br />
Aus den Modulen und Copystrecken des Designmodells werden im Implementierungsmodell<br />
Moduldateien («moduldatei») und Copystreckendateien («copystreckedatei»).<br />
Beide sind spezielle Dateien, die durch eine Klasse mit dem entsprechenden<br />
Stereotyp repräsentiert werden. Allgemeine Dateien werden durch eine Klasse mit<br />
dem Stereotyp «datei» repräsentiert. Die Datei beteiligtepartei.dat ist aus der indizierten<br />
Datei des Designmodells entstanden. Die Designkomponenten werden auf eine<br />
Implementierungskomponente mit demselben Namen abgebildet und in <strong>einer</strong> flachen<br />
Struktur angeordnet.
Implementierungsmodell 65<br />
«implementierungskomponente»<br />
BeteiligteParteiGeschäftslogik<br />
«moduldatei»<br />
KG2100.COB<br />
«moduldatei»<br />
KG2110.COB<br />
«moduldatei»<br />
KG2120.COB<br />
«implementierungskomponente»<br />
BeteiligteParteiDatenzugriff<br />
«moduldatei»<br />
KL2111.COB<br />
«copystreckedatei»<br />
CKL2111.CPY<br />
«datei»<br />
beteiligtepartei.dat<br />
Abbildung 4-34 Dateisicht auf zwei Komponenten<br />
Eine Implementierungskomponente wird durch ein Paket mit dem Stereotyp «implementierungskomponente»<br />
repräsentiert und stellt einen Ordner des Dateisystems dar.<br />
Abbildung 4-35 zeigt den Ordner der Implementierungskomponente BeteiligteParteiDatenzugriff.<br />
Sein Inhalt sind die in der Implementierungskomponente enthaltenen<br />
Dateien. Die Namen der Elemente im Implementierungsmodell entsprechen den Dateinamen<br />
des Dateisystems.<br />
BeteiligteParteiDatenzugriff<br />
KL2111.COB<br />
CKL2111.CPY<br />
beteiligtepartei.dat<br />
Abbildung 4-35 Eine Implementierungskomponente im Dateisystem<br />
Im »entkernten« Implementierungsmodell werden nur noch Abhängigkeiten modelliert,<br />
die beim Kompilieren und Ausführen auftreten. Somit sind Abhängigkeiten die<br />
einzigen Beziehungen zwischen den Elementen des Implementierungsmodells. Eine<br />
Abhängigkeit zwischen zwei Elementen bedeutet, dass eine Änderung oder die Ent-
66 Das Fallbeispiel »Kundenmappe«<br />
fernung des Zielelements einen Fehler beim kompilieren auslösen kann. Es ist also<br />
erforderlich, das Quellelement der Änderung anzupassen. Die Abhängigkeiten entstehen<br />
aus folgenden Beziehungen im Designmodell:<br />
¨<br />
¨<br />
¨<br />
Aufrufbeziehung (z. B.: Modul KG2110 – Modul KL2111)<br />
Komposition (z. B.: Modul KL2111 – Copystrecke CKL2111)<br />
Assoziation (z. B.: Modul KG2110 – Copystrecke CKL2111)<br />
4.5.2 Quelltextsicht<br />
Der Inhalt der Modul- und Copystreckendateien besteht aus <strong>COBOL</strong>-Quelltext. Teile<br />
des Quelltextes lassen sich aus den Elementen des Designmodells ableiten. Gegenstand<br />
der Quelltextsicht ist es, diesen Quelltext darzustellen. In diesem Abschnitt wird<br />
exemplarisch eine Auswahl von Designelementen, die in Abbildung 4-36 dargestellt<br />
sind, in das Implementierungsmodell abgebildet. Dabei wird der abgeleitete Quelltext<br />
besprochen.<br />
Datenstrukturen und Copystrecken. Aus der Copystrecke CKL2111 Beteiligte-<br />
ParteiRecord wird im Implementierungsmodell die Datei CKL2111.CPY. Dieses Beispiel<br />
verdeutlicht noch einmal die Durchgängigkeit der Methodik: Ausgehend von<br />
den Klassen BeteiligtePartei und NatürlichePerson des Problembereichs 30 , ist<br />
schließlich eine <strong>COBOL</strong>-Datenstruktur entstanden. Listing 4-1 zeigt, dass die Datei<br />
aus einem Group Item mit der Nummer der Copystrecke als Name besteht. Dieses<br />
Feld enthält die Attribute und Kompositionen der Copystrecke 31 . Ist die Multiplizität<br />
größer als »1«, wird die occurs-Klausel verwendet. Um die Funktionalität des Ersetzens<br />
nutzen zu können, wird in <strong>einer</strong> Copystrecke immer »a:« vor ein Feld gesetzt.<br />
Außerdem wird die Rolle <strong>einer</strong> Komposition vor den Namen des Attributs gesetzt.<br />
Somit wird aus dem Attribut text der Datenstruktur Textzeile das Feld<br />
a:beschreibung-text.<br />
Listing 4-1 Quelltext aus der Copystreckedatei CKL2111.CPY<br />
05 A:CKL2111.<br />
08 A:BETEILIGTE-PARTEI-NUMMER PIC 9(4).<br />
08 A:BESCHREIBUNG-TEXTZEILE OCCURS 8.<br />
10 A:BESCHREIBUNG-TEXT PIC X(10).<br />
08 A:VERMOEGENSWERT PIC 9(8).<br />
08 A:TYP PIC X.<br />
...<br />
30 Die Klassen des Problembereichs sind in der Abbildung 4-7 zu finden.<br />
31 Die Attribute und Kompositionen der Datenstruktur sind in der Abbildung 4-28 dargestellt.
Implementierungsmodell 67<br />
«designkomponente»<br />
BeteiligteParteiGeschäftslogik<br />
«modul»<br />
KG2110 BeteiligteParteiVerwalter<br />
«call»<br />
«designkomponente»<br />
BeteiligteParteiDatenzugriff<br />
1 +dzDaten<br />
«interface»<br />
«copystrecke»<br />
BeteiligteParteiBearbeiter CKL2111 BeteiligteParteiRecord<br />
1 +daten 0..*<br />
8 +beschreibung<br />
«datenstruktur»<br />
Textzeile<br />
wird exportiert<br />
ist gekapselt<br />
Designmodell<br />
«modul»<br />
KL2111 BeteiligteParteiBearbeiter<br />
«indizierteDatei»<br />
BeteiligteParteiDatei<br />
Implementierungsmodell<br />
«implementierungskomponente»<br />
BeteiligteParteiGeschäftslogik<br />
«moduldatei»<br />
KG2110.COB<br />
«implementierungskomponente»<br />
BeteiligteParteiDatenzugriff<br />
«moduldatei»<br />
KL2111.COB<br />
«copystreckedatei»<br />
CKL2111.CPY<br />
«datei»<br />
beteiligtepartei.dat<br />
Abbildung 4-36 Übergang in das Implementierungsmodell
68 Das Fallbeispiel »Kundenmappe«<br />
Module. Aus dem Modul KL2111 BeteiligteParteiBearbeiter wird im Implementierungsmodell<br />
die Datei KL2111.COB. Listing 4-2 zeigt, welcher Quelltext aus der<br />
Komposition zwischen dem Modul und der Copystrecke im Designmodell entstanden<br />
ist. Zusätzlich wird der Quelltext dargestellt, der aus der Assoziation zwischen dem<br />
Modul und der indizierten Datei abgeleitet werden kann.<br />
Die Komposition zur Copystrecke BeteiligteParteiRecord bedeutet, dass die Datenstruktur<br />
im Arbeitsspeicher des Moduls liegt. Deshalb wird die Datenstruktur in der<br />
working-storage section definiert. Da es sich bei der Datenstruktur um eine Copystrecke<br />
handelt, wird die copy-Anweisung verwendet. Es sollte darauf geachtet<br />
werden, dass mit Hilfe der replacing-Klausel die Rolle der Datenstruktur vor die<br />
Felder gesetzt wird. Das ist besonders hilfreich, wenn ein Modul mehrmals dieselbe<br />
Datenstruktur verwendet.<br />
Listing 4-2 Quelltext aus der Moduldatei KL2111.COB<br />
IDENTIFICATION DIVISION.<br />
PROGRAM-ID. KL2111.<br />
...<br />
INPUT-OUTPUT SECTION.<br />
FILE-CONTROL.<br />
SELECT BP-DATEI<br />
ASSIGN TO "beteiligtepartei.dat"<br />
ORGANIZATION IS INDEXED<br />
RECORD KEY IS FD-BETEILIGTE-PARTEI-NUMMER<br />
...<br />
DATA DIVISION.<br />
FILE SECTION.<br />
FD BP-DATEI<br />
LABEL RECORDS ARE STANDARD.<br />
01 FD-BETEILIGTE-PARTEI-RECORD.<br />
COPY "CKL2111.CPY" REPLACING ==A:== BY ==FD-==.<br />
WORKING-STORAGE SECTION.<br />
01 DATEN-BETEILIGTE-PARTEI-RECORD.<br />
COPY "CKL2111.CPY" REPLACING ==A:== BY ==DATEN-==.<br />
...<br />
Aus dem Modul KG2110 BeteiligteParteiVerwalter wird im Implementierungsmodell<br />
die Datei KG2110.COB. Listing 4-3 zeigt, welcher Quelltext aus der Assoziation zwischen<br />
dem Modul und der Copystrecke im Designmodell entstanden ist.<br />
Die Assoziation zu der Copystrecke BeteiligteParteiRecord bedeutet, dass auf diese<br />
Datenstruktur durch eine Referenz zugegriffen wird. Diese Referenz kann entweder<br />
ein Zeiger in der working-storage section sein, oder ein Parameter in der procedure<br />
division using-Kausel. In jedem Fall muss die Datenstruktur in der linkage<br />
section definiert werden. Auch hier wird die copy-Anweisung verwendet. Es ist
Implementierungsmodell 69<br />
zu beachten, dass aus der Schreibweise der Rolle dzDaten in <strong>COBOL</strong> die Schreibweise<br />
dz-daten wird.<br />
Listing 4-3 Quelltext aus der Moduldatei KG2110.COB<br />
IDENTIFICATION DIVISION.<br />
PROGRAM-ID. KG2110.<br />
...<br />
LINKAGE SECTION.<br />
01 DZ-DATEN-BETEILIGTE-PARTEI-RECORD.<br />
COPY "CKL2111.CPY" REPLACING ==A:== BY ==DZ-DATEN-==.<br />
...<br />
Abbildung der Schnittstelle. Um eine Schnittstelle in Quelltext abzubilden, wird<br />
der Nutzer der Schnittstelle vom Anbieter der Schnittstelle getrennt. Im Fallbeispiel<br />
ist das Modul KL2111 BeteiligteParteiBearbeiter Anbieter der Schnittstelle<br />
BeteiligteParteiBearbeiter und das Modul KG2110 BeteiligteParteiVerwalter Nutzer<br />
der Schnittstelle. Der Name der Schnittstelle wurde im Quelltext auf bpbearbeiter<br />
gekürzt; an kennzeichnet die Felder des Anbieters; nu kennzeichnet die<br />
Felder des Nutzers.<br />
Listing 4-4 zeigt den Quelltext des Anbieters der Schnittstelle. Zuerst werden in der<br />
linkage section die Argumente definiert. Der Zeiger an-args-pointer zeigt auf die<br />
Datenstruktur der Argumente der aufgerufenen Operation. Welche Operation ausgeführt<br />
werden soll, steht im Feld an-bp-bearbeiter-operation. Die Datenstruktur<br />
an-bp-bearbeiter-lese-args definiert die Argumente, die für die Operation lese<br />
übergeben werden. In der using-Klausel werden die Parameter, die zur Laufzeit die<br />
Argumente enthalten, spezifiziert. Mit dem evaluate-Block wird dann abhängig von<br />
der aufgerufenen Operation die richtige Datenstruktur über das Argument gelegt.<br />
Listing 4-5 zeigt den Quelltext des Nutzers der Schnittstelle. Hier ist die Definition<br />
der Argumente in der working-storage section. In der procedure division wird<br />
zuerst die Operation spezifiziert, welche das Modul aufrufen möchte, dann der Zeiger<br />
der Argumente auf die Datenstruktur gesetzt, welche die Argumente enthält. Schließlich<br />
kann das Modul mit den Argumenten aufgerufen werden.
70 Das Fallbeispiel »Kundenmappe«<br />
Listing 4-4 Anbieter: Quelltext aus der Moduldatei BeteiligteParteiBearbeiter<br />
LINKAGE SECTION.<br />
01 AN-ARGS-POINTER USAGE IS POINTER.<br />
01 AN-BP-BEARBEITER-OPERATION PIC X(7).<br />
88 AN-BP-BEARBEITER-LESE VALUE "LESE".<br />
88 AN-BP-BEARBEITER-ERZEUGE VALUE "ERZEUGE".<br />
01 AN-BP-BEARBEITER-LESE-ARGS.<br />
05 AN-LESE-ADRESSSATZ-NUMMER PIC 9(4).<br />
05 AN-LESE-BP-POINTER USAGE IS POINTER.<br />
01 AN-BP-BEARBEITER-ERZEUGE-ARGS.<br />
05 AN-ERZEUGE-BP-POINTER USAGE IS POINTER.<br />
PROCEDURE DIVISION USING<br />
AN-BP-BEARBEITER-OPERATION<br />
AN-ARGS-POINTER.<br />
...<br />
EVALUATE TRUE<br />
WHEN AN-BP-BEARBEITER-LESE<br />
SET ADDRESS OF AN-BP-BEARBEITER-LESE-ARGS<br />
TO AN-ARGS-POINTER<br />
©<br />
PERFORM P21-LESE<br />
WHEN AN-BP-BEARBEITER-ERZEUGE<br />
SET ADDRESS OF AN-BP-BEARBEITER-ERZEUGE-ARGS<br />
TO AN-ARGS-POINTER<br />
©<br />
PERFORM P22-ERZEUGE<br />
WHEN OTHER<br />
...<br />
END-EVALUATE.<br />
Listing 4-5 Nutzer: Quelltext aus der Moduldatei BeteiligteParteiVerwalter<br />
WORKING-STORAGE SECTION.<br />
01 NU-ARGS-POINTER USAGE IS POINTER.<br />
01 NU-BP-BEARBEITER-OPERATION PIC X(7).<br />
88 NU-BP-BEARBEITER-LESE VALUE "LESE".<br />
88 NU-BP-BEARBEITER-ERZEUGE VALUE "ERZEUGE".<br />
01 NU-BP-BEARBEITER-LESE-ARGS.<br />
...<br />
01 NU-BP-BEARBEITER-ERZEUGE-ARGS.<br />
05 NU-ERZEUGE-BP-POINTER USAGE IS POINTER.<br />
PROCEDURE DIVISION<br />
...<br />
SET NU-BP-BEARBEITER-ERZEUGE TO TRUE.<br />
SET NU-ARGS-POINTER TO ADDRESS OF ©<br />
NU-BP-BEARBEITER-ERZEUGE-ARGS.<br />
CALL "KL2110" USING<br />
NU-BP-BEARBEITER-OPERATION<br />
NU-ARGS-POINTER.
Zusammenfassung 71<br />
4.6 Zusammenfassung<br />
In diesem Abschnitt werden die wichtigsten Konzepte der drei Kernmodelle zusammengefasst.<br />
Außerdem werden die »Entkernung« des Implementierungsmodells und<br />
die sich dadurch ergebenen Änderungen bewertet.<br />
4.6.1 Eigenschaften der Kernmodelle<br />
Ein methodischer Übergang befindet sich zum einen zwischen dem fachlichen Modell<br />
und dem Designmodell und zum anderen zwischen dem Designmodell und dem Implementierungsmodell.<br />
Deswegen bilden die genannten Modelle den Kern des Modellsystems.<br />
Die Eigenschaften der Modelle, die sich bei den Übergängen zwischen den<br />
Ebenen ändern, sind in Tabelle 4-1 zusammengefasst.<br />
Tabelle 4-1 Eigenschaften der Kernmodelle<br />
Fachliches Modell Designmodell Implementierungsmodell<br />
Bauplan der Implementierung<br />
– lässt sich direkt in<br />
Quelltext umsetzen; stellt<br />
aber eine Abstraktion dar, da<br />
es logische Konzepte enthält.<br />
<strong>COBOL</strong>-spezifisch.<br />
Verantwortlichkeiten werden<br />
realisiert durch Module und<br />
Datenstrukturen – logisch<br />
gekapselt in Komponenten<br />
mit Schnittstellen.<br />
Fachliche Abstraktion des<br />
Systems – ohne technische<br />
Details und Aspekte der<br />
Implementierungsumgebung.<br />
Programmiersprachenunabhängig.<br />
Verteilt die Verantwortlichkeiten<br />
auf fachliche Klassen:<br />
Control, Entity und Boundary.<br />
Beschreibt die tatsächlichen<br />
Dateien und Ordner, die<br />
aus der Umsetzung des<br />
Designmodells in <strong>COBOL</strong><br />
entstehen.<br />
Abhängig von den Strukturmechanismen<br />
von<br />
<strong>COBOL</strong>.<br />
Die Konzepte des Designmodells<br />
werden auf Moduldateien<br />
und Copystreckendateien<br />
abgebildet.<br />
Allgemein. Konkret und formal. —<br />
Keine Schichten. Schichtenarchitektur. —<br />
Umreißt die Struktur nach<br />
fachlichen Gesichtspunkten.<br />
Konkretisiert die Struktur in<br />
der technischen <strong>COBOL</strong>-<br />
Umgebung; versucht die<br />
fachliche Struktur so gut wie<br />
möglich zu erhalten.<br />
—
72 Das Fallbeispiel »Kundenmappe«<br />
4.6.2 Bewertung der »Entkernung«<br />
Die wesentlichste Änderung ist die »Entkernung« des Implementierungsmodells. Das<br />
Designmodell enthält nun Module, Datenstrukturen und Copystrecken. Das Implementierungsmodell<br />
enthält nur noch die physischen Elemente des Dateisystems (Dateien,<br />
verteilbare Laufzeitkomponenten). Die Beziehungen zwischen den Elementen<br />
sind Kompilierungs- oder Laufzeitabhängigkeiten. Im Folgenden werden die Vor- und<br />
Nachteile erläutert:<br />
Pro:<br />
<br />
<br />
<br />
<br />
Leichtere Navigierbarkeit: Die Realisierung der Komponenten befindet sich jetzt<br />
innerhalb der Komponenten. Deshalb ist die Navigation bei der Verwendung von<br />
CASE-Werkzeugen leichter als das bisherige Springen zu einem neuen Modell.<br />
Die Elemente des Designmodells sind leichter zu pflegen und konsistent zu halten,<br />
da nur innerhalb eines Modells, anstatt über Modellgrenzen hinweg, die Elemente<br />
gepflegt werden müssen.<br />
Das Implementierungsmodell kann automatisch erzeugt werden: Alle Designentscheidungen<br />
und Spezifikationen sind jetzt im Designmodell. Deshalb ist es möglich,<br />
die Informationen, die für das »entkernte« Implementierungsmodell benötigt<br />
werden, aus dem Designmodell abzuleiten.<br />
Die Elemente des Implementierungsmodells können in das Laufzeitmodell integriert<br />
werden: Soll ein Laufzeitmodell angefertigt werden, werden physische Einheiten<br />
benötigt, um sie auf einen Hardware-Knoten zu legen. Diese Einheiten<br />
stellt das Implementierungsmodell bereit.<br />
Contra:<br />
− Die Informationsdichte hat sich im Designmodell vergrößert: Nachdem die Information<br />
aus dem Implementierungsmodell jetzt im Designmodell modelliert wird,<br />
muss mit <strong>einer</strong> großen Informationsdichte umgegangen werden. Durch die geschickte<br />
Verteilung der Elemente auf mehrere Diagramme kann dieses Problem<br />
bewältigt werden.<br />
− Standards sind verletzt worden: Aufgrund der »Entkernung« des Implementierungsmodells<br />
sowie leichten Änderungen am Designmodell ist der erst kürzlich<br />
freigegebene Standard »Technische Modellierung« [IZB 2003c] verletzt worden.<br />
Dies könnte innerhalb der IZB SOFT – wenn der Eindruck entsteht, dass sich<br />
Standards zu häufig ändern – die Akzeptanz der Standards verringern. Es sollte<br />
jedoch nicht außer Acht gelassen werden, dass eine solche Veränderung, die als<br />
Vereinfachung und somit als Effizienz steigernd empfunden wird, sich positiv auf<br />
die Standards auswirkt.
5 UML-Profil für moCa<br />
Die neue Methodik modellbasierte <strong>Entwicklung</strong> <strong>einer</strong> <strong>COBOL</strong>-<strong>Anwendung</strong> (moCa)<br />
basiert auf Modellen, die sich in unterschiedlichen Abstraktionsebenen befinden. Ziel<br />
dieses Kapitels ist es, die Semantik der Modellelemente zu definieren und eine graphische<br />
Repräsentation der Elemente, festzulegen.<br />
Als Modellierungssprache wird die Unified Modeling Language (UML) [OMG] verwendet,<br />
da sie Erweiterungsmechanismen anbietet.<br />
Erweiterungsmechanismen. Die Mechanismen sind Stereotypen, Tagged-Values<br />
und Einschränkungen. Stereotypen erweitern die Semantik von bereits bestehenden<br />
Elementen wie Klassen oder Beziehungen. Mithilfe von Stereotypen werden die Elemente<br />
der Modelle klassifiziert. Ein Stereotyp wird über den Klassennamen geschrieben<br />
und ist in Guillemets eingeschlossen («foo»). Um das Stereotyp leicht von dem<br />
Klassennamen zu unterscheiden, wird er immer klein geschrieben. Für ein Stereotyp<br />
können auch Icons definiert werden. Anstelle des Rechtecks erscheint dann das Icon.<br />
Mit Tagged-Values können Eigenschaftswerte für Elemente definiert werden. Einschränkungen<br />
sind definierte Regeln für die Elemente und spezifizieren die Verwendung.<br />
Eine Menge von Erweiterungen wird zu einem Profil zusammengefasst.<br />
Organisation der Modelle. Unter einem physischen System wird das System verstanden,<br />
das modelliert wird: in diesem Fall die Software der <strong>Anwendung</strong> (<strong>COBOL</strong>,<br />
CICS, etc.), die Hardware (Terminals, IBM S/360, etc.) und auch der Berater, der das<br />
Terminal bedient.<br />
Ein Modell stellt eine Sicht auf das physische System dar. Innerhalb eines Modells<br />
wird das physische System durch Modellelemente repräsentiert. Durch die Verwendung<br />
von Paketen kann eine Hierarchie geschaffen werden. Das höchste Paket in der<br />
Pakethierarchie wird das Top-Level-Paket genannt. Dieses Paket repräsentiert die<br />
Grenze des physischen Systems. Da die Grenze des Pakets eine Grenze auf Systemebene<br />
darstellt, kann sich die Semantik des Paketes von der der enthaltenen Pakete<br />
unterscheiden. Zum Beispiel könnte die Sichtbarkeit der Elemente auf der höchsten<br />
Ebene eingeschränkt sein.<br />
In der IZB SOFT ist das Gesamtsystem unterteilt in Systeme. Ein System stellt laut<br />
[IZB 2003c] eine Organisationseinheit dar, d. h. ein System wird eigenständig verwaltet<br />
und dokumentiert (Fach- und DV-Konzept, Modelle, Handbücher, etc.). Demnach<br />
wird für jedes System eine Modelldatei angelegt. Die Organisation der verschiedenen<br />
73
74 UML-Profil für moCa<br />
Sichten wird in Abbildung 5-1 anhand der Browser-Sicht von Rational Rose verdeutlicht.<br />
Pakete, die Sichten<br />
(Modelle) gruppieren<br />
Modell<br />
(Sicht auf das physische System)<br />
<br />
Top-Level-Modellelement<br />
(repräsentiert das physische System)<br />
Abbildung 5-1 Organisation der Modelle<br />
Use Case View / Logical View<br />
«modell» modell<br />
«system» <br />
Im Folgenden werden die Metamodelle für die verschiedenen Modelle beschrieben.<br />
Die Metamodelle sind als Klassendiagramme dargestellt; jede Klasse repräsentiert ein<br />
Stereotyp. Für die Modelle werden auch die zu verwendenden Datentypen definiert.<br />
Außerdem werden die Beziehungen zwischen den Elementen der verschiedenen Metamodelle<br />
bestimmt.<br />
5.1 <strong>Anwendung</strong>sfallmodell<br />
Mit dem <strong>Anwendung</strong>sfallmodell werden die Anforderungen an das System modelliert;<br />
das System wird dabei von außen betrachtet. Ziel ist es, die Funktionalität, die<br />
das System zu erbringen hat, vollständig über <strong>Anwendung</strong>sfälle zu dokumentieren.<br />
Bei <strong>Anwendung</strong>en, die zwischen Front- und Backend trennen, ist es sinnvoll es Sinn,<br />
die Anforderungen für die beiden Teile getrennt zu modellieren. Diese Trennung ermöglicht<br />
eine anwendungsfallzentrierte <strong>Entwicklung</strong>.<br />
Da die in dieser Arbeit vorgestellte Methodik auf die Erstellung von Komponenten für<br />
das Backend abzielt, ist es Gegenstand des <strong>Anwendung</strong>sfallmodells, die Anforderungen<br />
zu beschreiben, die an das Backend gestellt werden. Ein <strong>Anwendung</strong>sfall für das<br />
Backend stellt einen Geschäftsvorfall dar (vgl. Abschnitt 2.3.2).<br />
5.1.1 Struktur<br />
Ein Paket mit dem Stereotyp «anwendungsfallmodell» repräsentiert das <strong>Anwendung</strong>sfallmodell.<br />
Dieses Paket erweitert das UML-Basiselement Model und enthält Elemente,<br />
die auf der Ebene der Anforderungsbeschreibung das System modellieren.<br />
Ein <strong>Anwendung</strong>sfallmodell enthält ein <strong>Anwendung</strong>sfallsystem als Top-Level-Element,<br />
das durch ein Paket mit dem Stereotyp «anwendungsfallsystem» dargestellt wird. Es
<strong>Anwendung</strong>sfallmodell 75<br />
repräsentiert das <strong>Anwendung</strong>sfallpaket, das am höchsten in der Hierarchie steht, und<br />
bildet die Grenze des Systems zu s<strong>einer</strong> Umgebung.<br />
Ein <strong>Anwendung</strong>sfallsystem definiert eine Menge von Akteuren. Ein Akteur wird<br />
durch eine Klasse mit dem Stereotyp «actor» 32 dargestellt und steht mit den <strong>Anwendung</strong>sfällen<br />
in Beziehung. In dieser Arbeit werden folgende Akteure definiert: Berater,<br />
Frontend und Backend. Ein Akteur initiiert einen <strong>Anwendung</strong>sfall und erwartet,<br />
nachdem der <strong>Anwendung</strong>sfall seine Aktivitäten beendet hat, von dem System ein Ergebnis,<br />
das ihm in irgend<strong>einer</strong> Weise Nutzen bringt.<br />
<strong>Anwendung</strong>sfallmodell<br />
Enthält<br />
0..*<br />
<strong>Anwendung</strong>sfallpaket<br />
0..1<br />
<strong>Anwendung</strong>sfallsystem<br />
Backend<br />
Frontend<br />
0..*<br />
Akteur<br />
eingabe<br />
0..*<br />
<strong>Anwendung</strong>sfall<br />
0..* 0..*<br />
ausgabe<br />
Entität<br />
Abbildung 5-2 <strong>Anwendung</strong>sfallmetamodell<br />
Ein <strong>Anwendung</strong>sfallpaket wird durch ein Paket mit dem Stereotyp «anwendungsfallpaket»<br />
repräsentiert und gruppiert <strong>Anwendung</strong>sfälle. Diese Strukturierung darf nicht<br />
mit der inneren Struktur des Systems verwechselt werden.<br />
Für die Zuordnung der <strong>Anwendung</strong>sfälle zum Frontend und zum Backend gibt es<br />
zwei spezielle <strong>Anwendung</strong>sfallpakete: Das Paket Frontend (dargestellt durch ein Paket<br />
mit dem Stereotyp «frontend») und das Paket Backend (dargestellt durch ein Paket<br />
mit dem Stereotyp «backend»).<br />
Ein <strong>Anwendung</strong>sfallpaket enthält eine Menge von <strong>Anwendung</strong>sfällen. Ein <strong>Anwendung</strong>sfall<br />
hat, dargestellt in Abbildung 5-2, eine Menge von Entitäten als Ein- und<br />
Ausgabe. Die Entitäten sind Klassen, die nur Attribute enthalten. Zwischen Entitäten<br />
gibt es Beziehungen. Die Struktur der Entitäten repräsentiert den Problembereich.<br />
32 Dieses Stereotyp ist in der UML bereits enthalten.
76 UML-Profil für moCa<br />
5.1.2 Sichten<br />
Unter <strong>einer</strong> Sicht wird ein Ausschnitt der Elemente aus einem Modell und der Detailgrad,<br />
wie diese Elemente dargestellt werden, verstanden. Auf das <strong>Anwendung</strong>sfallmodell<br />
sind zwei Sichten definiert:<br />
<br />
<strong>Anwendung</strong>sfallsicht. Mehrere <strong>Anwendung</strong>sfalldiagramme zeigen wie Akteure<br />
mit den <strong>Anwendung</strong>sfällen in Beziehung stehen. Sequenz- und Kollaborationsdiagramme<br />
visualisieren den Ablauf der <strong>Anwendung</strong>sfälle.<br />
Problembereichsicht. Mit einem Klassendiagramm werden die Klassen dargestellt,<br />
welche die Konzepte des Problembereichs repräsentieren.<br />
<br />
5.2 Fachliches Modell<br />
Das fachliche Modell stellt eine fachliche Abstraktion des Systems dar. Die Struktur<br />
lehnt sich an der des <strong>Anwendung</strong>sbereiches an und wird somit nach fachlichen Gesichtspunkten<br />
entworfen. Es spezifiziert die wesentlichen fachlichen Informationen<br />
und das Verhalten des Systems, um die funktionalen Anforderungen zu erfüllen, die<br />
an das System gestellt werden. Es wird von <strong>einer</strong> idealen Computerplattform ausgegangen,<br />
d. h. technische Details oder Einschränkungen konkreter Implementierungsumgebungen<br />
werden nicht berücksichtigt.<br />
Die Klassen des fachlichen Modells lassen sich aus den <strong>Anwendung</strong>sfällen und ihren<br />
Beschreibungen bestimmen. Heuristiken für die Bestimmung der Klassen sind z. B. in<br />
[Bruegge] beschrieben.<br />
5.2.1 Struktur<br />
Das fachliche Modell wird durch ein Paket mit dem Stereotyp «fachlichesModell»<br />
repräsentiert. Dieses Paket erweitert das UML-Basiselement Model und enthält Elemente,<br />
die das System auf fachlicher Ebene modellieren.<br />
Das Top-Level-Element ist das fachliche System, dargestellt durch ein Paket mit dem<br />
Stereotyp «fachlichesSystem». Dieses Paket liegt am höchsten in der Hierarchie und<br />
bildet somit die Grenze des Systems zu s<strong>einer</strong> Umgebung.<br />
Ein fachliches Paket wird durch ein Paket mit dem Stereotyp «fachlichesPaket» dargestellt<br />
und gruppiert fachliche Klassen. Es gilt folgende Einschränkung: Enthält ein<br />
fachliches Paket ein weiteres fachliches Paket, darf es keine fachlichen Klassen enthalten.<br />
Verläuft eine Assoziation zwischen zwei Klassen aus unterschiedlichen Paketen, so<br />
impliziert sie eine Abhängigkeit zwischen den beiden Paketen; diese Abhängigkeit
Fachliches Modell 77<br />
wird durch eine Abhängigkeitsbeziehung modelliert, wobei die Richtung der Abhängigkeit<br />
aus der Navigationsrichtung abzuleiten ist.<br />
Ein fachliches Paket enthält fachliche <strong>Anwendung</strong>sfall-Realisierungen. Letztere werden<br />
durch Pakete mit dem Stereotyp «use-case realization» dargestellt. Mit diesen<br />
Paketen werden Sequenz- und Kollaborationsdiagramme gruppiert, welche <strong>Anwendung</strong>sfälle<br />
auf der fachlichen Ebene realisieren.<br />
Eine fachliche Klasse ist im Metamodell als abstrakt spezifiziert, da sie nur in Form<br />
der folgenden Ausprägungen verwendet wird:<br />
<br />
<br />
<br />
Eine Steuerungsklasse («control») repräsentiert eine Klasse, die einen Ablauf<br />
steuert oder eine Berechnung durchführt. Sie modelliert eine Funktionalität, die<br />
nicht genau an <strong>einer</strong> Klasse festgemacht werden kann. Mit dem Beginn des <strong>Anwendung</strong>sfalles<br />
wird eine Instanz der Steuerungsklasse erzeugt. Wenn der <strong>Anwendung</strong>sfall<br />
abgeschlossen ist, wird typischerweise auch die Instanz zerstört.<br />
Deswegen kann eine Steuerungsklasse keine Informationen über einen längeren<br />
Zeitraum speichern. Der Schwerpunkt <strong>einer</strong> Steuerungsklasse ist die Modellierung<br />
von Operationen. Eine Steuerungsklasse hat Beziehungen zu anderen fachlichen<br />
Klassen. In der Regel werden diese mit Assoziationen modelliert. So werden<br />
z. B. zu allen Entitäten, die in der Signatur der Operationen auftauchen, Assoziationen<br />
gezeichnet. Wenn eine Steuerungsklasse eine andere Steuerungsklasse<br />
nutzt, wird auch eine Assoziation eingezeichnet.<br />
Eine Boundary-Klasse («boundary») stellt eine Grenze eines Paketes oder Systems<br />
dar; sie modelliert Schnittstellen des Systems. Eine Boundary-Klasse kennt<br />
ihre Steuerungsklassen und Entitäten. Diese Beziehungen werden mit Assoziationen<br />
modelliert.<br />
Eine Entitätsklasse («entity») ist eine Klasse deren Information typischerweise<br />
einen <strong>Anwendung</strong>sfall überdauert. Schwerpunkt ist die Modellierung der Attribute.<br />
Lediglich die Operationen, die genau auf den Daten <strong>einer</strong> Entität operieren,<br />
werden in der Entität spezifiziert. Soll eine Entität modelliert werden, die sich<br />
aus mehreren Entitäten zusammensetzt, werden diese mit <strong>einer</strong> Aggregation in<br />
Verbindung gesetzt. Lose Beziehungen zwischen Entitäten werden durch gerichtete<br />
Assoziationen modelliert. Mit Hilfe der Generalisierungsbeziehung können<br />
spezielle Ausprägungen von Entitäten modelliert werden.
78 UML-Profil für moCa<br />
Fachliches Modell<br />
Enthält ein fachliches<br />
Paket ein weiteres<br />
fachliches Paket, darf<br />
es keine fachlichen<br />
Klassen enthalten.<br />
Enthält<br />
0..1 0..*<br />
Fachliches System<br />
Fachliches Paket<br />
0..*<br />
Fachliche<br />
<strong>Anwendung</strong>sfall-Realisierung<br />
0..*<br />
Fachliche Klasse<br />
Steuerungsklasse Boundary Entität<br />
Abbildung 5-3 Fachliches Metamodell<br />
Fachliche Klassen haben Attribute und Operationen, welche die Verantwortlichkeiten<br />
der fachlichen Klasse spezifizieren. Die Syntax <strong>einer</strong> Operation in <strong>einer</strong> fachlichen<br />
Klasse ist im Folgenden beschrieben:<br />
Operation ::= Sichtbarkeit Name ( Parameterliste ) [ : Rückgabetyp ]<br />
Parameterliste ::= Parameter , …<br />
Parameter<br />
::= Name : Typ<br />
Sichtbarkeit ::= + | ~ | –<br />
Die Sichtbarkeit ist unterteilt in:<br />
Öffentlich (+): Alle Elemente können diese Operation aufrufen.<br />
<br />
System: Alle Elemente, die sich im gleichen System wie die fachliche Klasse befinden,<br />
dürfen die Operation aufrufen. Diese Sichtbarkeit ist in der UML nicht<br />
enthalten. Stattdessen wird das Symbol für die Sichtbarkeit package (~) 33 benutzt.<br />
<br />
Privat (–): Nur die Klasse selber darf die Operation ausführen.<br />
<br />
Der Typ sowohl für die Parameter als auch für die Rückgabe, ist entweder eine Entität,<br />
ein für das fachliche Modell definierter elementarer Typ (vgl. Tabelle 5-1) oder<br />
eine Aufzählung. Diese werde weiter unten genau beschrieben.<br />
33 Rational Rose stellt diese Sichtbarkeit nicht zur Verfügung. Deswegen wird in der IZB SOFT für die<br />
Sichtbarkeit System die Rose-Sichtbarkeit implementation verwendet.
Fachliches Modell 79<br />
Tabelle 5-1 Elementare- und Basisdatentypen des fachlichen Modells<br />
Datentyp Beschreibung & Einschränkungen Mögliche Werte<br />
Ganzzahl<br />
Ganzzahl<br />
PositiveGanzzahl<br />
PositiveGanzzahl<br />
Festkommazahl<br />
Festkommazahl<br />
Zeichenkette<br />
Zeichenkette<br />
Ja/Nein-Wert<br />
Eine positive oder negative ganze Zahl, die 0<br />
eingeschlossen.<br />
Die Länge n kann eingeschränkt werden.<br />
Eine positive ganze Zahl, die 0 eingeschlossen.<br />
Die Länge n kann eingeschränkt werden.<br />
Eine vorzeichenbehaftete Festkommazahl.<br />
Die Anzahl der Vorkommastellen n und Nachkommastellen<br />
m kann eingeschränkt werden.<br />
Eine Zeichenkette.<br />
Die Länge n der Zeichenkette kann eingeschränkt<br />
werden.<br />
Ein fachlicher boolescher Wert, der entweder<br />
»Ja« oder »Nein« sein kann.<br />
100000;<br />
34; 0;<br />
-4444<br />
30500;<br />
0; 45<br />
15500,00<br />
„Paul“;<br />
Ja;<br />
Nein<br />
Datum Ein Datum mit Tag, Monat und Jahr. 17.07.2003<br />
Geldbetrag<br />
Geldbetrag<br />
Ein vorzeichenbehafteter Geldbetrag.<br />
Eingeschränkt können die Vorkommastellen<br />
n, die Nachkommastellen m und die Währung<br />
w (lt. ISO-Norm) werden.<br />
15, 50 EUR;<br />
-20,00 USD<br />
Attribute von fachlichen Klassen haben die folgende Syntax:<br />
[ « Stereotyp » ] [ / ] + Name [ [Multiplizität] ] : Typ [ = Wert ] [ { Einschränkungen } ]<br />
Ein Attribut kann mit folgenden Stereotypen ausgezeichnet werden:<br />
<br />
<br />
«readonly» – Auf das Attribut kann nur lesend zugegriffen werden.<br />
«primaryKey» – Das Attribut stellt den primären Schlüssel dar.<br />
Berechnet ein Attribut seinen Wert aus anderen Elementen, wird es als abgeleitetes<br />
Attribut (derived attribute) bezeichnet. Ein abgeleitetes Attribut wird mit dem Symbol<br />
»/« gekennzeichnet. Die Vorschrift, nach der das Attribut zu berechnen ist, wird<br />
mit <strong>einer</strong> Zusicherung spezifiziert.<br />
Die Sichtbarkeit bei Attributen von fachlichen Klassen ist immer öffentlich (+); mit<br />
der Multiplizität werden Arrays definiert; der Typ der Attribute wird immer spezifiziert.
80 UML-Profil für moCa<br />
Ein Aufzählungstyp wird durch eine Klasse mit dem Stereotyp «enumeration» modelliert.<br />
Der Name der Klasse wird mit der Endung »Enum« erweitert. Ein Aufzählungstyp<br />
für eine Anrede könnte wie in Abbildung 5-4 modelliert werden.<br />
«enumeration»<br />
AnredeEnum<br />
FRAU<br />
HERR<br />
Abbildung 5-4 Beispiel für die Modellierung eines Aufzählungstyps<br />
Für jeden Aufzählungswert wird ein statisches Attribut spezifiziert. Aufzählungsklassen<br />
kommen nur als Typen von Attributen oder Parametern von Operationen vor, d. h.<br />
sie haben keine Beziehungen zu anderen fachlichen Klassen.<br />
Als Namenskonvention gilt für die fachlichen Klassen: Klassen- und Beziehungsnamen<br />
beginnen immer mit einem Großbuchstaben; Attribute, Stereotypen und Rollen<br />
beginnen immer mit einem Kleinbuchstaben.<br />
5.2.2 Sichten<br />
Auf das fachliche Modell sind zwei Sichten definiert:<br />
<br />
<br />
Statische Sicht. Klassendiagramme zeigen die fachlichen Pakete und die enthaltenen<br />
fachlichen Klassen. Alle Beziehungen zwischen den Elementen können<br />
dargestellt werden.<br />
Dynamische Sicht. Sequenz- und Kollaborationsdiagramme zeigen den Ablauf<br />
der <strong>Anwendung</strong>sfälle mit den fachlichen Klassen. Die Diagramme sind in dem<br />
entsprechenden <strong>Anwendung</strong>sfall-Realisierungspaket zusammengefasst.<br />
5.2.3 Beziehungen zum <strong>Anwendung</strong>sfallmetamodell<br />
Um die Modellierung rückverfolgen zu können, werden die fachlichen Pakete, welche<br />
einen <strong>Anwendung</strong>sfall realisieren, in Beziehung mit diesem gesetzt. Der Zusammenhang<br />
zwischen den fachlichen Paketen und den <strong>Anwendung</strong>sfällen ist in<br />
Abbildung 5-5 modelliert. Eine <strong>Anwendung</strong>sfall-Realisierung ist genau einem <strong>Anwendung</strong>sfall<br />
zugeordnet. Zwischen den beiden Beziehungen herrscht eine Konsistenzbedingung:<br />
Wenn ein fachliches Paket und eine <strong>Anwendung</strong>sfall-Realisierung<br />
denselben <strong>Anwendung</strong>sfall realisieren, muss der erste Aufruf in der <strong>Anwendung</strong>sfall-<br />
Realisierung auf eine fachliche Klassen gehen, die im fachlichen Paket enthalten ist.
Designmodell 81<br />
<strong>Anwendung</strong>sfallmetamodell<br />
Fachliches Metamodell<br />
Realisiert<br />
<strong>Anwendung</strong>sfall 0..* 0..1<br />
1<br />
0..1<br />
Fachliches Paket<br />
Fachliche<br />
<strong>Anwendung</strong>sfall-Realisierung<br />
Abbildung 5-5 Zusammenhang zwischen fachlichen Metamodellen und <strong>Anwendung</strong>sfallmetamodellen<br />
5.3 Designmodell<br />
Das Designmodell stellt einen Bauplan für die Implementierung dar. Die fachliche<br />
Struktur, modelliert im fachlichen Modell, dient als Ausgangsbasis für den Entwurf in<br />
<strong>einer</strong> konkreten, technischen Umgebung. Orientierte man sich bei der Struktur des<br />
fachlichen Modells am Problembereich, bestimmen im Designmodell technische Aspekte<br />
die Struktur. Das Designmodell berücksichtigt die spezifischen Einschränkungen<br />
<strong>einer</strong> <strong>COBOL</strong>/HOST-Umgebung. Ziel ist es, nur so viel zu modellieren, dass das<br />
Modell eindeutig implementiert werden kann. Unter Implementierung wird die Umsetzung<br />
der Elemente des Designmodells in <strong>COBOL</strong>-Quelltext verstanden.<br />
5.3.1 Struktur<br />
Das Designmodell wird durch eine Paket mit dem Stereotyp «designmodell» repräsentiert.<br />
Dieses Paket erweitert das UML-Basiselement Model. Somit stellen die Elemente<br />
des Designmodells Teile des physischen Systems dar.<br />
Das Designmodell enthält als Top-Level-Element das Designsystem, das durch ein<br />
Paket mit dem Stereotyp «designsystem» repräsentiert wird. Dieses Element steht für<br />
das zu modellierende System und stellt auch die Grenze des Systems zu s<strong>einer</strong> Umgebung<br />
dar.<br />
Das Designsystem enthält <strong>Anwendung</strong>sfall-Realisierungen. Eine <strong>Anwendung</strong>sfall-<br />
Realisierung ist ein Paket mit dem Stereotyp «use-case realization»; es gruppiert beliebig<br />
viele Sequenz- und Kollaborationsdiagramme, die einen <strong>Anwendung</strong>sfall mit<br />
Elementen aus dem Designmodell realisieren. Der Name des Pakets besteht aus dem<br />
Namen des zu realisierenden <strong>Anwendung</strong>sfalls und einem Anhang » – Design«. Der<br />
Anhang kennzeichnet die Ebene; der Name ordnet die Realisierung einem <strong>Anwendung</strong>sfall<br />
zu.
82 UML-Profil für moCa<br />
Designmodell<br />
0..1<br />
Designsystem<br />
0..*<br />
Design<br />
<strong>Anwendung</strong>sfall-Realisierung<br />
Enthält eine Designeinheit<br />
eine weitere<br />
Designeinheit, darf sie<br />
keine Designklassen<br />
enthalten<br />
0..5<br />
Schicht<br />
0..* 0..*<br />
Enthält<br />
Designeinheit<br />
0..*<br />
Designklasse<br />
Designkomponente<br />
Designpaket<br />
IndizierteDatei<br />
0..*<br />
Schnittstelle<br />
Datenstruktur<br />
Modul<br />
Copystrecke<br />
Abbildung 5-6 Designmetamodell<br />
Das Designsystem ist unterteilt in Schichten. Eine Schicht wird durch ein Paket mit<br />
dem Stereotyp «schicht» dargestellt. 34<br />
Eine Schicht enthält beliebig viele Designeinheiten. Eine Designeinheit ist entweder<br />
eine Designkomponente oder ein Designpaket. Abbildung 5-6 zeigt das Metamodell,<br />
in dem die Designeinheit als abstrakte Klasse modelliert ist. Eine Designeinheit enthält<br />
Designklassen und darf beliebig geschachtelt werden, d. h. ein Designkomponenten<br />
darf weitere Designkomponenten enthalten und auch Designpakete. Allerdings<br />
besteht eine Einschränkung: Enthält eine Designeinheit eine weitere Designeinheit,<br />
darf sie keine Designklassen enthalten.<br />
Ein Designpaket wird durch ein Paket mit dem Stereotyp «designpaket» repräsentiert.<br />
Es enthält entweder Module und Datenstrukturen oder weitere Designpakete und Designkomponenten.<br />
Auf alle Elemente eines Designpaketes kann von außen zugegrif-<br />
34 Vgl. hierzu die im Abschnitt 2.3.2 beschriebene Schichtenarchitektur. Die dort beschriebenen Konzepte,<br />
insbesondere die Bezeichnungen der Schichten, sind zu übernehmen. Demnach enthält ein<br />
Designsystem maximal fünf Schichten.
Designmodell 83<br />
fen werden. Ein Designpaket exportiert alle Elemente, die es enthält, und stellt somit<br />
ein reines Gruppierungselement dar.<br />
Eine Designkomponenten wird repräsentiert durch ein Paket mit dem Stereotyp «designkomponente».<br />
Die Designkomponente erweitert das UML-Basiselement Subsystem<br />
und darf deswegen instanziiert werden. Eine Designkomponenten kann folgende<br />
Elemente enthalten:<br />
<br />
<br />
<br />
<br />
<br />
<br />
Designkomponenten<br />
Designpakete<br />
Schnittstellen<br />
Module<br />
Datenstrukturen<br />
Indizierte Dateien<br />
Die enthaltenen Schnittstellen grenzen die Designkomponente von einem Designpaket<br />
ab. Eine Designkomponenten kapselt ihre Elemente – exportiert werden nur Schnittstellen<br />
und öffentliche Datenstrukturen; Module werden immer gekapselt. Enthält<br />
eine Designkomponente z. B. zwei weitere Designkomponenten, so exportiert sie die<br />
Schnittstellen der verschachtelten Designkomponenten.<br />
Mit <strong>einer</strong> Designeinheit als Quelle werden Abhängigkeitsbeziehungen in den folgenden<br />
Fällen eingezeichnet:<br />
<br />
<br />
Ein Element <strong>einer</strong> Designeinheit ruft den Dienst <strong>einer</strong> Schnittstelle auf: Abhängigkeit<br />
von der Designeinheit zu der Schnittstelle.<br />
Ein Element <strong>einer</strong> Designeinheit nutzt ein Element aus <strong>einer</strong> anderen Designeinheit:<br />
Abhängigkeit von der Designeinheit zu der Designeinheit.<br />
Eine Schnittstelle wird durch ein Interface repräsentiert, also durch eine Klasse mit<br />
dem Stereotyp «interface».<br />
Für die Sichtbarkeit <strong>einer</strong> Schnittstelle werden zwei Fälle unterschieden. (1) Die<br />
Schnittstelle ist öffentlich, d. h. alle Elemente dürfen die enthaltenen Operationen aufrufen.<br />
(2) Die Schnittstelle hat die Sichtbarkeit System 35 , d. h. die enthaltenen Operationen<br />
dürfen nur von Elementen aus dem System aufgerufen werden, zu dem die<br />
Schnittstelle gehört.<br />
Hinweis.Alle Operationen <strong>einer</strong> öffentlichen Schnittstelle, die in der Steuerungssicht<br />
liegt, stellen (nach der KBS-Begrifflichkeit) Aufträge dar.<br />
35 Auch in diesem Fall wird in Rational Rose die Sichtbarkeit implementation gewählt. Außerdem<br />
bietet es sich an, die Sichtbarkeit der Schnittstellen farblich zu kodieren.
84 UML-Profil für moCa<br />
In <strong>einer</strong> Schnittstelle werden Operationen spezifiziert und die in der Signatur vorkommenden<br />
Datenstrukturen vereinbart. Im Folgenden wird die Syntax der Operationen<br />
beschrieben:<br />
Operation ::= + Name ( Parameter , …) [ : Rückgabetyp ]<br />
Parameter<br />
Richtung<br />
::= Richtung [ pointer ] Name : Typ<br />
::= in | out | inout<br />
Die Sichtbarkeit der Operationen ist immer öffentlich (+), d. h. alle Elemente dürfen<br />
sie aufrufen.<br />
Die Richtung spezifiziert den Parameter nach der Einteilung, die in Abschnitt 2.4.3<br />
beschrieben ist. Durch pointer kann spezifiziert werden, dass bei der Parameterübergabe<br />
nicht ein Wert, sondern ein Zeiger auf den spezifizierten Typ übergeben wird.<br />
Als Typen dürfen elementare <strong>COBOL</strong>-Datentypen sowie im Modell spezifizierte Datenstrukturen<br />
verwendet werden. In Tabelle 5-2 ist die Umwandlung der Typen aus<br />
dem fachlichen Modell in das Designmodell beschrieben. Als Rückgabetyp steht in<br />
der Regel eine Datenstruktur, die Informationen über den Verlauf der Ausführung<br />
enthält (z. B. Status und Fehlernummer). Wird innerhalb eines Systems immer dieselbe<br />
Datenstruktur als Rückgabetyp verwendet, kann der Rückgabetyp bei den Operationen<br />
weggelassen werden. Weitere Beschreibungen, welche die Schnittstelle genauer<br />
spezifizieren, können in textueller Form zur Schnittstelle hinzugefügt werden.<br />
Eine indizierte Datei (indexed file) wird durch eine Klasse mit dem Stereotyp «indizierteDatei»<br />
dargestellt. <strong>COBOL</strong> bietet verschiedene Möglichkeiten an, Daten persistent<br />
zu speichern. Für das Fallbeispiel wurde eine indizierte Datei eingesetzt. Diese<br />
Datei speichert eine Menge von Datensätzen ab und bietet einen indizierten Zugriff<br />
auf die Datensätze. Die Struktur der Datensätze wird durch eine Komposition zu <strong>einer</strong><br />
Datenstruktur spezifiziert. Ein Modul, das eine indizierte Datei nutzt, also Datensätze<br />
liest und schreibt, hat eine usage-Beziehung (Abhängigkeitsbeziehung) zu dieser Datei.<br />
Eine Datenstruktur wird durch eine Klasse mit einem Stereotyp «datenstruktur» repräsentiert.<br />
Eine Datenstruktur enthält keine Operationen, sondern nur Attribute mit der<br />
folgenden Syntax:<br />
[ « Stereotyp » ] [ / ] + Name [ [ Multiplizität ] ] : Typ [ = Wert ] [ { Einschränkungen } ]<br />
Die Syntax ist also ähnlich wie bei den Attributen <strong>einer</strong> fachlichen Klasse<br />
(vgl. Abschnitt 5.2.1).<br />
Die folgenden Änderungen sind für Attribute <strong>einer</strong> Datenstruktur definiert: (1) Es<br />
kommt das Stereotyp «foreignKey» hinzu. Damit wird ein Attribut als ein primärer<br />
Schlüssel <strong>einer</strong> anderen Datenstruktur spezifiziert. (2) Ein Attribut kann wie im fachlichen<br />
Modell als abgeleitet gekennzeichnet werden. (3) Im Gegensatz zum fachlichen
Designmodell 85<br />
Modell hat die Multiplizität immer eine obere Schranke. (4) Als Typen dürfen elementare<br />
<strong>COBOL</strong>-Datentypen und im Modell spezifizierte Datenstrukturen verwendet<br />
werden. Eine alternative Darstellung eines Attributs ist die Verwendung <strong>einer</strong> Aggregation.<br />
Mit Attributen werden nur Felder der Datenstruktur spezifiziert, die einen<br />
Wert enthalten.<br />
Soll ein Zeiger (ein Feld, das eine Datenstruktur referenziert) modelliert werden, wird<br />
eine gerichtete Assoziation von der Datenstruktur des Attributes zur referenzierten<br />
Datenstruktur gezeichnet.<br />
Tabelle 5-2 Umwandlung der fachlichen Typen in technische Typen<br />
Typ im fachlichen Modell<br />
Ganzzahl<br />
PositiveGanzzahl<br />
Festkommazahl<br />
Zeichenkette<br />
Ja/Nein-Wert<br />
Typ im Designmodell<br />
PIC S9(n)<br />
PIC 9(n)<br />
PIC S9(n)V9(m)<br />
PIC X(n)<br />
PIC X<br />
Mit 88-Stufennummer:<br />
01 SCHALTER PIC X VALUE ' '.<br />
88 SCHALTER-JA VALUE 'J'.<br />
88 SCHALTER-NEIN VALUE 'N'.<br />
Eine Copystrecke ist eine spezielle Datenstruktur. Sie repräsentiert eine wiederverwendbare<br />
Datenstruktur. Eine Datenstruktur kann weiter verf<strong>einer</strong>t werden durch eine<br />
Copystrecke.<br />
Ein Modul wird durch eine Klasse mit dem Stereotyp «modul» repräsentiert. Ein Modul<br />
spezifiziert und realisiert eine Menge von Operationen. Damit sowohl die Mitarbeiter<br />
der Fachabteilung als auch die Entwickler erkennen können, welches Modul<br />
gemeint ist, besteht der Name eines Moduls aus dem Dateinamen des Moduls (z. B.<br />
KL1100) und <strong>einer</strong> Kurzbezeichnung der vom Modul erfüllten Funktionalität (z. B.<br />
KundeFinder).<br />
Die Operationen eines Moduls, das innerhalb <strong>einer</strong> Komponente liegt, sind von außen<br />
nicht sichtbar. Deswegen kann ein Modul mit <strong>einer</strong> Realisierungs-Beziehung zu <strong>einer</strong><br />
Schnittstelle einen Teil s<strong>einer</strong> Operation exportieren. Mit <strong>einer</strong> Aufrufbeziehung (Abhängigkeit<br />
mit dem Stereotyp «call») innerhalb <strong>einer</strong> Komponenten zu einem anderen
86 UML-Profil für moCa<br />
Modul oder zu <strong>einer</strong> Schnittstelle wird spezifiziert, dass das Modul den bereitgestellten<br />
Dienst nutzt.<br />
Soll die Beziehung zwischen einem Modul und <strong>einer</strong> Datenstruktur modelliert werden,<br />
sind zwei Fälle zu unterscheiden:<br />
<br />
<br />
Die Datenstruktur liegt im Speicherbereich des Moduls (working-storage section):<br />
Eine Aggregation vom Modul zur Datenstruktur wird eingezeichnet. Eine<br />
Kardinalität und eine Rolle können spezifiziert werden.<br />
Die Datenstruktur liegt nicht im Speicherbereich des Moduls (Ein Zeiger in der<br />
working-storage section, ein Zeiger oder Feld in der linkage section): Eine<br />
Assoziation vom Modul zur Datenstruktur wird eingezeichnet. Eine Kardinalität<br />
und eine Rolle können spezifiziert werden.<br />
5.3.2 Sichten<br />
Es sind vier Sichten auf das Designmodell definiert:<br />
Statische Komponentensicht. Klassendiagramme zeigen die Verteilung der<br />
Funktionalität auf die Designkomponenten, deren Schnittstellen und die Abhängigkeiten<br />
untereinander. Folgende Elemente werden dargestellt: Schichten, De-<br />
<br />
signpakete, Designkomponenten und Schnittstellen, wobei die Schnittstellen in<br />
der Lollipop-Notation dargestellt werden.<br />
<br />
<br />
Dynamische Komponentensicht. Sequenz- und Kollaborationsdiagramme zeigen<br />
wie die <strong>Anwendung</strong>sfälle mit Komponenten und Schnittstellen realisiert<br />
werden. Die Diagramme sind in den entsprechenden <strong>Anwendung</strong>sfall-<br />
Realisierungspaketen zusammengefasst.<br />
Statische Modulsicht. Klassendiagramme beschreiben die Innenansicht der<br />
Komponenten, also die Details der Schnittstellen, Module und Datenstrukturen.<br />
Alle Elemente können dargestellt werden. Allerdings sollte nicht zuviel Information<br />
in einem Diagramm modelliert werden.<br />
Dynamische Modulsicht. Sequenz- und Kollaborationsdiagramme zeigen wie<br />
die <strong>Anwendung</strong>sfälle mit Modulen realisiert werden. Die Diagramme sind in den<br />
<br />
entsprechenden <strong>Anwendung</strong>sfall-Realisierungspaketen zusammengefasst.<br />
5.3.3 Beziehungen zum fachlichen Metamodell<br />
Abbildung 5-7 modelliert die Beziehungen zwischen den Elementen des Design-<br />
Metamodells und den Elementen des fachlichen Metamodells.<br />
Bei der Beziehung zwischen fachlichen Paketen und Designkomponenten sind nur die<br />
elementaren fachlichen Pakete gemeint. Die Struktur der fachlichen Pakete wird ver-
Designmodell 87<br />
worfen. Aus einem fachlichen Paket wird jeweils eine Designkomponenten in der<br />
Steuerungs-, Geschäftslogik- und Datenzugriffsschicht. Der Entwickler hat die Möglichkeit<br />
eine Komponente zu löschen, wenn sie nicht benötigt wird.<br />
Steuerungsklassen werden auf Schnittstellen abgebildet. Für jede Steuerungsklasse,<br />
die nicht private Operationen besitzt, wird eine Schnittstelle mit diesen Operationen<br />
erstellt. Bei der Abbildung der Operationen ändert sich die Syntax, wie in den vorigen<br />
Abschnitten beschrieben wurde. Für Steuerungsklassen mit privaten Operationen und<br />
Entitäten mit Operationen wird jeweils ein Modul mit diesen Operationen erstellt.<br />
Fachliches Metamodell<br />
Designmetamodell<br />
Fachliches Paket<br />
0..1 0..3<br />
0..1<br />
Designkomponente<br />
Realisiert<br />
0..1<br />
Designpaket<br />
Fachliche Klasse<br />
0..* 0..*<br />
0..*<br />
0..*<br />
Schnittstelle<br />
Modul<br />
Entität<br />
0..1 0..*<br />
Datenstruktur<br />
Fachliche<br />
<strong>Anwendung</strong>sfall-Realisierung<br />
1<br />
0..1<br />
Design<br />
<strong>Anwendung</strong>sfall-Realisierung<br />
Abbildung 5-7 Zusammenhang zwischen Designmetamodellen und fachlichen<br />
Metamodellen<br />
Eine Entität wird auf Datenstrukturen abgebildet. Aus <strong>einer</strong> Entität können mehrere<br />
Datenstrukturen entstehen, z. B. könnte es aus Performance-Gründen notwendig sein,<br />
eine Datenstruktur in mehrere Datenstrukturen zu zerlegen. Zuerst werden die fachlichen<br />
Typen der Attribute in <strong>COBOL</strong>-spezifische Typen umgewandelt. Danach kann<br />
die Datenstruktur mit technischen Attributen ergänzt werden.<br />
Komplizierter wird es bei der Abbildung von mehreren, in Beziehung stehenden Entitäten.<br />
Die Generalisierung muss aufgebrochen werden, da <strong>COBOL</strong> keinen Mechanismus<br />
für Vererbung anbietet. Auf die Beschreibung eines Verfahrens für das Aufbrechen<br />
der Generalisierung wird in dieser Arbeit verzichtet, da die vollständige Beschreibung<br />
eines solchen Verfahrens sehr umfangreich wäre.
88 UML-Profil für moCa<br />
Aus <strong>einer</strong> Aggregation zwischen zwei Entitäten wird im Designmodell eine Komposition.<br />
Bei <strong>einer</strong> gerichteten Assoziation zwischen zwei Entitäten im fachlichen Modell<br />
wird bei der Datenstruktur der Quelle ein Feld mit dem Primärschlüssel des Ziels eingefügt.<br />
Dieses Feld wird mit dem Stereotyp «foreignKey» ausgezeichnet.<br />
Ist die Kardinalität <strong>einer</strong> Beziehung im fachlichen Modell »0..*«, muss bei der Abbildung<br />
in das Designmodell aufgrund von <strong>COBOL</strong>-Einschränkungen eine obere Grenze<br />
definiert werden.<br />
Die fachlichen <strong>Anwendung</strong>sfall-Realisierungen werden zu <strong>Anwendung</strong>sfall-<br />
Realisierungen im Designmodell verf<strong>einer</strong>t.<br />
5.4 Implementierungsmodell<br />
Das Implementierungsmodell beschreibt wie die Konzepte des Designmodells in Dateien<br />
und in Quelltext umgesetzt werden. Die Dateien, die <strong>COBOL</strong> zur Verfügung<br />
stellt, sind Moduldateien und Copystrecken. Abhängigkeiten zwischen den Dateien,<br />
die für das Kompilieren bestehen, werden spezifiziert. Gruppierungskonzepte aus dem<br />
Designmodell werden ebenfalls in das Implementierungsmodell abgebildet, z. B. werden<br />
die Dateien in Ordnern gruppiert. Dabei ist zu beachten, dass die Konzepte, Datei<br />
und Ordner, in <strong>einer</strong> konkreten <strong>Entwicklung</strong>sumgebung oft andere Namen haben:<br />
<br />
<br />
Unter Rational ClearCase 36 gibt es Dateien und Ordner.<br />
Unter MVC 37 gibt es Members, Sequential Data-sets und Libraries.<br />
Außerdem bietet das Implementierungsmodell eine Sicht auf den Inhalt der Quelltextdateien<br />
an.<br />
5.4.1 Struktur<br />
Das Implementierungsmodell wird durch ein Paket mit dem Stereotyp «implementierungsmodell»<br />
dargestellt. Dieses Paket erweitert das UML-Basiselement Model.<br />
Das Implementierungsmodell besteht aus einem Paket mit dem Stereotyp «implementierungssystem»,<br />
welches das Top-Level-Paket Implementierungssystem repräsentiert.<br />
Das Implementierungssystem enthält Implementierungskomponenten, dargestellt<br />
durch Pakete mit dem Stereotyp «implementierungskomponente». Diese Pakete repräsentieren<br />
Ordner im Dateisystem.<br />
Eine Komponente gruppiert Dateien, dargestellt durch Klassen mit dem Stereotyp<br />
«datei». Es gibt zwei spezielle Dateien: die Moduldatei («moduldatei») und die Co-<br />
36 Rational ClearCase ist ein Werkzeug für die Versionsverwaltung von Dokumenten.<br />
37 MVC ist ein Betriebssystem für IBM-Großrechner und steht für Multiple Virtual Storage.
Implementierungsmodell 89<br />
pystreckedatei («copystreckedatei»). Die Moduldatei repräsentiert eine Datei, die den<br />
Quelltext eines Moduls enthält; die Copystreckedatei repräsentiert eine Datei, die den<br />
Quelltext <strong>einer</strong> Copystrecke enthält. Die einzige Art der Beziehung zwischen Elemente<br />
des Implementierungsmodells ist die Abhängigkeitsbeziehung.<br />
Implementierungsmodell<br />
0..1<br />
Implementierungssystem<br />
0..*<br />
Implementierungskomponente<br />
0..*<br />
Datei<br />
Moduldatei<br />
Copystreckedatei<br />
Abbildung 5-8 Implementierungsmetamodell<br />
5.4.2 Sichten<br />
Auf das Implementierungsmodell sind zwei Sichten definiert:<br />
<br />
Dateisicht. Mehrere Klassendiagramme zeigen die Implementierungskomponenten<br />
mit den enthaltenen Dateien und die Abhängigkeiten untereinander.<br />
Quelltextsicht. Zeigt den Inhalt der Quelltextdateien, also die <strong>COBOL</strong>-Implementierung<br />
der <strong>Anwendung</strong>, an.<br />
<br />
5.4.3 Beziehungen zum Designmetamodell<br />
Der Zusammenhang zwischen den Elementen der Metamodelle ist in Abbildung 5-9<br />
modelliert. Aus einem Designpaket oder <strong>einer</strong> Designkomponente wird eine Implementierungskomponente<br />
mit demselben Namen. Aus einem Modul wird eine Moduldatei,<br />
allerdings wird als Name nur noch die Modulnummer verwendet. Auch bei der<br />
Abbildung <strong>einer</strong> Copystrecke in die Copystreckedatei wird nur noch die Nummer als<br />
Name verwendet. Aus <strong>einer</strong> Indizierten Datei wird eine Datei. Die Umsetzung der
90 UML-Profil für moCa<br />
Elemente des Designmodells nach <strong>COBOL</strong>-Quelltext ist im Abschnitt 4.5.2 beschrieben.<br />
Designmetamodell<br />
Implementierungsmetamodell<br />
Designpaket<br />
Designkomponente<br />
Modul<br />
Copystrecke<br />
0..1<br />
1<br />
0..1 1<br />
0..1 1<br />
Realisiert<br />
0..1 1<br />
Implementierungskomponente<br />
Moduldatei<br />
Copystreckedatei<br />
IndizierteDatei<br />
0..1 1<br />
Datei<br />
Abbildung 5-9 Zusammenhang zwischen Implementierungsmetamodellen<br />
und Designmetamodellen
6 Zusammenfassung und Ausblick<br />
Die IZB SOFT entwickelt <strong>Anwendung</strong>en für Bank- und Kreditinstitute. Die Architektur<br />
der <strong>Anwendung</strong>en besteht aus Terminals, denen von einem Großrechner Dienste<br />
zur Verfügung gestellt werden. Diese Dienste sind vorwiegend in <strong>COBOL</strong> realisiert.<br />
Da die Programmiersprache <strong>COBOL</strong> keine Mechanismen anbietet, um Software auf<br />
der Basis von Komponenten zu entwickeln, ist es erst durch den Einsatz von Modellen<br />
möglich, Komponenten – wenn auch nur logisch – zu bilden. Die Modelle modellieren<br />
die <strong>Anwendung</strong>en auf verschiedenen Abstraktionsebenen. Dabei treten die typischen<br />
Probleme der Softwareentwicklung auf: Die Systeme sind sehr komplex und<br />
Flexibilität ist eine Schlüsselanforderung.<br />
Um die große Menge an Information und deren Komplexität kontrollieren zu können,<br />
wird eine modellbasierte <strong>Entwicklung</strong>smethodik eingesetzt. Diese Methodik ist in den<br />
iterativen und architekturzentrierten <strong>Entwicklung</strong>sprozess der IZB SOFT eingebettet.<br />
Jedoch kommt es zu Brüchen in der <strong>Entwicklung</strong>: Da die Übergänge zwischen den<br />
Modellen unzureichend definiert sind, kann die Konsistenz der Modelle nicht sichergestellt<br />
werden. Darüber hinaus besteht die Gefahr, dass wichtige Designentscheidungen<br />
während der <strong>Entwicklung</strong> verloren gehen.<br />
In dieser Arbeit wurde eine durchgängige Methodik geschaffen, um <strong>COBOL</strong>-<br />
<strong>Anwendung</strong>en für Großrechner modellbasiert zu entwickeln. Die Methodik ist eine<br />
Weiterentwicklung des bisherigen Vorgehens der IZB SOFT und wurde auf Grundlage<br />
der firmeninternen Standards konzipiert. Dabei war eine der Zielsetzungen, die<br />
Methodik einfach zu halten und so wenige Änderungen wie möglich an den Standards<br />
vorzunehmen. Die wesentlichsten Ergebnisse sind im Folgenden zusammengefasst.<br />
Um die Kluft zwischen den Mitarbeitern der Fachabteilung und den Entwicklern zu<br />
schließen, wurde die Begrifflichkeit des fachlichen Modells, mit beiden Parteien abgestimmt.<br />
Die genaue Definition des Metamodells sowie der methodische Übergang<br />
in das Designmodell ermöglicht den Entwicklern die bereits modellierte Fachlichkeit<br />
als Grundlage für ihre technischen Entwürfe zu nutzen. So wurden z. B. die Beziehungen<br />
der fachlichen Klassen in <strong>einer</strong> Art und Weise gestaltet, dass die Entwickler<br />
eine Struktur erkennen, die sich technisch umsetzen lässt.<br />
Das Designmodell, der Bauplan der Implementierung, wurde im Bezug auf den Abstraktionsgrad<br />
näher zum <strong>COBOL</strong>-Quelltext gebracht. Dadurch ist es für die Entwickler<br />
leichter ihren Quelltext im Modell »wieder zu finden«. Durch die Einführung der<br />
Datenstrukturen und die Veränderung der Semantik der Copystrecken ist es jetzt mög-<br />
91
92 Zusammenfassung und Ausblick<br />
lich, die Schnittstellen der Komponenten, also die Signatur und die zugehörigen<br />
Datenstrukturen, präzise zu modellieren.<br />
Außerdem hat sich die Informationsverteilung geändert: Das Implementierungsmodell<br />
ist »entkernt« worden, d. h. Konzepte des Implementierungsmodell sind in das Designmodell<br />
verschoben worden. Die Komponenten erhalten somit eine Innenansicht,<br />
welche die Funktion erfüllt, die bisher das Implementierungsmodell eingenommen<br />
hat. Somit wurde eine Grundlage geschaffen, die <strong>Anwendung</strong> auf der Designebene<br />
vollständig zu spezifizieren. Insbesondere haben die »Entkernung« des Implementierungsmodells<br />
sowie die dadurch entstandene Verteilung der Information, die Navigierbarkeit<br />
und Pflege der Modelle innerhalb der CASE-Werkzeuge erheblich verbessert.<br />
Das Implementierungsmodell ist nun methodisch aus dem Designmodell ableitbar,<br />
da es nur noch die Elemente des Dateisystems, also die Dateien und Ordner, modelliert.<br />
Dadurch ist es leicht möglich, weitere Modelle, wie z. B. ein Laufzeit- oder<br />
Verteilungsmodell, auf der Grundlage des Implementierungsmodells zu definieren.<br />
Ein Schlüsselergebnis ist der direkte methodische Übergang vom Designmodell zum<br />
<strong>COBOL</strong>-Quelltext. Auf der Basis dieses Verfahrens können in Zukunft Programmrahmen<br />
aus den Modellen automatisch generiert werden.<br />
Die neue Methodik wurde sowohl an einem projektnahen Fallbeispiel, als auch an<br />
weiteren Beispielen erprobt. Dadurch wurden die Praxistauglichkeit und die Durchgängigkeit<br />
des Vorgehens unter Beweis gestellt. Bisher ist die Methodik den Anforderungen<br />
gerecht geworden – die Bewährung im täglichen Einsatz, bei großen <strong>Anwendung</strong>en,<br />
steht noch aus. Ebenfalls sollte die bisher unzureichend behandelte Übertragung<br />
der Generalisierung aus dem fachlichen Modell in das Designmodell genauer<br />
untersucht werden.<br />
Da es jetzt möglich ist, eine <strong>COBOL</strong>-<strong>Anwendung</strong> von der Vision bis hin zum Quelltext<br />
modellbasiert zu entwickeln, stehen folgende Schritte an:<br />
1) Die Einführung der Methodik in die Abteilungen der IZB SOFT. Da Teile der Arbeit<br />
in den neuen Unternehmensstandard einfließen, ist es notwendig, sich ein Konzept<br />
zu überlegen, wie die Inhalte in die Abteilungen gebracht werden können.<br />
2) Erstellung eines Konzepts zur Implementierung der Methodik. Die Metamodelle<br />
zusammen mit dem systematischen Vorgehen können als Basis für verschiedene<br />
Werkzeuge dienen. Bei einem modellbasierten Vorgehen ist der Einsatz von Werkzeugen<br />
entscheidend für die Qualität und die Effizienz des Vorgehens. Es wäre z. B.<br />
denkbar, ein Werkzeug zu entwickeln, welches aus dem fachlichen Modell eine erste<br />
Version des Designmodells ableitet, sowie ein Werkzeug, das die Elemente Entität,<br />
Datenstruktur, <strong>COBOL</strong>-Quelltext auf den verschiedenen Ebenen konsistent hält. Außerdem<br />
wäre es leicht möglich, ein Werkzeug zu bauen, mit dem <strong>COBOL</strong>-Quelltext-<br />
Rahmen aus einem Designmodell erzeugt werden kann. Ein weiteres Einsatzgebiet<br />
wäre die Umsetzung von Reverse Engineering. Das Vorgehen definiert bereits einen
93<br />
großen Teil der Rückverfolgbarkeit. Somit wäre es relativ einfach, ein Werkzeug zu<br />
implementieren, das aus einem bestehenden <strong>COBOL</strong>-Quelltext ein Implementierungsmodell<br />
erstellt, sowie die Abhängigkeiten zwischen den Elementen modelliert.<br />
Schwieriger, aber ebenso machbar, wäre die automatische Erstellung des Designmodells<br />
aus dem <strong>COBOL</strong>-Quelltext. Die Dateien, welche Copystrecken enthalten, könnten<br />
gescannt und daraus die entsprechenden Copystrecken und Datenstrukturen des<br />
Designmodells abgeleitet werden. Aus den Moduldateien ließen sich die logischen<br />
Module und ihre Aufrufe folgern. Außerdem wäre es auch möglich, die Beziehungen<br />
zwischen Modulen und den Datenstrukturen zu bestimmen.<br />
3) Schließlich könnten die Werkzeuge in eine <strong>Entwicklung</strong>sumgebung integriert werden.<br />
Eine solche Umgebung, welche die Entwickler entlastet und die Effizienz des<br />
<strong>Entwicklung</strong>sprozesses steigert, wäre ein Mittel, um die Qualität und Flexibilität der<br />
<strong>COBOL</strong>-<strong>Anwendung</strong>en noch weiter zu verbessern.
Literatur<br />
[Booch]<br />
[Brown]<br />
[Bruegge]<br />
[Budlong]<br />
[Buschmann]<br />
[Clements]<br />
[Cockburn]<br />
[Fowler]<br />
[Goos]<br />
Grady Booch. Object-Oriented Analysis and Design with Applications.<br />
Zweite Ausgabe. Redwood City, California: The Benjamin/Cummings<br />
Publishing Company, Inc, 1994.<br />
Gary Brown. „<strong>COBOL</strong>: The Failure That Wasn’t“. (Mai 2000). Internet:<br />
www.CobolReport.com.<br />
Bernd Bruegge und Allen H. Dutoit. Object-Oriented Software Engineering:<br />
Conquering Complex and Changing Systems. New Jersey:<br />
Prentice-Hall, 2000.<br />
Mo Budlong. Sams Teach Yourself <strong>COBOL</strong> in 21 Days. Dritte Auflage.<br />
Indianapolis: Sams Publishing, 2000.<br />
Frank Buschmann et al. Pattern-Oriented Software Architecture: A<br />
System of Patterns. Chichester: John Wiley & Sons, 1996.<br />
Paul Clements et al. Documenting Software Architectures: Views and<br />
Beyond. Boston: Addison-Wesley, 2003.<br />
Alistair Cockburn. Writing Effective Use Cases. New York: Addison-<br />
Wesley, 2001.<br />
Martin Fowler. UML Distilled: A Brief Guide to the Standard Object<br />
Modeling Language. Zweite Ausgabe. Reading, Massachusetts: Addison-Wesley,<br />
2000.<br />
Gerhard Goos. Vorlesungen über Informatik. Band 2. Zweite Auflage.<br />
Berlin: Springer-Verlag, 1999.<br />
[Hopkins] Jon Hopkins. „Component Primer“. Communications of the ACM 43<br />
(10): 27–30 (2000).<br />
[IZB 2002a]<br />
Informatik Zentrum Bayern (IZB SOFT). „Anforderungsanalyse“. (Version<br />
1.3, Interner Standard, Dezember 2002).<br />
[IZB 2002b] ———. „<strong>Anwendung</strong>sarchitektur Rahmenbedingungen“. (Version 1.5,<br />
Interner Standard, Dezember 2002).<br />
[IZB 2002c]<br />
———. „Fachliche Modellierung“. (Version 1.1, Interner Standard,<br />
Dezember 2002).
96 Literatur<br />
[IZB 2002d]<br />
———. „Programmierrichtlinien <strong>COBOL</strong>“. (Version 2.4, Interner Standard,<br />
Dezember 2002).<br />
[IZB 2003a] ———. „Modellierung“. (Version 0.9, Internes Dokument, PROFil 3.0<br />
Technische Rahmenbedingungen, 407.279, April 2003).<br />
[IZB 2003b]<br />
[IZB 2003c]<br />
[Jacobson1992]<br />
[Jacobson1999]<br />
[Kobryn]<br />
[Kruchten]<br />
[Menendez]<br />
[Nobe]<br />
[OMG]<br />
[Rechenberg]<br />
[Schätz]<br />
———. „Systembereitstellungsprozess“. (Version 3.1, Interner Standard,<br />
Januar 2003).<br />
———. „Technische Modellierung“. (Version 1.2, Interner Standard,<br />
April 2003).<br />
Ivar Jacobson et al. Object-Oriented Software Engineering: A Use Case<br />
Driven Approach. New York: ACM Press, 1992.<br />
Ivar Jacobson, Grady Booch und James Rumbaugh. The Unified Software<br />
Development Process. Reading, Massachusetts: Addison-Wesley,<br />
1999.<br />
Cris Kobryn. „Modeling Components and Frameworks with UML“.<br />
Communications of the ACM 43 (10): 31–38 (2000).<br />
Philippe Kruchten. „The 4+1 View Model of Architecture“. IEEE Software<br />
12 (6): 42–50 (1995).<br />
Raul Menendez und Doug Lowe. Murach’s CICS for the <strong>COBOL</strong> Programmer.<br />
Fresno, California: Mike Murach & Associates, 2001.<br />
Catherine R. Nobe et al. „<strong>Modellbasierte</strong> <strong>Entwicklung</strong>: Fünf von Boeing<br />
eingesetzte Prozesse“. OnTime. (Spezialdruck, <strong>Modellbasierte</strong> Software-<strong>Entwicklung</strong>,<br />
2002). Internet: http://www.ontime.nu.<br />
Object Management Group. „OMG Unified Modeling Language Specification“.<br />
(Version 1.5, formal/03-03-01, März 2003).<br />
Peter Rechenberg und Gustav Pomberger (Hrsg.). Informatik-<br />
Handbuch. München: Carl Hanser Verlag, 1997.<br />
Bernhard Schätz et al. „Model-Based Development“. (Forschungsbericht<br />
TUM-I0204, Fakultät für Informatik, TU München, Mai 2002).