Wstęp

Napisałem o orientacji na dokumenty w toku analiz:

Często jestem i ja pyta­ny o to ??Jak wyja­śnić zło­żo­ne roz­wią­za­nie tech­nicz­ne inte­re­sa­riu­szom nie­tech­nicz­nym?? Jak wie­lu mi podob­nych odpo­wia­dam: roz­ma­wiaj doku­men­ta­mi. Sponsor pro­jek­tu, przy­szli użyt­kow­ni­cy, postrze­ga­ją swo­ją pra­cę poprzez doku­men­ty: ich treść i układ. (Wymagania na formularze czyli diagramy struktur złożonych i XML)

Dzisiaj pójdziemy dalej, omówimy to gdzie i jak zachować tę informację. Posłużę się prostym przykładem przychodni weterynaryjnej. Artykuł będzie opisem metody podejścia do analizy zorientowanej na procesy i dokumenty.

Tekst ma dwie części: pierwsza jest opisem drogi jaka prowadzi nas do zdefiniowania tego jakie dokumenty, jaką mają (mieć) zawartość i strukturę. Praktycznie jest to opis analizy i projektowania. Druga – krótka – to przykładowa architektura logiki realizacji aplikacji, pokazująca miejsce dokumentowej bazy danych w architekturze i projekcie, czyli także projektowanie.

Celem tego wpisu jest pokazanie czym może być analiza oraz jej produkt jakim jest Techniczny Projekt Oprogramowania.

Przychodnia weterynarzy – analiza

Mam nadzieję, że to jak działa przychodnia weterynaryjna (Przychodnia), czytelnik jest w stanie sobie wyobrazić. Jeżeli nie, polecam lekturę regulaminu jakiejkolwiek tego typu przychodni, np. ten Regulamin. Ale od razu zaznaczam, że w przypadku realnego projektu należy od tego zacząć. Wywiady z pracownikami nie mają większego sensu, często wprowadzają w błąd. Analizę należy zacząć od analizy faktów czyli od zebrania partii przykładowych kart wizyt, regulaminów i zarządzeń, możliwe, że jest prawo regulujące tego typu usługi (a tu jest, parz USTAWA z dnia 18 grudnia 2003 r. o zakładach leczniczych dla zwierząt) .

Model procesu opisującego podstawową działalność przychodni wygląda tak:

Proces biznesowy obsługi klientów Przychodni (model analityczny, BPMN)

Zgłoszenie się pacjenta powoduje wystawienie Karty Wizyty, która jako planowana wizyta w przyszłości, stanowi sobą rezerwację terminu. Od tego momentu “zegar tyka”.

Jeżeli w Przychodni pojawi się Opiekun zwierzęcia, realizowana jest standardowa porada weterynaryjna. Jeżeli ktoś zgłosi odwołanie wizyty zostanie ona odwołana (ale jako dokument Karta Wizyty pozostanie w systemie ze statusem ‘odwołana’).

Zwracam uwagę, że zmiana terminu wizyty to odwołanie planowanej wizyty i nowa rezerwacja (takie podejście znakomicie upraszcza cały system, a dodatkowo zyskujemy dane do ewentualnych statystyk rzetelności klientów).

Zapewne większość biznesu (praca na user story, wywiady itp.) będzie oczekiwała możliwości edytowania Kart Wizyt i jest to własnie najgorsze rozwiązanie. To dlatego nie słucham pomysłów klientów na system, oczekuję wyłącznie opisu celu danej aktywności, a ta brzmi (powinna) raczej “chciał bym mieć możliwość przełożenia wizyty”, a nie “chce mieć możliwość edycji pola ‘termin wizyty'”. Jeżeli termin wizyty nadejdzie a opiekun sie nie pojawi, wizyta zostanie oznaczona statusem ‘zignorowana’.

Z uwagi na to, że nie umieszczamy na analitycznych modelach procesów biznesowych, opisów wypełniania formularzy czy detalicznych procedur, konieczny jest szablon dokumentu skojarzony z elementem Karta Wizyty (BPMN: DataObject). Jak już wspominałem w innym artykule, można do tego celu zastosować notację UML i diagram struktur złożonych (a dla użytkowników oprogramowania CASE jest to rekomendacja):

Struktura formularza Karta Wizyty (diagram struktur złożonych, UML)

Taka forma dokumentowania ma dwie podstawowe zalety: jest zrozumiała dla zamawiającego oraz stanowi poprawny diagram klas, użyteczny na dalszych etapach analizy i projektowania.

Powyższy formularz jest także najlepszym miejscem do pokazywania i realizacji wymagań biznesowych. Np. wymaganie “System powinien pozwalać na generowanie statyk rzetelności klientów” skutkuje polem status oraz słownikiem (w dalszej części) wartości tego pola (będzie zawierał między innymi wartość ‘zignorowana’). Tu ważna informacja:

