UML-Anwendungsfalldiagramm

Ein UML-Anwendungsfalldiagramm ist eine grafische Darstellung, die zeigt, wie Nutzer (Akteure) mit einem System interagieren können.

Es beschreibt die verschiedenen Use Cases (Anwendungsfälle) und die Beziehungen zwischen ihnen und den Akteuren. Solche Diagramme helfen, die Anforderungen an ein System zu verstehen und zu planen, indem sie die Funktionen aus Sicht der Benutzer visualisieren.

TEQoGCUjPw4PopfwMAIGuFwSrY.png


Zweck und Verwendung

Wofür werden Use-Case-Diagramme verwendet?

Anwendungsfalldiagramme dienen der Anforderungsanalyse und helfen dabei:

Typische Einsatzbereiche:

┌────────────────────────────────────────┐
│  Anforderungsanalyse                   │
│  ↓                                     │
│  System-Design                         │
│  ↓                                     │
│  Kommunikation mit Stakeholdern        │
│  ↓                                     │
│  Testplanung                           │
└────────────────────────────────────────┘

Grundelemente

Ein Anwendungsfalldiagramm besteht aus vier Hauptelementen:

  1. Akteure (Actors) - Wer nutzt das System?
  2. Use Cases - Was kann das System tun?
  3. Beziehungen - Wie hängen Use Cases zusammen?
  4. Systemgrenzen - Was gehört zum System?

Visuelles Beispiel:

     O                    ┌───────────────────────────┐
    /|\                   │     SYSTEM                │
    / \                   │                           │
   Kunde ──────────►  (Use Case 1)                │
                          │         │                │
     O                    │         │                │
    /|\                   │         ↓                │
    / \                   │    (Use Case 2)          │
   Admin ──────────►  │                           │
                          └───────────────────────────┘

Komponenten im Detail

Um Anwendungsfalldiagramme vollständig zu verstehen, müssen wir die einzelnen Komponenten kennen:

Ein Akteur (Actor) ist eine Person, Organisation oder externes System, das mit dem System interagiert.

Akteure befinden sich außerhalb des Systems und nutzen dessen Funktionen (Use Cases).


Symbol

Strichmännchen:

    O      ← Kopf
   /|\     ← Körper
   / \     ← Beine

  Kunde

Alternative Darstellung (externes System):

┌─────────────┐
│   <<actor>> │
│  Zahlungs-  │
│   system    │
└─────────────┘

Arten von Akteuren

Primäre Akteure (Primary Actors)

Nutzer, die das System aktiv verwenden, um ein Ziel zu erreichen.

Beispiele:

Sekundäre Akteure (Secondary Actors)

Systeme oder Personen, die das System unterstützen, aber nicht direkt nutzen.

Beispiele:


Visuelles Beispiel: Online-Shop

     O                        O
    /|\                      /|\
    / \                      / \
   Kunde                  Administrator
     │                          │
     │                          │
     ├──► [Produkt suchen]      ├──► [Produkte verwalten]
     │                          │
     ├──► [Bestellen]           ├──► [Bestellungen verwalten]
     │                          │
     └──► [Bezahlen] ◄──────────┤
                               │
                          ┌─────────────┐
                          │  <<actor>>  │
                          │  Zahlungs-  │
                          │   system    │
                          └─────────────┘

Regeln für Akteure

Wichtige Regeln

  1. Außerhalb des Systems: Akteure sind NICHT Teil des Systems
  2. Interagieren mit Use Cases: Über Assoziationslinien verbunden
  3. Klar benannt: Rolle beschreiben (z.B. "Kunde", nicht "Person")
  4. Keine Implementierung: Zeigt nur, WER das System nutzt, nicht WIE

Gute Benennung:

✅ Kunde
✅ Administrator
✅ Bankangestellter
✅ Gast

Schlechte Benennung:

❌ Person
❌ Nutzer (zu allgemein)
❌ System (zu vage)

Akteur-Hierarchie (Generalisierung)

Akteure können Vererbungsbeziehungen haben.

       O
      /|\
      / \
    Benutzer
       △
       │
   ┌───┴───┐
   │       │
   O       O
  /|\     /|\
  / \     / \
 Kunde  Admin

