488 Stimmen

Was ist der Unterschied zwischen Include und Extend im Anwendungsfall-Diagramm?

Was ist der Unterschied zwischen include und extend in einem Anwendungsfall-Diagramm?

1 Stimmen

Ich würde keinen besseren Job machen als Scott Ambler, um zu erklären, wie sie für die Wiederverwendung in Anwendungsfallmodellen verwendet werden können und wie sie sich unterscheiden. Statt ihn umzuformulieren, würde ich vorschlagen, Wiederverwendung in Anwendungsfallmodellen: <<extend>>, <<include>> und Vererbung zu lesen.

41 Stimmen

@closers: Dies ist eine gültige Frage.

121 Stimmen

Für kurz --> include = Erforderlich, extend = Optional

335voto

Doug Knesek Punkte 6017

Erweitern wird verwendet, wenn ein Anwendungsfall Schritte zu einem anderen Hauptanwendungsfall hinzufügt.

Zum Beispiel, stellen Sie sich vor, "Geld abheben" ist ein Anwendungsfall eines Geldautomaten (ATM). "Gebühr berechnen" würde Geld abheben erweitern und den bedingten "Erweiterungspunkt" beschreiben, der instanziiert wird, wenn der ATM-Benutzer kein Kunde der Bank ist, der den ATM besitzt. Beachten Sie, dass der grundlegende Anwendungsfall "Geld abheben" für sich alleine stehen kann, ohne die Erweiterung.

Einschließen wird verwendet, um Anwendungsfallfragmente zu extrahieren, die in mehreren Anwendungsfällen dupliziert werden. Der eingeschlossene Anwendungsfall kann nicht alleine stehen und der ursprüngliche Anwendungsfall ist ohne den eingeschlossenen nicht vollständig. Dies sollte sparsam und nur in Fällen verwendet werden, in denen die Duplizierung signifikant ist und bewusst existiert (anstatt zufällig).

Zum Beispiel wäre der Ablauf von Ereignissen, der am Anfang jedes ATM-Anwendungsfalls stattfindet (wenn der Benutzer seine ATM-Karte einsteckt, seine PIN eingibt und das Hauptmenü angezeigt bekommt), ein guter Kandidat für ein Einschließen.

3 Stimmen

Include wird verwendet, um Use-Case-Fragmente zu extrahieren, die in mehreren Use Cases dupliziert sind, was wird in diesen Schritten extrahiert: steckt ihre EC-Karte ein, gibt ihre PIN ein und sieht das Hauptmenü? Vielen Dank.

6 Stimmen

Ich muss dem widersprechen, dass die "Login" -Schritte ein guter Kandidat für ein include sind. Diese Schritte bilden einen Anwendungsfall für sich und sollten mit den anderen Anwendungsfällen durch Nachbedingungen -> Vorbedingungen verknüpft werden.

46 Stimmen

@Bruno - Niemand würde sich an einem Geldautomaten einloggen und einfach zufrieden weggehen. Konkrete Anwendungsfälle müssen einen eigenständigen Wert für den Akteur liefern, sonst handelt es sich nur um Funktionen in einer funktionalen Zerlegung.

142voto

Julian C Punkte 1339

Dies mag umstritten sein, aber die Annahme, dass "includes immer und extends manchmal" ist ein sehr verbreitetes Missverständnis, das fast übernommen wurde als die faktische Bedeutung. Hier ist mein korrekter Ansatz (meiner Meinung nach und überprüft gegen Jacobson, Fowler, Larmen und 10 andere Referenzen).

Beziehungen sind Abhängigkeiten

Der Schlüssel zu den Beziehungen von Include und Extend Anwendungsfällen besteht darin zu realisieren, dass, wie bei dem Rest von UML, der gestrichelte Pfeil zwischen Anwendungsfällen eine Abhängigkeitsbeziehung ist. Ich werde die Begriffe 'Grund', 'einschließen' und 'erweitern' verwenden, um auf die Anwendungsfallrollen zu verweisen.

einschließen

