Wprowadzenie

Bardzo czę­sto na szko­le­niach, a tak­że na zaję­ciach labo­ra­to­ryj­nych z przed­mio­tu Inżynieria opro­gra­mo­wa­nia, jestem pyta­ny o przy­pad­ki uży­cia i ich sce­na­riu­sze. Szczególnie czę­sto pada pyta­nie czy przy­pa­dek uży­cie repre­zen­tu­je tyl­ko jeden scenariusz. 

Przypadki uży­cia w UML to dzie­ło” Ivara Jacobsona . Pierwotnie było to narzę­dzie do opi­su zewnętrz­nych cech (zacho­wań) sys­te­mu, rozu­mia­nych jako jego ocze­ki­wa­ne zacho­wa­nia, czy­li wyma­ga­nia wobec sys­te­mu. Był to tak zwa­ny opis czar­nej skrzyn­ki”. Problemem było to, że czar­na skrzyn­ka” mówi CO ale nie mówi JAK. Jacobson opi­sy­wał przy­pad­ki uży­cia z pomo­cą warun­ków (sta­nów począt­ko­we­go i koń­co­we­go) oraz tek­sto­wy­mi sce­na­riu­sza­mi. Po włą­cze­niu tego narzę­dzia (typ dia­gra­mu) do nota­cji UML, sta­ło się moż­li­we spe­cy­fi­ko­wa­nie tego JAK to ma być reali­zo­wa­ne w spo­sób bar­dziej sfor­ma­li­zo­wa­ny. Przypadki uży­cia w UML zosta­ły sfor­ma­li­zo­wa­ne a ich doku­men­to­wa­nie w UML (sce­na­riu­sze) reali­zo­wa­ne jest z pomo­cą sko­ja­rzo­nych z nimi dia­gra­mów sekwen­cji, a cza­sa­mi w począt­ko­wych eta­pach pro­jek­to­wa­nia, dia­gra­mem aktyw­no­ści (poglą­do­we opi­sy celowościowe).

Jacobson, podob­nie jak A. Cockburnem , nadal roz­wi­ja przy­pad­ki uży­cia (meto­dę) nie­za­leż­nie od UML i OMG​.org, jako swo­ją kon­cep­cję Use Case 2.0 . Zamykając się na sce­na­riu­szach i zwin­nych meto­dach ich opi­su. Jednak nawet on nadal wska­zu­je, że jeden przy­pa­dek uży­cia ma (może mieć) warian­ty. Poniżej frag­ment jed­nej z jego póź­niej­szych publikacji:

W czym pro­blem i o co ludzie kru­szą kopie?

Co mówi specyfikacja notacji UML

Popatrzmy na aktu­al­ną spe­cy­fi­ka­cję nota­cji UML:

18.1.3 Semantyka
18.1.3.1 Przypadki uży­cia i akto­rzy
Przypadek uży­cia może odno­sić się do dowol­nej licz­by akto­rów. UseCase okre­śla zestaw zacho­wań reali­zo­wa­nych przez opi­sy­wa­ny wyma­ga­nia­mi przed­miot (sys­tem), któ­re dają obser­wo­wal­ny wynik, war­to­ścio­wy dla powią­za­nych z nim Aktorów.
Każdy UseCase okre­śla pew­ne zacho­wa­nie, któ­re sys­tem może wyko­nać we współ­pra­cy z jed­nym lub więk­szą licz­bą akto­rów. UseCase defi­niu­je ofe­ro­wa­ne Zachowania sys­te­mu bez odnie­sie­nia do jego wewnętrz­nej struk­tu­ry. Zachowania te, obej­mu­ją­ce inte­rak­cje mię­dzy Aktorami i sys­te­mem, mogą skut­ko­wać zmia­na­mi jego sta­nu i komu­ni­ka­cją z jego oto­cze­niem. UseCase może zawie­rać moż­li­we warian­ty swo­je­go pod­sta­wo­we­go zacho­wa­nia, w tym wyjąt­ko­we zacho­wa­nie i obsłu­gę błędów.

Co wyni­ka z powyż­sze­go? Co zna­czą ozna­czo­ne (pogru­bie­nia moje) fragmenty:

  1. (jeden) Przypadek Użycia to zestaw zacho­wań, więc jest moż­li­we, że jest ich wię­cej niż jed­no dla jed­ne­go Przypadku Użycia.
  2. Dają one jed­nak (Przypadki Użycia, każ­dy) jeden okre­ślo­ny efekt (wynik), bo Przypadek Użycia to ocze­ki­wa­ny cel a nie moż­li­wy wariant. 
  3. Przypadki uży­cia (dia­gram) to nie jest model wewnętrz­nej archi­tek­tu­ry systemu.