to analityk projektant, a nie developer, ma zagwarantować (jeżeli planowane jest oprogramowanie dedykowane) realizację wymagań funkcjonalnych!

Powyższy formularz Karta Wizyty na “tradycyjnym” diagramie klas, wzbogaconym o typy danych wygląda tak:

Struktura Karty Wizyty i typów atrybutów (diagram klas, UML)

Tu jest miejsce na definiowanie typów zawartości atrybutów. Osobiście jestem gorącym zwolennikiem stosowania atrybutów ‘string’ (tekst ASCII) i definiowania struktur typów złożonych, co daje całkowitą niezależność od platformy implementacji i jednocześnie 100% panowanie nad logiką realizowaną w aplikacji. Atrybut ‘status’ opisujemy modelem maszyny stanowej UML:

Statusy Karty Wizyty (maszyna stanowa, UML)

Logikę biznesową definiujemy jako reguły biznesowe, np.:

zestaw danych ‘data wizyty’, ‘slot czasowy’, ‘weterynarz’ i ‘gabinet’, musi być unikalny

(można też taki zestaw nazwać i modelować jako samodzielny typ strukturalny, co pewnie było by bardziej eleganckie). Generalnie wszystkie nazwy dokumentów, atrybutów i ich wartości, powinny być zebrane w jednolitym słowniku pojęć. Bazując na tych (słownikowych) pojęciach budujemy reguły biznesowe jak wyżej (patrz: SBVR). Dzięki temu cała logika jest kompletna, spójna, niesprzeczna. Słownik pojęciowy dobrze jest opracować (przy najmniej jego kluczową część) jako model, co pozwoli testować go na okoliczność spójności i niesprzeczności:

Przestrzeń pojęciowa Przychodni (diagram faktów, SBVR, lub diagram klas UML)

Tu ważna uwaga: to (powyższy diagram) nie jest żaden model dziedziny systemu! To “namespace” (przestrzeń pojęciowa) wyrażona jako taksonomie pojęć. Służy ona to definiowania nazw atrybutów i ich wartości na modelach struktur dokumentów. Np. ‘zwierze domowe’ to atrybut Karty Wizyty, a jego specjalizacje to materiał na słownik wartości tego atrybutu: tu potencjalnie mamy dwa atrybuty: ‘gatunek’ i ‘waga’ (patrz diagram Struktura Karty Wizyty i typów atrybutów), specjalizacje tych pojęć to materiał na wartości tych atrybutów. Model pojęciowy to element modelu CIM. Jest to najważniejszy etap projektu. Z zasady jest to pierwszy etap, tu wspominam o nim dopiero teraz, by pokazać źródło nazw atrybutów i ich wartości .

Jak bezpiecznie realizować zmianę terminu lub anulowanie wizyty? Procedura anulowania wizyty:

1. identyfikacja karty wizyty (numer wizyty)
2. anulowanie wizyty (zmiana statusu)
Procedura

Nie chcemy np. przez telefon żądać danych osobowych, w samym gabinecie żądać dowodów tożsamości. Sprawdzonym rozwiązaniem jest stosowanie długiego losowego unikalnego numeru Karty Wizyty (atrybut ‘numer wizyty’). Dzięki temu staje się on niejako hasłem/kodem, które zna wyłącznie Przychodnia i Opiekun (dowiaduje się o nim w momencie rezerwacji).

Zakres projektu i projekt

Przypadki użycia to usługi aplikacji, nie są to ani procesy ani aktywności! Dlatego tu diagram ten wygląda tak:

Zakres projektu (diagram przypadków użycia, UML)

Jak widać, są tu trzy przypadki użycia, ten artykuł jest, z racji objętości, fragmentem większej całości. Generalnie przypadki użycia, jako usługi aplikacji, oferują wsparcie dla aktora np. pracownik recepcji (znający procedury) korzysta z usługi (opcja menu aplikacji) Karty Wizyt. Wszystkie aktywności w opisanym procesie są realizowane z użyciem tej samej usługi aplikacji!

Przypadki użycia dokumentujemy z pomocą scenariuszy. Kolejna rekomendacja: zamiast rozbudowanych scenariuszy z alternatywnymi krokami, znacznie lepszym rozwiązanie jest budowanie prostych scenariuszy alterntywnych:

1. Recepcja inicjuje Karty Wizyt
2. SYSTEM wyświetla formularz Karta Wizyty
3. Recepcja wprowadza dane do formularza Karta Wizyty i naciska Zapisz (reguła: Duplikowanie wizyt)
4. SYSTEM wyświetla Karta Wizyty i ewentualne komunikaty
Scenariusz: nowa wizyta

zaś drugi scenariusz:

