상위 설계와 하위 설계
상위 설계
- 아키텍처 설계, 예비 설계라고 함
- 소프트웨어 구성 컴포넌트들 간의 관계로 구성된 시스템의 전체적인 구조
- 시스템 구조도, 외부 파일 및 DB 설계도, 화면 및 출력물 레이아웃 등을 포함
하위 설계
- 모듈 설계, 상세 설계라고 함
- 시스템의 각 구성 요소들의 내부 구조, 동적 행위 등을 결정
- 하위 설계 방법
- 절차기반(Procedure-Oriented), 자료위주(Data-Oriented), 객체지향(Object-Oriented) 설계 방법
설계 프로세스
좋은 설계란
- 요구사항 명세서의 모든 내용을 구현해야 함
- 구현 또는 테스트로 추적이 가능해야 함
- 유지 보수 시 변경이 용이해야 함
설계 방식
- 프로세스 지향 설계 (Process Oriented Design)
- 객체 지향 설계 (Object Oriented Design)
설계 원리
추상화
- 의미: 자세한 구현 전에, 상위 레벨에서 제품의 구현을 먼저 생각해보는 것
- 과정 추상화
- 자세한 단계를 고려하지 않고 상위 수준에서 수행 흐름만 먼저 설계
- 데이터 추상화
- 데이터 구조를 대표할 수 있는 표현으로 대체하는 것
- ex) 날짜 구조를 단순히 "날짜"로 추상화
- 제어 추상화
- 3-A와 3-B를 “3. 윤년 여부에 따라 요일 계산을 수행한다.”로 추상화 하는 것
예제: 원하는 날짜를 입력으로 받아 요일을 알려주는 만년 달력 프로그램
단계적 분해
- 문제를 상위 개념 부터 더 구체적인 단계로 분할하는 탑다운 기법의 원리
- 모듈에 대한 구체 설계를 할 때 사용
모듈화
모듈의 의미
- 수행 가능 명령어, 자료구조 또는 다른 모듈을 포함하고 있는 독립 단위
특성
- 이름을 가짐
- 독립적으로 컴파일
- 다른 모듈을 사용할 수 있음
- 다른 프로그램에서 사용될 수 있음
효과적인 모듈 설계
정보 은닉
- 인터페이스를 통해서만 메시지를 전달 할 수 있도록 하는 개념
- 자바에서 private과 public
- private은 모듈 내에서 사용하기 때문에 바꿔도 다른 모듈에 영향 X
장점
- 모듈의 구현을 독립적으로 맡길 수 있음
- 설계 과정에서 하나의 모듈이 변경되더라도 설계에 영향을 주지 않음
모듈의 응집력
- 모듈을 이루는 각 요소들의 서로 관련되어 있는 정도
- 강한 응집력을 갖는 모듈을 만드는 것이 모듈 설계의 목표
응집력의 종류 (밑으로 갈수록 응집력 약함, 응집력이 약하면 안좋음)
- 기능적 응집: 잘 정의된 하나만의 기능만을 수행
- 교환적 응집: 2개 이상의 기능이 존재하고 단계별 순서에 의해서만 수행, 각 기능은 동일한 입력 다른 출력
- 절차적 응집: 입출력을 공유하지 않지만 순서에 따라 수행될 필요가 있는 경우
- 시간적 응집: 초기화 같이 한 번만 수행되는 요소들이 포함된 형태
- 논리적 응집: 비슷한 성격을 갖거나 특정 형태로 분류되는 처리 요소
- 우연적 응집: 아무 관련 없는 처리 요소들로 형성
모듈의 결합도
- 모듈간에 연결되어 상호 의존하는 정도
- 낮은 결합도를 갖는 모듈(Loosely coupled)을 만드는 것이 목표
- 결합도가 강하면 유지보수가 힘들어짐
모듈간의 의존도(아래로 갈수록 결합도 강함, 결합도가 강하면 안좋음)
- 자료 결합: 모듈 간의 인터페이스가 자료 요소로만 구성된 경우
- 구조 결합: 모듈간의 인터페이스로 배열이나 레코드 등의 자료 구조가 전달되는 경우
- 제어 결합: 제어 요소(function code, switch, tag 등)를 전달하는 경우
- 공통 결합: 여러 모듈이 공동 자료 영역을 사용하는 경우
- 내용 결합: 한 모듈이 다른 모듈의 일부분을 직접 참조 또는 수정하는 경우
reference
- 상명대학교 한종대교수님 소프트웨어공학 수업
'컴퓨터과학 > 소프트웨어공학' 카테고리의 다른 글
[소프트웨어공학] 검증과 확인 - 테스팅(화이트박스/블랙박스/기본경로) (0) | 2021.06.02 |
---|---|
[소프트웨어공학] 설계 2 - 객체 지향, 클래스 다이어그램, 시퀀스 다이어그램 (0) | 2021.05.17 |
[소프트웨어공학] 프로젝트 계획 및 통제 - WBS, PERT, Gantt, EVM (0) | 2021.04.13 |
[소프트웨어공학] 프로젝트 산정 - Delphi, LOC, COCOMO, FP (0) | 2021.04.12 |
[소프트웨어공학] 요구사항 개발 및 관리 - 요구사항, 유스케이스 다이어그램 (0) | 2021.03.29 |
댓글