Das UML Anwendungsfalldiagramm und die Modellierung mit plantUML
https://oer-informatik.de/uml-usecase-plantuml
tl/dr; (ca. 7 min Lesezeit): Praktische Tipps, wie UML Anwendungsfalldiagramme mit Hilfe von PlantUML erstellt werden können. Ich versuche mich dabei näher an die UML-Spezifikation zu halten, als dies auf der PlantUML-Seite der Fall ist. Informationen zu UML-Anwendungsfalldiagrammen allgemein finden sich in einem gesonderten Use-Case-Diagramm-Artikel.
PlantUML ist ein Tool, um textbasiert deklarativ UML-Diagramme zu erstellen (oder, als Buzzword formuliert: diagram as code). Das bietet zwei große Vorteile:
Die Diagramme sind einfach mit der Codebasis versionierbar, können jederzeit und von überall kurzfristig angepasst werden.
Die Diagramme können direkt in die
Readme.md
-Dateien in den Repositories integriert werden, da relativ viele Markdown-Engines der gängigengit
-Dienstleister diese unmittelbar rendern.
Ein großer Nachteil soll jedoch nicht verschwiegen werden: PlantUML ist recht störrisch, was die genaue Positionierung von Elementen angeht. Besser, man findet sich schnell damit ab, wo PlantUML das jeweilige Objekt hinrendert - sonst wird das schnell frustrierend.
Wie fängt man am besten an? Mit einem Beispiel-Diagramm. Und dem größten Vorteil: dieser Link speichert das Diagramm und öffnet es direkt im Webeditor von planttext.com. Im folgenden sind zu den meisten Diagrammen solche Links angegeben. Das ist aber nur ein Weg, plantuml zu bearbeiten. Für so ziemlich alle IDEs, git-Dienste, Editoren usw. gibt es plantUML-Plugins.
Akteurinnen und Anwendungsfälle
Im Wesentlichen besteht ein Anwendungsfalldiagramm aus _Akteur*innen_ (actor
), Anwendungsfällen (usecase
) und der Systemgrenze (wird in plantUML mit rectangle
deklariert). Ein minimales Anwendungsfalldiagramm sieht mit plantUML wie folgt aus:
@startuml
left to right direction
actor :Kundin: as customer
rectangle Shopsystem {
usecase (Ware \n bestellen) as bestellen
customer -- (informieren)
customer -- bestellen
}
@enduml

Codebeispiel: ( online bearbeitbar / vollständiger Quelltext)
Der plantUML-Quelltext wird immer zwischen @startuml
und @enduml
eingefasst. Damit die Akteurinnen wie im UseCase-Diagramm üblich links des Systems stehen muss left to right direction
voran gestellt werden. Der Übersichtlichkeit halber werden diese Befehle in den folgenden Codefragmenten ausgespart und sind nur unter den “Codebeispiel”-Links komplett einbezogen.
Akteurinnen werden ausserhalb der Systemgrenzen definiert und mit einem angezeigten Namen (hier: “Kundin”) und einem Alias zur Referenzierung (hier: “customer”) versehen.
actor :Kundin: as customer
Anwendungsfälle können gesondert deklariert und mit Alias versehen werden:
usecase (Ware \n bestellen) as bestellen
In Kurzform können Sie auch direkt bei Assoziationen erwähnt werden, sind dann allerdings nicht über Aliasse referenzierbar:
customer -- (informieren)
Vererbung von Akteuren und “oder”-Beziehungen
Vererbungsbeziehungen zwischen Akteurinnen werden in PlantUML mit Hilfe ASCII-stilisierter Pfeilspitzen modelliert: die Operatoren -|>
und <|-
symbolisieren jeweils die in Richtung der Generalisierung weisende Pfeilspitze.
mitarbeiter <|- prokurist
Ein komplettes UML-Diagramm wäre etwa wie folgt:
actor :Mitarbeiterin: as mitarbeiter
actor :Prokuristin: as prokurist
rectangle Vertragswesen {
usecase (Vertrag \n ausfertigen) as ausfertigen
usecase (Vertrag \n unterschreiben) as unterschreiben
mitarbeiter -- ausfertigen
prokurist -- unterschreiben
mitarbeiter <|- prokurist
}
Codebeispiel: ( online bearbeitbar / vollständiger Quelltext)
Die Reihenfolge der Akteurinnen legt fest, wie sie im Diagramm erscheinen. Die erstgenannte Akteurin erscheint oberhalb der zweitgenannten (sofern left to right direction
aktiviert wurde - andernfalls erscheint die erstgenannte links):
gf -|> befugte
Abstraktion wird wie in der UML üblich mit kursiver Schreibweise oder über den constraint {abstract}
notiert. Kursive Schreibweise wird über die HTML-Tags <i>...</i>
realisiert. In den Akteurinnen-Namen können über das Steuerzeichen \n
auch Zeilenumbrüche genutzt werden:
actor :{abstract}\n<i>Befugte</i>: as befugte