1. Recepcja inicjuje Karty Wizyt
2. SYSTEM wyświetla formularz Karta Wizyty
3. Recepcja wprowadza dane do pola numer wizyty formularza Karta Wizyty i naciska Szukaj
4. SYSTEM wyświetla wypełniony formularz Karta Wizyty lub komunika o braku karty
5. Recepcja zmienia status formularza Karta Wizyty i naciska Zapisz
6. SYSTEM wyświetla zachowany formularz Karta Wizyty i ewentualne komunikaty
Scenariusz: odwołanie wizyty

Dzięki temu scenariusze są łatwe do zrozumienia i implementacji, łatwe do zmian w przyszłości (nie są od siebie zależne). W scenariuszach należy używać nazw z diagramów (nazwy aktorów, formularzy i ich atrybutów) i słownika (patrz także Dokumentowanie Przypadków Użycia)

Ostatecznie architektura realizacji tej usługi, jako model dziedziny (komponent Model we wzorcu MVC) ma postać (wykorzystano wzorzec projektowy BCE, można użyć także DDD, ):

Model architektury realizacji usługi aplikacyjnej (wzorzec BCE, diagram klas, UML)

Jest to architektura realizacji pojedynczej usługi aplikacyjnej (przypadku użycia). Była na tym blogu nie raz opisywana (np. https://it-consulting.pl//2019/10/22/generator-ofert-komentarze/).

I teraz najważniejsze: repozytorium Karty Wizyt to właśnie dokumentowa baza danych. Cała Karta Wizyty jest wartością jednego atrybutu ‘karta wizyty’ klasy ‘Karty Wizyt’. Pozostałe atrybuty tej klasy (tu jeden) służą wyłącznie do obsługi wyszukiwania dokumentów i jak najbardziej mogą to być (nie muszą) powtórzone elementy treści tego dokumentu ).

Gdybym doprowadził powyższy model do końca (będzie to kolejny artykuł), był by to właśnie Model Dziedziny aplikacji w rozumieniu wzorca MVC.

Podsumowanie

Dokumentowe bazy danych mają wiele zalet (np. wydajność) ale zaletą, która czyni jest na prawdę “hitem” jest możliwość całkowitej rezygnacji z modelu relacyjnego i języka SQL, co w efekcie daje ogromne uproszczenie implementacji. “Wyciągnięcie” z repozytorium nawet bardzo skomplikowanego strukturalnie dokumentu, realizujemy tu jednym bardzo prostym poleceniem. Identyczna operacja w modelu relacyjnym będzie wymagała nie raz monstrualnego, trudnego do testowania, zapytania SQL .

Bazy dokumentowe “nie boją się redundancji”, więc zmiany atrybutów nie przeniosą się na inne dokumenty. Architektura jak wyżej, jest całkowicie odporna na zmieniające się struktury kolejnych egzemplarzy dokumentów. Cała logika ich walidacji jest poza repozytorium. Repozytoria są w 100% hermetyzowane, żadne informacje nie są współdzielone między dokumentami (dlatego też ewentualna modyfikacja jednego dokumentu nigdy nie przeniesie sie na inne). . Posłużyłem się formatem XML jako przykładem, ale nie musi tak być, bardzo często wykorzystywany jest JSON, ale te detale to decyzja developera w toku implementacji. Model ten także doskonale wpisuje się w środowiska chmurowe takie jak AWS czy AZURE (można także wykorzystać repozytoria obiektowe).

Implementacja wyżej opisanej architektury jest bardzo łatwa w postaci mikroserwisów . Całość projektu spełnia zasady OCP (Open Close Principle, system jest otwarty na rozszerzenia i zamknięty na zmiany).

Kiedy bazy SQL? Hurtownie Danych, BigData i wiele podobnych wymagających przetwarzania danych a nie tylko archiwizowania. Wszędzie tam, gdzie taka potrzeba sie pojawia, efektywnym rozwiązaniem jest hurtownia danych i proces ETL pobierający dane z bazy dokumentowej, lub architektura oparta na wzorcach CQRS/Event Sourcing .

A to co tu opisano to standardowy proces analizy i projektowania MDA/MDE. Powstaje najpierw model CIM, potem PIM. A całość jako Opis Techniczny Oprogramowania jest chronionym know-how, jego implementacja jest dziełem zależnym. Wartości intelektualne zamawiającego są w 100% chronione, bo developer nie ma żadnych praw do implementacji jaką wykonał (ma prawa autorskie osobiste a nie majątkowe).

Chcesz wiedzieć dlaczego tak: zapoznaj się z opisem: Analiza systemowa jako metoda analizy i projektowania

Źródła

