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ängigen git-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
Ein einfaches UseCase-Diagramm mit Akteurin, Systemgrenze und UseCase
Ein einfaches UseCase-Diagramm mit Akteurin, Systemgrenze und UseCase

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
}

Vererbungsbeziehung in einem Usecase-Diagramm 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

Vererbungsbeziehung mit abstrakten Akteuren
Vererbungsbeziehung mit abstrakten Akteuren

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
}
Vererbungsbeziehung mit abstrakten Akteuren
Vererbungsbeziehung mit abstrakten Akteuren

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>>

Vererbungsbeziehung mit abstrakten Akteuren
Vererbungsbeziehung mit abstrakten Akteuren

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
Extend-Beziehungen mit PlantUML modellieren
Extend-Beziehungen mit PlantUML modellieren

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

Multiplizitäten in Use-Case-Diagrammen
Multiplizitäten in Use-Case-Diagrammen

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.

Gerichtete Assoziationen
Gerichtete Assoziationen

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

  • OER-Informatik Artikel zu Use-Case-Diagrammen allgemein

  • 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).

Creative Commons Lizenzvertrag
Creative Commons Lizenzvertrag
Kommentare gerne per Mastodon, Verbesserungsvorschläge per gitlab issue (siehe oben). Beitrag teilen: