Wprowadzenie

Przypadki użycia już opisywałem, między innymi w artykule Paradygmat obiektowy i przypadki użycia, jednak dotyczył on błędów popełnianych przy tworzeniu tych diagramów. Tak więc teraz jak najbardziej sensowne jest odpowiedzieć na kolejne pytanie: skoro nie na diagramie przypadków użycia, to gdzie mają być szczegóły? No i dostałem takiego maila (z oczywistych powodów został zanonimizowany i uproszczony):

Witam, Będę wdzięczny za podpowiedź. Jeśli modelujemy diagram przypadków użycia systemu, gdzie aktorem jest użytkownik back office i jednym z przypadków użycia jest modyfikacja danych klienta. To w jaki sposób najlepiej wyrazić, że w ramach tej modyfikacji można:
1. Zaktualizować imię i nazwisko.
2. Adres.
3. Zgodę na przetwarzanie danych.
Itd.
A) Czy najlepiej stworzyć dedykowany diagram uszczegóławiający poszczególne opcje modyfikacji?
B) Czy na głównym diagramie przypadek użycia z modyfikacja powinien zostać rozszerzony przez extend’y i kolejne przypadki użycia – będzie wtedy dość gęsto bo są też inne przypadki użycia.
C) Możliwe opcje do modyfikacji powinny zostać opisane w formie treści do przypadku użycia związanego z modyfikacją?

Która opcja będzie najbardziej odpowiednia? I znowu odpowiem przykładem.

Biblioteka

W ww. poprzednim swoim artykule przywoływałem już treść specyfikacji UML traktującej o przypadkach użycia. Tu więc od razu przykładowy diagram.

Kontekst i wymagania dla aplikacji dla Biblioteki (opracowanie własne)

Na diagramie widać, że od aplikacji oczekujemy: Kart wypożyczeń, Kart czytelników i Kart indeksowych książek.

Nazwy przypadków użycia to kwestia przyjętej konwencji. Dość często spotykana konwencja to cele aktora (np. zarządzanie wypożyczeniami), jednak jak już swego czasu pisałem, konteksty aktora (często user story) nie są dobre jako nazwa usługi aplikacji, bo bardzo często prowadzą do nieuzasadnionego komplikowania tego diagramu. Osobiście stosuję konwencję opartą na nazwach zestawów informacji (dokument, mock-up ekranu) jakimi aplikacja zarządza (pamiętajmy, że system “nie wie” w jakim celu jest używany, to wie jedynie aktor). Dlatego tu mamy Karty wypożyczeń, a nie osobne: Wypożyczenia i Zwroty, bo zwrot książki polega na wpisaniu daty zwrotu na Karcie wypożyczenia, nie jest to osobny przypadek użycia (!), a kolejny kontekst użycia usługi Karty wypożyczeń. Tak więc aplikacja świadczy usługę (przypadek użycia) Karty wypożyczeń a nie dwie: wypożyczenia książek i zwroty książek, bo to są konteksty aktora (może ich być więcej o czym za chwilę). Pozostałe dwa przypadki użycia analogicznie.

No i teraz pytanie: jak pokazać, że możliwe jest zaktualizowanie określonych danych? Np. wskazane powyżej dodanie daty zwrotu? Musimy mieć makietę Karty wypożyczenia:

Makieta Karty wypożyczenia (tu diagram struktur połączonych UML)

Jak widać to tu właśnie jest miejsce na zapis faktu, że czynność (aktywność w procesie biznesowym) zwrot książki polega na wprowadzeniu daty oddania książki w pole data_zwrotu. Najgorszym pomysłem było by dodanie kolejnego przypadku użycia na diagramie przypadków użycia.

A co np. z wymaganiem: “system powinien pozwalać na naliczanie kar za przetrzymanie książki”. I znowu: najgorszy pomysł to kolejny nowy przypadek użycia: naliczanie kar. Naliczenie kary to wykonanie operacji na polach data wypożyczenia i data zwrotu, oraz zapisanie wyniku w polu kara za przetrzymanie. Realizacja tego wymagania to modyfikacja (uzupełnienie) makiety Karty wypożyczenia, a nie powiększanie diagramu przypadków użycia.Makieta formularza służy właśnie do zapisywania takich szczegółów. Wzór na naliczenie kary zapisujemy osobno jako regułę biznesową, np: “Jeżeli książka nie zostanie zwrócona w czasie określonym przez Regulamin biblioteki, należy naliczyć karę w wysokości określonej przez ten regulamin”. To znaczy, że albo aktor sam nalicza i wpisuje wysokość pobranej kary, albo potrzebny będzie kolejny przypadek użycia (nie ma go na powyższym diagramie), np. Ustawienie parametrów systemu, udokumentowany kolejną makietą, zawierającą między innymi maksymalną liczbę dni wypożyczenia i karę za każdy dzień przetrzymania. To pozwoliło by naliczać kary automatycznie.

