Read this post in: de_DEen_USes_ESfr_FRhi_INid_IDjapt_PTru_RUvizh_CNzh_TW

Opanowanie relacji przypadków użycia UML: Siła i niebezpieczeństwo «include» i «extend»

UMLYesterday

W świecie wymagań oprogramowania i modelowania systemówUML (Język modelowania zintegrowanego) pozostaje kluczowym narzędziem do wizualizacji zachowania systemu. Jednymi z najpotężniejszych, ale często niezrozumianych cech są«include» «extend» relacje między przypadkami użycia. Te mechanizmy są przeznaczone doredukcji powtórzeńzarządzania zmienną, i zwiększania modułowości w modelach przypadków użycia. Jednak ich nieprawidłowe wykorzystanie jest powszechne — prowadzi do nadmiernie skomplikowanych schematów, zamieszania wśród zainteresowanych stron i utraty skupienia na wartości dla użytkownika.

 

 

Ten artykuł zawiera kompleksowy, praktyczny i oparty na ekspertach przewodnik do zrozumienia, stosowania i unikania typowych pułapek «include» i «extend». Przeglądnemy ichprawdziwe znaczenie, porównamy je obok siebie, przeanalizujemy, dlaczego wpadają w ten sam pułapkę co DFD (dekompozycja funkcjonalna), i zaproponujemynowoczesne najlepsze praktyki dla zespołów na lata 2025–2026 — szczególnie tych działających w środowiskach agilnych, lean lub hybrydowych.


🔹 Podstawowe znaczenie: Co oznaczają «include» i «extend» PrawdziwieZnaczą

✅ «include»: Wymuszona ponowna wykorzystywalność – „Zawsze Wymagany” przepływ podrzędny

Definicja:
Relacja «include» reprezentuje obowiązkowy, zawsze wykonywany podprzepływ, który został wyodrębniony w celu ponownego użycia w wielu przypadkach użycia.

📌 Kluczowe cechy:

  • Zawsze wykonywany: Włączony przypadek użycia jest uruchamiany za każdym razem, gdy wywoływany jest przypadek podstawowy.

  • Przypadek podstawowy jest niepełny bez niego: Bez uwzględnienia zachowania włączanego, przypadek podstawowy nie może spełnić swojego celu.

  • Kierunek zależności: Strzałka wskazuje od podstawowego → włączanego.

  • Znaczenie samodzielne: Włączony przypadek użycia zwykle nie ma sensu samodzielnie—ma sens tylko jako część większego procesu.

  • Analogia: Podobnie jak wywołanie funkcji lub podprogram w programowaniu—niezbędny dla głównej procedury.

🧠 Klasyczny mnemotechniczny wzór:

„Aby wykonać Logowanie, musisz Zautoryzować użytkownika.”
„Aby wykonać Wypłać gotówkę, musisz Weryfikuj PIN.”

To są niezbyt ważnych kroków. Nie możesz się zalogować bez uwierzytelnienia. Nie możesz wypłacić gotówki bez weryfikacji PIN-u.

💡 Kiedy stosować:

  • Gdy powszechna, złożona, ponownie używana zachowanie pojawia się w dwa lub więcej przypadków użycia.

  • Przykłady:

    • Uwierzytelnij użytkownika

    • Zaloguj ślad audytowy

    • Wyślij powiadomienie

    • Weryfikuj format danych wejściowych

✅ Zasada ogólna: Używaj «include» tylko wtedy, gdy ponownie używane zachowanie to istotneniezbyt proste, i pojawia się w ≥2–3 przypadków użycia.


✅ «extend»: Opcjonalna wersja – „Dodatek warunkowy”

Definicja:
Relacja «extend» definiujeopcjonalne, warunkowe lub wariantowezachowanie, któreprzyłącza się dokonkretnegopunktu rozszerzeniau podstawowego przypadku użycia.

📌 Kluczowe cechy:

  • Wykonywane warunkowo: Uruchamia się tylko w określonych warunkach.

  • Podstawowy przypadek użycia jest kompletny samodzielnie: Normalny przepływ działa bez rozszerzenia.

  • Kierunek zależności: Strzałka wskazujeod rozszerzającego → podstawowego (wstecz).

  • Znaczenie samodzielne: Przypadek użycia rozszerzający jestprawie nigdy nie ma sensu samodzielnie—ma sens tylko w kontekściew kontekście.

  • Analogia: Podobnie jakzakładkawtyczka, lubporada AOP (programowanie aspektowe)— dodaje zachowanie w określonym punkcie.

