소프트웨어 설계
From CS Wiki
바람직한 설계[edit | edit source]
- 설계는 모듈적이어야 한다.
- 요구사항을 모두 구현해야 하고 유지보수가 용이해야 한다.
- 모듈의 결합도는 약하게, 응집도는 강하게 설계해야 한다.
- 설계는 자료와 프로시저에 대해 분명하고 분리된 표현을 포함해야 한다.
- 소프트웨어 요소들 간의 효과적 제어를 위해 설계에서 계층적 조직이 제시되어야 한다.
- 소프트웨어 품질 요구사항을 고려해야 한다.
문제 분할[edit | edit source]
분할과 정복의 원칙을 적용하여 어느 수준까지 분할할지 판단 필요
수평 분할[edit | edit source]
- 기능들을 분리된 가지에 할당
- 단순한 형태는 입력, 데이터 변환, 출력 작업 담당하도록 분리
- 테스트, 유지보수, 확장이 용이하고 부작용의 파급 효과가 줄어듦
- 많은 데이터가 모듈 인터페이스를 통해 이동되어 전체 제어가 복잡해짐
수직 분할[edit | edit source]
- 제어와 작업을 위와 아래로 분산함
- 상위 수준의 모듈들은 제어 기능을, 하위의 모듈들은 실제 작업(입출력과 데이터 변형 작업)을 수행
- 작업 모듈이 변경되기 쉬우며, 제어 모듈이 변경되면 부작용이 큼
추상화[edit | edit source]
- 모듈들을 추상화하여 표현
- 추상화란 내부의 상세한 내용을 생략하고 외부 행위만을 기술하는 것. 상세 설계와 구현 작업은 추상화되어 있는 각 모듈의 명세를 구현하는 작업
- 추상화된 시스템 모델을 통해 시스템의 분석이 가능함
제어 추상화[edit | edit source]
- 제어의 정확한 매커니즘을 정의하지 않고 원하는 효과를 정하는데 이용하는 방법
기능 추상화[edit | edit source]
- 수행하는 기능으로 모듈을 명세하는 것
- 전체를 작은 기능들로 분해하는 것(기능 중심의 분할 방법)
데이터(자료) 추상화[edit | edit source]
- 데이터와 데이터 조작에 필요한 오퍼레이션을 함께 묶는 것
- 객체의 상세한 구현 내용이 감추어지며 공개된 오퍼레이션만을 사용해야 함
하향식과 상향식 설계[edit | edit source]
하향식 설계[edit | edit source]
- 계층 구조상에서 시스템의 주요 컴포넌트들을 찾고 그것을 낮은 수준의 컴포넌트들로 분해하는 것으로 단계적 정제라 하며 메인 모듈의 설계에서 시작하여 단계적으로 구체화시키는 것
- 하향식 설계에서는 통합 검사 시 인터페이스가 이미 정의되어 있어 통합이 간단하다.
- 하향식 설계에서 레벨이 낮은 데이터 구조의 세부 사항은 설계초기 단계에서 필요하다.
- 시스템 명세가 명확한 경우와 모든 것을 새로 개발하는 작업에는 하향식이 적합하다.
상향식 설계[edit | edit source]
- 가장 기본적인 컴포넌트를 먼저 설계한 다음 이것을 사용하는 상위 수준의 컴포넌트를 설계하는 것
- 상향식 설계는 최하위 수준에서 각각의 모듈들을 설계하고 이러한 모듈이 완성되면 이들을 결합하여 검사한다.
- 기존 컴포넌트들을 조합하여 시스템을 개발하는 경우에는 상향식이 적합