UML-Sequenzdiagramme
Das Verhaltensdiagramm, das tatsächlich gezeichnet wird. Die Beteiligten oben, die Zeit läuft nach unten, und jede Nachricht in der Reihenfolge, in der sie geschieht - samt Verzweigungen, Schleifen und Aufrufen, die scheitern.
15 Min. LesezeitUML 2.5.18 von 35
Die kurze Antwort
- Ein Sequenzdiagramm beantwortet, was in welcher Reihenfolge zwischen wem passiert. Die Zeit läuft nach unten, und der vertikale Abstand sagt nichts über Dauer.
- Eine gefüllte Pfeilspitze heißt, der Aufrufer blockiert; eine offene, er läuft weiter. Dieser eine Unterschied ist das Nützlichste, was die Notation über ein verteiltes System sagt.
- Bedingungen und Wiederholungen sind kombinierte Fragmente - alt, opt, loop, par, ref - jeweils ein Kasten mit dem Operator in der linken oberen Ecke.
- Sobald der Gutfall gezeichnet ist, werden die Fehlerfälle zählbar: Fragen Sie zu jeder Nachricht, was bei ausbleibender Antwort, bei einer Fehlerantwort und bei doppelter Zustellung geschieht.
01Was es zeigt#
Ein Sequenzdiagramm beantwortet genau eine Frage: was passiert, in welcher Reihenfolge, zwischen wem. Es ist das Diagramm, das man zeichnet, wenn zwei Leute uneins sind, welcher Service welchen aufruft, oder wenn ein Ablauf vier Systeme durchquert und niemand den ganzen Pfad im Kopf hat.
Das Layout erledigt die ganze Arbeit. Die Teilnehmer stehen oben nebeneinander. Die Zeit läuft nach unten - nicht von links nach rechts und nicht maßstäblich. Eine Nachricht weiter unten passiert nach einer weiter oben, und das ist die vollständige Leseregel.
02Lebenslinien, Aktivierungen, Nachrichten#
Drei Möbelstücke, und alles andere ist eine Variation davon.
Eine Lebenslinie ist der Kopf oben plus die gestrichelte Senkrechte, die von ihm herabläuft. Der Kopf benennt den Teilnehmer. Das kann ein Klassenname sein, ein Objekt (: Checkout), ein als Strichmännchen gezeichneter Akteur oder eine Rolle mit einem Stereotyp wie «boundary» oder «control». Was immer Sie wählen, bleiben Sie im ganzen Diagramm konsistent.
Ein Aktivierungsbalken - manchmal Ausführungsvorkommen genannt - ist das schmale Rechteck auf der Lebenslinie. Es markiert die Spanne, in der dieser Teilnehmer etwas tut. Verschachtelte Balken heißen, dass ein Teilnehmer sich selbst aufgerufen hat. Aktivierungen sind in UML optional, und sie lohnen sich: sie machen sichtbar, dass Checkout noch wartet, während das Gateway arbeitet.
Eine Nachricht ist der waagerechte Pfeil. Sein Stil sagt, welche Art von Aufruf es ist, und das ist der Teil, den man sich merken sollte.
03Die Nachrichtenarten#
| Element | Notation | Was es bedeutet |
|---|---|---|
| Synchron | Durchgezogene Linie, gefüllte Spitze. Der Aufrufer blockiert, bis er eine Antwort bekommt. Eine gewöhnliche Methode oder ein blockierender HTTP-Aufruf. | |
| Asynchron | Durchgezogene Linie, offene Spitze. Der Aufrufer macht sofort weiter. Veröffentlichen in eine Queue oder Auslösen eines Ereignisses. | |
| Antwort | Gestrichelte Linie, offene Spitze. Die Rückkehr. Beschriften Sie sie mit dem, was zurückkommt, nicht mit dem Wort „return“. | |
| Create | Gestrichelter Pfeil, der auf dem Kopf einer Lebenslinie landet, die erst weiter unten beginnt. Mit «create» markiert. | |
| Destroy | ein Kreuz am Ende der Lebenslinie | Der Teilnehmer hört auf zu existieren; seine Lebenslinie endet am Kreuz. |
Die Unterscheidung gefüllte gegen offene Pfeilspitze ist die mit echtem Gewicht. Sie ist der Unterschied zwischen „der Aufrufer ist jetzt blockiert“ und „der Aufrufer ist weitergegangen“, und sie ist das Nützlichste, was ein Sequenzdiagramm einem Leser über ein verteiltes System sagt.
04Verzweigen: kombinierte Fragmente#
Echte Abläufe haben Bedingungen und Wiederholungen. UML behandelt beides mit einem kombinierten Fragment: einem Kasten um eine Folge von Nachrichten, mit einem Operator im Etikett oben links.
alt- Alternativen. Durch eine gestrichelte Linie in Abschnitte geteilt, jeder mit einer Wächterbedingung in eckigen Klammern. Genau einer läuft. Das ist ein If/Else.opt- optional. Ein Abschnitt mit Wächter; er läuft oder nicht. Das ist ein If ohne Else.loop- Wiederholung. Der Wächter gibt Bedingung oder Grenzen an, etwaloop [1..*]oderloop [solange weitere Seiten].par- parallel. Die Abschnitte laufen nebenläufig, ohne garantierte Reihenfolge.ref- ein Verweis auf eine Interaktion, die auf einem anderen Diagramm definiert ist. So verhindert man, dass ein Sequenzdiagramm auf drei Seiten anwächst.critical- ein Bereich, der mit nichts anderem verschränkt werden darf.
05Der Rahmen, Gates und Nachrichten aus dem Nichts#
Alles oben sitzt in einem Kasten, den die meisten Diagramme zeichnen und wenige Leser bemerken: dem Interaktionsrahmen, einem Rechteck um das ganze Diagramm mit einem Etikett oben links, auf dem sd und der Name der Interaktion steht. Es sieht nach Dekoration aus und ist keine - es gibt der Interaktion einen Namen, und genau der macht ref möglich. Ohne ihn lässt sich ein langer Ablauf nicht zerschneiden, und dann muss jeder Ablauf auf eine Seite passen.
| Element | Notation | Was es bedeutet |
|---|---|---|
| Rahmen | sd AuthorizePayment | Der Kasten um das Diagramm und der Name der Interaktion darin. Das, worauf ein ref auf einem anderen Diagramm zeigt. |
| Gate | ein Pfeil, der am Rahmen endet | Eine Nachricht, die die Rahmengrenze überquert, statt an einer Lebenslinie zu beginnen oder zu enden. Es ist die Parameterliste der Interaktion: so empfängt und liefert ein ref überhaupt etwas. |
| Gefundene Nachricht | ein gefüllter Kreis am Anfang | Kommt von einem Sender, den das Diagramm nicht modelliert - ein Klick, ein Scheduler, ein Webhook. Ehrlich, und weit besser, als eine Lebenslinie für die Außenwelt zu erfinden. |
| Verlorene Nachricht | ein gefüllter Kreis an der Spitze | An einen Empfänger gesendet, den das Diagramm nicht modelliert, oder wirklich nie angekommen. Selten auf einem Entwurfsdiagramm, nützlich auf einem, das einen Fehler beschreibt. |
| Dauerbedingung | { < 200ms } | Eine in geschweifte Klammern gesetzte Bedingung über zwei Punkte einer Lebenslinie. Die einzige Art, wie ein Sequenzdiagramm etwas über Zeit sagen kann, da der senkrechte Abstand nichts sagt. |
| Zustandsinvariante | { order = PLACED } | Eine Bedingung auf einer Lebenslinie, die an dieser Stelle gelten muss. Nützlich direkt über einer Nachricht, deren ganzer Daseinsgrund diese Bedingung ist. |
Die Fragmentliste im vorigen Abschnitt ist der Arbeitssatz, nicht der ganze. Vier weitere Operatoren existieren, und drei verdienen gelegentlich ihren Platz: break bricht den Rest des umgebenden Fragments ab, wenn sein Wächter gilt - die natürliche Form eines frühen Fehlerrücksprungs; strict erzwingt die Reihenfolge seiner Abschnitte, wo einfaches seq sie offen lässt; neg markiert eine Interaktion, die nicht passieren darf, also einen negativen Test als Bild. assert, ignore und consider gehören zur formalen Spezifikation und können getrost übersprungen werden, bis etwas sie erzwingt.
06Die Fehlerpfade herauslesen#
Das Wertvollste an einem Sequenzdiagramm ist nicht die Dokumentation des Erfolgspfads. Es ist, dass die Fehler zählbar werden, sobald der Erfolgspfad auf dem Papier steht - und ein Ablauf über vier Systeme hat weit mehr davon, als irgendwer aus dem Gedächtnis schätzt.
Gehen Sie das Diagramm nach unten durch und stellen Sie zu jeder Nachricht drei Fragen, in dieser Reihenfolge. Die Antworten sind Ihre Erweiterungspfade, und jede ist entweder ein Fragment, das Sie zeichnen sollten, oder eine Entscheidung, die jemand treffen muss.
- Was, wenn keine Antwort kommt? Jede synchrone Nachricht ist eine Stelle, an der der Aufrufer ewig blockieren kann. Irgendwo gibt es einen Timeout-Wert; kennt ihn niemand im Raum, ist das der Befund. Zeichnen Sie es als
altmit einem[timeout]-Wächter, und die Zahl landet auf dem Diagramm, wo man über sie streiten kann. - Was, wenn die Antwort ein Fehler ist? Verschieden von „keine Antwort“ und von erschreckend viel Produktionscode gleich behandelt. Eine abgelehnte Autorisierung und ein toter Acquirer brauchen unterschiedliche Behandlung, und auf dem Diagramm wird dieser Unterschied sichtbar.
- Was, wenn das zweimal zugestellt wird? Fragen Sie das bei jeder asynchronen Nachricht, denn Queues stellen erneut zu und Clients wiederholen. Lautet die Antwort „der Kunde wird zweimal belastet“, haben Sie die Idempotenz-Anforderung gefunden, die nicht im Ticket stand.
Lesen Sie das Diagramm dann noch einmal rückwärts, wegen der Frage, die der Vorwärtslauf nie erwischt: was ist bereits passiert und muss jetzt rückgängig gemacht werden? Ein Fehler bei der vierten Nachricht lässt die Wirkungen der ersten drei bestehen. Das ist die Kompensationslogik, und ein Sequenzdiagramm ist der billigste Ort der Welt, um festzustellen, dass man welche braucht.
07Wann man eines zeichnet#
Dazu greifen, wenn
- Ein Ablauf durchquert mehrere Services und die Aufrufreihenfolge ist nicht offensichtlich
- Sie müssen klären, wer dafür zuständig ist, wen aufzurufen
- Ein Protokoll, ein Handshake oder eine Integration für ein anderes Team dokumentieren
- Herausfinden, wo die Fehlermodi liegen - das Diagramm macht fehlende Fehlerpfade sichtbar
Zu etwas anderem greifen, wenn
- Die Interaktion sind zwei Teilnehmer und drei Nachrichten - schreiben Sie den Satz
- Es geht um verstrichene Zeit oder Fristen - nehmen Sie ein Zeitverlaufsdiagramm
- Die Frage ist die Struktur, nicht die Reihenfolge - nehmen Sie ein Klassen- oder Komponentendiagramm
- Der Ablauf besteht überwiegend aus Verzweigungen - ein Aktivitätsdiagramm ist weit lesbarer
Ein Sequenzdiagramm ist außerdem das wirksamste UML-Artefakt, um einen Entwurf vor dem Bau zu prüfen, weil es die unbequemen Fragen ans Licht zwingt. Was passiert, wenn das Gateway in einen Timeout läuft? Wer wiederholt? Ist dieser Aufruf blockierend? Das Diagramm lässt sich nicht zeichnen, ohne sie zu beantworten.
08Häufige Fehler#
- Jeder Pfeil durchgezogen und gefüllt. Sieht alles synchron aus, hat das Diagramm seine nützlichste Unterscheidung weggeworfen. Offene Spitzen für Fire-and-forget.
- Antwortpfeile für alles. Die Antwort auf einen synchronen Aufruf ist oft impliziert und kann entfallen. Zeichnen Sie sie, wenn der Rückgabewert zählt.
- Abstraktionsebenen mischen. Eine Lebenslinie für eine ganze Zahlungsplattform neben einer für eine einzelne Hilfsklasse. Wählen Sie eine Flughöhe.
- Kein Fehlerpfad. Der Erfolgspfad allein ist die uninteressantere Hälfte. Ein
altmit dem Timeout-Zweig macht das Diagramm prüfenswert. - Zwanzig Lebenslinien. Ab etwa sieben passt das Diagramm nicht mehr auf einen Bildschirm und wird gescrollt statt gelesen. Teilen Sie es und nutzen Sie
ref.
In je einer Zeile
- 01Teilnehmer oben, Zeit nach unten; senkrechter Abstand ist keine Dauer.
- 02Gefüllte Spitze heißt synchron und blockierend, offene Spitze asynchron.
- 03Gestrichelte Pfeile sind Antworten; gestrichelt auf einen abgesenkten Kopf ist «create».
- 04Aktivierungsbalken zeigen, wer beschäftigt ist, und lohnen den Aufwand.
- 05alt, opt, loop, par und ref decken Verzweigungen ab; nie tiefer als zwei Ebenen schachteln.
- 06Zeichnen Sie den Fehlerpfad - er ist die Hälfte, die das Diagramm nützlich macht.
09Häufige Fragen#
Was ist eine Lebenslinie im Sequenzdiagramm?
Die gestrichelte senkrechte Linie unter jedem Beteiligten, die dessen Existenz über die Zeit darstellt. Die Zeit läuft nach unten, also geschieht eine weiter unten gezeichnete Nachricht später als eine darüber.
Was ist der Unterschied zwischen synchroner und asynchroner Nachricht?
Eine synchrone Nachricht hat eine gefüllte Pfeilspitze und heisst, der Sender wartet auf die Rückkehr des Aufrufs. Eine asynchrone Nachricht hat eine offene Pfeilspitze und heisst, der Sender macht sofort weiter. Die Antwort auf einen synchronen Aufruf ist eine gestrichelte Linie mit offener Spitze.
Was bedeuten alt, opt, loop und par?
Es sind kombinierte Fragmente: beschriftete Kästen um einen Teil der Interaktion. alt ist eine Verzweigung mit Wächtern, opt ein einzelner Zweig, der ausbleiben darf, loop wiederholt seinen Inhalt, und par heisst, seine Regionen dürfen sich verschränken. Die Beschriftung sitzt im Fünfeck oben links.
Was ist ein Aktivierungsbalken?
Das schmale Rechteck auf einer Lebenslinie, solange dieser Beteiligte etwas tut, formal eine Ausführungsspezifikation. Es beginnt beim Empfang einer Nachricht und endet bei der Rückkehr - deshalb werden verschachtelte Aufrufe als gestapelte Balken sichtbar.
Wann Sequenz- statt Kommunikationsdiagramm?
Ein Sequenzdiagramm, wenn es auf die Reihenfolge ankommt: ein Protokoll, ein Fehlerpfad, ein Timeout. Ein Kommunikationsdiagramm, wenn es auf die Struktur ankommt, also wer mit wem verbunden ist. Beide tragen dieselbe Information und unterscheiden sich nur im Layout.
In dieser Reihe
- 01Was ist UML?
- 02UML-Symbole
- 03Diagramm auswählen
- 04Klassendiagramme
- 05Klassendiagramm-Beispiele
- 06Klassendiagramm zeichnen
- 07Klassendiagramm-Symbole
- 08Sequenzdiagramme
- 09Sequenzdiagramm-Beispiele
- 10Sequenzdiagramm zeichnen
- 11Anwendungsfalldiagramme
- 12Anwendungsfall-Beispiele
- 13Aktivitätsdiagramme
- 14Aktivitätsbeispiele
- 15Zustandsdiagramme
- 16Zustandsdiagramm-Beispiele
- 17Komponentendiagramme
- 18Komponenten-Beispiele
- 19Komponentendiagramm zeichnen
- 20Komponenten-Symbole
- 21Verteilungsdiagramme
- 22Verteilungsbeispiele
- 23Objektdiagramme
- 24Paketdiagramme
- 25Kompositionsstrukturdiagramme
- 26Kommunikationsdiagramme
- 27Sequenz vs Kommunikation
- 28Zeitverlaufsdiagramme
- 29Interaktionsübersichtsdiagramme
- 30Profildiagramme
- 31UML mit KI
- 32E-Commerce-Beispiel
- 33Banken-Beispiel
- 34Microservices-Beispiel
- 35AWS-Beispiel
Passend dazu
Grundlagen
Verhaltensdiagramme
Verhaltensdiagramme
Strukturdiagramme
Grundlagen
Verhaltensdiagramme