Na powyższym diagramie przypadków użycia pokazałem także realizację wymagania “system powinien podpowiadać dane książki po wpisaniu numeru ISBN (detale tego jak sie to odbywa dokumentuje sie w scenariuszu – diagram sekwencji – Dodaj książkę, przypadku użycia Karty Indeksowe Książek, przypominam, że przypadek może mieć więcej niż jeden scenariusz). Kolejne wymaganie: “system powinien kontrolować to, czy czytelnik nie został skreślony z listy studentów” zostało zrealizowane z pomocą integracji z aplikacją Dziekanat w sposób analogiczny jak opis dla ISBN.

A.Cocburn pisze w Hexagonal architecture :

Przypadki użycia i granica aplikacji
Przydatne jest użycie sześciokątnego wzorca architektury, aby wzmocnić preferowany sposób pisania przypadków użycia. Częstym błędem jest pisanie przypadków użycia, które zawierają intymną wiedzę na temat technologii znajdującej się poza każdym portem. Te przypadki użycia zyskały słusznie złą sławę w branży, ponieważ są długie, trudne do odczytania, nudne, kruche i kosztowne w utrzymaniu.Rozumiejąc architekturę portów i adapterów, widzimy, że przypadki użycia powinny być generalnie pisane na granicy aplikacji (wewnętrzny sześciokąt), aby określić funkcje i zdarzenia obsługiwane przez aplikację, niezależnie od technologii zewnętrznej. Te przypadki użycia są krótsze, łatwiejsze do odczytania, tańsze w utrzymaniu i bardziej stabilne w czasie.

https://alistair.cockburn.us/hexagonal-architecture/

Na zakończenie

Tworzenie diagramów np. jak ten:

(źr: Developing a Knowledge-Based Lean Six Sigma Model to Improve Leadership?s Performance in Healthcare Environment)

mija się z celem. Jest to diagram, który nie pomoże developerowi, nie zawiera żadnych istotnych danych, a użycie go do dokonania wyceny np. metodą punktów funkcyjnych czy COSMIC , da w efekcie wysoce zawyżone, nieadekwatne wyniki.

Sposób dokumentowania reguł biznesowych opisałem w artykule: SBVR czyli reguły biznesowe i słownik. a tworzenie makiet formularzy w Wymagania na formularze czyli diagram struktur złożonych.

Pełna dokumentacja systemu dla biblioteki zostanie niebawem umieszczona na blogu. Zapoznaj się także z Dokumentowanie przypadków użycia.

Źrodła

Jarosław Żeliński

Jarosław Żeliński: Od roku 1991 roku, nieprzerwanie, realizuje projekty z zakresu analiz i projektowania systemów, dla urzędów, firm i organizacji. Od 1998 roku prowadzi samodzielne studia i prace badawcze z obszaru analizy systemowej i modelowania (modele jako przedmiot badań: ORCID). Od 2005 roku, jako wykładowca akademicki wizytujący (nieetatowy), prowadzi wykłady i laboratoria (ontologie i modelowanie systemów informacyjnych, aktualnie w Wyższej Szkole Informatyki Stosowanej i Zarządzania pod auspicjami Polskiej Akademii Nauk w Warszawie.) Oświadczenia: moje badania i publikacje nie mają finansowania z zewnątrz, jako ich autor deklaruję brak konfliktu interesów. Prawa autorskie: Zgodnie z art. 25 ust. 1 pkt. 1) lit. b) ustawy o prawie autorskim i prawach pokrewnych zastrzegam, że dalsze rozpowszechnianie artykułów publikowanych w niniejszym serwisie jest zabronione bez indywidualnej zgody autora (patrz Polityki Strony). Konsultacje: wszelka pomoc i wyjaśnienia dotyczące treści artykułów autora bloga udzielana jest wyłącznie w ramach płatnych konsultacji.