Übersicht Inhaltsverzeichnis Vorwort 1 Einführung 2 Agile und UML-basierte Methodik 3 Kompakte Übersicht zur UML/P 3.1 Klassendiagramme 3.2 Object Constraint Language 3.3 Objektdiagramme 3.4 Statecharts 3.5 Sequenzdiagramme 4 Prinzipien der Codegenerierung 5 Transformationen für die Codegenerierung 6 Grundlagen des Testens 7 Modellbasierte Tests 8 Testmuster im Einsatz 9 Refactoring als Modelltransformation 10 Refactoring von Modellen 11 Zusammenfassung und Ausblick Literatur |
3.5 SequenzdiagrammeSequenzdiagramme werden zur Modellierung von Interaktionen zwischen Objekten eingesetzt. Ein Sequenzdiagramm stellt einen exemplarischen Ausschnitt aus dem Ablauf eines Softwaresystems dar. Es modelliert die dabei auftretenden Interaktionen und Aktivitäten und kann um OCL-Bedingungen erweitert werden. Ein Sequenzdiagramm beschreibt, in welcher Reihenfolge Methodenaufrufe durchgeführt und beendet werden. Ähnlich wie bei Statecharts werden daher Verhaltensaspekte modelliert. Es ergeben sich jedoch einige wesentliche Unterschiede:
Abbildung 3.44 beinhaltet ein typisches Sequenzdiagramm. Die wesentlichen im Sequenzdiagramm auftretenden Konzepte sind in Abbildung 3.45 kurz erläutert.
Im Sequenzdiagramm werden Objekte in einer Reihe nebeneinander dargestellt und mit einer nach unten gerichteten Zeitlinie versehen. Es wird vereinfachend angenommen, dass eine gleichzeitige oder überkreuzende Versendung von Nachrichten nicht auftritt. Diese Vereinfachung ist motiviert aus dem Einsatz von Sequenzdiagrammen für Testzwecke, in denen Nebenläufigkeit explizit kontrolliert wird, um determinierte Testergebnisse zu erhalten. Dadurch wird die Modellierung mit Sequenzdiagrammen wesentlich vereinfacht, es sind aber unter Umständen bestimmte, in einer Implementierung mögliche Sachverhalte nicht durch Sequenzdiagramme darstellbar. Die Arten der möglichen Interaktionen sind in Abbildung 3.46 dargestellt. Jede Interaktion mit Ausnahme des rekursiven Aufrufs wird durch einen waagrechten Pfeil dargestellt, der symbolisiert, dass die dabei verbrauchte Zeit vernachlässigt wird. An den Pfeilen werden Methodenaufrufe, Returns oder Exceptions mit oder ohne Argumente in Java angegeben. Wenn eine Methode statisch ist, so wird sie wie auch im Klassendiagramm unterstrichen. In diesem Fall endet der Pfeil an einer Klasse, die damit analog zu einem Objekt eingesetzt wird. Wird ein Objekt während der Interaktion neu erzeugt, wird dies dargestellt, indem die Zeitlinie des Objekts später beginnt. Abbildung 3.47 beinhaltet zwei typische Formen von Objekterzeugung. Wie Abbildung 3.44 zeigt, können in einem Sequenzdiagramm zusätzlich zu bestimmten Zeitpunkten des Ablaufs geltende Bedingungen angegeben werden. In diesen OCL-Bedingungen werden die im Sequenzdiagramm auftretenden Objekte und Werte in Beziehung gesetzt. Dazu ist der Zugriff auf benannte Objekte sowie Variablen möglich, die als Argumente in Methodenaufrufen eingesetzt sind. Eine OCL-Bedingung kann die auftretenden Objekte und Parameter sowie den Effekt einer Nachricht auf einem Objekt genauer beschreiben, wobei sich der Kontext aus dem Sequenzdiagramm ergibt. Ein Zugriff auf Attribute ist durch die Qualifizierung mit dem Objekt möglich. Ist ein OCL-Ausdruck allerdings ausschließlich über einer Zeitlinie, so ist er diesem Objekt zugeordnet und auf die Attribute dieses Objekts kann zugegriffen werden. Die Gültigkeit einer OCL-Bedingung bezieht sich auf den Zeitpunkt unmittelbar nach der letzten aufgetretenen Interaktion beziehungsweise dem letzten aufgetretenen Aktivitätsbalken. Das bedeutet, die OCL-Bedingung ist nur unmittelbar nach dieser Interaktion einzuhalten. Soll in der Bedingung auf einen früheren Wert eines Attributs zugegriffen werden, so ist dieser explizit in einer Zwischenvariable abzulegen. Wie Abbildung 3.48 zeigt, wird dazu ein an OCL angelehntes let-Konstrukt verwendet, das neue Variablen einführt, die nur innerhalb des Sequenzdiagramms zugreifbar sind. Semantik eines SequenzdiagrammsAuf den exemplarischen Charakter eines Sequenzdiagramms wurde bereits hingewiesen. Für den methodischen Einsatz von Sequenzdiagrammen sind mehrere Formen der Exemplarizität zu unterscheiden. Die Exemplarizität eines Sequenzdiagramms basiert analog zum Objektdiagramm auf der Beschreibung einer Menge von Objekten, die in dieser Form in beliebiger Häufigkeit oder auch gar nicht, in einem System auftreten kann. Außerdem ist der Ablauf an sich exemplarisch, der in dieser Form sogar beliebig häufig nebeneinander und verschachtelt, aber auch gar nicht auftreten kann. Zu diesen Formen der Exemplarizität kommt hinzu, dass ein Sequenzdiagramm eine Abstraktion eines Ablaufs darstellt, da es weder alle Objekte des Systems, noch alle auftretenden Interaktionen beinhalten kann. Bei einem Sequenzdiagramm können auch zwischendurch Interaktionen fehlen. Findet ein Methodenaufruf im System während des Beobachtungszeitraums mehrfach statt, so entsteht zusätzlich eine mehrdeutige Situation, welcher tatsächliche Methodenaufruf mit der im Diagramm dargestellten Interaktion korrespondiert. Mithilfe geeigneter Stereotypen kann jedoch die Beobachtungsform genauer festgelegt werden. Der Repräsentationsindikator „©“ zeigt bei Objekten im Sequenzdiagramm die Vollständigkeit der gezeigten Interaktionen an. Der alternative Repräsentationsindikator „…“ für Unvollständigkeit gilt per Default. Bei einem in diesem Sinn vollständig beobachteten Objekt ergibt sich notwendigerweise, dass zu jedem Aufruf ein passender Return angegeben sein muss. Dabei sind alle Objekte anzugeben, die direkt mit dem beobachteten Objekt interagieren. Dies kann zu erheblich detaillierteren Diagrammen führen, als eigentlich gewünscht wird. Deshalb werden in Band 1 weitere Stereotypen eingeführt, die zusätzliche Varianten der Semantikdefinition erlauben. Der Stereotyp ≪match:visible≫ ist zum Beispiel geeignet für die Definition von Sequenzdiagrammen für Tests: ≪match:visible≫ verbietet das Auslassen von Interaktionen mit anderen im Sequenzdiagramm angegebenen Objekten, erlaubt jedoch das Fehlen von Interaktionen mit Objekten, die im Diagramm nicht angegeben sind. Die Beobachtung dieses Objekts ist also vollständig in Bezug auf die im Diagramm sichtbaren Objekte.
|
|||||||||