Wprowadzenie

Zarówno w projektach jak i w dyskusjach np. na konferencjach czy na LinkedIn, pojawia się stale pewne nieporozumienie: “projektowanie to waterfall”. Myśli tak każdy, kto wyobraża sobie, że projekt czegoś to jakaś masa wszystkich możliwych detali. Jednocześnie nie ja jeden widuję “Dokumenty analizy biznesowej” albo “Dokumenty wymagań” zawierające setki pozycji o treści “system powinien…”, nie raz wykonane przez krytyków “water fall”, którzy reprezentując developera deklarującego metody “agile”, “zabezpieczają się” przez odpowiedzialnością za zakres projektu.

Pierwsza ważna uwaga: projekt systemu to nie jest ani zestaw dziesiątków “user story” ani detaliczna dokumentacja powykonawcza! I o tym dzisiaj będzie: abstrahowanie od detali i jednak nadal zarządzanie logiką całości.

Poniżej wymaganie napisane przez dział IT jednego z moich klientów:

1. System musi posiadać wbudowanego klienta poczty elektronicznej obsługującego co najmniej protokoły IMAP i SMTP.
2. Wbudowany klient poczty elektronicznej posiada następujące funkcje:
   2.1. Utwórz wiadomość ? umożliwia utworzenie nowej wiadomości,
   2.2. Odpowiedz ? umożliwia udzielenie odpowiedzi nadawcy wraz z cytowaniem i oznaczenie cytowanego tekstu napisanego przez nadawcę,
   2.3. Odpowiedz wszystkim ? umożliwia udzielenie odpowiedzi nadawcy oraz z przesłaniem jej na pozostałe adresy email wymienione w polu Do, Do wiadomości oraz Ukryty do wiadomości wraz z cytowaniem i oznaczenie cytowanego tekstu napisanego przez nadawcę,
   2.4. Prześlij dalej ? umożliwia przesłanie poczty elektronicznej kolejnemu odbiorcy,
   2.5. Przenieś ? umożliwia przenoszenie poczty elektronicznej pomiędzy folderami na wybranym koncie,
   2.6. Drukuj ? umożliwia wydrukowanie poczty elektronicznej,
   2.7. Dołącz ? umożliwia dołączenie poczty elektronicznej do sprawy lub dokumentu,
   2.8. Odbierz ? umożliwia ręczne odebranie poczty elektronicznej,
   2.9. Usuń ? umożliwia usunięcie wybranej poczty elektronicznej,
   2.10. Znajdź ? umożliwia wyszukanie listu w folderach poczty elektronicznej,
   2.11. Rejestruj ? umożliwia rejestrację poczty elektronicznej jako dokumentu w systemie w sposób analogiczny do rejestracji dokumentu zeskanowanego.
3. System musi udostępniać możliwość konfiguracji konta poczty elektronicznej każdemu użytkownikowi.
4. System zapewnia możliwość konfiguracji wielu kont poczty elektronicznej dla każdego użytkownika.
5. System musi umożliwiać rejestrację (przejmowanie) poczty elektronicznej przez użytkownika, lub poprzez zdefiniowaną regułę (uwzględniającą zapisanego wcześniej adresata, oraz ciągłość korespondencji w sprawie), jako dokumentów w systemie z podziałem na treść, załączniki i nagłówek.
6. W celu ograniczenia zbędnej duplikacji, nieprzejęte maile muszą być odczytywane z serwera pocztowego tylko na żądanie użytkownika (dostępny listing nagłówków wiadomości) i nie powinny być dodatkowo przechowywane w Systemie.
7. Dotyczy to również poczty wysyłanej przez klienta.
8. System musi umożliwiać dołączanie poczty elektronicznej do dokumentów lub spraw. Dołączenie musi być możliwe z poziomu klienta poczty elektronicznej wbudowanego w system.
Powyżej wymagania spisane przez osobę A

Inna osoba z tego samego działu dodała:

