Wprowadzenie

Artykuł Architektura kodu aplikacji jako pierwszy etap tworzenia oprogramowania napisany w 2017 roku, kończyłem słowami:

Nie chodzi więc o to by podzielić oprogramowanie na “składowe, które łączą w sobie możliwość przechowywania danych oraz wykonywania operacji”. Chodzi o to by mechanizm, o dowiedzionej poprawności, zaimplementować w określonej wybranej technologii.

https://it-consulting.pl/2017/07/15/architektura-kodu-aplikacji-jako-pierwszy-etap-tworzenia-oprogramowania/

Dokumentowanie i dokumentacja w projektach inżynierii oprogramowania to temat wielu i sporów i nieporozumień. Jednak kluczowymi błędami są najczęściej:

  1. teza, że dokumentację tworzymy po zakończeniu prac,
  2. teza, że jest to “jedna dokumentacja”.

ad.1. Niestety to najgorsza forma, bo etap rozwiązywania problemu realizowany jest wprost z użyciem kodu (code first), czyli najkosztowniejszą metodą. Praktyka pokazuje, że zwinne projekty “code-first” owocują nawet 10krotnie niższa efektywnością.

ad.2. Jest to założenie, że nie ma granicy między środowiskiem aplikacji a aplikacją.

Obie formy są możliwe do realizacji, pytanie czy nie można inaczej i lepiej? Logikę się projektuje przed kodowaniem, infrastrukturę się dokumentuje po jej uruchomieniu.

Aplikacja i jej środowisko to dwa różne projekty

Od 2003 roku (publikacja opisu tak zwanej architektury heksagonalnej):

źr.: https://herbertograca.com/2017/11/16/explicit-architecture-01-ddd-hexagonal-onion-clean-cqrs-how-i-put-it-all-together/

Powyższy diagram (dość często cytowany w literaturze, ) pokazuje ideę tego wzorca architektonicznego: separujemy realizację wymagań funkcjonalnych (aplikacja, obszar objęty czerwoną granicą) od środowiska w jakim ona sie wykonuje (obszar poza czerwona granicą). Dokładnie tak samo jak np. kod aplikacji Edytor Tekstu od kodu MS Windows. Są to zupełnie dwa różne produkty, a jedyne co je łączy to to to że, edytor tekstu korzysta z usług systemu operacyjnego przez jego API (porty). Identycznie tworzymy każde inne oprogramowanie: aplikacja osobno, środowisko osobno.

Dokumentacja czyli co to jest i ile zajmuje czasu

Każdy projekt inżynierski ma kilka faz, są to: określenie problemu i wskazanie rozwiązania, określenie wymagań wobec rozwiązania, zaprojektowanie rozwiązania, implementacja i wdrożenie rozwiązania.

Tak więc mamy:

  1. Dokumentację działania organizacji czyli udokumentowany jej biznesowy model działania. W nomenklaturze OMG jest to Computation Independent Model:
    • mapy procesów biznesowych (BPMN),
    • słownik pojęci i reguły biznesowe (SBVR)
    • procedury (RACI, CRUD, listy kontrolne)
    • szablony dokumentów (diagram struktur złożonych UML, inne formy graficzne)
  2. Specyfikacja wymagań, forma zależna od preferencji:
    • wymagania funkcjonalne i poza-funkcjonalne,
    • user story,
    • inne.
  3. Dokumentacja-projekt HLD, tu “z lotu ptaka” pokazujemy projekt realizacji funkcjonalności i strategię utrzymania i rozwoju aplikacji (notacja UML/SysML):
    • Lista usług systemu (przypadki użycia UML)
    • Architektura HLD (diagram komponentów UML)
    • Specyfikacje i scenariusze przypadków użycia na poziomie HLD (diagramy sekwencji UML, diagramy aktywności UML)
  4. Dokumentacja-projekt realizacji wymagań pozafunkcjonalnych czyli platformy systemowej i środowiska aplikacji (notacja UML/SysML, architektura C4, inne formy dokumentacji dostarczonej prze producenta platformy).
  5. Dokumentacja-projekt LLD, realizacji określonych komponentów wskazanych na modelu HLD:
    • Architektura LLD (diagram klas UML),
    • Specyfikacje i scenariusze operacji komponentu na poziomie LLD (diagramy sekwencji UML, diagramy aktywności UML)
  6. Implementacja komponentu