Codebeispiel: ( online bearbeitbar / vollständiger Quelltext)
Hier wurde eine Akteurin oberhalb und eine unterhalb positioniert, indem die Reihenfolge der Nennung und die Pfeilrichtung umgekehrt wurde.
Vererbung von Anwendungsfällen
Die Syntax zur Vererbung von Anwendungsfällen ist analog zur der Syntax für Akteurinnen: wird ein Anwendungsfall “Artikel kaufen” durch die Anwendungsfälle “eBook kaufen” und “Buch per Versand kaufen” spezialisiert, so wird auch hier der stilisierte Pfeil -|>
als Operator verwendet:
eBookKaufen -|> ArtikelKaufen
ArtikelKaufen <|- BuchKaufen
Ebenso können Usecases, die nicht eigenständig nutzbar sind, sondern nur Teilszenarien modellieren, die in anderen Usecases konkretisiert werden, als abstrakt geklariert werden. In PlantUML lässt sich dies wieder über die HTML-Tags <i>...</i>
kursiv setzen oder über den Constraint {abstract}
markieren. Neuere PlantUML-Versionen erkennen den Constraint und setzen den Usecasenamen automatisch kursiv (zeigen {abstract}
selbst aber nicht mehr an).
usecase ({abstract}\n<i>Artikel kaufen</i>) as ArtikelKaufen
Ein Beispiel könnte etwa so aussehen.
actor :Kundin: as customer
rectangle Shopsystem {
usecase ({abstract}\n<i>Artikel kaufen</i>) as ArtikelKaufen
usecase (eBook kaufen) as eBookKaufen
usecase (Buch per Versand kaufen) as BuchKaufen
customer -- eBookKaufen
customer -- BuchKaufen
eBookKaufen -|> ArtikelKaufen
ArtikelKaufen <|- BuchKaufen
}

Codebeispiel: ( online bearbeitbar / vollständiger Quelltext)
Anwendungsfälle, die weitere Anwendungsfälle immer beinhalten
Um include-Beziehungen mit plantUML zu modellieren, also Anwendungsfälle, die die Funktionalität anderer Anwendungsfälle in jedem Fall enthalten - wird zum einen die Linienform und Pfeilspitze variiert, in dem zwischen den Anwendungsfällen der Operator .>
notiert wird, zum anderen wird die neben den Pfeil das Sterotyp «include» notiert:
ausfertigen .> drucken : <<include>>

Codebeispiel: ( online bearbeitbar / vollständiger Quelltext)
actor :Mitarbeiterin: as mitarbeiter
rectangle Vertragswesen {
usecase (Vertrag \n ausfertigen) as ausfertigen
usecase (Vertrag \n ausdrucken) as drucken
mitarbeiter -- ausfertigen
'Die gestrichelte Linie wird per .> angegeben
'und das Stereotyp nach dem Doppelpunkt:
ausfertigen .> drucken : <<include>>
}
Anwendungsfälle, die unter Umständen durch weitere Anwendungsfälle erweitert werden
Extend-Beziehungen, bei denen Anwendungsfälle nur unter bestimmten Umständen um die Funktionalitäten eines zweiten Anwendungsfalls erweitert werden, können in PlantUML nur über ein paar Tricks modelliert werden. Analog zu include-Beziehungen wird der gestrichtelte Pfeil und der zugehörige Stereotyp «extend» notiert:
bestellen <.(Neukunden-Registrierung) : <<extend>>
Zur genauen Zurodnung der Bedingung, unter der die Erweiterung gilt, muss jedoch zusätzlich noch ein extension point und eine condition angegeben werden.
Der Extention Point wird zum einen direkt in der Ellipse des Anwendungsfalls referenziert:
usecase bestellen as "bestellen
--
<i>extension points:</i>
Registrierung"
Zum anderen muss er - mit zugehöriger Bedingung (condition) ein einer Notiz notiert werden, die mit der zugehörigen Assoziation verbunden ist.
bestellen <.(Neukunden-Registrierung) : <<extend>>
note top on link
<i>condition:</i>
{Neukunde}
<i>extension point:</i>
Registrierung
end note

