Read in English · Leer en español · Lire en français
Abschnitt 4.4 von 4.8 · Mittelstufe · 22 Min. Lesezeit
Die UML-Diagramme, die Architekten noch verwenden
Videolektion
5 Min. · auf Englisch gesprochen, mit UntertitelnNur anhören (Audio)
Transkript lesen
Kästen und Linien genügen für die Struktur, aber manche Fragen brauchen mehr Präzision. In dieser Lektion lernen Sie die Handvoll Diagramme der Unified Modeling Language, kurz UML, kennen, die Architekten noch verwenden, und wann sie den Aufwand lohnen.
Musiker auf der ganzen Welt können dieselben Noten lesen, weil Noten und Zeichen überall dasselbe bedeuten. UML ist ein ähnlicher gemeinsamer Satz von Symbolen zum Zeichnen von Software. Ein bestimmter Pfeil bedeutet „wartet auf eine Antwort“. Ein anderer bedeutet „sendet und macht weiter“. Sie müssen nicht alles davon kennen. Architekten nutzen meist eine Handvoll ihrer Zeichnungen, jede nur dann, wenn ihre Präzision wirklich hilft.
UML ist eine universelle grafische Sprache zur Beschreibung von Struktur und Verhalten von Software. Sie wurde 1997 von der Object Management Group als Standard übernommen, und die aktuelle Version, 2.5.1, definiert vierzehn Diagrammtypen. Ihr Ruf hat sich gewandelt. Der frühe Anspruch, detaillierte Modelle in Code zu verwandeln, ist weitgehend gescheitert, und viele Teams zeichnen heute informelle Kästen und Linien. Doch einige UML-Diagramme sind noch immer die besten Werkzeuge für Fragen zum Verhalten über die Zeit.
Martin Fowler beschreibt drei Arten, UML zu verwenden. Als Skizze ist sie informell und selektiv: nur die wichtigen Elemente, oft auf einem Whiteboard, oft weggeworfen. Mit seinen Worten: Vollständigkeit ist der Feind der Verständlichkeit. Als Bauplan erzeugt sie vollständige, präzise Modelle, die jemand anderes implementiert. Als Programmiersprache ist das Modell detailliert genug, um in Code kompiliert zu werden. Das überlebt nur in einigen Nischen im Embedded- und sicherheitskritischen Bereich. Für Architekten ist das Skizzieren der Normalfall. Fragen Sie bei jedem Diagramm: Wer wird es lesen, und welche Entscheidung unterstützt es?
Wenn Architekten nur ein einziges UML-Diagramm behalten, ist es meist das Sequenzdiagramm. Es zeigt, wie Beteiligte in einem Szenario über die Zeit interagieren. Jeder Beteiligte oben hat eine gestrichelte Lebenslinie, und die Zeit läuft nach unten. Hier gibt die Kunden-App beim Bestellservice eine Bestellung auf, der den Zahlungsanbieter aufruft und wartet. Ein synchroner Aufruf hat eine durchgezogene Linie und eine gefüllte Pfeilspitze. Die Antwort kommt als gestrichelte Linie zurück. Dieser Kasten ist ein alt-Fragment, das Alternativen zeigt. Ist die Zahlung autorisiert, wird die Bestellung gespeichert und bestätigt. Wird sie abgelehnt, bekommt die App einen Fehler. Zeichnen Sie auch die Fehlerszenarien: Dort findet das meiste architektonische Denken statt. Schließlich geht ein Ereignis „Bestellung aufgegeben“ als asynchrone Nachricht an das Topic: eine durchgezogene Linie mit offener Pfeilspitze. Der Service wartet nicht. Diese Pfeilspitzen richtig zu setzen ist wichtig. Ob ein Service wartet oder weitermacht, bestimmt seine Latenz, seine Ausfallarten und seine Kopplung. Die Legende erklärt sie.
Ein Zustandsdiagramm beschreibt einen Lebenszyklus präzise. Zustände sind abgerundete Rechtecke, und jede Transition ist mit einem Ereignis, einer optionalen Guard-Bedingung und einer optionalen Aktion beschriftet. Hier beginnt eine Bestellung mit offener Zahlung und wird erteilt, wenn die Zahlung autorisiert ist. Dann durchläuft sie angenommen, fertig und in Zustellung. Zugestellt wird sie erst, wenn der Übergabecode stimmt, und dann wird der Kunde benachrichtigt. Bestellungen können auch storniert werden: wenn die Zahlung abgelehnt wird, wenn das Restaurant sie ablehnt oder durch den Support, mit Erstattung. Dieser Lebenszyklus wird von mehreren Services geteilt. Ihn in einem Diagramm festzulegen verhindert Bugs, bei denen ein Service eine Bestellung für storniert hält, während ein anderer einen Kurier losschickt. Und es beantwortet Fragen, die Text verbirgt. Kann eine Bestellung storniert werden, wenn sie bereits in Zustellung ist? Hier nicht.
Vier weitere Diagramme vervollständigen den Satz. Ein Komponentendiagramm zeigt die Schnittstellen, die jeder Teil bereitstellt und benötigt, und macht so die Abhängigkeitsrichtung sichtbar. Ein Deployment-Diagramm zeigt Knoten, etwa ein Smartphone oder einen Cluster, die darauf deployten Artefakte und die Kommunikationspfade zwischen ihnen. Ein Aktivitätsdiagramm zeigt einen Workflow: wer jeden Schritt erledigt und was zwischen einem Fork und einem Join parallel läuft. Und ein Klassendiagramm bleibt am besten einem kleinen Domänenmodell der zentralen Geschäftsbegriffe vorbehalten. Jede Klasse von Hand gezeichnet ist binnen Wochen veraltet.
UML ist zu viel, wenn das Publikum sie nicht kennt und die Frage sie nicht braucht. Doch Präzision zahlt sich aus, wenn Missverständnisse teuer sind, etwa an einer Schnittstelle zwischen Unternehmen, wo jede Seite gegen die Beschreibung der anderen baut. Regulierte und sicherheitskritische Branchen verlangen oft eine Designdokumentation, die Prüfer nachverfolgen können. Lebenszyklusregeln, die sich mehrere Teams teilen, wie die Bestellzustände, profitieren von einer Notation, die jede Transition ausdrücklich verlangt. Und wenn die Umsetzenden eines Designs dessen Autor nicht ohne Weiteres fragen können, muss es weniger Raum für Interpretation lassen. Ein letzter Tipp: Fügen Sie immer eine Legende hinzu. Viele Leser kennen die Notation nicht.
Der vollständige Abschnitt zeichnet alle sechs Diagramme für die Essenslieferplattform, mit der Notation für jedes. Als Nächstes betrachten wir in Abschnitt vier Punkt fünf, wie man die Gründe hinter Entscheidungen festhält. Bis gleich.
Was Sie wissen müssen
- UML ist eine von der OMG standardisierte universelle Modellierungssprache; die aktuelle Version ist UML 2.5.1 (Dezember 2017), die vierzehn Diagrammtypen in den Familien Struktur und Verhalten definiert.
- Fowler unterscheidet UML als Skizze (selektive, informelle Kommunikation), als Bauplan (vollständige, präzise Modelle) und als Programmiersprache (ausführbare Modelle); Architekten skizzieren meistens.
- Komponentendiagramme zeigen bereitgestellte (Ball) und benötigte (Socket) Schnittstellen; Deployment-Diagramme zeigen Knoten, Artefakte und Kommunikationspfade.
- Sequenzdiagramme zeigen Lebenslinien und Aktivierungen; eine gefüllte Pfeilspitze ist ein synchroner Aufruf, eine offene Pfeilspitze an einer durchgezogenen Linie eine asynchrone Nachricht und eine gestrichelte Linie eine Antwort; Fragmente wie alt, opt und loop ergänzen den Kontrollfluss.
- Zustandsdiagramme beschreiben Lebenszyklen mit Zuständen und Transitionen, beschriftet mit Ereignis [Guard] / Aktion; Aktivitätsdiagramme beschreiben Workflows mit Entscheidungen, Gabelungen, Zusammenführungen und Swimlanes.
- Klassendiagramme bleiben am besten kleinen Domänenmodellen mit Assoziationen, Multiplizitäten und Komposition vorbehalten; vollständige Klassendiagramme sollten generiert, nicht von Hand gezeichnet werden.
- Präzision lohnt sich an Schnittstellen zwischen Organisationen, in regulierten und sicherheitskritischen Bereichen, bei Lebenszyklen, die sich mehrere Teams teilen, und bei verteilter Entwicklung.
Was UML ist und wo sie heute steht
Die Unified Modeling Language (UML) ist eine universelle grafische Sprache zur Beschreibung von Struktur und Verhalten von Software. Sie entstand Mitte der 1990er-Jahre bei Rational Software aus der Zusammenführung der Methoden von Grady Booch, James Rumbaugh und Ivar Jacobson und wurde 1997 von der Object Management Group (OMG), einem Industriekonsortium für Standards, als Standard übernommen. UML 2.0 (2005) war eine größere Überarbeitung. Die aktuelle Version ist UML 2.5.1, im Dezember 2017 von der OMG veröffentlicht; die frühere UML 2.4.1 wurde zudem von der ISO als ISO/IEC 19505 (2012) veröffentlicht. Die Spezifikation definiert vierzehn Diagrammtypen, unterteilt in Strukturdiagramme (etwa Klassen-, Komponenten- und Deployment-Diagramme) und Verhaltensdiagramme (etwa Aktivitäts-, Zustands- und Sequenzdiagramme).
Der Ruf der UML hat sich erheblich gewandelt. In den späten 1990er- und frühen 2000er-Jahren wurde sie als Grundlage der modellgetriebenen Entwicklung propagiert, bei der detaillierte Modelle in Code umgewandelt werden sollten. Dieser Anspruch ist außerhalb spezialisierter Domänen weitgehend gescheitert, und viele Teams verbinden UML mit schwergewichtigen Prozessen und Diagrammen, die niemand las. Als Marian Petre für eine auf der ICSE 2013 vorgestellte Studie 50 professionelle Softwareentwickler befragte, gaben 35 an, UML überhaupt nicht zu verwenden, und die meisten anderen nutzten sie selektiv und informell; die meisten Teams zeichnen informelle Kästen und Linien statt strikter UML. Dennoch bleibt eine Handvoll UML-Diagrammtypen das beste verfügbare Werkzeug für bestimmte Fragen, besonders für Fragen zum Verhalten über die Zeit, und ihre Notation ist weithin verständlich. Ein Architekt braucht nicht alle vierzehn Diagrammtypen, sondern vielleicht sechs, bewusst eingesetzt.
Dieser Abschnitt behandelt diese sechs, jeweils mit einem kleinen Beispiel aus der Essenslieferplattform, die das ganze Kapitel begleitet. Er setzt das C4-Vokabular aus Abschnitt 4.3 voraus; beide lassen sich gut kombinieren, mit C4 für den strukturellen Überblick und UML dort, wo sich Präzision bei Schnittstellen, Interaktionen oder Zuständen bezahlt macht.
Skizze, Bauplan oder Programmiersprache
Martin Fowlers UML Distilled (3. Auflage, Addison-Wesley, 2003) und seine Essays aus demselben Jahr unterscheiden drei Arten, UML zu verwenden, eine Einteilung, zu der Steve Mellor unabhängig gelangte. Als Skizze wird UML informell und selektiv verwendet, um Ideen zu vermitteln: auf einem Whiteboard, bevor Code geschrieben wird (Vorwärtsskizze), oder um einen Teil eines bestehenden Systems zu erklären (Rückwärtsskizze). Nur die wichtigen Elemente erscheinen, die Notation wird locker befolgt, und das Diagramm wird oft weggeworfen. Fowlers eigene Zusammenfassung lautet comprehensiveness is the enemy of comprehensibility
(Vollständigkeit ist der Feind der Verständlichkeit).
Als Bauplan dient UML dazu, vollständige, präzise Modelle zu erstellen, die jemand anderes implementiert, oder die aus bestehendem Code generiert werden, um ihn vollständig zu dokumentieren; es geht um Vollständigkeit, und meist braucht man Werkzeuge. Als Programmiersprache ist das UML-Modell detailliert genug, um in ausführbaren Code kompiliert zu werden, das Ziel der Model-Driven Architecture (MDA). Dieser Modus überlebt in einigen Nischen im Embedded- und sicherheitskritischen Bereich, oft über spezialisierte Profile und Werkzeuge, hat sich aber nicht durchgesetzt.
Für Architekten ist der Skizzenmodus der Normalfall und der Bauplanmodus die Ausnahme. Die nützliche Frage zu jedem Diagramm lautet: Wer wird es lesen, und welche Entscheidung oder welches Verständnis unterstützt es? Ein Sequenzdiagramm, skizziert, um sich darauf zu einigen, wie Zahlungsfehler behandelt werden, ist wertvoll, auch wenn es die Hälfte der Notation ignoriert. Ein vollständiges, von Hand gepflegtes Klassenmodell eines Service mit 200 Klassen ist es meist nicht.
Komponentendiagramme: Teile und ihre Schnittstellen
Ein UML-Komponentendiagramm zeigt modulare Teile eines Systems und vor allem ihre Schnittstellen. Seine charakteristische Notation ist „Ball und Socket“: ein kleiner Kreis an einem Stiel (eine bereitgestellte Schnittstelle, die die Komponente anbietet) und ein Halbkreis (eine benötigte Schnittstelle, die jemand anderes bereitstellen muss). Sitzt ein Ball in einem Socket, sind die beiden Komponenten über diese Schnittstelle verbunden. Abhängigkeiten sind gestrichelte Pfeile, optional beschriftet mit einem Stereotyp wie «use».
Genau das interessiert Architekten, wenn sie Abhängigkeitsrichtung und Austauschbarkeit zeigen wollen. Im Beispiel hängt die Bestellkomponente nicht direkt vom Zahlungsanbieter ab; sie benötigt eine Schnittstelle PaymentPort, die ein separater Zahlungsadapter implementiert. Das ist das Denken in Abhängigkeitsumkehr und Ports and Adapters aus Kapitel 3, sichtbar gemacht: Einen anderen Zahlungsanbieter einzusetzen bedeutet, einen neuen Adapter zu schreiben, nicht die Bestellkomponente zu ändern. Ein C4-Komponentendiagramm kann dieselben Teile zeigen, unterscheidet aber nicht zwischen bereitgestellten und benötigten Schnittstellen.
Komponentendiagramm
Deployment-Diagramme: Knoten und Artefakte
Ein UML-Deployment-Diagramm zeigt die physische oder virtuelle Infrastruktur und was darauf läuft. Seine Elemente sind Knoten, als dreidimensionale Kästen gezeichnet, also Rechenressourcen: ein «device» wie ein Smartphone oder Server oder eine «executionEnvironment» wie ein Betriebssystem, eine Container-Laufzeit oder ein Kubernetes-Cluster; Knoten können verschachtelt sein. Artefakte, gezeichnet als Rechtecke mit einem Dokumentsymbol und dem Stereotyp «artifact», sind die physischen Dateien, die deployt werden: ein JAR, ein Container-Image, ein App-Bundle, eine Konfigurationsdatei. Linien zwischen Knoten sind Kommunikationspfade, beschriftet mit Protokollen.
Deployment-Diagramme sind Zuordnungssichten im Sinne des SEI (Abschnitt 4.2). Sie beantworten die Fragen des Betriebsteams: Wo läuft jeder Teil, wie viele Kopien, in welcher Region, welche Netzwerkpfade gibt es? Das Deployment-Diagramm von C4 deckt dasselbe Gebiet mit weniger formaler Notation ab; beides ist in Ordnung, solange es eines je wichtiger Umgebung gibt und es Replikate, Managed Services und Netzwerkgrenzen zeigt.
Deployment-Diagramm
Sequenzdiagramme: wer wen in welcher Reihenfolge aufruft
Wenn Architekten nur ein einziges UML-Diagramm behalten, ist es meist das Sequenzdiagramm. Es zeigt, wie Beteiligte in einem Szenario über die Zeit interagieren. Die Beteiligten stehen oben nebeneinander, jeder mit einer gestrichelten senkrechten Lebenslinie; die Zeit läuft nach unten. Ein schmales Rechteck auf einer Lebenslinie, die Aktivierung (Ausführungsspezifikation), zeigt, wann dieser Beteiligte mit der Bearbeitung einer Nachricht beschäftigt ist.
Die Pfeilspitzen tragen Bedeutung. Eine synchrone Nachricht, bei der der Sender auf eine Antwort wartet, hat eine durchgezogene Linie und eine gefüllte Pfeilspitze. Eine Antwort hat eine gestrichelte Linie und eine offene Pfeilspitze. Eine asynchrone Nachricht, bei der der Sender weitermacht, ohne zu warten, hat eine durchgezogene Linie und eine offene Pfeilspitze. Das richtig darzustellen ist architektonisch wichtig: Ob der Bestellservice auf den Zahlungsanbieter wartet oder publiziert und weitermacht, bestimmt seine Latenz, seine Ausfallarten und seine Kopplung (siehe Abschnitt 0.6).
Kombinierte Fragmente ergänzen den Kontrollfluss: Ein Kasten mit der Beschriftung alt und mit Guards versehenen Abschnitten, getrennt durch eine gestrichelte Linie, zeigt Alternativen (if/else), opt zeigt einen optionalen Teil, loop eine Wiederholung und par parallele Abschnitte. Setzen Sie sie sparsam ein; ein Sequenzdiagramm mit verschachtelten Schleifen und Alternativen ist schlecht gezeichneter Code. Zeichnen Sie ein Diagramm je wichtigem Szenario, einschließlich der Fehlerszenarien, in denen das meiste architektonische Denken stattfindet.
Sequenzdiagramm
Zustandsdiagramme: Lebenszyklen und Regeln
Viele Geschäftsobjekte haben einen Lebenszyklus: eine Bestellung, eine Zahlung, ein Abonnement, ein Versicherungsfall. Ein Zustandsdiagramm beschreibt ihn präzise. Zustände sind abgerundete Rechtecke; ein gefüllter Kreis markiert den Anfangs-Pseudozustand und ein Kreis mit Punkt (Bullseye) den Endzustand. Transitionen sind Pfeile, beschriftet mit event [guard] / action: dem Ereignis, das die Transition auslöst, einer optionalen Guard-Bedingung, die wahr sein muss, und einer optionalen Aktion, die unterwegs ausgeführt wird. Zustände können interne Verhaltensweisen haben, etwa entry / notify restaurant.
Zustandsautomaten sind öfter architekturrelevant, als man erwartet. Der folgende Bestelllebenszyklus wird von mehreren Services geteilt: Die Bestellung besitzt ihn, Disposition und Benachrichtigungen reagieren auf seine Transitionen, und das Supportpersonal kann einige davon auslösen. Sich in einem Diagramm auf die Zustände und die zulässigen Transitionen zu einigen, verhindert eine ganze Klasse von Bugs, bei denen ein Service eine Bestellung für storniert hält, während ein anderer einen Kurier losschickt. Das Diagramm legt auch Fragen offen, die Text verbirgt: Kann eine Bestellung storniert werden, wenn sie bereits in Zustellung ist? (Hier nein: Es gibt keine Transition von diesem Zustand nach Storniert.) Ist eine Erstattung eine Aktion an einer Transition oder ein eigener Lebenszyklus?
Zustandsdiagramm
Aktivitätsdiagramme: Workflows und Parallelität
Ein Aktivitätsdiagramm ist ein Flussdiagramm mit präziser Semantik. Abgerundete Rechtecke sind Aktionen; Rauten sind Entscheidungen (mit Guards an den ausgehenden Flüssen) und Zusammenführungen; dicke Balken sind Gabelungen (Forks), die einen Fluss in parallele Flüsse aufteilen, und Vereinigungen (Joins), die auf alle eingehenden Flüsse warten, bevor es weitergeht. Partitionen, oft Swimlanes genannt, zeigen, wer oder was jede Aktion ausführt. Eine Schleife muss über eine Zusammenführungsraute zurückfließen: Zwei Flüsse, die direkt in eine Aktion gezeichnet werden, würden bedeuten, dass die Aktion wie ein Join auf beide wartet.
Architekten nutzen Aktivitätsdiagramme für Geschäftsprozesse und Workflows, die mehrere Teile eines Systems umspannen, besonders wo Parallelität und Verantwortung wichtig sind. Das Beispiel zeigt, dass Essenszubereitung und Kurierzuweisung parallel laufen, dass die Zuweisung so lange wiederholt wird, bis ein Kurier annimmt, und dass die Übergabe auf beides wartet. Das wirft sofort eine architektonische Frage auf: Was, wenn innerhalb von zwanzig Minuten kein Kurier annimmt, während das Essen fertig ist? Das Diagramm macht die Lücke sichtbar; die Antwort könnte eine Timeout-Transition, ein Kompensationsschritt oder eine Änderung am Bestelllebenszyklus sein. Langlaufende Workflows dieser Art werden oft als Sagas oder orchestrierte Workflows implementiert, behandelt in Kapitel 6.
Aktivitätsdiagramm
Klassendiagramme, sparsam eingesetzt: das Domänenmodell
Das Klassendiagramm ist das bekannteste UML-Diagramm und dasjenige, das Architekten am sparsamsten einsetzen sollten. Jede Klasse eines Service von Hand zu zeichnen ist der Bauplanmodus in seiner am wenigsten nützlichen Form: Es ist binnen Wochen veraltet, und der Code sagt dasselbe präziser. Wo Klassendiagramme ihren Platz verdienen, ist das Domänenmodell: ein kleines Diagramm der zentralen Geschäftsbegriffe, ihrer Attribute und Beziehungen, über das Entwicklung, Produktmanagement und Fachexperten gemeinsam sprechen können. In der Begriffswelt des Domain-Driven Design (Kapitel 5) erfasst es die Ubiquitous Language eines Bounded Context.
Das Wesentliche ist überschaubar. Ein Klassenkasten hat einen Namen, Attribute und optional Operationen. Eine einfache Linie ist eine Assoziation, optional benannt, mit Multiplizitäten an jedem Ende (1, 0..1, 0..*, 1..*). Eine gefüllte Raute markiert eine Komposition: Die Teile gehören zu genau einem Ganzen und überleben es nicht, so wie Bestellpositionen zu einer Bestellung gehören. Ein hohles Dreieck markiert eine Generalisierung (Vererbung) und eine gestrichelte Linie mit offener Pfeilspitze eine Abhängigkeit. Multiplizitäten tragen echte Designentscheidungen: Order 1 to 0..1 Delivery besagt, dass eine Bestellung höchstens eine Lieferung hat, was ausschließt, eine große Bestellung auf zwei Kuriere aufzuteilen. Falls das Unternehmen das wollen könnte, ist das Diagramm der Ort, an dem die Frage auftaucht.
Klassendiagramm des Domänenmodells
Die sechs Diagramme auf einen Blick
| Diagramm | Beantwortet | Wichtige Notation | Typischer Einsatz durch Architekten |
|---|---|---|---|
| Komponente | Was sind die Teile, und über welche Schnittstellen hängen sie voneinander ab? | Komponentenkästen, bereitgestellte (Ball) und benötigte (Socket) Schnittstellen, Abhängigkeiten | Abhängigkeitsrichtung und austauschbare Teile zeigen; Ports and Adapters |
| Deployment | Wo läuft jeder Teil, wie viele Kopien, wie verbunden? | Knoten (3D-Kästen), Artefakte, Kommunikationspfade | Produktions- und Staging-Infrastruktur, Netzwerkzonen |
| Sequenz | In welcher Reihenfolge interagieren die Beteiligten in diesem Szenario? | Lebenslinien, Aktivierungen, synchrone und asynchrone Nachrichten, Antworten, Fragmente | Wichtige Laufzeitszenarien, besonders Fehler, Wiederholungen und Integrationen |
| Zustandsautomat | In welchen Zuständen kann dieses Objekt sein, und was bewegt es zwischen ihnen? | Zustände, Anfangs- und Endzustände, Transitionen mit event [guard] / action | Lebenszyklen, die sich Services teilen: Bestellungen, Zahlungen, Schadensfälle |
| Aktivität | Wie sieht der Workflow aus, wer erledigt jeden Schritt, was läuft parallel? | Aktionen, Entscheidungen, Forks und Joins, Partitionen | Geschäftsprozesse, langlaufende Workflows, Sagas |
| Klasse | Was sind die zentralen Begriffe, und wie hängen sie zusammen? | Klassen, Assoziationen, Multiplizitäten, Komposition, Generalisierung | Kleine Domänenmodelle; aus Code generierte Diagramme |
Wann UML zu viel ist und wann Präzision zählt
UML ist zu viel, wenn das Publikum sie nicht kennt und die Frage sie nicht braucht: Ein C4-Kontextdiagramm vermittelt Führungskräften mehr als ein UML-Anwendungsfalldiagramm, und eine Whiteboard-Skizze ist das richtige Werkzeug für eine Designdiskussion, die in einer Stunde vorbei ist. Sie ist zu viel, wenn Diagramme von Hand gepflegt werden, die man generieren könnte, und wenn strikte Notation in einer Skizze erzwungen wird, die dem Erkunden dient. Fowlers Beobachtung, dass die in UML 2 hinzugekommene Präzision vor allem den Nutzern von Bauplan und Programmiersprache dient und die Skizzierenden belastet, gilt nach wie vor.
Präzision zahlt sich aus, wenn Missverständnisse teuer sind. Schnittstellen zwischen Unternehmen sind der klarste Fall: Wenn das Essenslieferunternehmen einen Zahlungsanbieter oder das Bestellsystem einer großen Restaurantkette anbindet, baut jede Seite gegen die Beschreibung der anderen und entdeckt Unstimmigkeiten erst im Test oder in der Produktion. Ein präzises Sequenzdiagramm des Zahlungsablaufs, einschließlich Timeouts, Wiederholungen, Idempotenzschlüsseln und Webhooks, an die Schnittstellenspezifikation angehängt, ist eine günstige Versicherung. Regulierte und sicherheitskritische Branchen (Medizinprodukte, Bahn, Luftfahrt, Automobil, manche Finanzsysteme) verlangen oft eine Designdokumentation, die Prüfer von den Anforderungen bis zur Implementierung nachverfolgen können; formale UML oder ihr Verwandter aus dem Systems Engineering, SysML, ist dort verbreitet. Nebenläufigkeits- und Lebenszyklusregeln, die sich mehrere Teams teilen, wie die obigen Bestellzustände, profitieren von einer Notation, die jede Transition ausdrücklich verlangt. Und ausgelagerte oder verteilte Entwicklung, bei der die Umsetzenden den Autor eines Designs nicht ohne Weiteres fragen können, braucht Beschreibungen, die weniger Raum für Interpretation lassen.
Häufige Fragen
Sollte unser Team überhaupt UML lernen?
Lernen Sie die Notationsgrundlagen der sechs Diagramme dieses Abschnitts; das dauert ein paar Stunden und gibt dem Team ein gemeinsames Vokabular für Schnittstellen, Interaktionen und Lebenszyklen. Die übrigen Diagrammtypen oder die vollständige Spezifikation müssen Sie kaum lernen, es sei denn, Sie arbeiten in einer Domäne, die sie verlangt.
Wie verhält sich UML zu C4?
Beide ergänzen sich. C4 liefert eine kleine Menge von Abstraktionen und eine Hierarchie struktureller Diagramme; UML liefert präzise Notationen, besonders für Verhalten. Viele Teams nutzen C4 für Kontext-, Container- und Komponentensichten und UML für Sequenz-, Zustands- und gelegentlich Deployment-Diagramme.
Kann ich UML mit Text statt mit einem Zeichenwerkzeug erstellen?
Ja. PlantUML und Mermaid erzeugen beide Sequenz-, Zustands-, Klassen- und Aktivitätsdiagramme aus kurzen Textdateien, die in der Versionsverwaltung liegen können. Abschnitt 4.7 zeigt Beispiele.
Prüfen Sie Ihr Verständnis
Wie unterscheiden Sie in einem Sequenzdiagramm einen synchronen Aufruf von einer asynchronen Nachricht?
Ein synchroner Aufruf hat eine durchgezogene Linie mit gefüllter Pfeilspitze (der Sender wartet); eine asynchrone Nachricht hat eine durchgezogene Linie mit offener Pfeilspitze (der Sender macht weiter). Antworten sind gestrichelte Linien mit offenen Pfeilspitzen.
Was bedeutet das Label handedOver [code matches] / notify customer an einer Transition?
Wenn das Ereignis handedOver eintritt und der Guard „code matches“ (der Code stimmt) wahr ist, feuert die Transition, und die Aktion „notify customer“ (Kunden benachrichtigen) wird ausgeführt.
Warum sollten Architekten Klassendiagramme ganzer Services nur selten von Hand zeichnen?
Sie wiederholen, was der Code präziser aussagt, und veralten schnell; kleine Domänenmodelle lohnen das Zeichnen, und vollständige Diagramme lassen sich bei Bedarf generieren.
Nennen Sie zwei Situationen, in denen sich präzise UML lohnt.
Zum Beispiel Schnittstellen zwischen Unternehmen, regulierte oder sicherheitskritische Entwicklung, Lebenszyklen, die sich mehrere Teams teilen, oder ausgelagerte Entwicklung, bei der die Umsetzenden die Designer nicht ohne Weiteres fragen können.
Quellen und weiterführende Literatur
Haben Sie eine Frage zu diesem Abschnitt? ArchitectBot, der KI-Lernassistent des Kurses, antwortet zuerst aus dem Kurs.
Fragen: „Welche UML-Diagramme sollte ich in eine Schnittstellenspezifikation für ein Partnerunternehmen aufnehmen, das unsere API anbindet?“