Ein Grundanwendungsfall ist abhängig von dem eingeschlossenen Anwendungsfall(en); ohne ihn/sie ist der Grundanwendungsfall unvollständig, da die eingeschlossenen Anwendungsfälle Untersequenzen der Interaktion darstellen, die immer ODER manchmal auftreten können. (Dies widerspricht einem verbreiteten Missverständnis darüber, was Ihr Anwendungsfall vorschlägt, das immer im Hauptszenario passiert und manchmal in alternativen Abläufen einfach davon abhängt, was Sie als Ihr Hauptszenario wählen; Anwendungsfälle können leicht umstrukturiert werden, um einen anderen Fluss als das Hauptszenario darzustellen, und das sollte keine Rolle spielen).

In der bewährten Praxis der Einwegabhängigkeit kennt der Grundanwendungsfall (und verweist auf) den eingeschlossenen Anwendungsfall, aber der eingeschlossene Anwendungsfall sollte nicht 'wissen' über den Grundanwendungsfall. Deshalb können eingeschlossene Anwendungsfälle: a) Grundanwendungsfälle an sich sein und b) von einer Anzahl von Grundanwendungsfällen gemeinsam genutzt werden.

erweitern

Der erweiternde Anwendungsfall ist abhängig vom Grundanwendungsfall; er erweitert buchstäblich das Verhalten, das vom Grundanwendungsfall beschrieben wird. Der Grundanwendungsfall sollte ein voll funktionsfähiger Anwendungsfall für sich sein ('eingeschlossen' inklusive natürlich) ohne die zusätzliche Funktionalität des erweiternden Anwendungsfalls.

Erweiternde Anwendungsfälle können in mehreren Situationen verwendet werden:

  1. Der Grundanwendungsfall repräsentiert die "muss haben" Funktionalität eines Projekts, während der erweiternde Anwendungsfall optionales (sollte/könnte/wollen) Verhalten repräsentiert. Hier ist der Begriff optional relevant – optional ob zu bauen/liefen anstatt optional ob es manchmal als Teil der Sequenz des Grundanwendungsfalls läuft.
  2. In Phase 1 können Sie den Grundanwendungsfall liefern, der die Anforderungen zu diesem Zeitpunkt erfüllt, und Phase 2 wird zusätzliche Funktionalität hinzufügen, die vom erweiternden Anwendungsfall beschrieben wird. Dies kann Sequenzen enthalten, die immer oder manchmal nach der Lieferung von Phase 2 durchgeführt werden (wieder im Widerspruch zur verbreiteten Meinung).
  3. Es kann verwendet werden, um Untersequenzen des Grundanwendungsfalls herauszuziehen, insbesondere wenn sie 'außergewöhnliches' komplexes Verhalten mit eigenen alternativen Abläufen darstellen.

Ein wichtiger Aspekt, der berücksichtigt werden muss, ist, dass der erweiternde Anwendungsfall das Verhalten an mehreren Stellen im Fluss des Grundanwendungsfalls 'einfügen' kann, nicht nur an einer einzigen Stelle, wie es ein eingeschlossener Anwendungsfall tut. Aus diesem Grund ist es sehr unwahrscheinlich, dass ein erweiternder Anwendungsfall für mehr als einen Grundanwendungsfall geeignet ist.

Hinsichtlich der Abhängigkeit ist der erweiternde Anwendungsfall abhängig vom Grundanwendungsfall und wieder eine Einweg-Abhängigkeit, d.h. der Grundanwendungsfall benötigt keine Referenz zum erweiternden Anwendungsfall in der Sequenz. Das bedeutet nicht, dass Sie die Erweiterungspunkte nicht demonstrieren oder im Template an anderer Stelle eine Querverweis zum erweiternden Anwendungsfall hinzufügen können, aber der Grundanwendungsfall muss ohne den erweiternden Anwendungsfall arbeiten können.

ZUSAMMENFASSUNG

Ich hoffe, ich habe gezeigt, dass das gängige Missverständnis von "includes sind immer, extends sind manchmal" entweder falsch oder bestenfalls vereinfacht ist. Diese Version macht tatsächlich mehr Sinn, wenn man alle Probleme über die Richtung der Pfeile berücksichtigt, die das Missverständnis präsentiert - im korrekten Modell handelt es sich einfach um Abhängigkeit und ändert sich nicht potenziell, wenn Sie die Inhalte des Anwendungsfalls neu strukturieren.