🧠 Klasyczny pamiętaj:

„Podczas wykonywania Zarezerwuj lot, możesz możechcieć Wybierz ulubione miejsce.”
„Podczas wykonywania Zapłać kartą kredytową, możesz możemusisz Wprowadź kod 3D Secure.”

To są opcjonalne ulepszenia—nie są wymagane dla podstawowego przepływu.

💡 Kiedy stosować:

  • Aby zamodelować alternatywne ścieżkiwyjątki, lub opcjonalne funkcje.

  • Gdy przypadki użycia mają różne zachowania oparte na warunkach (np. role użytkownika, stany systemu, preferencje).

  • Przykłady:

    • Zastosuj zniżkę (rozszerza Złóż zamówienie)

    • Zażądaj zwrotu (rozszerza Przetwórz płatność)

    • Wygeneruj paragon w formacie PDF (rozszerza Zakończ transakcję)

✅ Zasada ogólna: Używaj «rozszerz» oszczędnie — tylko dla znaczące różnice z jasnym punkty rozszerzania.


🔍 Szybka porównanie: «zawiera» vs «rozszerza»

Aspekt «zawiera» «rozszerza»
Wykonanie Zawsze Czasami / warunkowo
Czy podstawowa jednostka funkcjonalna jest kompletna samodzielnie? ❌ Nie — zależy od zawartych ✅ Tak — kompletna bez rozszerzeń
Kierunek zależności Podstawa → Dołączony Rozszerzanie → Podstawa
Kierunek strzałki Wskazuje na dołączony przypadek użycia Wskazuje na podstawowy przypadek użycia
Główny cel Odzyskiwanie obowiązkowych, wspólnych kroków Obsługa opcjonalnych lub zmiennych przepływów
Analogia Wywołanie funkcji / podprogram Wtyczka / wtyczka / porada AOP
Znaczenie samodzielne? Rzadko Prawie nigdy
Najlepsze dla Odzyskiwalne, złożone, przekrojowe kwestie Warunkowe, opcjonalne lub alternatywne zachowanie

⚠️ „Pułapka rozkładu”: Dlaczego diagramy przypadków użycia wychodzą poza tor

Tak jakDFD (Diagramy przepływu danych)cierpią napułapkę rozkładu funkcyjnego, diagramy przypadków użycia sąpodatne na tę samą śmiertelną chorobęnadmierna dekompozycja.

📉 Pułapka rozkładu funkcyjnego DFD (podsumowanie):

  • Zespoły ciągle dzielą procesy na coraz mniejsze i mniejsze buble.

  • Diagramy eksplodują w dziesiątki małych, niskopoziomowych funkcji.

  • The pierwotny cel—przekazywanie wartości użytkownikowi—jest utracony.

  • Na końcu wygląda jak kod pseudokodowy lub wewnętrzny projekt algorytmu, a nie zachowanie użytkownika.

🧨 Przypadek użycia „choroba rozkładu funkcyjnego”:

  • Każdy mały krok staje się własnym przypadkiem użycia:

    • Wprowadź nazwę użytkownika

    • Wprowadź hasło

    • Kliknij przycisk logowania

    • Weryfikuj format

    • Wyświetl komunikat o błędzie

  • „include” jest stosowane wolno aby rozłożyć każdą akcję.

  • Wynik: A głęboka hierarchia przypadków użycia (A → B → C → D…) bez jasnego celu aktora.

  • Diagramy stają się niewspółczynnepłynne, i bezwartościowe dla stakeholderów.

❌ Czerwony sygnał: Jeśli diagram przypadków użycia zawiera więcej niż 15–20 przypadków użycia, lub jeśli większość podstawowych przypadków użycia ma długość 2–4 kroków, najprawdopodobniej znajdujesz się w pułapce.


🛠️ Dlaczego to się dzieje: Powszechne pułapki i błędy