Ta defi­ni­cja Przypadku Użycia (seman­ty­ka to defi­ni­cje) poka­zu­je, że UML bar­dziej for­mal­nie trak­tu­je przy­pad­ki uży­cia niż Jacobson czy Cockburn. Diagram Przypadków Użycia jest spi­sem tre­ści” pozo­sta­łej spe­cy­fi­ka­cji systemu. 

W kon­se­kwen­cji przy­pad­kiem uży­cia (celem akto­ra) będzie np. Faktura (jej utwo­rze­nie), i jak nie trud­no się domy­śleć tak­że jej zacho­wa­nie i łatwe przy­wo­ła­nie w przy­szło­ści. To, że mając taką usłu­gę moż­na spraw­dzić co sprze­da­no, kie­dy, moż­na spraw­dzić wcze­śniej­szy (histo­rycz­ny) adres nabyw­cy (bo mamy dostęp do histo­rycz­nych fak­tur) itp. to moż­li­wo­ści jakie ma tu aktor, a nie kolej­ne przy­pad­ki uży­cia. Owszem, Faktura ma struk­tu­rę, regu­ły wali­da­cji, pra­wa dostę­pu, i to wła­śnie jest reali­zo­wa­ne przez wewnętrz­ne kom­po­nen­ty sys­te­mu (inne, powią­za­ne z przy­pad­ka­mi uży­cia dia­gra­my).

Kwestie tego cze­go i jak użyć w mode­lo­wa­niu dowol­ne­go sys­te­mu bar­dzo porząd­ku­je SysML, któ­ry jest pro­fi­lem UML. Z per­spek­ty­wy mode­lo­wa­nia sys­te­mu mamy trzy per­spek­ty­wy do opisania:

Bajaj, M., Cole, B., & Zwemer, D. (2016, September 13). Architecture To Geometry – Integrating System Models With Mechanical Design. AIAA SPACE 2016. AIAA SPACE 2016, Long Beach, California. https://​doi​.org/​1​0​.​2​5​1​4​/​6​.​2​016 – 5470

Patrząc na to jakich dia­gra­mów uży­wa­my i do cze­go, moż­na zbu­do­wać taki model pojęciowy:

UML: dia­gra­my i ich zasto­so­wa­nie, model poję­cio­wy (opr. wła­sne autora)

Tak więc:

  1. dia­gram przy­pad­ków uży­cia poka­zu­je wyłącz­nie to, komu i do cze­go sys­tem może posłużyć,
  2. sce­na­riu­sze opi­su­ją jak wyglą­da to uży­cie z per­spek­ty­wy inte­rak­cji aktor-system,
  3. archi­tek­tu­ra sys­te­mu poka­zu­je na jakie czę­ści (kom­po­nen­ty) podzie­lo­no ten system,
  4. sekwen­cje poka­zu­ją współ­dzia­ła­nie tych ele­men­tów w toku reali­za­cji ww. scenariuszy,
  5. ope­ra­cje (nazwy metod) są doku­men­to­wa­ne jako algo­ryt­my i procedury,
  6. klu­czo­wym ele­men­tem sys­tem jest prze­twa­rza­na treść (struk­tu­ra for­mu­la­rzy i komu­ni­ka­tów), jest ona ele­men­tem archi­tek­tu­ry sys­te­mu, gdyż są to dane prze­cho­wy­wa­ne, a może to robić (prze­cho­wy­wa­nie) tyl­ko jakiś okre­ślo­ny komponent.

Tak więc poka­za­na wyżej kost­ka” to zestaw powią­za­nych dia­gra­mów. Diagramy te do cze­goś służą”. 

Podsumowanie

Ten krót­ki arty­kuł to uzu­peł­nie­nie wcze­śniej­szych arctykułów:

  1. Diagramy w nota­cji UML,
  2. Diagram przy­pad­ków uży­cia UML.
  3. Modelowanie archi­tek­tu­ry HLD i LLD.

Generalnie poję­cie przy­pad­ku uży­cia i dekla­ra­cja ich uży­cia to umo­wa. Jednak jeże­li już ktoś uma­wia się”, że uży­wa UML”, to powi­nien sto­so­wać się do umo­wy” opi­sa­nej w spe­cy­fi­ka­cji UML. Jeżeli czy­iś Model Przypadków Użycia UML nie da się w spo­sób spój­ny i kom­plet­ny kon­ty­nu­ować jako kolej­ne pod­le­głe, spój­ne i kom­plet­ne mode­le, to jest to Zły Model Przypadków Użycia UML.

Jeżeli wiec ktoś popeł­ni coś takiego:

lub cos takiego:

To fak­tycz­nie lepiej niech tego nie robi… bo w spe­cy­fi­ka­cji UML jako popraw­ny przy­kład znaj­dzie­my np. to:

Źródła

Cockburn, A. (2000). WRITING EFFECTIVE USE CASES. 113.
Jacobson, I., & Cockburn, A. (2023). Use Cases are Essential: Use cases pro­vi­de a pro­ven method to cap­tu­re and expla­in the requ­ire­ments of a sys­tem in a con­ci­se and easi­ly under­sto­od for­mat. Queue, 21(5), 66 – 86. https://​doi​.org/​1​0​.​1​1​4​5​/​3​6​3​1​182
Object Management Group. (2017, December). Unified Modeling Language (UML) [OMG​.org]. UML. https://​www​.omg​.org/​s​p​e​c​/​U​ML/

Jarosław Żeliński

Jarosław Żeliński: autor, badacz i praktyk analizy systemowej organizacji: 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 nieetatowy wykładowca akademicki, 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).

Ten post ma 2 komentarzy

  1. Michał Stachura

    Opisany w defi­ni­cji UseCase okre­śla zestaw zacho­wań” odczy­tu­ję jako opis dzia­ła­nia skom­pli­ko­wa­ne­go” czar­ne­go pudeł­ka reali­zu­ją­ce­go zapis i obrób­kę wpro­wa­dzo­nych danych wej­ścio­wych przez róż­nych aktorów.
    Zakładam, że spro­wa­dze­nie for­mu­la­rzy do jak naj­prost­szych form osta­tecz­nie reali­zo­wa­ło­by jeden sce­na­riusz, nie­za­leż­nie od tego ilu ludzi by go wypeł­nia­ło… Tak wiem na koń­cu przy­cho­dzi użyt­kow­nik i w polu Podaj plik pdf” załą­cza pdf.docx ale to już wali­da­cja powin­na odrzu­cić, unie­moż­li­wia­jąc reali­za­cję UseCase nasze­go czar­ne­go pudełeczka 🙂

    1. Jarosław Żeliński

      Czarna skrzyn­ka to pudło mają­ce w menu jakieś usłu­gi do wybo­ru. Wewnętrzna zło­żo­ność to stos metod (pro­ce­du­ry, algo­ryt­my), np. jako jeden stos funk­cji, albo podzie­lo­ny na kom­po­nen­ty. Stos funk­cji będzie serią pole­ceń wśród któ­rych będą if .. then …” i go to”. Jeżeli jed­nak podzie­li­my ten wiel­ki stos funk­cji na odpo­wied­nio dobra­ne kawał­ki, nada­my im nazwy i pozwo­li­my na wysy­ła­nie komu­ni­ka­tów mię­dzy nimi, otrzy­ma­my kom­po­nen­to­wą (obiek­to­wą) archi­tek­tu­rę kodu.

      Sprowadzenie for­mu­la­rzy do jak naj­prost­szych form” to chy­ba jeden z naj­gor­szych pomy­słów. One powin­ny być real­ny­mi dla ludzi (akto­rów) byta­mi taki­mi jak Faktura, Zamówienia, Profil Klienta. Dzięki temu przy­szły użyt­kow­nik w zasa­dzie nie musi sie nicze­go nowe­go uczyć, bo jedy­nie prze­cho­dzi z papie­ru na moni­tor”. Jednak nie­wąt­pli­wie koniecz­na jest wery­fi­ka­cja tre­ści tych for­mu­la­rzy, bo na papie­rze czę­sto uży­wa się rze­czy zbęd­nych, nad­mia­ro­wych, a nie raz bywa, że fak­tycz­nie nie­lo­gicz­nych (ktoś sobie coś kie­dyś wymy­ślił). Np. Faktura z dodru­kiem aktu­al­ne­go sal­da klien­ta (bar­dzo kiep­ski pomysł bo mie­sza dzie­dzi­ny i strasz­nie kom­pli­ku­je kod gere­ne­ru­ją­cy te fakturę).

      Wystawienie Faktury to np. 1. sce­na­riusz two­rze­nia jej od zera, 2. sce­na­riusz two­rze­nia na bazie zmó­wie­nia (jeśli takie ist­nie­je), ale w obu przy­pad­kach powsta­je taka sama fak­tu­ra z taką samą jej wali­da­cją i lądu­je w tym samym repozytorium.

      wali­da­cja powin­na odrzu­cić, unie­moż­li­wia­jąc reali­za­cję UseCase nasze­go czar­ne­go pude­łecz­ka 🙂” i po to są wali­da­cje by sys­tem był głupoto-odporny 🙂

Dodaj komentarz

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.