➡️ 소프트웨어의 전반적 구조를 디자인하는 것이다.
시스템의 주요 구조적 컴포넌트와 그 관계를 밝히는 것이다.
✔️시스템 구조를 디자인하는 것은 functional requirement와 non-functional requirement를 충족시키는 작업이다.
architecture는 system 타입, background, experience, specific requirements들에 따라 결정된다.
✔️Architecture in small
individual program의 Architecture
✔️Architecture in large
system of system, 복잡한 시스템의 Architecture
➡️ 이해관계자와의 의사소통에 유용하다.
➡️ 시스템이 주요 requirement를 충족했는지 분석할 수 있다.
➡️ Large Scale Reuse가 가능하다.
비슷한 시스템은 비슷한 요구사항을 가지기 때문에 기존의 Architecture를 활용할 수 있다.
➡️ Non-functional requirement는 Architecture를 선택하는 데 영향을 끼친다. 다음과 같이 다섯가지 requirements가 영향을 줄 수 있다.
✔️Performance
컴포넌트의 개수를 줄이고 critical operation을 localize 해야 한다.
✔️Security
Layered structure을 사용해서 가장 밑단의 레이어에 중요한 정보를 저장한다.
✔️Safety
safety validation을 많이 하게 될 것이므로 validation cost를 줄일 수 있도록 관련 component를 넣어둔다.
✔️Availability
꺼지면 안되는, 늘 available한 시스템이어야 하므로 redundant한 component를 사용한다.
✔️Maintanability
유지보수가능할 수 있도록 fine-grain된 component를 많이 만든다.
이러한 requirement는 한번에 모두 충족될 수는없으며, 특히 performance <-> maintanability는 상충되는 부분이 있다.
✔️logical view
functional requirements. 시스템에서의 key abstraction을 보여준다.
✔️physical view
non-functional requirments(performance)를 보여준다.
✔️development view
소프트웨어가 어떻게 분해되어있는지 보여준다. sw 매니저와 프로그래머에게 유용하다.
✔️physical view
어떻게 시스템 하드웨어와 소프트웨어 컴포넌트가 분배되어 있는지 보여준다. 시스템 엔지니어에게 유용하다.
➕Scenarios
오브젝트와 프로세스들 간의 interaction sequence를 보여준다.