Pułapka Wyjaśnienie Jak temu zapobiec
Zbyt częste używanie «include» Traktowanie każdego podkroku jako ponownie użytecznego przypadku użycia. Używaj «include» tylko w przypadku istotnychponownie użytecznychprzecinających zachowań (np. uwierzytelnianie, rejestrowanie).
Pomylenie kierunku strzałek Rysowanie strzałek «include» wstecznie (podstawa ← zawarte) lub strzałek «extend» do przodu. Pamiętaj: include = podstawa → zawarteextend = rozszerzający → podstawa.
Używanie «extend» do alternatyw Modelowanie alternatywnych przejść wewnątrz jednego przypadku użycia jako «extend» zamiast używania alternatyw tekstowych. Użyj tekstowe przepływy alternatywne dla większości wariantów. Zarezerwuj «extend» dla prawdziwe opcjonalne rozszerzenia.
Tworzenie łańcuchów include A → B → C → D → E… Unikaj głębokich łańcuchów. Jeśli potrzebujesz wielu include, rozważ refaktoryzacji do jednego ponownie użytecznego przypadku użycia.
Nieokreślone punkty rozszerzania Dodawanie relacji «extend» bez jasnych, nazwanych punktów wstawienia. Zdefiniuj jawne punkty rozszerzania (np. „Po potwierdzeniu płatności”) w podstawowym przypadku użycia.
Zagmatwane diagramy Zbyt wiele przypadków użycia i relacji → zaszumienie wizualne. Trzymaj diagramy małe, skupione i skierowane na aktora. Użyj wielu diagramów na podsystem.
Zmieszanie stakeholderów Stakeholderzy niebędący specjalistami technicznymi trudno zrozumieć «include/extend». Użyj tekstowe scenariusze lub mapy historii użytkownika dla jasności.
Modelowanie na poziomie projektowania Modelowanie architektury wewnętrznej (np. „wywołaj bazę danych”) zamiast celów użytkownika. Zachowaj skupienie na wartość aktora—nie implementacja.
Bezkończone spory Zespoły spierające się nad „czy include czy extend?” zamiast pisać scenariusze. Użyj praktyczne heurystyki i priorytetem jest jasność zamiast formalizmu.

✅ Najlepsze praktyki dla 2025–2026: nowoczesny, agilny podejście

Landscape inżynierii wymagań uległ zmianie. Zespoły agilne, lean i kierowane produktem stopniowo odchodzą od ciężkich diagramów UML na rzecz lekki, skupiony na wartości technik.

🎯 Podstawowy zasada: Skup się na wartości aktora, a nie na strukturze wewnętrznej

❗ Zadaj to pytanie przed dodaniem dowolnego „include” lub „extend”:
„Czy ta relacja pomaga użytkownikowi zrozumieć cel, czy po prostu rozkłada system?”

✅ Zalecane nowoczesne praktyki:

1. Używaj „include” oszczędnie — tylko dla istotnych, ponownie używanych zachowań

  • Używaj tylko dla kwestie przekrojowe które pojawiają się w wielu przypadkach użycia.

  • Przykłady:

    • Zautoryzuj użytkownika

    • Wyślij powiadomienie e-mail

    • Zarejestruj zdarzenie bezpieczeństwa

    • Zastosuj zasady biznesowe

❌ Unikaj: Wprowadź nazwę użytkownikaKliknij przycisk SubmitWeryfikuj format e-mail

2. Preferuj przepływy tekstowe zamiast «extend»

  • Zamiast:

    «extend»: Wybierz ulubione miejsce → Zarezerwuj lot
    
  • Użyj:

    Przypadek użycia: Rezerwacja lotu
    ...
    Alternatywny przepływ:
      1. Użytkownik wybiera opcję „Ulubione miejsce”.
      2. System wyświetla mapę miejsc.
      3. Użytkownik wybiera miejsce.
      4. System stosuje preferencje dotyczące miejsca.
    

✅ Dlaczego? Przepływy tekstowe są łatwiejsze do odczytaniabardziej elastyczne, i mniej podatne na nieprawidłowe użycie.

3. Zachowaj Diagramy przypadków użycia Małe i skupione

  • Jeden diagram na aktor lub podsystem.

  • Ogranicz do 5–10 przypadków użycia na schemat.

  • Użyj schematy pakietów lub schematy kontekstowe aby pokazać strukturę najwyższego poziomu.

4. Zapytaj: „Czy mapa historii użytkownika przekazałaby to lepiej?”

  • Jeśli używasz 10+ relacji «include»/«extend», rozważ zastąpienie schematu:

    • Za pomocą mapy historii użytkownika

    • Za pomocą tabeli opartej na scenariuszach

    • Za pomocą prostego schematu blokowego z kluczowymi ścieżkami