Bedeutung:


Zusammenfassung

Akteure

  • Symbol: Strichmännchen (Person) oder Box (System)
  • Position: Außerhalb des Systems
  • Funktion: Interagieren mit Use Cases
  • Typen: Primär (nutzt System) vs. Sekundär (unterstützt System)
  • Benennung: Klare Rollen


Verwandte Konzepte

Eine Include-Beziehung zeigt, dass ein Use Case einen anderen Use Case immer einschließt und benötigt.

Der eingefügte Use Case ist notwendig und wird jedes Mal ausgeführt.


Symbol

[Use Case A] ────────<<include>>────────► [Use Case B]
              gestrichelte Linie
              mit <<include>>

Pfeilrichtung: Von A nach B = "A inkludiert B"


Wann verwendet man Include?

Use Case A benötigt immer die Funktionalität von Use Case B.

Typische Szenarien:


Visuelles Beispiel: Online-Shopping

     O
    /|\
    / \
   Kunde
     │
     │
     ↓
┌─────────────────┐
│   Bestellen     │
└─────────────────┘
         │
         │ <<include>>
         ↓
┌─────────────────┐
│  Anmelden       │ ← IMMER nötig!
└─────────────────┘
         │
         │ <<include>>
         ↓
┌─────────────────┐
│ Bezahlen        │ ← IMMER nötig!
└─────────────────┘

Erklärung:


Code-Analogie

Include-Beziehung = Funktionsaufruf:

public void bestellen() {
    anmelden();    // <<include>> - wird IMMER aufgerufen
    bezahlen();    // <<include>> - wird IMMER aufgerufen
    bestaetigen();
}

Beispiel: Bibliotheks-System

┌─────────────────┐
│  Buch ausleihen │
└─────────────────┘
         │
         │ <<include>>
         ↓
┌─────────────────┐
│ Benutzer prüfen │ ← Muss IMMER geprüft werden
└─────────────────┘
         │
         │ <<include>>
         ↓
┌─────────────────┐
│ Verfügbarkeit   │ ← Muss IMMER geprüft werden
│    prüfen       │
└─────────────────┘

Ablauf:

  1. Benutzer möchte Buch ausleihen
  2. System prüft immer Benutzer (registriert? Gebühren bezahlt?)
  3. System prüft immer Verfügbarkeit (Buch vorhanden?)

Include vs. Extend

Merkmal <> <> Häufigkeit IMMER OPTIONAL Richtung A inkludiert B B erweitert A Verwendung Pflicht-Funktionalität Zusatz-Funktionalität Beispiel Login bei Bestellung Gutschein bei Bestellung

Visualisierung:

Include (IMMER):
[Bestellen] ──<<include>>──► [Anmelden]
   └─► "Bestellen" braucht "Anmelden" IMMER

Extend (OPTIONAL):
[Bestellen] ◄──<<extend>>── [Gutschein einlösen]
   └─► "Gutschein" ist optional bei "Bestellen"

Praktisches Beispiel: ATM (Geldautomat)

     O
    /|\
    / \
   Kunde
     │
     ├──────────────────────────┐
     │                          │
     ↓                          ↓
┌─────────────┐        ┌─────────────┐
│Geld abheben │        │ Überweisen  │
└─────────────┘        └─────────────┘
     │                          │
     │ <<include>>              │ <<include>>
     ↓                          ↓
┌─────────────────────────────────┐
│  PIN eingeben & verifizieren    │ ← Für BEIDE nötig!
└─────────────────────────────────┘

Vorteil:


Regeln für Include

Wichtige Regeln

  1. Include ist zwingend: Der eingeschlossene Use Case MUSS ausgeführt werden
  2. Pfeilrichtung: Von inkludierendem zu inkludiertem Use Case
  3. Wiederverwendung: Nutze Include für gemeinsame Funktionalität
  4. Nicht übertreiben: Nur bei wirklich notwendigen Abhängigkeiten

Gute Verwendung:

✅ [Bestellen] ──<<include>>──► [Bezahlen]
✅ [Artikel kaufen] ──<<include>>──► [Anmelden]
✅ [Dokument drucken] ──<<include>>──► [Drucker wählen]

Schlechte Verwendung:

❌ [Bestellen] ──<<include>>──► [Newsletter abonnieren] (optional!)
❌ [Suchen] ──<<include>>──► [Favorit hinzufügen] (optional!)

Zusammenfassung

Include-Beziehung

Merkhilfe

"Include" = "einschließen" = muss dabei sein


Verwandte Konzepte

Eine Extend-Beziehung zeigt, dass ein Use Case einen anderen Use Case optional erweitern kann.

Die Erweiterung findet nur unter bestimmten Bedingungen statt.


Symbol

[Use Case A] ◄────────<<extend>>──────── [Use Case B]
              gestrichelte Linie
              mit <<extend>>

Pfeilrichtung: Von B nach A = "B erweitert A"


Wann verwendet man Extend?

Use Case B ist eine optionale Erweiterung von Use Case A.

Typische Szenarien:


Visuelles Beispiel: Online-Shopping

     O
    /|\
    / \
   Kunde
     │
     │
     ↓
┌─────────────────┐
│   Bestellen     │ ◄─────<<extend>>────── ┌───────────────────┐
└─────────────────┘                         │Gutschein einlösen │
                                            └───────────────────┘
                                            [Extension Point:
                                             Wenn Gutschein
                                             vorhanden]

Erklärung:


Code-Analogie

Extend-Beziehung = Optionaler Code:

public void bestellen() {
    warenkorb_pruefen();

    // EXTEND: Optional, nur wenn Bedingung erfüllt
    if (kunde.hatGutschein()) {
        gutschein_einloesen();  // <<extend>>
    }

    bezahlen();
    bestaetigen();
}

Extension Points

Extension Points definieren, wo und wann die Erweiterung stattfindet.

┌─────────────────────────────┐
│      Produkt bestellen      │
├─────────────────────────────┤
│ Extension Points:           │
│ - Nach Warenkorb            │
│ - Vor Bezahlung             │
└─────────────────────────────┘
         △
         │ <<extend>>
         │
┌─────────────────┐
│ Rabatt gewähren │
└─────────────────┘
    [Bedingung:
     VIP-Kunde]

Beispiel: ATM (Geldautomat)

┌─────────────────┐
│  Geld abheben   │ ◄─────<<extend>>────── ┌───────────────────┐
└─────────────────┘                         │ Quittung drucken  │
                                            └───────────────────┘
                                            [Extension Point:
                                             Nach Geldausgabe,
                                             wenn Kunde möchte]

Ablauf:

  1. Kunde hebt Geld ab (Basis-Use-Case)
  2. Optional: Kunde kann Quittung drucken
  3. Wenn Kunde "Ja" wählt → Quittung wird gedruckt
  4. Wenn Kunde "Nein" wählt → Keine Quittung

Include vs. Extend (Vergleich)

┌─────────────────────────────────────────────────────────┐
│                  INCLUDE (IMMER)                        │
└─────────────────────────────────────────────────────────┘

[Bestellen] ────<<include>>────► [Anmelden]
                                    │
                                    └─► MUSS ausgeführt werden


┌─────────────────────────────────────────────────────────┐
│                  EXTEND (OPTIONAL)                      │
└─────────────────────────────────────────────────────────┘

[Bestellen] ◄────<<extend>>──── [Gutschein einlösen]
                                        │
                                        └─► KANN ausgeführt werden
Merkmal <> <> Häufigkeit IMMER OPTIONAL Pfeilrichtung A → B (A inkludiert B) B → A (B erweitert A) Kontrolle Base-Use-Case entscheidet Extension entscheidet Bedingung Keine Extension Point + Bedingung Beispiel Login ist Pflicht Gutschein ist optional

Praktisches Beispiel: Restaurant-System

     O
    /|\
    / \
   Kunde
     │
     ↓
┌─────────────────┐
│ Essen bestellen │
└─────────────────┘
         △
         │
    ┌────┴────┬────────────┬────────────┐
    │         │            │            │
    │         │            │            │