1. Chcemy mieć klienta pocztowego w systemie, jest to wygodne rozwiązanie.
2. Chcemy aby klient pocztowy miał możliwość odczytania i wysłania wiadomości pocztowej.
3. Nie chcemy żeby EOD gromadziło wszystkie wiadomości synchronizowane z serwerem pocztowym protokołem IMAP, a tylko pobierało nagłówki wiadomości.
4. Gdy użytkownik uzna, że wiadomość jest częścią sprawy inicjuje czynności w EOD.
Powyżej wymagania spisane przez osobę B.

Świadomie podaje źródło: dział IT tej instytucji.

Opublikowałem tylko powyższe, bo reszta po anonimizacji i tak była by pustą kartką (niestety ten OPZ ukaże się dopiero za jakiś czas, a do tego momentu jest poufny), ale mam nadzieję, że wyobrażenie sobie reszty jest dość proste. I co z tym? Nic! Otóż nie jest problemem taka forma wyrażenia wymagań przez Zamawiającego, bo on (biznes i nie tylko jak widać) inaczej nie potrafi i nie jest to jego rola. Problemem jest uznanie tego za “wymagania wobec oprogramowania”. Powyższe jest raczej dopiero materiałem do analizy i projektowania.

Wyobraźmy sobie teraz hipotetyczny dokument wynikowy, czyli kilkunastu (a może nawet kilkudziesięciu) nietechnicznych pracowników tej instytucji (księgowość, administracja, itp.) z pomocą “analityka wymagań”, zebrało wymagania, i pracując z edytorem tekstu w trybie rejestracji zmian, warsztatowo, po iluś tam tygodniach “wypracowało” ostateczną wersję “wymagań” a potem nawet dziesiątki “user story”. Ile stron będzie miała taka Analiza Biznesowa Wymagań i co w niej będzie?

Przykłady łatwo znaleźć w Internecie:

