Software Design
- 원칙을 세우고, 개념을 설정하고 이걸 실행하는 디자인을 소프트웨어 디자인이라 한다.
이런 소프트웨어 디자인은 최고 품질의 시스템과 제품을 생산할 수 있어야 한다.
- 디자인 컨셉은 디자인대로 생산을 하기전에 무조건적으로 이해가 되어있어야 한다.
- 소프트웨어 디자인을 실행하는 기술이나 기법은 언제든지 바뀔 수 있다. 새로운 기술이나 분석기술, 소프트웨어에 대한 새로운 이해가 이뤄졌을 때 바뀐다.
- Data/Class Design – 분석 클래스(analysis classes)를 구현 클래스 (implementation classes)와 데이터 구조로 만든다.
- 분석 클래스 : 목적, 속성, 다른 클래스와의 관계가 담긴다.
- 구현 클래스 : 함수에 데이터를 넣고, 속성에도 데이터를 넣고, 다른 클래스와 데이터를 주고 받는다.
- Architectural design – 중요한 소프트웨어 구조 요소(major software structural elements) 사이에 관계를 형성한다.
- Interface design – 시스템간의 소통을 돕는 것이 interface로, 두 시스템에서 사용하는 데이터 구조의 형식을 맞추 거나, 두 시스템의 Action 사이의 공통점을 연결 짓는 방법을 디자인해야 한다.
- Component-level design – structure elements를 소프트웨어 컴포넌트의 절차적인 설명으로 변환한다. (structure elements를 크고 작은 컴포넌트로 구성하고, 이 컴포넌트들을 레벨화해 분류한다.)
Mapping Requirements Model to Design Model
- 시대가 객체지향을 추구함에 따라, 실질적인 디자인 모델을 생성할 때는 Analysis Model의 Class-Based Elements가 가장 큰 영향을 미친다.
- Behavioral Elements
- Activity diagrams는 사건의 순서대로 그리게 되는데, 이때 사용되는 컴포넌트들을 그룹화하게 되어 Component-Level Design에 영향을 미친다.
- 각 컴포넌트를 그릴 때 State Diagram을 그리게 된다.
Design and Quality
- 디자인은 분석 모델에 포함된 모든 명시적 요구사항을 구현해야 하며, 고객이 원하는 모든 내재적 요구사항을 수용할 수 있어야 한다.
- 디자인은 코드를 작성하는 프로그래머와 소프트웨어를 테스트하고 후속적으로 지원하는 사람에게 이해하기 쉽도록 작성돼야 한다.
- 디자인은 소프트웨어의 전체적인 그림을 제공해야 하며, 구현적 관점에서 기능, 데이터, 행동영역을 내포할 수 있어야 한다.
컴포넌트 레벨별 특성을 드러낼 수도 있어야 한다.
Quality Guidelines
1. 디자인은
(a) 이해가능한 스타일과 패턴으로 만들어진 아키텍처를 보여야 한다.
(b) 잘 디자인된 컴포넌트들의 구성으로 이뤄진 아키텍처를 보여야 한다.
(c) 유지보수, 확장이 용이한 (evolutionary) 아키텍처를 보여야 한다.
2. 디자인은 모듈화 되어, 그룹화하고 단계별로 나눌 수 있어야 한다.
3. 디자인은 데이터, 아키텍처, 인터페이스, 컴포넌트에 대해 분명한 표현을 써야 한다.
4. 디자인은 널리 알려진 데이터 패턴을 통해 그려진 data structures로 이어져야 한다.
5. 디자인은 기능적으로 독립적인 컴포넌트를 포함해야 한다.
6. 디자인은 컴포넌트 사이를 잇거나, 외부 환경을 잇는 인터페이스의 연결 복잡도를 낮추는 방향으로 이어져야 한다.
7. 디자인은 소프트웨어 요구사항 분석에 의해 주도되는 반복 가능한 방법을 통해 도출돼야 한다.