<<extend>>  <<extend>>   <<extend>>   <<extend>>
    │         │            │            │
┌─────┐  ┌──────┐   ┌──────────┐  ┌─────────┐
│Vorspeise│Dessert│ │Extra-Beilage│Getränk│
│hinzu-│ │hinzu-│   │ hinzufügen │ │hinzu-│
│fügen │ │fügen │   └──────────┘  │fügen │
└─────┘  └──────┘                 └─────────┘

Alle Erweiterungen sind optional!


Extend mit Bedingung

┌─────────────────────────────┐
│    Online bezahlen          │
├─────────────────────────────┤
│ Extension Point:            │
│ "Vor Abschluss"             │
└─────────────────────────────┘
         △
         │ <<extend>>
         │
┌─────────────────────────────┐
│ Zahlung in Raten aufteilen  │
└─────────────────────────────┘
    [Bedingung:
     Betrag > 100€]

Bedeutung:


Regeln für Extend

Wichtige Regeln

  1. Extend ist optional: Basis-Use-Case funktioniert auch ohne Erweiterung
  2. Pfeilrichtung: Von erweiterndem zu Basis-Use-Case (rückwärts!)
  3. Extension Points: Definieren, wo Erweiterung stattfindet
  4. Bedingungen: Wann die Erweiterung aktiv wird

Gute Verwendung:

✅ [Bestellen] ◄──<<extend>>── [Gutschein einlösen]
✅ [Suchen] ◄──<<extend>>── [Filter anwenden]
✅ [Zahlen] ◄──<<extend>>── [Rechnung ausdrucken]

Schlechte Verwendung:

❌ [Bestellen] ◄──<<extend>>── [Bezahlen] (Pflicht, nicht optional!)
❌ [Anmelden] ◄──<<extend>>── [Passwort eingeben] (Pflicht!)

Zusammenfassung

Extend-Beziehung

Merkhilfe

"Extend" = "erweitern" = kann hinzugefügt werden


Verwandte Konzepte

Generalisierung (auch Vererbung genannt) zeigt eine "ist-ein"-Beziehung zwischen Use Cases oder Akteuren.

Der spezialisierte Use Case/Akteur erbt alle Eigenschaften vom allgemeinen Use Case/Akteur.


Symbol

  [Allgemein]
       △
       │  ← Pfeil zum Allgemeinen
   ────┴────
   │       │
[Speziel]  [Speziel]
  Case 1    Case 2

Pfeil: Geschlossener, nicht ausgefüllter Pfeil (wie bei Vererbung in Klassendiagrammen)


Generalisierung bei Akteuren

Zeigt Hierarchie zwischen Akteuren.

       O
      /|\
      / \
    Benutzer  ← Allgemeiner Akteur
       △
       │
   ────┴────
   │       │
   O       O
  /|\     /|\
  / \     / \
 Kunde   Admin  ← Spezialisierte Akteure

Bedeutung:


Beispiel: E-Commerce-System

       O
      /|\
      / \
    Benutzer
       │
       ├──► [Produkte durchsuchen]
       ├──► [Profil bearbeiten]
       │
       △
       │
   ────┴─────────
   │             │
   O             O
  /|\           /|\
  / \           / \
 Kunde         Admin
   │             │
   ├──► [Bestellen]        ├──► [Produkte verwalten]
   ├──► [Bewerten]         ├──► [Nutzer verwalten]
   └──► [Retoure]          └──► [Statistiken ansehen]

Vererbung:


Generalisierung bei Use Cases

Zeigt, dass ein Use Case eine spezielle Variante eines anderen ist.

┌─────────────────┐
│    Bezahlen     │ ← Allgemeiner Use Case
└─────────────────┘
         △
         │
     ────┴────────────
     │       │       │
┌─────┐ ┌─────┐ ┌─────┐
│Kredit│PayPal│Bank-│ ← Spezielle Use Cases
│-karte│      │über-│
└─────┘ └─────┘│weisung│
                └─────┘

Bedeutung:


Visuelles Beispiel: Bibliotheks-System

     O
    /|\
    / \
  Besucher
     │
     ├──► [Katalog durchsuchen]
     │
     △
     │
 ────┴────
 │       │
 O       O
/|\     /|\
/ \     / \
Gast  Mitglied
 │       │
 │       ├──► [Buch ausleihen]
 │       ├──► [Buch verlängern]
 │       └──► [Reservieren]


┌────────────────┐
│ Medien suchen  │ ← Allgemeiner Use Case
└────────────────┘
       △
       │
   ────┴──────────
   │       │     │
┌──────┐┌──────┐┌──────┐
│Buch  ││DVD   ││Zeit- │
│suchen││suchen││schrif-│
└──────┘└──────┘│ten   │
                │suchen│
                └──────┘

Code-Analogie

Generalisierung = Klassen-Vererbung:

// Allgemeine Klasse
class Benutzer {
    void produkteDurchsuchen() { ... }
    void profilBearbeiten() { ... }
}

// Spezialisierte Klassen
class Kunde extends Benutzer {  // Vererbung!
    void bestellen() { ... }
    void bewerten() { ... }
}

class Admin extends Benutzer {  // Vererbung!
    void produkteVerwalten() { ... }
    void nutzerVerwalten() { ... }
}

Generalisierung vs. Include vs. Extend

┌──────────────────────────────────────────────────┐
│           GENERALISIERUNG (IST-EIN)              │
└──────────────────────────────────────────────────┘

   [Bezahlen]
       △
       │ "ist ein"
   [Kreditkarte bezahlen]


┌──────────────────────────────────────────────────┐
│           INCLUDE (BENÖTIGT IMMER)               │
└──────────────────────────────────────────────────┘

[Bestellen] ────<<include>>────► [Bezahlen]
                   "benötigt"


┌──────────────────────────────────────────────────┐
│           EXTEND (OPTIONAL)                      │
└──────────────────────────────────────────────────┘

[Bestellen] ◄────<<extend>>──── [Gutschein einlösen]
                   "kann erweitert werden durch"
Beziehung Bedeutung Beispiel
Generalisierung "ist ein" Admin ist ein Benutzer
Include "benötigt immer" Bestellen benötigt Bezahlen
Extend "kann erweitert werden" Bestellen kann Gutschein haben

Praktisches Beispiel: Ticket-System

       O
      /|\
      / \
     Nutzer
       △
       │
   ────┴────────────
   │       │       │
   O       O       O
  /|\     /|\     /|\
  / \     / \     / \
 Kunde  Support  Manager
   │       │       │
   │       │       │
   ├──► [Ticket erstellen]
   │       │       │
   │       ├──► [Ticket bearbeiten]
   │       │       │
   │       │       ├──► [Statistiken ansehen]
   │       │       └──► [Team verwalten]
   │       │
   │       └──► [Ticket schließen]
   │
   └──► [Ticket status prüfen]

Vererbungs-Hierarchie:


Regeln für Generalisierung

Wichtige Regeln

  1. "Ist-ein"-Beziehung: Admin ist ein Benutzer
  2. Vererbung: Spezialisierung erbt alle Features
  3. Pfeil nach oben: Zum allgemeineren Element
  4. Erweiterung: Spezialisierung kann eigene Use Cases haben

Gute Verwendung:

✅ Kunde ist ein Benutzer
✅ Admin ist ein Benutzer
✅ Kreditkarte-Bezahlen ist eine Art von Bezahlen

Schlechte Verwendung:

❌ Bestellen ist ein Bezahlen (nein, Bestellen nutzt Bezahlen)
❌ Login ist ein Benutzer (nein, Login ist ein Use Case)

Zusammenfassung

Generalisierung

  • Symbol: Geschlossener, nicht ausgefüllter Pfeil △
  • Bedeutung: "Ist-ein"-Beziehung (Vererbung)
  • Pfeil: Von speziell zu allgemein (nach oben)
  • Bei Akteuren: Kunde ist ein Benutzer
  • Bei Use Cases: Kreditkarte-Bezahlen ist eine Art von Bezahlen
  • Vererbung: Spezielle erben alle Eigenschaften vom Allgemeinen