4 Stimmen

Es wäre großartig, wenn Sie einige Referenzen für diese Behauptung hinzufügen könnten.

2 Stimmen

Entschuldigung, die Erstellung eines UML-Diagramms auf diese Weise, da die Software durch Iterationen geht, die neue Funktionalitäten hinzufügen, die immer beabsichtigt waren, am Ende benötigt zu werden, wäre nur unnötig verwirrend und komplex. Ich bevorzuge den Ansatz von Doug Knesek, der viel einfacher zu verstehen und zu arbeiten ist, ohne dabei unnötige Verwirrung oder Komplexität zu erzeugen.

2 Stimmen

Obwohl du mit der Herausforderung recht hast, dass "includes immer und extends manchmal" im Zusammenhang mit Use-Case-Instanzen zutrifft, könnte deine Entscheidung, die Semantik von "extend" zur Unterstützung inkrementeller Auslieferung auszunutzen, andere dazu bringen zu denken, dass "extend" BEI inkrementeller Auslieferung liegt.

114voto

skipy Punkte 3752

Ich benutze dies oft, um die beiden zu merken:

Mein Anwendungsfall: Ich gehe in die Stadt.

beinhaltet -> das Auto fahren

erweitert -> das Benzin tanken

"Das Auto tanken" ist möglicherweise nicht immer erforderlich, kann jedoch optional erforderlich sein, abhängig von der Menge des noch im Auto verbleibenden Benzins. "Das Auto fahren" ist eine Voraussetzung, daher nehme ich es auf.

3 Stimmen

Aber "Tanken" erweitert tatsächlich "in die Stadt fahren", nicht umgekehrt, oder?

3 Stimmen

Ich denke, es hängt von Petr's Standpunkt ab. Meiner Meinung nach kann "das Auto betanken" tatsächlich auch die Fahrt verlängern.

6 Stimmen

In die Stadt zu gehen und das Benzin zu tanken klingen wie zwei völlig unabhängige Dinge, die zufällig passieren könnten.

80voto

user1874524 Punkte 801

Use cases are used to document behavior, z.B. beantworten Sie diese Frage.

Antworten Sie auf den Frage-Anwendungsfall

Ein Verhalten erweitert ein anderes, wenn es zusätzlich zu, aber nicht unbedingt Teil des Verhaltens ist, z.B. die Antwort recherchieren.

Bitte beachten Sie auch, dass es nicht viel Sinn macht, die Antwort zu recherchieren, wenn Sie nicht versuchen, die Frage zu beantworten.

Antwort recherchieren erweitern

Ein Verhalten ist in einem anderen enthalten, wenn es Teil des einschließenden Verhaltens ist, z.B. Einloggen bei Stack Exchange.

Einloggen bei Stack Exchange einschließen

Zur Klarstellung, die Illustration trifft nur zu, wenn Sie hier in Stack Overflow antworten möchten :).

Dies sind die technischen Definitionen aus UML 2.5 Seiten 671-672.

Ich habe hervorgehoben, was ich für wichtige Punkte halte.

Erweitert

Eine Erweiterung ist eine Beziehung von einem erweiternden Anwendungsfall (die Erweiterung) zu einem erweiterten Anwendungsfall (der erweiterte Fall), die spezifiziert wie und wann das Verhalten, das im erweiternden Anwendungsfall definiert ist, in das Verhalten, das im erweiterten Anwendungsfall definiert ist, eingefügt werden kann. Die Erweiterung findet an einem oder mehreren spezifischen Erweiterungspunkten statt, die im erweiterten Anwendungsfall definiert sind.

Erweitern ist dazu gedacht, verwendet zu werden, wenn es zusätzliches Verhalten gibt, das hinzugefügt werden sollte, möglicherweise bedingt, zum Verhalten in einem oder mehreren Anwendungsfällen.

Der erweiterte Anwendungsfall wird unabhängig vom erweiternden Anwendungsfall definiert und ist unabhängig vom erweiternden Anwendungsfall bedeutungsvoll. Andererseits definiert der erweiternde Anwendungsfall typischerweise Verhalten, das allein nicht unbedingt sinnvoll ist. Stattdessen definiert der erweiternde Anwendungsfall eine Reihe modularer Verhaltensinkremente, die eine Ausführung des erweiterten Anwendungsfalls unter spezifischen Bedingungen ergänzen.