Codebeispiel: ( online bearbeitbar / vollständiger Quelltext)
Wie viele Akteurinnen stehen mit wie vielen UseCases in Beziehung?
Multiplizitäten werden in PlantUML diretk bei den Assoziationen und in Anführungszeichen notiert. Es empfiehlt sich, längere Verbindungslinien zwischen Akteurinnen und Anwendunsfällen zu zeichnen (über drei Bindestriche: ---
), damit die Zahlen weit genug auseinander liegen und leichter zugeordnet werden können.
player "3..*" --- "1" rundlauf

Codebeispiel: ( online bearbeitbar / vollständiger Quelltext)
actor :Spielerin: as player
actor :Schiedsrichterin: as referee
rectangle Tischtennis {
usecase (Rundlauf) as rundlauf
'Multiplizitäten werden an den Assoziationen angegeben
player "3..*" --- "1" rundlauf
referee "0..1" --- "0..*" rundlauf
}
Gerichtete Assoziationen (initiiernde und sekundäre Akteurinnen)
Für die seltenen Fällen, in denen zwischen initiierenden und sekundären Akteurinnen unterschieden werden muss, können in PlantUML die Operatoren --->
genutzt werden, um eine gerichtete Assoziation zu zeichnen.

Codebeispiel: ( online bearbeitbar / vollständiger Quelltext)
actor :Bezahldienstleister: as bezahl
actor :Kundin: as kundin
rectangle OnlineShop {
usecase (Artikel kaufen) as kauf
}
kundin --> kauf
kauf --> bezahl
plantUML-Formatierung: Ausrichtung der Linien durch einfache oder zweifache Zeichen (- / – / . / ..)
PlantUML bietet die Möglichkeit Assoziationsrichtungen vorzugeben über die Operantoren -up-, -down-, -left-, -down-. Wenn man jedoch die Programme mit der Option “left to right direction” nutzt sind durch die Drehung sämliche Richtungsanweisungen verkehrt…
Als Alternative kann man auch die Notation mit einfachen und doppelten Bindestrichen wählen:
'wie immer wurde die Richtung gedreht:
left to right direction
actor :Personaler: as personaler
'nach oben dann mit nur einem Bindestrich:
(Kündigen aussprechen \n <i> oben </i>)- personaler
'nach unten durch vertauschen von Akteurin und UseCase
personaler - (Bewerbungsgespräche führen \n <i> unten </i>)
'seitlich nach rechts mit zwei Strichen
personaler -- (Beförderungsverfahren eröffnen \n <i> rechts </i>)
'seitlich nach links mit Vertauschten Positionen
(Abmahnungnen aussprechen \n <i> links </i>) -- personaler
plantUML-Formatierung: Aufhübschen von Anwendungsfall-Diagrammen
Wenn die Diagramme erstmal stehen will man sie aufhübschen. Dafür stehen allerlei möglichkeiten zur Verfügung, die v.a. auf der plantUML-Seite dargestellt werden. Einige Beispiele sind hier abgebildet:
Minimalbeispiel: nur die Leserichtung wurde angepasst:
@startuml
left to right direction
actor :Akteur:
rectangle System {
usecase Anwendungsfall
Akteur -- Anwendungsfall
note top on link
Notiz...
end note
}
@enduml
Anpassung von Schriftart und Farben
@startuml
skinparam DefaultFontName "Lucida Sans Typewriter"
skinparam UseCase{
BorderColor DarkSlateBlue
BackgroundColor whitesmoke
}
skinparam Note{
BorderColor DarkSlateBlue
BackgroundColor LightYellow
}
skinparam Actor{
BorderColor DarkSlateBlue
BackgroundColor whitesmoke
}
skinparam ArrowColor DarkSlateBlue
left to right direction
actor :Akteur:
rectangle System {
usecase Anwendungsfall
Akteur -- Anwendungsfall
note top on link
Notiz...
end note
}
@enduml
Sieht nach Entwurf aus: um die Vorläufigkeit und Änderbarkeit zu unterstreichen kann man es nach einer Skizze aussehen lassen.
@startuml
' Welche Schriften gibt es auf dem System?
' listfonts als plantUML-Kommando gibt's aus.
skinparam DefaultFontName "FG Virgil"
skinparam handwritten true
skinparam monochrome true
skinparam packageStyle rect
skinparam shadowing false
left to right direction
actor :Akteur:
rectangle System {
usecase Anwendungsfall
Akteur -- Anwendungsfall
note top on link
Notiz...
end note
}
@enduml
Weitere Literatur zu UML-Use-Case-Diagrammen
als Primärquelle: die UML Spezifikation der Object Management Group Definition des Standards, jedoch nicht für Endnutzer aufbereitet): https://www.omg.org/spec/UML
für den Einstieg: Martina Siedl, Marion Brandsteidl, Christian Huemer, Gerti Kappel: UML@Classroom, dpunkt Verlag, Heidelberg 2012 Gut zu lesende Einführung in die wichtigsten UML-Diagramme, Empfehlung für den Einstieg.
für Lesefaule: Die Vorlesungsreihe der Technischen Uni Wien (zu UML@Classroom) kann hier angeschaut werden (Videos, Folien): http://www.uml.ac.at/de/lernen
als Nachschlagewerk: Christoph Kecher, Alexander Salvanos: UML 2.5 – Das umfassende Handbuch, Rheinwerk Bonn 2015, ISBN 978-3-8362-2977-7 Sehr umfangreiches Nachschlagewerk zu allen UML-Diagrammen
als Cheatsheet: die Notationsübersicht von oose.de: https://www.oose.de/wp-content/uploads/2012/05/UML-Notations%C3%BCbersicht-2.5.pdf
UML und Software Engineering: Chris Rupp, Stefan Queins & die SOPHISTen: UML2 glasklar, Hanser Verlag, München 2012; ISBN 978-3-446-43057-0 Schwerpunkt: Einbindung von UML-Diagrammen in den Softwareentwicklungszyklus
Zur Zertifizierungs-Vorbereitung: M. Chonoles: OCUP 2 Certification Guide , Morgan Kaufmann Verlag, Cambridge 2018, ISBN 978-0-12-809640-6 (Informationen zur Zertifizierung nach OMG Certified UML Professional 2™ (OCUP 2™): Foundation Level)
Software zur Erzeugung von UML-Use-Case-Diagrammen
PlantUML: Deklaratives UML-Tool, das in vielen Entwicklungsumgebungen integriert ist. auch als WebEditor verfügbar. Die obigen Diagramme wurden damit erzeugt
WhiteStarUML (Relativ umfangreiches Tool, viele UML-Diagramme, mit Code-Generierung für Java, C, C# und Vorlagen für Entwurfsmuster)
Draw.io: Online-Tool für Flowcharts usw. - aber eben auch UML
Quellen und offene Ressourcen (OER)
Die Ursprungstexte (als Markdown), Grafiken und zugrunde liegende Diagrammquelltexte finden sich (soweit möglich in weiterbearbeitbarer Form) in folgendem git-Repository:
https://gitlab.com/oer-informatik/uml/umlanwendungsfall.
Sofern nicht explizit anderweitig angegeben sind sie zur Nutzung als Open Education Resource (OER) unter Namensnennung (H. Stein, oer-informatik.de) freigegeben gemäß der Creative Commons Namensnennung 4.0 International Lizenz (CC BY 4.0).
