1. 단원 요약
- 설계 프로세스
- 입력: 요구사항 명세서, 요구사항 분석모델, 환경적 제약 조건
- 출력: SW 아키텍처, 인터페이스, 알고리즘, 데이터 형식 정의
- 설계 프로세스는 반복적이다.
- 설계 행위
- 아키텍처 설계: 시스템의 논리적 구성도로써, 비기능적 요구사항에 큰 영향
- 데이터베이스 설계
- 서브시스템 설계
- 컴포넌트 설계
- 자료구조/알고리즘 설계
- 설계 원리
- 문제분할(분할정복)
- 수평 분할: 기능별로 모듈 그룹화(전체 제어가 복잡해지나 파급 효과가 작고 테스트, 유지보수, 확장이 용이하다.)
- 수직 분할: 상위 모델은 제어, 하위 모델은 실제 작업을 수행(제어는 단순하나 파급 효과가 크다.)
- 추상화
- 기능 추상화:
- 데이터 추상화:
- 하향식 설계/상향식 설계
- 하향식 설계:
- 상향식 설계:
- 문제분할(분할정복)
- 아키텍처 설계
- 아키텍처 스타일: 유사 부류의 소프트웨어들에서 사용되는 공통적 아키텍처 패턴
- 아키텍처는 비기능적 요구사항에 큰 영향을 준다.
- 성능: 서브시스템 간 통신 최소화
- 보안: 계층형 아키텍처+필요한 시스템을 내부 계층으로 설계
- 안전성: 안전성이 필요한 요소들을 단일 서브시스템에 집중하여 설계
- 가용성: 동일 기능의 컴포넌트 중복 설계
- 유지보수성: 자료 공유를 최소화, 작은 모듈로 분할 설계
- 데이터 중심 아키텍처: 공유 데이터베이스를 통해 상호작용함
- 데이터 공유에 효율적, 시스템 확장이 용이함
- 데이터 생성 서브시스템과 데이터 소비 서브시스템이 분리됨
- 모든 서브시스템이 공통 데이터 모델을 사용해야 함
- 데이터 모델 변경 시 큰 비용을 수반함
- 시스템 성능이 중앙 저장소의 성능에 의존적임
- 데이터 흐름 아키텍처: 각 서브시스템은 입력 데이터를 받아 다음 서브시스템으로 전송함
- 파이프(데이터 흐름)-필터(각 서브시스템) 구조
- 데이터 스트림에 일련의 변환 작업을 수행하는 시스템에 적합
- 요소 간 복잡한 상호작용이 제한됨
- 클라이언트-서버 아키텍처: 서비스 제공 시스템(서버)과 시스템 이용 시스템(클라이언트)으로 구성됨
- 분산 시스템 아키텍처이며, 서버와 클라이언트는 네트워크로 연결됨
- 데이터 분산, 서버 추가, 분산된 프로세스의 효율적 활용이 용이함
- 데이터 교환이 비효율적
- 각 서버는 데이터 관리 책임을 가져야 함
- 계층형 아키텍처: 추상 기계 모델이라고도 하며, 시스템을 계층별로 구성
- 하위 계층이 제공하는 서비스를 상위 계층이 이용함
- 상위 계층은 사용자 인터페이스이며, 하위 계층은 하드웨어 인터페이스임
- 각 계층별 서브시스템의 점증적 개발이 가능
- 특정 계층의 인터페이스 변경은 그 인접 계층에만 영항을 미침
- 계층형 구조 설계는 어려움
- MVC 아키텍처: 저장소 모델의 한 형태로, 하나의 모델에 여러 뷰를 제공
- 컨트롤러가 사용자 입력을 받으면 이를 모델에 전송, 모델은 데이터를 뷰에 제공
- 뷰의 변경이 모델에 영향을 주지 않음
- 대화형 시스템에 적합
- P2P 아키텍처: 각 서브시스템이 서버와 클라이언트 기능을 모두 수행(복잡)
- 3계층 아키텍처: 사용자 인터페이스, 비즈니스 로직, 저장소의 3개 계층으로 구성됨
- 상세 설계
- 상세 설계는 기능적 요구사항에 중점을 둔다.
- 모듈화: 시스템을 잘 정의되고 관리 가능한 단위(모듈)로 분해
- 모듈 독립성: 다른 모듈과의 상호작용 최소화
- 결합도: 데이터<스탬프<제어<외부<공통<내용결합(코드공유)
- 응집력: 우연<논리<시간<절차<통신<순차<기능
내용결합 | Source code |
공통결합 | Global variables |
외부결합 | 특정 프로토콜, 특정 파일 포멧에 의존 |
제어결합 | 모듈의 실행 흐름이 다른 모듈에 의존 |
스탬프결합 | 특정 구조체 데이터 전송 |
데이터결합 | 데이터 전송 |
기능적 응집 | 단일 작업을 수행하는 기능을 한 모듈에 배치 |
순차적 응집 | 요소의 출력이 다음 요소의 입력이 되는 요소들을 한 모듈에 배치 |
통신 응집 | 동일 형식의 데이터를 처리하는 기능을 한 모듈에 배치 |
절차적 응집 | 특정 절차를 수행하는 기능을 한 모듈에 배치 |
시간적 응집 | 실행 주기가 유사한 기능을 한 모듈에 배치(초기-실행중-종료) |
논리적 응집 | 같은 종류의 기능을 한 모듈에 배치(입력/처리/출력) |
우연적 응집 | 기능의 무작위적 배치 |
- 객체지향 설계 원칙
- 단일 책임 원칙
- 개방 폐쇄 원칙
- 리스코프 교체 원칙
- 인터페이스 분리 원칙
- 의존성 역전 원칙
- 구조적 설계: 구조적 분석의 산출물을 이용한 아키텍처 설계 및 모듈 개발 방법
- 입력: 데이터 흐름도
- 출력: 구조도, 모듈 명세서, 자료사전(DD)
- 구조도(structure chart)
- 모듈/라이브러리: □ / ▥
- 데이터흐름/제어흐름: ○━▶ / ●━▶
- 호출/선택적호출/반복적호출: ↓ / ◇ / ↺
- 데이터 흐름도에 의한 구조도 설계
- 변환 분석에 의한 구조도 설계
- 트랜잭션 분석에 의한 구조도 설계
2. 연습문제 요약