...

Beinhaltet

Einbeziehen ist eine gerichtete Beziehung zwischen zwei Anwendungsfällen, die angibt, dass das Verhalten des einbezogenen Anwendungsfalls (die Hinzufügung) in das Verhalten des einschließenden Anwendungsfalls (der einschließende Fall) eingefügt wird. Es ist auch eine Art benanntes Element, sodass es einen Namen im Kontext seines besitzenden Anwendungsfalls (des einschließenden Falls) haben kann. Der einschließende Anwendungsfall kann von den Änderungen abhängig sein, die durch die Ausführung des einbezogenen Anwendungsfalls erzeugt werden. Der einbezogene Anwendungsfall muss verfügbar sein, damit das Verhalten des einschließenden Anwendungsfalls vollständig beschrieben werden kann.

Die Beziehung Einbeziehen soll verwendet werden, wenn es gemeinsame Teile des Verhaltens von zwei oder mehr Anwendungsfällen gibt. Dieser gemeinsame Teil wird dann in einen separaten Anwendungsfall extrahiert, der von allen Basenanwendungsfällen, die diesen Teil gemeinsam haben, eingeschlossen werden soll. Da die Hauptverwendung der Beziehung Einbeziehen der Wiederverwendung gemeinsamer Teile ist, ist das, was in einem Basisanwendungsfall übrig bleibt, normalerweise nicht vollständig für sich allein aber abhängig von den eingeschlossenen Teilen, um bedeutsam zu sein. Dies spiegelt sich in der Richtung der Beziehung wider, die darauf hinweist, dass der Basisanwendungsfall von der Hinzufügung abhängt, aber nicht umgekehrt.

...

1 Stimmen

Ich glaube, das enthaltene Login-Beispiel ist inkorrekt. Dies bedeutet, dass Sie sich jedes Mal einloggen müssen, wenn Sie eine Frage beantworten möchten. Was ist, wenn Sie bereits eingeloggt waren, um einen anderen Anwendungsfall durchzuführen?

78voto

bohbian Punkte 681

Zur Vereinfachung,

für include

  1. Wenn das Basis-Anwendungsfalldurchlaufen wird, wird der inkludierte Anwendungsfall JEDES MAL durchgeführt.
  2. Der Basis-Anwendungsfall erfordert den Abschluss des inkludierten Anwendungsfalls, um abgeschlossen zu werden.

Ein typisches Beispiel: zwischen Anmeldung und Passwort überprüfen

(Anmeldung) --- << inkludieren >> ---> (Passwort überprüfen)

für den Anmeldeprozess erfolgreich zu sein, muss auch "Passwort überprüfen" erfolgreich sein.


für extend

  1. Wenn das Basis-Anwendungsfall durchlaufen wird, wird der erweiterte Anwendungsfall nur MANCHMAL durchgeführt.
  2. Der erweiterte Anwendungsfall tritt nur auf, wenn bestimmte Kriterien erfüllt sind.

Ein typisches Beispiel: zwischen Anmeldung und Fehlermeldung anzeigen (tritt nur manchmal auf)

(Anmeldung) --- << erweitern >> --- (Fehlermeldung anzeigen)

**

"Fehlermeldung anzeigen" tritt nur manchmal auf, wenn der Anmeldeprozess fehlschlägt.

**

0 Stimmen

Tolles Beispiel!

4 Stimmen

So include steht für "muss" während extend für "kann" steht

1 Stimmen

Gute Beschreibung, fragwürdige Beispiele ... sind "Passwort überprüfen" und "Fehlermeldung anzeigen" Anwendungsfälle? Klingt eher nach Dingen, die das System tun sollte. (Anwendungsfall = ein Fall, in dem jemand das System verwenden würde.) Meiner Meinung nach ist "Anmeldung" nicht einmal ein Anwendungsfall, sondern eine lästige Aktion, die der Benutzer vom System gezwungen wird, damit es ordnungsgemäß funktioniert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X