Praktyka autora tego tekstu i wielu innych autorów podobnych publikacji , pokazuje, że:

  • etap analizy biznesowej i spisanie wymagań to ok. 3 miesiące,
  • opracowanie architektury HLD to maksymalnie ok. 1 tydzień,
  • każdy komponent LLD to nie raz nawet tylko kilka godzin rysowania w UML,
  • implementacja tych kolejnych komponentów w zbudowanym już środowisku, to dni a rzadziej tygodnie.

Etapy te zostały ujęte w tak zwany V-model , z perspektywy projektów inżynierii oprogramowania, zobrazowany poniżej:

V-Model is also referred to as the Verification and Validation Model. In this, each phase of SDLC must complete before the next phase starts. It follows a sequential design process the same as the waterfall model. The testing of the device is planned in parallel with a corresponding stage of development. (źr.: V-model (Software Engineering) – javatpoint).

Analityk-projektant realizuje elementy analizy i projektowania, deweloper to punkt 4. oraz kolejne realizacje pkt. 6. Projekt ma trzy ramowe etapy:

  1. Analiza biznesowa: analityk-projektant.
  2. Specyfikacja Wymagań: analityk-projektant;
  3. Projektowanie rozwiązania i iteracyjno-przyrostowe wytwarzanie go: w petli SDLC analityk-projektant + deweloper .

Jeżeli projekt jest komponentowy, wtedy V-model przybiera postać jak poniżej:

(na podstawie )

Tak więc z perspektywy dewelopera, użyteczne oprogramowanie powstaje już po niecałych 2 tygodniach. To wynik niemalże nie do osiągniecia przy pracy bez analiz i projektu od razy w kodzie na bazie user story. Ważne jest także to, że zyskujemy tak dokumentację zmian w całym cyklu życia projektu (ADR, ang. Architecture Decision Records, ) co jest bardzo ważne z perspektywy zarządzania zmianą.

Podsumowanie

Metody zwane agile, spopularyzowały podejście zwane code-first. Niestety czas pokazał, że w dłuższej perspektywie są najmniej efektywne:

Badanie wykazało 268% wyższy wskaźnik niepowodzeń w projektach oprogramowania Agile.

https://www.theregister.com/2024/06/05/agile_failure_rates/

Efektywność uzyskujemy przemyślaną architekturą i potem jej sprawną implementacją (np. językami skryptowymi). Doświadczony projektant, w rozwiązywaniu problemów dziedzinowych, jest nawet dziesięciokrotnie efektywniejszy niż koder pracujący od razu z kodem z tradycyjnymi frameworkami takimi jak JavaEE/Spring czy bardzo podobnym .NET Framework.

W kwestii same organizacji dokumentacji co do zasady: dokumentujemy od ogółu do szczegółu, oraz zawsze osobno logikę i osobno infrastrukturę.

Bardzo ważne: logikę się projektuje przed kodowaniem, infrastrukturę się dokumentuje po jej uruchomieniu .

Prowadzę warsztaty dla zespołów analityków, projektantów i deweloperów, na których prezentuję, omawiam i wyjaśniam opisane wyżej i dobrze znane na świecie metody projektowania i dokumentowania (wykup warsztaty dla zespołu albo umów sie na indywidualne konsultacje). Od niedawna oferuje "gotowce" jako wzory i przykłady w Sklepiku.

Ź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).

Dodaj komentarz

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