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. |
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. |
Ś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 relacyjny danych: zapisywanie ich w postaci współdzielonych znormalizowanych struktur pojęciowych, pozbawionych redundancji, jest pozbawiony kontekstu , nie sprawdza się w systemach zarządzających dokumentami. Dokument, także w sensie prawnym, nie może być generowaną dynamicznie (zapytania SQL do bazy relacyjnej) strukturą, bo jest wtedy wirtualnym bytem, a taki nie stanowi dokumentu w prawie (Kodeks Cywilny), nie da się także zarządzać jego cyklem życia. Dlatego dokumenty są coraz częściej wyrażane jako struktury XML/XSD i uzupełniane postacią ??do czytania i druku? w formacie pdf (realnie sa to pliki pdf z załączonymi wersjami 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 dokumentacja powinna zawierać w załączeniu detaliczne struktury tych formularzy (diagramy przedstawiające struktury XML, lub skomentowane mock-up?y dokumentów). Taka specyfikacja zawiera wszystkie informacje pozwalające developerowi stworzyć oprogramowanie służące do zbierania i zarządzania informacją. Jako model wymagań na systemy typu EOD jest wystarczająca. Gdyby było prawdą, że wymagamy od oprogramowania także, by zawartość wybranych pól tych formularzy była wyliczana lub weryfikowana, musimy dodatkowo udokumentować zależności między tymi polami. Model taki często warto uzupełnić wymaganą architekturą oprogramowania, bo od niej zależą cechy jakościowe aplikacji, tak zwane pozafunkcjonalne. Będzie to właśnie model dziedziny systemu, opisywany na moim blogu wielokrotnie. (źr. Modele informacyjne – Jarosław Żeliński IT-Consulting – Systemy Informacyjne).
Trzeba robić events storming. Najlepiej niech prowadzi software engineer/architekt.
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… 🙁
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.
Co to te domeny i poddomeny? Mapy Kontekstu?
Sprzątam po tym regularnie a ze studentami ćwiczę:
Karta wypożyczenia
Domain Driven Design jak ktoś nie pisał kodu to nie poczuje o co chodzi…
Czyli nie wiadomo o co chodzi….
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.
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…
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
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.
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.