In der Softwaretechnik helfen Use-Case-Diagramme dabei, die Interaktionen zwischen Benutzern (Aktoren) und einem System zu visualisieren, um dessen funktionale Anforderungen zu erfassen. Wenn Systeme wachsen, können Use-Case-Diagramme unübersichtlich werden und mit wiederholten oder komplexen Verhaltensweisen gefüllt sein, die die Kernfunktionen des Systems verdecken. Die Include-Beziehungin UML löst diese Herausforderung, indem sie das Extrahieren gemeinsamer Verhaltensweisen in wiederverwendbare, modulare Use-Cases ermöglicht. Dieser Artikel geht darauf ein, wie Include-Beziehungen Use-Case-Diagramme vereinfachen, welche wesentlichen Vorteile sie bieten und praktische Beispiele, um ihre Nutzbarkeit zu zeigen.
Eine Include-Beziehungin UML legt fest, dass ein Basis-Use-Case das Verhalten eines anderen Use-Cases, des sogenannten eingeschlossenen Use-Cases, integriert. Der eingeschlossene Use-Case stellt eine Folge von Aktionen dar, die immer ausgeführt wirdals Teil des Ablaufs des Basis-Use-Cases ausgeführt wird. Visuell wird diese Beziehung als gestrichelte Pfeil mit offener Spitzedargestellt, die vom Basis-Use-Case zum eingeschlossenen Use-Case zeigt und mit dem Stereotyp «include» beschriftet ist.
Die Include-Beziehung ist vergleichbar mit einem Subroutinenauftrag in der Programmierung: Der Basis-Use-Case „ruft“ den eingeschlossenen Use-Case auf, um eine bestimmte Aufgabe auszuführen, was eine strukturierte und hierarchische Modellierung fördert. Durch das Extrahieren gemeinsamer oder komplexer Verhaltensweisen in separate Use-Cases reduzieren Include-Beziehungen Duplikate, erhöhen die Klarheit und verbessern die Wartbarkeit.
Include-Beziehungen bieten mehrere Vorteile bei der Modellierung großer und komplexer Systeme:
Wiederverwendung gemeinsamer Verhaltensweisen: Gemeinsame Funktionalität über mehrere Use-Cases hinweg kann in einem einzigen eingeschlossenen Use-Case zusammengefasst werden, wodurch Redundanz beseitigt wird.
Vereinfachung komplexer Use-Cases: Große Use-Cases können in kleinere, handhabbare Module aufgeteilt werden, wodurch das Diagramm weniger überladen ist.
Pflichtausführung: Der eingeschlossene Use-Case wird immer als Teil des Basis-Use-Cases ausgeführt, was die Vollständigkeit gewährleistet, ohne den Hauptablauf mit Details zu überlasten.
Verbesserte Klarheit und Wartbarkeit: Durch die Trennung der Verantwortlichkeiten konzentriert sich der Basis-Use-Case auf sein eigenes Verhalten, während die eingeschlossenen Use-Cases wiederverwendbare Abläufe verwalten, was die Aktualisierung vereinfacht.
Strukturierte Modellierung: Include-Beziehungen unterstützen eine hierarchische Gestaltung, vergleichbar mit Subroutinen, wodurch das System leichter verständlich und erweiterbar wird.
Um die Stärke von Include-Beziehungen zu veranschaulichen, betrachten wir mehrere praktische Beispiele aus verschiedenen Bereichen.
Betrachten wir eine Online-Shopping-Plattform, bei der Benutzer Produkte durchsuchen, Artikel in einen Warenkorb hinzufügen und bezahlen können. Viele Use-Cases, wie „Produkt kaufen“, „Artikel reservieren“ und „Artikel verschenken“, erfordern, dass der Benutzer sich authentifiziert, bevor er fortfahren kann.
Grundlegende Anwendungsfälle: „Produkt kaufen“, „Artikel reservieren“, „Artikel schenken“
Eingebundener Anwendungsfall: „Benutzer authentifizieren“
Anstatt die Authentifizierungsschritte in jedem Anwendungsfall zu duplizieren, ziehen wir sie in einen einzigen Anwendungsfall „Benutzer authentifizieren“. Dieser eingebundene Anwendungsfall behandelt Aufgaben wie die Aufforderung zur Eingabe von Anmeldeinformationen und deren Überprüfung. Das Anwendungsfalldiagramm würde zeigen:
Ein gestrichelter Pfeil von „Produkt kaufen“ zu „Benutzer authentifizieren“ mit „«include»“.
Ähnliche Pfeile von „Artikel reservieren“ und „Artikel schenken“ zu „Benutzer authentifizieren“.
Dieser Ansatz reduziert Redundanz, da die Authentifizierungslogik nur einmal definiert und in mehreren Anwendungsfällen wiederverwendet wird, wodurch das Diagramm übersichtlich und wartbar bleibt.
In einem Bankensystem können Kunden Aktionen wie „Geld abheben“, „Geld einzahlen“ und „Geld überweisen“ durchführen. Jeder dieser Anwendungsfälle erfordert die Überprüfung des Kontostands des Kunden, bevor fortgefahren wird.
Grundlegende Anwendungsfälle: „Geld abheben“, „Geld einzahlen“, „Geld überweisen“
Eingebundener Anwendungsfall: „Konto überprüfen“
Der Anwendungsfall „Konto überprüfen“ überprüft den Kontostatus, das Guthaben und die Berechtigungen. Durch die Einbeziehung dieses Anwendungsfalls in jeden grundlegenden Anwendungsfall wird die Wiederholung der Überprüfungslogik vermieden. Die visuelle Darstellung enthält gestrichelte Pfeile mit der Beschriftung „«include»“ von jedem grundlegenden Anwendungsfall zu „Konto überprüfen“. Diese Modularisierung vereinfacht das Diagramm und stellt sicher, dass die Kontoverifizierung konsistent angewendet wird.
In einem Bibliothekssystem können Benutzer „Buch ausleihen“, „Buch zurückgeben“ oder „Buch reservieren“. Jede dieser Aktionen erfordert die Überprüfung der Verfügbarkeit des Buches.
Grundlegende Anwendungsfälle: „Buch ausleihen“, „Buch zurückgeben“, „Buch reservieren“
Eingebundener Anwendungsfall: „Verfügbarkeit des Buches prüfen“
Der Anwendungsfall „Verfügbarkeit des Buches prüfen“ überprüft, ob das Buch auf Lager ist und nicht reserviert ist. Durch die Einbeziehung dieses Anwendungsfalls in die grundlegenden Anwendungsfälle bleibt das Diagramm übersichtlich, und Änderungen an der Verfügbarkeitsprüfung (z. B. Integration eines neuen Lagerverwaltungssystems) müssen nur an einer Stelle vorgenommen werden.
In einem Krankenhaus-Verwaltungssystem können Patienten „Termin buchen“, „Termin stornieren“ oder „Termin neu planen“. Jeder dieser Anwendungsfälle erfordert die Überprüfung der Identität des Patienten.
Grundlegende Anwendungsfälle: „Termin buchen“, „Termin stornieren“, „Termin neu planen“
Eingebundener Anwendungsfall: „Identität des Patienten überprüfen“
Der Anwendungsfall „Identität des Patienten überprüfen“ behandelt Aufgaben wie die Überprüfung der Patienten-ID oder Versicherungsdaten. Durch die Einbeziehung dieses Anwendungsfalls in die grundlegenden Anwendungsfälle wird sichergestellt, dass die Identitätsüberprüfung konsistent durchgeführt wird, ohne Schritte im Diagramm zu duplizieren. Die gestrichelten Pfeile mit „«include»“ verbinden jeden grundlegenden Anwendungsfall mit „Identität des Patienten überprüfen“, was die Klarheit erhöht.
Auf einer E-Learning-Plattform können Studierende „Quiz bearbeiten“, „Aufgabe einreichen“ oder „Noten anzeigen“. Jede dieser Aktionen erfordert, dass der Student sich im System anmeldet.
Grundnutzungsfälle: „Quiz bearbeiten“, „Aufgabe einreichen“, „Noten anzeigen“
Eingebundener Nutzungsfall: „Anmelden“
Der Nutzungsfall „Anmelden“ fasst die Schritte zur Benutzerauthentifizierung zusammen. Durch die Einbeziehung in die Grundnutzungsfälle vermeidet das Diagramm die Wiederholung von Anmel Schritten, was die Verständlichkeit und Wartbarkeit erleichtert. Die visuelle Darstellung zeigt gestrichelte Pfeile mit der Beschriftung „«include»“ von jedem Grundnutzungsfall zu „Anmelden“.
In UML-Nutzungsfall-Diagrammen wird die Include-Beziehung wie folgt dargestellt:
Ein gestrichelter Pfeil mit einer offenen Pfeilspitzezeigt von dem Grundnutzungsfall zum eingebundenen Nutzungsfall.
Der Pfeil ist mit dem Stereotyp beschriftet«include».
Beispielsweise im Beispiel Online-Shopping:
Produkt kaufen → «include» → Benutzer authentifizieren
Das Diagramm zeigt deutlich, dass „Benutzer authentifizieren“ ein obligatorischer Bestandteil des „Produkt kaufen“-Flusses ist.
Diese visuelle Konvention stellt sicher, dass Stakeholder die Beziehungen zwischen Nutzungsfällen und ihren Abhängigkeiten schnell verstehen können.
Es ist erwähnenswert, den Unterschied zwischeninclude und extendBeziehungen zu erkennen, um Verwirrung zu vermeiden:
Include: Der eingebundene Nutzungsfall istimmer ausgeführt als Teil des Basis-Nutzenfall (zwingend erforderlich).
Erweitern: Der erweiternde Nutzenfall istoptional und wird nur unter bestimmten Bedingungen ausgeführt.
Zum Beispiel ist im Online-Shopping-System „Benutzer authentifizieren“ enthalten, da es zwingend erforderlich ist, aber ein Nutzenfall wie „Rabattcode anwenden“ könnte eine Erweiterungsbeziehung darstellen, da er optional ist und davon abhängt, ob der Benutzer einen gültigen Code besitzt.
Um die Vorteile von Include-Beziehungen zu maximieren, beachten Sie Folgendes:
Häufige Verhaltensweisen identifizieren: Suchen Sie nach Abläufen, die in mehreren Nutzenfällen wiederholt werden, wie z. B. Authentifizierung, Validierung oder Protokollierung.
Halten Sie die eingeschlossenen Nutzenfälle fokussiert: Stellen Sie sicher, dass eingeschlossene Nutzenfälle spezifische, wiederverwendbare Verhaltensweisen enthalten, anstatt ganze Prozesse.
Gleichgewicht zwischen Modularität und Einfachheit: Vermeiden Sie eine übermäßige Aufsplitterung von Nutzenfällen, da zu viele eingeschlossene Nutzenfälle das Diagramm schwerer verständlich machen können.
Verwenden Sie klare Namenskonventionen: Benennen Sie eingeschlossene Nutzenfälle so, dass ihre Zielsetzung deutlich wird (z. B. „Benutzer authentifizieren“ anstelle von „Anmeldevorgang“), um die Lesbarkeit zu verbessern.
Überprüfung der zwingenden Ausführung: Stellen Sie sicher, dass der eingeschlossene Nutzenfall immer erforderlich ist; andernfalls sollte eine Erweiterungsbeziehung in Betracht gezogen werden.
Die folgende Tabelle fasst die wichtigsten Vorteile von Include-Beziehungen zusammen:
|
Vorteil |
Erklärung |
|---|---|
|
Wiederverwendung gemeinsamer Verhaltensweisen |
Extrahiert gemeinsame Funktionalität, um Duplikate über mehrere Nutzenfälle hinweg zu vermeiden |
|
Vereinfachung komplexer Nutzenfälle |
Teilt große Nutzenfälle in kleinere, handhabbare Teile auf |
|
Zwingende Ausführung |
Der eingeschlossene Nutzenfall ist immer Teil des Basis-Nutzenfalls und stellt die Vollständigkeit sicher |
|
Modularisierung und Klarheit |
Trennt Anliegen, was die Lesbarkeit und Wartbarkeit verbessert |
|
Strukturierte Modellierung |
Ähnlich dem Aufruf von Unterroutinen, unterstützt hierarchisches Design |
Include-Beziehungen sind ein Eckpfeiler der effektiven Use-Case-Modellierung in UML und ermöglichen die Wiederverwendung und Modularisierung gemeinsamer, obligatorischer Verhaltensweisen. Durch die Extraktion gemeinsamer Funktionalitäten in eingeschlossene Use Cases können Entwickler saubere, wartbarere Diagramme erstellen, die leichter zu verstehen und zu aktualisieren sind. Die angegebenen Beispiele – von Online-Shopping bis hin zur Krankenhausverwaltung – zeigen die Vielseitigkeit von Include-Beziehungen über verschiedene Domänen hinweg. Durch die Nutzung dieses Mechanismus können Teams komplexe Systeme klarer und effizienter modellieren, was letztendlich die Qualität ihrer Softwareentwürfe verbessert.