====== Zadanie 2 Przypadki użycia ====== Przypadki użycia są podstawowym narzędziem **specyfikacji wymagań**. Opisują one funkcjonowanie systemu z punktu widzenia jego użytkowników lub zewnętrznych systemów (zazwyczaj jako czarną skrzynkę): //Przypadek użycia to specyfikacja ciągów akcji i ich wariantów, które system lub inna jednostka może wykonać poprzez interakcję z aktorem tego sytemu, który prowadzi do obserwowalnego rezultatu, zazwyczaj mającego wartość dla jednego lub kilku aktorów lub innych udziałowców systemu// Przypadki użycia definiują scenariusz określający w jakiej kolejności są przesyłane dane i zdarzenia pomiędzy obiektami na zewnątrz systemu (użytkownikami, interfejsami) a systemem. ===== Do wykonania ===== - Przeczytaj [[http://home.agh.edu.pl/~pszwed/pub/uml/pszwed-use-case.pdf|krótki tekst o przypadkach użycia]] i [[http://home.agh.edu.pl/~pszwed/wiki/doku.php?id=amo:zadanie_2#relacje_pomiedzy_przypadkami_uzycia|uzupełnienie dotyczace relacji]] - Narysuj diagram przypadków użycia dla wybranego wcześniej projektu. - Opcjonalnie: w przypadku mniejszych projektów zaproponuj rozszerzenie funkcjonalności. Np.: dodaj administrację użytkownikami, generowanie i przeglądanie raportów sprzedaży lub podobne funkcje tak, aby system miał co najmniej kilka (5-10) przypadków użycia. - Dla trzech przypadków użycia napisz dokładne scenariusze posługując się [[amo:use_case_template|szablonem opisu przypadku użycia]] oraz wzorcami zamieszczonymi we [[http://home.agh.edu.pl/~pszwed/pub/uml/weuc0002extract.pdf|fragmencie książki Alistaira Cocburna Writting Effective Use Cases]] na str. 23. ^Opcjonalny element dokumentacji^^ |**Graficzny interfejs użytkownika**|Schematyczny projekt interfejsu użytkownika (dialogi, formularze) pozwala pozostałym udziałowcom (właścicielom, użytkownikom końcowym) na ocenę projektowanego interfejsu oraz weryfikację danych wejściowych i wyjściowych. | ===== Uwagi i uzupełnienia ===== ==== Związki przypadków użycia z modelem dziedziny ==== Wiele przypadków użycia można zidentyfikować analizując model dziedziny i odpowiadając na pytania: jakie dane system będzie przetwarzał. Np. dla biblioteki zapewne będzie to *definiowanie książek (w tym dodawanie, edycja, usuwanie) *definiowanie egzemplarzy *definiowanie czytelników *rejestrowanie wypożyczeń *rejestrowanie zwrotów //Definiowanie// jest popularną nazwą dla przypadku użycia obejmującego tzw. operacje CRUD (Create, Read, Update, Delete). Zazwyczaj główny przebieg to //dodawanie//, alternatywne to pozostałe operacje. ==== Biznesowe i systemowe przypadki użycia ==== * **Biznesowe przypadki użycia** definiują funkcjonowanie organizacji i świadczone przez nią usługi na rzecz zewnętrznych aktorów. Zawierają często czynności manualne. **Ich specyfikacja nie jest celem zadania.** * **Systemowe przypadki użycia** opisują interakcje aktorów z systemem informatycznym. Nie ma tu czynności manualnych. Dodatkowo, bardzo często aktor biznesowy nie jest aktorem systemowym, bo nie ma dostępu do funkcji systemu. Więcej - na początku tekstu [[http://home.agh.edu.pl/~pszwed/pub/uml/Antywzorce.pdf|Antywzorce w stosowaniu UML]] ==== Relacje pomiędzy przypadkami użycia ==== Pomiędzy przypadkami użycia mogą zachodzić relacje oznaczane <> i <> * **Include** -- wyobraźmy sobie, że piszemy przypadki użycia dla systemu aukcji internetowych. Dla części przypadków użycia (licytacja, komentarze, przesyłanie poczty) konieczne jest logowanie. Zamiast powtórzyć za każdym razem w scenariuszu kilka kroków logowania, możemy wyodrębnić przypadek użycia "Logowanie" i powiedzieć, że wołamy go w punkcie x lub y. Alternatywnie, możemy podać prewarunek: użytkownik musi być zalogowany. Nie warto tworzyć przypadku użycia, który miałby być włączony tylko jeden raz! * **Extend** -- jeżeli mamy dwa podobne przypadki, różniące się np.: w kilku punktach scenariusza możemy zdefiniować przypadek rozszerzający: Np. dla przykładu //Budzik -- Ustawianie daty i czasu// zamiast: 3 ustawianie daty za pomocą klawiszy góra dół -- wprowadzamy datę za pomocą klawiszy numerycznych Dalsze przykłady można znaleźć w literaturze. Relacje to dobry temat na egzamin, ale nie należy ich nadużywać. Proszę zajrzeć do [[http://home.agh.edu.pl/~pszwed/pub/uml/Antywzorce.pdf|Antywzorców]] ==== Dane ==== Przypadki użycia definiują wymagania stawiane systemowi, są powszechnie akceptowane jako metoda komunikacji z klientem i są źródłem testów i podstawą do akceptacji gotowego systemu. Naturalne jest, że klient zatwierdzając przypadek użycia jest także zainteresowany przesyłanymi danymi i ich kompletnością i spójnością. //Zazwyczaj definiowanie przypadków użycia następuje PO etapie analizy dziedziny (określenie klas i ich powiązań). W naszym przypadku tę rolę ma pełnić ERD oraz specyfikacje przepływów danych.// Dlatego należy unikać ogólników: 1. Pracownik wprowadza dane 2. System po weryfikacji zapisuje dane w bazie Lepiej: **Scenariusz główny** 1. Pracownik wprowadza dane klienta (imię, nazwisko, datę urodzenia, numer pesel, adres) 2. System weryfikuje dane. 3. System dodaje klienta do bazy klientów **Scenariusz alternatywny** 2.a. Klient o danym numerze pesel jest już w bazie 2.a.1 System wyświetla komunikat, że użytkownik o danym numerze pesel istnieje i pyta czy zmodyfikować dane 2.a.2 Pracownik potwierdza 2.a.3. System zapisuje zmodyfikowane dane w bazie klientów; przypadek użycia kończy się 2.a.2.a Pracownik wybiera opcję ponownej edycji danych 2.a.2.a.1 System ponownie wyświetla formatkę wypełnioną danymi. Pole pesel jest puste. 2.a.2.a.2 Następuje powrót do punktu (1) scenariusza głównego 2.b. Brak zgodności numeru pesel i daty urodzenia .... itd. ==== Typowe błędy ==== Definiując przypadki użycia należy wystrzegać się: *zbyt dużej ich liczby (np. system realizowany przez kilkadziesiąt osobomiesięcy może mieć około 100 przypadków użycia, więc osiągnięcie podobnej liczby dla małego systemu jest co najmniej niepokojące) *definiowanie ich przez dekompozycję. Możemy mieć grupę przypadków użycia Administracja użytkownikami, ale nie jest to przypadek użycia, który włącza (czytaj: dekomponuje się na) dodaj/usuń/modyfikuj *nadużywania relacji. Relacje ładnie wyglądają na diagramie, ale czasem zaciemniają scenariusze. Nie należy definiować przypadku użycia tylko po to, aby go włączyć jeden raz. *przenoszenia interfejsu graficzny, zwłaszcza opcji menu na przypadki użycia *definiowania przypadków użycia praktycznie bez scenariusza (użytkownik wybiera zapisz, system zapisuje plik) Oznacza to, że albo przypadek jest źle dobrany do stopnia szczegółowości specyfikacji, albo nasza wyobraźnia jest zbyt mała (nie uwzględniliśmy scenariusza, gdy plik istnieje, gdy nie da się zapisać, gdy plik o tej samej nazwie jest otwarty, itd.) ===== Linki i literatura ===== -Cockburn Alistair Jak pisać efektywne przypadki użycia -Schneider Geri, Winters Jason P. Stosowanie przypadków użycia -[[http://home.agh.edu.pl/~pszwed/pub/uml/weuc0002extract.pdf|Fragment książki Alistaira Cocburna Writting Effective Use Cases]] -[[http://home.agh.edu.pl/~pszwed/pub/uml/pszwed-use-case.pdf|Wykład - przypadki użycia]] -[[http://home.agh.edu.pl/~pszwed/pub/uml/Antywzorce.pdf|Antywzorce w stosowaniu UML]] :!: Koniecznie należy przeczytać - Booch G.,Rumbaugh J.,Jacobson I.:The Unified Modeling Language User Guide.Addison-Wesley, 1998, tłum. Na język polski: UML przewodnik użytkownika. WNT 2001 - Stanisław Wrycza, Bartosz Marcinkowski, Krzysztof Wyrzykowski: UML 2.0 w modelowaniu systemów informatycznych, Helion -[[http://home.agh.edu.pl/~pszwed/pub/uml/refman.pdf|UML Reference Manual (1.0)]] -[[http://home.agh.edu.pl/~pszwed/pub/uml/omguml.pdf|Specyfikacja OMG UML]]