[소프트웨어 공학] 11.설계

이번에는 정보처리기사 필기 과목인 소프트웨어 공학의 설계를 살펴보아요.

설계 모형의 구조도

설계 모형의 구성
프로시저 절차 설계 – 기능의 수행 흐름을 절차식으로 기술
인터페이스 설계 – 상호 작용에 관한 약속을 기술
아키텍쳐 설계 – 소프트웨어를 구성하는 요소 간의 관계를 기술
데이터 설계 – 요구 분석 단계 결과로 소프트웨어 구현에 필요한 데이터 구조를 기술

좋은 설계
모듈화가 이루어져야 한다.
모듈간에 독립성을 보장하고 결합도를 낮춘다.
요구 사항을 모두 구현하고 유지보수가 쉬워야 한다.
자료와 프로시저에 대한 분명하고 분리 표현을 포함해야 한다.
소프트웨어 요소 간의 효과적인 제어를 위해 계층적 조직을 제시해야 한다.

추상화
세부적인 사항을 설계하기 전에 전체적이고 포괄적인 개념을 설계하는 과정
기능 추상화 – 입력 자료를 출력 자료로 변환하는 과정을 추상화
제어 추상화 – 제어의 정확한 매커니즘을 정의하는 것이 아니라 원하는 효과를 정하는 과정
자료 추상화 – 자료와 자료에 적용할 수 있는 기능을 함께 정의하여 자료 개체를 구성하는 방법

모듈화
소프트웨어를 구성하는 단위로 나누는 과정

프로그램의 계층적 구조
트리 형태로 표현
상위 모듈은 하위 모듈을 제어
Fan In : 자신을 사용하는 모듈의 수 (A:0, B:1, C:1, D:1, E: 1, F:2, G:1, H:2, I:1, J:1)
Fan Out: 자신이 호출하는 모듈의 수(A:3, B:2, C:2, D:1, E:1, F:1, G:1, H:0, I:0, J:0)

프로그램의 계층적 구조

결합도(Coupling)
모듈 사이에 의존하는 정도
아래로 내려갈 수록 결합도가 강해집니다.
자료 결합도: 한 모듈이 다른 모듈을 호출할 때 인자로 전달하고 결과로 돌려받는 데이터
스탬프 결합도: 서로 다른 모듈이 같은 자료 구조를 조회
제어결합도: 상위 모듈이 하위 모듈을 호출
외부결합도: 한 모듈에 선언한 변수를 다른 모듈에서 참조
공통 결합도: 공통 데이터 영역을 여러 모듈이 사용
내용 결합도: 한 모듈이 다른 모듈의 내부 기능이나 자료를 직접 참조하거나 수정

응집도(Cohesion)
한 모듈 내부의 처리 요소들 간의 기능적 연관 정도
모듈이 독립적인 기능으로 정의한 정도
아래로 내려갈 수록 응집도가 약해집니다.
기능적(Functional): 모듈의 모든 기능이 하나의 문제와 연관
순차적(Sequential): 모듈의 구성 요소가 하나의 활동으로부터 나온 출력 자료를 그 다음 활동의 입력 자료로 사용
통신적(Communication): 같은 입출력을 사용하여 서로 다른 기능으로 모듈을 구성
절차적(Procedural): 절차적으로 처리해야 하는 기능을 하나의 모듈로 구성
시간적(Temporal): 같은 시간에 처리해야 할 기능들을 하나의 모듈로 구성
논리적(Logical): 논리적으로 유사한 처리 요소를 하나의 모듈로 구성
우연적(Coincidental): 서로 간에 어떠한 의미 있는 연관 관계도 지니지 않은 기능 요소로 구성
서로 다른 상위 모듈에 의해 호출되어 처리상의 연관성이 없는 서로 다른 기능을 수행

자료 흐름 중심 설계 절차
1. 정보 흐름의 유형을 설정
2. 흐름의 경계를 표시
3. 자료 흐름도를 프로그램 구조로 사상
4. 제어 계층을 분해하여 정의
5. 경험적 방법으로 구체화