## PYTANIE 13/27: Modelowanie architektury systemów informatycznych (AIS)
**Cele i metody modelowania architektury.**
---
### Tło pojęciowe — słowniczek
**Architektura systemu informatycznego (software/system architecture)** — fundamentalne decyzje projektowe dotyczące struktury systemu: jakie komponenty, jak się komunikują, jakie technologie. Jak plan architektoniczny budynku — definiuje „kształt" systemu przed budową.
**Modelowanie architektury** — tworzenie uproszczonych reprezentacji (diagramów, opisów) systemu na różnych poziomach abstrakcji. Cele: komunikacja w zespole, dokumentacja, analiza jakości (czy system będzie wydajny? skalowalny?), planowanie rozwoju.
---
**Framework architektoniczny (architecture framework)** — ustrukturyzowane podejście do opisywania architektury. Definiuje: jakie widoki (views) tworzyć, jakie aspekty uwzględnić, w jakiej kolejności pracować.
**TOGAF (The Open Group Architecture Framework)** — najpopularniejszy framework enterprise architecture. Definiuje metodykę ADM (Architecture Development Method) — cykliczny proces tworzenia architektury. 4 domeny:
- **Process View** — współbieżność, przepływ danych
- **Development View** — organizacja kodu (pakiety, warstwy)
- **Physical View** — wdrożenie na sprzęt (serwery, kontenery)
- **+1 Scenarios** — use cases łączące wszystkie widoki
Dlaczego 4+1? Bo różni interesariusze patrzą na system inaczej:
programista → Development View, admin → Physical View,
użytkownik → Scenarios, architekt → Logical View
**Zachman Framework** — taksonomia 6×6: pytania CO/JAK/GDZIE/KTO/KIEDY/DLACZEGO × poziomy abstrakcji (kontekst → logiczny → fizyczny → ...). Nie mówi JAK modelować — mówi CO należy udokumentować. Kompletny, ale złożony.
4.**Code** — klasy, interfejsy (opcjonalnie, np. UML)
Zaleta: prosty, zrozumiały dla nie-architektów. Zaczynasz od „big picture" i zanurzasz się głębiej.
**ArchiMate** — język modelowania The Open Group. 3 warstwy (Business, Application, Technology) × 3 aspekty (Active Structure — kto?, Behavior — co robi?, Passive Structure — na czym?). Komplementarny z TOGAF.
---
**UML (Unified Modeling Language)** — uniwersalny język modelowania. W kontekście architektury: **Component Diagram** (moduły i zależności), **Deployment Diagram** (mapowanie na sprzęt), **Sequence Diagram** (interakcje w czasie).
**ADR (Architecture Decision Records)** — lekka dokumentacja: każda kluczowa decyzja architektoniczna zapisana jako plik z: kontekstem, decyzją, konsekwencjami. Wersjonowane w repo. Format: „Zdecydowaliśmy X, bo Y. Konsekwencje: Z."
**ATAM (Architecture Tradeoff Analysis Method)** — metoda oceny architektury przez scenariusze jakościowe. Identyfikuje tradeoffs: „ta decyzja poprawia wydajność kosztem modyfikowalności". Opracowana przez SEI (Carnegie Mellon).
### Diagramy — wizualizacja modeli architektonicznych
Poniższe diagramy ilustrują kluczowe frameworki i modele omówione w pytaniu. Wszystkie modelują architekturę systemu, ale z różnych perspektyw i na różnych poziomach abstrakcji.
**TOGAF ADM — cykl iteracyjny:**

**4+1 View Model (Kruchten) — 5 perspektyw:**

#### ADR (Architecture Decision Records) z mojej pracy
Przykładowe decyzje architektoniczne, które mogę opisać językiem ADR:
1.**ADR-001**: Wybór Object Pooling zamiast Instantiate/Destroy
*Kontekst*: 500 pocisków/sekundę powoduje GC spikes
*Decyzja*: Pre-alokacja puli 500 obiektów
*Konsekwencja*: Frame time σ z 8ms → 2ms
2.**ADR-002**: Singleton GameDirector zamiast static class
*Kontekst*: Potrzeba globalnego stanu gry z lifecycle
*Decyzja*: MonoBehaviour Singleton z `DontDestroyOnLoad`
*Konsekwencja*: Testowalne, ale tight coupling
3.**ADR-003**: Unity URP zamiast Built-in RP
*Kontekst*: SRP Batcher zmniejsza draw calls o ~40%
*Decyzja*: Universal Render Pipeline
*Konsekwencja*: Lepszy batching, ale ograniczenie custom shaderów
#### Mnemonik — „SPRM" = Silnik Porównuję Rysując Modele
- **S**cena jako Context (C4 Level 1)
- **P**odsystemy jako Containers (Renderer, Physics, Audio)
- **R**ejestr decyzji ADR (dlaczego Pool, Singleton, URP)
- **M**oduły jako Components (MonoBehaviour, UActorComponent)
Na obronie: *„W mojej pracy porównuję architekturę Unity i Unreal — to idealny case study dla modelowania C4. Na poziomie Container widzimy fundamentalne różnice: Unity opiera się na Mono/.NET runtime z GC, a Unreal na natywnym C++ z ręcznym zarządzaniem pamięcią. Decyzje architektoniczne (ADR) w mojej implementacji — jak wybór Object Pooling — bezpośrednio odnoszą się do ADR rationales z publikacji Borowej."*
---
### 📚 Odniesienia do publikacji z Katedry
> Poniższe notatki pochodzą z publikacji promotorów/recenzentów i mogą być przydatne jako dodatkowy kontekst na obronie.
- **„Wicked Triad"** — zakotwiczenie → potwierdzenie → optymizm: łańcuchowa reakcja prowadząca do źle uzasadnionych decyzji architektonicznych
- Podstawa teoretyczna: **Dual Process Theory (Kahneman)** — System 1 (szybki, intuicyjny) vs System 2 (wolny, analityczny); biasy wynikają z nadmiernego polegania na System 1
- ADR-y (Architecture Decision Records) mogą częściowo łagodzić biasy, wymuszając jawne zapisanie kontekstu i konsekwencji