Papamarkos, G., Zamboulis, L., & Poulovassilis, A. (2015). Xml Databases. School of Computer Science and Information Systems, Birkbeck College, University of London. http://www.dcs.bbk.ac.uk/~sven/adm08/xmlDBs.pdf
Zelinski, J. (2020). Synthesis of MOF, MDA, PIM, MVC, and BCE Notations and Patterns. In Applications and Approaches to Object-Oriented Software Design: Emerging Research and Opportunities (pp. 78–89). IGI Global. https://www.igi-global.com/book/applications-approaches-object-oriented-software/235699
Pacheco, V. F. (2018). Microservice Patterns and Best Practices: Explore patterns like CQRS and event sourcing to create scalable, maintainable, and testable microservices. Packt Publishing Ltd.
Kitchenham, B. A., Dybå, T., & Jørgensen, M. (2004). Evidence-based Software Engineering. Th International Conference on Software Engineering, 9.
Truica, C.-O., Radulescu, F., Boicea, A., & Bucur, I. (2015). Performance evaluation for CRUD operations in asynchronously replicated document oriented database. 2015 20th International Conference on Control Systems and Computer Science, 191–196.
WÓJCIK, A. (2014). NIERELACYJNE BAZY DANYCH. Zeszyty Naukowe WSEI Seria: TRANSPORT I INFORMATYKA, 4(1).
van Sinderen, M., & Johnson, P. (Eds.). (2011). Enterprise Interoperability: Third International IFIP Working Conference, IWEI 2011, Stockholm, Sweden, March 23-24, 2011. Proceedings (Vol. 76). Springer Berlin Heidelberg. https://doi.org/10.1007/978-3-642-19680-5
Wei-Ping, Z., Ming-Xin, L. I., & Huan, C. (2011). Using MongoDB to implement textbook management system instead of MySQL. 2011 IEEE 3rd International Conference on Communication Software and Networks, 303–305.
Boicea, A., Radulescu, F., & Agapin, L. I. (2012). MongoDB vs Oracle–database comparison. 2012 Third International Conference on Emerging Intelligent Data and Web Technologies, 330–335.
Dede, E., Govindaraju, M., Gunter, D., Canon, R. S., & Ramakrishnan, L. (2013). Performance evaluation of a mongodb and hadoop platform for scientific data analysis. Proceedings of the 4th ACM Workshop on Scientific Cloud Computing, 13–20.
Banker, K. (2011). MongoDB in action. Manning Publications Co.
Parker, Z., Poe, S., & Vrbsky, S. V. (2013). Comparing nosql mongodb to an sql db. Proceedings of the 51st ACM Southeast Conference, 1–6.
Usman, Z., Young, R. I. M., Chungoora, N., Palmer, C., Case, K., & Harding, J. (2011). A Manufacturing Core Concepts Ontology for Product Lifecycle Interoperability. In M. van Sinderen & P. Johnson (Eds.), Enterprise Interoperability (pp. 5–18). Springer. https://doi.org/10.1007/978-3-642-19680-5_3
Daniel, G., Gomez, A., & Cabot, J. (2019). UMLto[No]SQL: Mapping Conceptual Schemas to Heterogeneous Datastores. 2019 13th International Conference on Research Challenges in Information Science (RCIS), 1–13. https://doi.org/10.1109/RCIS.2019.8877094
Shimura, T., Yoshikawa, M., & Uemura, S. (1999). Storage and Retrieval of XML Documents Using Object-Relational Databases. In T. J. M. Bench-Capon, G. Soda, & A. M. Tjoa (Eds.), Database and Expert Systems Applications (Vol. 1677, pp. 206–217). Springer Berlin Heidelberg. https://doi.org/10.1007/3-540-48309-8_19
Kitchenham, B. A., Budgen, D., & Brereton, P. (2016). Evidence-based software engineering and systematic reviews. CRC Press.
Evans, E. (2014). Domain-driven design: tackling complexity in the heart of software. Addison-Wesley.
Rosenberg, D., Stephens, M., & Collins-Cope, M. (2005). Agile development with ICONIX process: people, process, and pragmatism. Apress.
Rademacher, F., Sachweh, S., & Zündorf, A. (2018). Towards a UML Profile for Domain-Driven Design of Microservice Architectures. In A. Cerone & M. Roveri (Eds.), Software Engineering and Formal Methods (Vol. 10729, pp. 230–245). Springer International Publishing. https://doi.org/10.1007/978-3-319-74781-1_17

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 3 komentarzy

  1. Marek

    Czy w modelu maszyny UML opisujący status wizyty, dopisek [odwołana przez opiekuna] nie powinien być po prawej stronie diagramu przy statusie odwołana a nie przy zignorowana ? Wydaję sie ze wizyta zignorowana to wizyta przeterminowana bez próby kontaktu ze strony klienta czyli nie odwołana i nie zrealizowana.

Dodaj komentarz

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