🔄 Nowoczesna tendencja: Wiele zespołów agilnych ogólnie unikają schematów przypadków użycia lub używają ich tylko do odkrywania na najwyższym poziomie.

5. Użyj «extend» tylko dla znaczących wariantów

  • Zarezerwuj «extend» dlaopcjonalne, niepodstawowecechy, które:

    • rzadko używane

    • zależne od kontekstu

    • niezależneod głównego celu

✅ Przykład:
Przetwarzanie płatności (podstawowe)
Zastosuj uwierzytelnianie 3D Secure (extend) — tylko wtedy, gdy wymaga tego bank

❌ Unikaj:
Wprowadź numer karty → Weryfikuj kartę → Przetwarzanie płatności (wszystkie powinny być krokami w tym samym przypadku użycia)


📊 Podsumowanie: Zasady złote dotyczące «include» i «extend»

Zasada Wskazówki
1. «include» = Obowiązkowe Używaj tylko dlaistotne, ponownie używalnekroków, które pojawiają się w ≥2 przypadkach użycia.
2. «extend» = Opcjonalne Używaj tylko dla warunkowych, zmiennych lub rzadkich zachowań.
3. Podstawowy przypadek użycia musi być kompletny «extend»: podstawa działa samodzielnie. «include»: podstawa jest niepełna bez niej.
4. Zachowaj prostotę Jeśli przypadek użycia ma mniej niż 4–6 kroków po «include»/«extend», został przeszyfrowany.
5. Uważaj na czytelność Scenariusze tekstowe > złożone diagramy.
6. Unikaj łańcuchów Nie A → B → C → D. Przepisz na jeden ponownie używalny przypadek użycia.
7. Znajdź swoich odbiorców Stakeholderzy nie dbają o strzałki «include»—dbają o wartość.
Zapytaj: „Czy to cel użytkownika czy krok wewnętrzny?” Jeśli nie jest celem dla aktora, to prawdopodobnie nie należy do przypadku użycia.

🎯 Ostateczna myśl: Narzędzia, a nie pułapki

«include» i «extend» to potężne narzędzia—nie sztywne zasady. Zostały zaprojektowane w celu:

  • Zmniejszenie powtórzeń

  • Zarządzanie zmienną

  • Ulepszenie utrzymywalności

Ale jak dekompozycja funkcjonalna w DFD, stają się niebezpiecznymi bronią gdy są nadużywane. Prawdziwym niebezpieczeństwem nie są same relacje — to zaniedbanie celu użytkownika.

🔥 Pamiętaj:
Przypadek użycia to nie proces techniczny.
To jestopowieść o tym, co użytkownik chce osiągnąć—i o tym, jak system pomaga.

Jeśli masz wątpliwości, zapytaj siebie:

„Czy użytkownik zrozumie to bez znajomości UML?”
Jeśli nie, uprość.
Jeśli tak, jesteś na dobrej drodze.


📚 Dalsze lektury i odniesienia

  • Specyfikacja UML (OMG)www.omg.org/spec/UML

  • Martin Fowler – Modelowanie przypadków użyciaWzorce analizy & UML zwięźle

  • Ivar Jacobson – Zalety obiektowe: Podstawowa praca nad przypadkami użycia

  • Agile Modeling (AM) przez Scotta W. Amblera

  • Mapowanie historii użytkownika przez Jeffa Pattona – nowoczesna alternatywa dla skomplikowanych diagramów


✅ Zasada jednozdaniowa

Użyj «include» do wymuszonego ponownego użycia, «extend» do opcjonalnej zmiany — ale tylko wtedy, gdy rzeczywiście dodaje wartość. W przeciwnym razie zostaw to proste.

Ponieważ na końcu, celem nie jest rysowanie idealnych diagramów UML—chodzi o budowę systemów, które przynoszą rzeczywistą wartość rzeczywistym ludziom.


📌 Uwaga autora (2025–2026):
Gdy zespoły przechodzą ku centrycznym produktomkierowanym wartością, i kolektywnemu rozwojowi, rola tradycyjnych diagramów UML ewoluuje. «include» i «extend» nadal są przydatne — ale tylko wtedy, gdy używane z umiarem, jasnością i celowością. Niech służyją użytkownikowi, a nie diagramowi.

Sidebar Search
Loading

Signing-in 3 seconds...

Signing-up 3 seconds...