Podczas formalizowania architektury systemu ważne jest, aby zrozumieć nie tylko wartość stojącą za tym, co architektura przyniesie na stół, ale także zrozumieć i docenić, jaka powinna być.
Podstawowym celem oprogramowania lub architektury technicznej jest identyfikacja niefunkcjonalnych wymagań, które są realizowane przez atrybuty jakości, które będą sterować architekturą systemu .
Wymagania niefunkcjonalne:
Wymaganie niefunkcjonalne to wymaganie określające kryteria, które można wykorzystać do oceny działania systemu, a nie określone zachowania. Kontrastują z wymaganiami funkcjonalnymi, które definiują określone zachowanie lub funkcje. Plan wdrożenia wymagań funkcjonalnych jest szczegółowo opisany w projekcie systemu. Plan wdrożenia wymagań niefunkcjonalnych jest szczegółowo opisany w architekturze systemu.
Zasadniczo wymagania funkcjonalne określają, co powinien robić system, a wymagania niefunkcjonalne określają, jak powinien wyglądać system. ... Wymagania niefunkcjonalne są często nazywane „atrybutami jakości” systemu. Inne terminy dotyczące wymagań niefunkcjonalnych to „cechy”, „cele jakości”, „wymagania dotyczące jakości usługi”, „ograniczenia” i „wymagania niedziałające”
Oczywiście określenie wymagań architektonicznych ma sens w przypadku projektu typu greenfield, jednak podczas pracy z istniejącym oprogramowaniem najlepiej jest zachować jak największą dyscyplinę. Nie będziesz chciał, aby istniejący system wpływał na twoją architekturę oprogramowania.
Architektura oprogramowania, aby być autorytatywnym, naprawdę musi mieć 3 rzeczy.
Deklaracyjny
Jest to część dokumentacji, w której deklarujesz NIE TO, CO JEST, ale jak POWINIEN BYĆ. Robimy to za pomocą różnych widoków architektonicznych systemu. Definiujemy komponenty, które powinny być, w jaki sposób wchodzą w interakcje, a następnie opcjonalnie przechodzimy do każdego komponentu, aby uzyskać bardziej szczegółowe widoki, które deklarują sposób zaprojektowania systemu.
To ważne rozróżnienie. Projektowanie systemu powinno być ograniczone przez architekturę systemu, w rzeczywistości są to oddzielne, ale powiązane rzeczy.
Racjonalne uzasadnienie
Uzasadnienie architektury oprogramowania zapewnia uzasadnienie i autorytet podjętych decyzji dotyczących architektury. Być może podjęto decyzję o wykorzystaniu nasłuchiwania zdarzeń Pub / Sub nad MQ do uruchomienia zadania wsadowego, a ty go wykreślisz?
Dlaczego podjęto tę decyzję? Wyjaśnimy dlaczego w sekcji uzasadnienia i powrócimy do naszego wyjaśnienia do wymagań niefunkcjonalnych, celów atrybutów jakości lub wymagań istotnych architektonicznie. (Np. Zadania muszą być asynchroniczne i powtarzalne, Utrzymywalność jako atrybut jakości steruje tym, że w przypadku niepowodzenia zadania wsadowego zadania mogą zostać ponownie zainicjowane za pomocą komunikatu MQ, System musi mieć zerową utratę wiadomości z komunikacją asynchroniczną itp. ..)
Ryzyko
Teraz, gdy zadeklarowałeś, jak powinna wyglądać architektura i udowodniłeś to za pomocą uzasadnienia, możesz teraz zidentyfikować ryzyko w obecnym stanie systemu, w którym nie ma to miejsca.
(Np. Walidacja po stronie serwera jest powielana po stronie klienta Kod JavaScript. Jest to naruszenie zasady DRY, co jest sprzeczne z atrybutem jakości utrzymania. Nie ma żadnych niefunkcjonalnych wymagań dotyczących wydajności w tym obszarze, więc nie ma uzasadnienia dla obecnego zachowania systemu)
Twoje ryzyko może również wykreślić, gdzie obecny stan odbiega obecnie od architektury. Zespołowi programistycznemu można teraz zaradzić tym zagrożeniom poprzez plan projektu lub dodanie tego do zaległości.