Merkhilfe

"Generalisierung" = "Allgemeiner machen" = Vererbung


Verwandte Konzepte


Vollständiges Beispiel: Bibliotheks-System

                    ┌────────────────────────────────────────────┐
                    │        BIBLIOTHEKS-SYSTEM                  │
                    │                                            │
     O              │  ┌─────────────────────┐                  │
    /|\             │  │ Katalog durchsuchen │                  │
    / \             │  └─────────────────────┘                  │
  Besucher ────────┼────────────┘                               │
                    │                                            │
     △              │                                            │
     │              │  ┌─────────────────┐                      │
  ───┴───           │  │ Buch ausleihen  │                      │
  │     │           │  └─────────────────┘                      │
  O     O           │         │                                  │
 /|\   /|\          │         │ <<include>>                     │
 / \   / \          │         ↓                                  │
Gast Mitglied──────┼───►┌──────────────┐                       │
       │            │    │Benutzer prüfen│                      │
       │            │    └──────────────┘                       │
       │            │                                            │
       ├────────────┼───►┌─────────────────┐                   │
       │            │    │ Buch verlängern │                   │
       │            │    └─────────────────┘                   │
       │            │                                            │
       └────────────┼───►┌─────────────────┐                   │
                    │    │  Reservieren    │                   │
                    │    └─────────────────┘                   │
                    │         △                                  │
                    │         │ <<extend>>                      │
                    │         │                                  │
                    │    ┌─────────────────────────┐            │
                    │    │ E-Mail-Benachrichtigung │            │
                    │    └─────────────────────────┘            │
                    │                                            │
                    └────────────────────────────────────────────┘

Erklärung:


Erstellen eines Use-Case-Diagramms

Schritte zum Erstellen

  1. Akteure identifizieren: Wer nutzt das System?
  2. Use Cases definieren: Was soll das System tun?
  3. Systemgrenzen zeichnen: Was ist Teil des Systems?
  4. Beziehungen modellieren: Include, Extend, Generalisierung
  5. Validieren: Mit Stakeholdern überprüfen

Beispiel-Workflow:

Schritt 1: Akteure sammeln
    Kunde, Administrator, Zahlungssystem

Schritt 2: Use Cases sammeln
    Bestellen, Bezahlen, Produkte verwalten

Schritt 3: Systemgrenze ziehen
    [System: Online-Shop]

Schritt 4: Beziehungen hinzufügen
    Bestellen <<include>> Bezahlen
    Bestellen <<extend>> Gutschein einlösen

Schritt 5: Review mit Team
    ✓ Vollständig? Korrekt?

Häufige Fehler

Typische Fehler vermeiden

❌ Zu technische Use Cases:

Falsch: "Datenbank abfragen"
Richtig: "Produkte suchen"

❌ Implementierungsdetails:

Falsch: "SQL-Query ausführen"
Richtig: "Kundendaten abrufen"

❌ Falsche Beziehungsrichtung:

Falsch: [Anmelden] ◄── <<extend>> ── [Bestellen]
Richtig: [Bestellen] ──── <<include>> ──► [Anmelden]

❌ Zu viele Details:

Falsch: 50 Use Cases mit allen Spezialfällen
Richtig: 10-15 Haupt-Use-Cases

Use-Case-Diagramm vs. andere UML-Diagramme

Diagramm Zweck Perspektive
Anwendungsfalldiagramm Was kann das System? Nutzersicht (extern)
UML-Klassendiagramm Wie ist das System strukturiert? Entwicklersicht (intern)
UML-Sequenzdiagramme Wie läuft eine Interaktion ab? Zeitlicher Ablauf
UML-Aktivitätsdiagramm Wie läuft ein Prozess ab? Workflow/Prozess
UML-Zustandsdiagramme Welche Zustände hat ein Objekt? Zustandsübergänge

Zusammenfassung

Anwendungsfalldiagramm - Kernpunkte

Merkhilfe

Anwendungsfalldiagramme beantworten: "WER macht WAS mit dem System?"


Verwandte Konzepte