
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» i «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.
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.
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.
„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.
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 istotne, niezbyt proste, i pojawia się w ≥2–3 przypadków użycia.
Definicja:
Relacja «extend» definiujeopcjonalne, warunkowe lub wariantowezachowanie, któreprzyłącza się dokonkretnegopunktu rozszerzeniau podstawowego przypadku użycia.
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ładka, wtyczka, lubporada AOP (programowanie aspektowe)— dodaje zachowanie w określonym punkcie.
„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.
Aby zamodelować alternatywne ścieżki, wyją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.
| 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 |
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.
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.
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ółczynne, pł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.
| 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 istotnych, ponownie użytecznych, przecinają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 → zawarte; extend = 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. |
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.
❗ Zadaj to pytanie przed dodaniem dowolnego „include” lub „extend”:
„Czy ta relacja pomaga użytkownikowi zrozumieć cel, czy po prostu rozkłada system?”
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żytkownika,Kliknij przycisk Submit,Weryfikuj format e-mail
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 odczytania, bardziej elastyczne, i mniej podatne na nieprawidłowe użycie.
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.
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.
Zarezerwuj «extend» dlaopcjonalne, niepodstawowecechy, które:
Sąrzadko używane
Sązależne od kontekstu
Są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)
| 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. |
«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.
Specyfikacja UML (OMG): www.omg.org/spec/UML
Martin Fowler – Modelowanie przypadków użycia: Wzorce 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
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 produktom, kierowanym 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.