Study Record/Computer Science

[CS] 소프트웨어 설계 원리와 구조적 설계

Sungyeon Kim 2024. 1. 21. 00:57

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) 트랜잭션흐름 중심 설계

여러 출력 경로로 쪼개짐

- 가장 먼저, 트랜잭션 중심부터 규명해야 함