[CS] 소프트웨어 설계 원리와 구조적 설계
1. 소프트웨어 설계 원리
분할과 정복 원리 (Divide and Conquer)
*서브시스템: 상위레벨에서 분할한 시스템 구성 요소, 독립적으로 기능 수행 가능
1) 추상화 (Abstraction)
자료(Data) 추상화, 제어(Control) 추상화, 과정(Procedure) 추상화
*엔지니어링: 추상화 -> 구체화
2) 정보 은닉 (Information Hiding)
(1) 내부 내용 감추고 (2) 인터페이스 통해서만 메시지 전달
-> 모듈 사이 독립성 유지 -> 변화에 쉽게 적응, 유지보수 용이
3) 단계적 정제 (Stepwise Refinement)
추상화 -> 구체화
4) 모듈화
서브루틴, 프로시저, 함수 등
-> 복잡도 문제 해결 -> 유지보수, 수정 용이
5) 구조화
시스템을 어떻게 분할하면 좋을지
2. 좋은 설계의 원칙: 응집도와 결합도
좋은 설계란 (1) 설계 문서 이해 잘 됨 (2) 시스템 변경시 그 영향이 국소화
1) 응집도
모듈 내부가 얼마나 강한 연관성으로 뭉쳐져 있는가
모듈 내의 모든 요소들: 하나의 논리적 기능 수행, 하나의 논리적 엔티티
(1) 기능적 응집도: 모듈 내 모든 기능 요소들이 단일 문제와 연관되어 수행
(2) 순차적 응집도: 모듈 내 한 활동의 출력이 다음 활동의 입력
(3) 교환(통신)적 응집도: 동일한 입력, 출력을 사용하여 서로 다른 기능 수행하는 구성 요소들
(4) 절차적 응집도: 모듈이 다수의 관련 기능 가질 때, 구성 요소들이 그 기능을 순차적으로 수행
(5) 시간적 응집도: 동일한 시간에 처리되는 몇 개의 기능 모아 하나의 모듈로
(6) 논리적 응집도: 유사한 성격 or 비슷한 형태로 분류되는 요소들끼리 하나의 모듈로
(7) 우연적 응집도: 서로 관련 없는 애들끼리 하나의 모듈로
2) 결합도
모듈 간 연관 관계
결합도 높으면 -> 파문 효과 -> 안 좋아
*파문효과: 한 모듈의 변경이 다른 모듈에까지 큰 영향을 미침
결합도 낮추기 위해 -> 전역 변수 말고, 매개 변수를 사용하여 프로그래밍 하자!
(1) 자료 결합도: 모듈 간 인터페이스가 자료 요소로만 구성, 매개 변수나 인수로 데이터 넘겨줌
(2) 스템프(검인) 결합도: 모듈 간 인터페이스로 배열이나 레코드 등의 자료 구조가 전달
(3) 제어 결합도: 모듈 간 제어 요소(Function Code, Switch, Tag, Flag) 전달
(4) 외부 결합도: 어떤 모듈에서 외부로 선언한 데이터(변수)를 다른 모듈에서 참조
(5) 공통(공유) 결합도: 공통 데이터 영역 공유
(6) 내용 결합도: 한 모듈이 다른 모듈의 내부 기능 및 자료 직접 참조 or 수정
3. 구조적 설계 방법
= 자료 흐름 중심 설계 = 구조적 분석 결과(버블 차트, 자료흐름도(DFD)) -> 구조적 설계(구조도표)
*구조도표: SW 구조와 설계 구체적으로 나타냄
*플래그: ON or OFF 값 -> 조건 발생 암시, 경계 구분
1) 변환흐름 중심 설계
(1) 입력흐름: 입력 프로세스 묶음
(2) 변환중심: 입력 정보 가공 처리 프로세스 묶음
(3) 출력흐름: 출력 프로세스 묶음
- 입력 제어 모듈은 하위계층의 모듈로부터 입력 데이터를 받아 상위계층의 모듈에 보내고,
- 출력 제어 모듈은 상위계층의 모듈로부터 출력 데이터를 받아 하위계층의 모듈에 보낸다.
2) 트랜잭션흐름 중심 설계
여러 출력 경로로 쪼개짐
- 가장 먼저, 트랜잭션 중심부터 규명해야 함