przykład 1 (źr. :

Powyższe opracowanie kosztowało 90 tys. zł.

przykład 2 (źr. https://platformazakupowa.pl/transakcja/361167):

Rozwiązanie

Od czasu do czasu przywołuje tu na blogu podejście zwane “Model jako wymaganie” (popularne skróty to: MDD – Model Driven Development, MBSE – Model Based System Engineering, MDSE – Model Driven System Engineering, o MBSE już pisałem ).

Kluczem są modele struktur treści (dokumentów i ekranów GUI) . Powyższe “życzenia” jako spisane wymagania to (w pełnej wersji) ogromna lista życzeń, nie poddająca się żadnej kontroli spójności i kompletności. Proszę podejrzeć wskazane wyżej przykłady, dokumenty na ponad 200 stron nie poddające się żadnej kontroli… (pomijam, że wadliwe formalnie, jeśli chodzi o użycie dekarowanej notacji).

Poniżej zamiennik wyłącznie powyższego o poczcie elektronicznej, wyrażony modelem struktury treści. Jaką ma to zaletę? Tę, że mamy zamkniętą strukturę treści i możemy ją mapować na inne dokumenty (ich szablony w projekcie) w celi weryfikacji logiki spójności.

Zakresy danych nie realizujące logiki biznesowej (i mało ryzykowne jeśli chodzi o pracochłonność) można markować z dokładnością do roli danego zestawu danych (poniżej obszary oznaczone linia przerywaną). Zgodnie z definicją, systemy informacyjne przetwarzają dane, więc dowolny system informacyjny jest sprowadzalny do skończonej liczby informacji wyrażanej jako dokument grupujący określone dane i reguł ich przetwarzania . Rzecz w tym, że nie jest to “baza danych i relacyjny model” (niestety monolit możliwy do wypracowania metodą waterfall), a odrębne dokumenty i ich struktury (oraz słowniki znaczeń użytych nazw). Każdy z nich może być podstawą opracowania odrębnego, możliwego do samodzielnego wykonania, modułu.

Warto wiedzieć, że:

Model rela­cyj­ny danych: zapi­sy­wa­nie ich w posta­ci współ­dzie­lo­nych znor­ma­li­zo­wa­nych struk­tur poję­cio­wych, pozba­wio­nych redun­dan­cji, jest pozba­wio­ny kon­tek­stu , nie spraw­dza się w sys­te­mach zarzą­dza­ją­cych doku­men­ta­mi. Dokument, tak­że w sen­sie praw­nym, nie może być gene­ro­wa­ną dyna­micz­nie (zapy­ta­nia SQL do bazy rela­cyj­nej) struk­tu­rą, bo jest wte­dy wir­tu­al­nym bytem, a taki nie sta­no­wi doku­men­tu w pra­wie (Kodeks Cywilny), nie da się tak­że zarzą­dzać jego cyklem życia. Dlatego doku­men­ty są coraz czę­ściej wyra­ża­ne jako struk­tu­ry XML/XSD i uzu­peł­nia­ne posta­cią ??do czy­ta­nia i dru­ku? w for­ma­cie pdf (real­nie sa to pli­ki pdf z załą­czo­ny­mi wer­sja­mi XML. (źr. Informacje dla korzystających z moich opracowań – Jarosław Żeliński IT-Consulting – Systemy Informacyjne)

Poniżej prosty model “listy odebranych maili”:

Wymagania dotyczące pracy z poczta elektroniczną obrazuje ten oto – weryfikowalny – model struktury treści otrzymanej mailem:

Aby pokazać “jak to działa” piszemy scenariusz (specyfikacja przypadku użycia) stanowiący kontekst użycia tego dokumentu (formularza). Służy on także jako test projektowanej logiki, a później jako test odbiorczy gotowego produktu:

1. Pracownik wybiera opcję Poczta Elektroniczna
2. SYSTEM wyświetla Lista przesyłek email dla zalogowanego użytkownika
3. Pracownik klika wybrana pozycje na liście ,
4. SYSTEM wyświetla Treść Poczty Elektronicznej
5. Pracownik dekretuje ją lub oznacza do usunięcia OK
6. if dekretacja
   6.1. wskazanie punktu kancelaryjnego i OK
7. else if usuń
   end if  
8. SYSTEM system potwierdza operacje

W tym momencie będę kończył, bo kontynuację czytelnik znajdzie w jednym z wcześniejszych artykułów, fragment poniżej:

Pełna doku­men­ta­cja powin­na zawie­rać w załą­cze­niu deta­licz­ne struk­tu­ry tych for­mu­la­rzy (dia­gra­my przed­sta­wia­ją­ce struk­tu­ry XML, lub sko­men­to­wa­ne mock-up?y doku­men­tów). Taka spe­cy­fi­ka­cja zawie­ra wszyst­kie infor­ma­cje pozwa­la­ją­ce deve­lo­pe­ro­wi stwo­rzyć opro­gra­mo­wa­nie słu­żą­ce do zbie­ra­nia i zarzą­dza­nia infor­ma­cją. Jako model wyma­gań na sys­te­my typu EOD jest wystarczająca. Gdyby było praw­dą, że wyma­ga­my od opro­gra­mo­wa­nia tak­że, by zawar­tość wybra­nych pól tych for­mu­la­rzy była wyli­cza­na lub wery­fi­ko­wa­na, musi­my dodat­ko­wo udo­ku­men­to­wać  zależ­no­ści mię­dzy tymi pola­mi. Model taki czę­sto war­to uzu­peł­nić wyma­ga­ną archi­tek­tu­rą opro­gra­mo­wa­nia, bo od niej zale­żą cechy jako­ścio­we apli­ka­cji, tak zwa­ne poza­funk­cjo­nal­ne. Będzie to wła­śnie  model dzie­dzi­ny sys­te­mu, opi­sy­wa­ny na moim blo­gu wielokrotnie. (źr. Modele informacyjne – Jarosław Żeliński IT-Consulting – Systemy Informacyjne).

Źródła

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

  1. Domoky

    Trzeba robić events storming. Najlepiej niech prowadzi software engineer/architekt.

    1. Jarosław Żeliński

      To właśnie był (poprzednia przymiarka do wymagań) efekt “events storming”, stek bezładnych pomysłów które były wyłącznie zbiorem “zdarzeń z życia pracowników”, to co pokazałem to efekt samodzielnej pracy na bazie dokumentów. Zastąpienie listy życzeń co do poczty email, szablonem formularza i kilkoma regułami pozwoliło wykryć wiele niespójności, a dokumentacja mimo to zmalała trzykrotnie, powstał w 60 dni, zawiera także architekturę całego systemu informacji. Jak opublikują przetarg to wkleję link.

      “events storming” prowadzony przez developera mającego 15 lat doświadczenia w roli developera, to było to po czym sprzątałem… 🙁

  2. Domoky

    No jeśli się przykleja karteczki dla samego przyklejania to fajnie.
    A co z określeniem domen/poddomen, mapą kontekstu?
    Architekturę to określa się po design levelu…
    Zresztą jeśli ktoś nie pracował jako programista/software engineer/software architect to ciężko to widzę. Niestety architekci bez takiego backgroundu zostają na etapie umla i dzid.

    1. Jarosław Żeliński

      Co to te domeny i poddomeny? Mapy Kontekstu?

      Sprzątam po tym regularnie a ze studentami ćwiczę:
      Karta wypożyczenia

  3. Domoky

    Domain Driven Design jak ktoś nie pisał kodu to nie poczuje o co chodzi…

  4. Domoky

    Po prostu nie ma po co dzielić ludzi na analityków oraz inżynierów oprogramowania, skoro tendencja pokazuje na rynku że warto skracać dystans pomiędzy biznesem a inżynierami.
    Jeśli ktoś tylko zajmuję się analizą nawet nie wie jak ma czasami ograniczone spojrzenie.
    Trzeba brać wiele czynników:
    – Modularny system ( czym jest moduł jakie ma cechy)
    – Skalowalność
    – Niezawodność SLA
    – Łatwość na rozbudowę
    Zauważać wzorce (enterprise patterns)
    Dużo by pisać przykład podany przez Pana jest chyba trochę sztuczny jak to studenci coś próbowali zrobić. Dwa nie ma czegoś takiego jak jedno poprawne rozwiązanie bo ich może być kilka. Zachęcam do wysłuchania podcastu Mariusza Gila z S. Sobótka gdzie rozmawiają na temat wypożyczenia książek w bibliotece i rozmawiają o granicach agregatów.

    1. Jarosław Żeliński

      Tendencja na rynku pokazuje, że ten podział nabiera rosnącego znaczenia, tak jak w każdej innej inżynierii… Proponuję zacząć od oddzielania wymagań funkcjonalnych od pozafunkcjonalnych. Co innego to policzenie VAT na fakturze a co innego to liczba faktur wystawianych dziennie. Co innego to jak policzyć upust w księgarni internetowej a co innego to miliony kupujących na stronie WWW. Sławka Sobotke znam osobiście…

      Jakość pracy oceniają płacący i dotrzymywane terminy…

  5. Domoky

    Co z tego że Pan zna. Mamy odmienne zdania, jednak patrzę z perspektywy osoby która nie tylko musi zbierać wymagania ale, także przekładać je na kod.
    Wymagania funkcjonalne i poza funkcjonalne są oczywistym faktem, jednak oba trzeba brać pod uwagę. Przypadki użycia nie niosą ze sobą istotnej wiedzy, reguł biznesowych. Dobry events storming przy złożonych domenach jest najlepszą wg.
    Mnie techniką dla inżyniera oprogramowania, który umie wykorzystać podejście DDD do implementacji systemów.
    Alberto Brandolini nie był analitykiem ale programistą i tutaj dam trochę czasu do namysłu.

    Pozdrawiam

    1. Jarosław Żeliński

      Powtórzę: o tym jaka metoda jest lepsza decyduje całkowity koszt i termin oddania działającego oprogramowania do użytku… Zapewne faktycznie Alberto Brandolini nie był analitykiem ale programistą, i tutaj dam trochę czasu do namysłu.

  6. Jarosław Żeliński

    Update: opisane cytowane opracowanie OPZ dla urzędu kosztowało 90 tys. zł. Ja za jedną trzecią tej ceny (a mam dwa razy wyższą stawkę dzienną) oddaję projekt systemu.

Możliwość dodawania komentarzy nie jest dostępna.