정보처리기사/소프트웨어 설계
애플리케이션 설계 2
RangA
2023. 4. 26. 17:02
모듈의 평가
01. 소프트웨어 모듈 결합도
1) 결합도의 순서
결합도 | 정도 |
---|---|
자료 결합도 | ↑ |
스탬프 결합도 | |
제어 결합도 | |
외부 결합도 | |
공통 결합도 | |
내용 결합도 | ↓ |
2) 자료 결합도(Data Coupling)
- 두 모듈 간의 인터페이스가 자료 요소만으로 구성된 결합으로 가장 좋은 결합도로 실인수와 가인수의 번지가 독립적으로 사용
- 실인수와 가인수
- 하나의 모듈에서 다른 모듈을 호출할 때 넘겨주는 변수를 실인수, 넘겨받는 변수를 가인수라고 함
- 자료 결합은 이 두 개의 변수가 같은 기억 장소를 공유하지 않기 때문에 결합력이 매우 약함
- 공통 결합은 두 개의 인수가 동일한 기억 장소를 공유하기 때문에 결합력이 매우 높음
- 실인수와 가인수
- 결합된 모듈로 단일 파일 또는 동종 테이블을 매개 변수로 통신하는 모듈 간의 결합성을 가진 관계를 말함
- 모듈 간의 인터페이스로 전달되는 파라미터를 통해서만 상호 작용이 일어나는 경우
- Call By Value 형태로 가장 좋은 결합 형태
- Ex) 제곱근을 계산하는 함수에 하나의 정수를 전달하는 경우
3) 스탬프 결합도(Stamp Coupling, 구조 결합)
- 두 모듈 간에 같은 레코드를 부분적으로 공유하는 것으로, 모듈 간 독립성은 유지되지만 같은 작업 대상인 자료로 묶인 결합을 의미
- 두 모듈 간에 인터페이스가 배열이나 레코드 등의 자료 구조가 전달된 경우
- 모듈 간의 인터페이스로 객체나 구조적인 데이터 등이 전달되는 경우
- 특히 두 모듈이 동일한 자료 구조를 조회하는 경우의 결합성이며, 포맷이나 구조의 변화는 그것을 조회하는 모든 모듈 및 변화되는 필드를 실제로 조회하지 않는 모듈까지로 영향을 미치게 됨
4) 제어 결합도(Control Coupling)
- 처리하는 방법을 제어 요소로 전달되는 경우
- 모듈 간에는 제어 변수로 종속적인 관계를 가짐
- 호출 모듈에서 전달된 자료에 의해서 운용되는 피 호출 모듈의 관계로 모듈 간에는 제어 변수로 종속적인 관계를 가짐
- 제어 결합은 논리 조작을 제어하기 위한, 목적, 상위 모듈에게 처리 명령을 부여하는 권리를 전도하는 현상
- 단순 처리할 대상인 값만 전달되는 게 아니라 어떻게 처리를 해야 한다는 제어 요소가 전달되는 경우
5) 외부 결합도(Extern Coupling)
- 외부 변수에 의해 영향을 받는 두 모듈이 결합된 관계를 가짐
- 모듈 외부에서 데이터, 프로토콜, 인터페이스 등을 공유할 때 발생하는 경우
- 외부 변수에 의해 영향을 받는 두 모듈이 결합된 관계로 모듈 내부에서 외부 변수를 사용하게 되면 외부 변수에 의해 두 모듈이 결합력이 높아지며, 경우에 따라 부작용이 발생할 수 있는 결합
6) 공통 결합도(Common Coupling)
- 모듈이 다른 모듈의 내부 자료를 참조하는 형태의 결합된 관계를 가짐
- 모듈 외부에 선언되어 있는 전역 변수를 참조하고 상호 작용하는 경우
- 파라미터가 아닌 모듈 밖에 선언되어 있는 동일한 전역 변수를 참조하고 전역 변수를 갱신하는 식으로 상호 작용하는 경우
- Call By Reference 형태
7) 내용 결합도(Content Coupling)
- 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 참조하는 형태의 결합된 관계를 가짐
- 가장 좋지 않은 결합으로 내용 결합도를 갖는 모듈들은 다시 설계해야 함
- 모듈 내부에 있는 변수나 기능을 다른 모듈에서 직접적으로 사용(참조)하는 경우
02. 소프트웨어 모듈 응집도
1) 응집도의 순서
응집도 | 정도 |
---|---|
기능적 응집도 | ↑ |
순차적 응집도 | |
통신적 응집도 | |
절차적 응집도 | |
시간적 응집도 | |
논리적 응집도 | |
우연적 응집도 | ↓ |
2) 우연적 응집도(Coincidental Cohesion)
- 모듈 내부의 루틴들이 뚜렷한 관계없이 묶인 경우로 응집도가 가장 약하고 가장 좋지 않은 모듈 설계
- 서로 간에 어떠한 의미 있는 연관 관계도 지니지 않은 기능 요소로 구성되는 경우
- 서로 다른 상위 모듈에 의해 호출되어 처리상의 연관성이 없는 서로 다른 기능을 수행하는 응집도
- 가장 좋지 않은 응집 형태로 모듈화의 장점도 없으며, 유지보수를 어렵게 만듦
3) 논리적 응집도(Logical Cohesion)
- 모듈 내부의 루틴들이 같은 범주에 속하는 기능끼리 묶인 모듈
- 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우
4) 시간적 응집도(Temporal Cohesion)
- 모듈 내부의 루틴들이 시간적으로 수행 시기가 같은 기능끼리 묶인 모듈
- 같은 시간에 처리되어야 하는 활동들이 묶인 경우
- 연관된 기능이라기보다는 특정 시간에 처리되어야 하는 활동들을 한 모듈에서 처리하는 경우
- 초기치 설정, 종료 처리 등의 경우
5) 절차적 응집도(Procedure Cohesion)
- 모듈 내부의 루틴들이 수행 시기가 순위가 있는 기능끼리 묶인 모듈
- 모듈 안의 구성 요소들이 순차적으로 수행할 경우
- 모듈이 다수의 관련 기능을 가질 때 모듈 안의 구성 요소들이 그 기능을 순차적으로 수행할 경우
6) 통신적 응집도(Communication Cohesion, 정보적, 교환적)
- 모듈 내부의 루틴들 중 작업 대상이 같은 기능끼리 묶인 모듈
- 동일한 입력과 출력을 사용하는 작업이 모인 경우로 일반적으로 하나의 파일을 대상으로 갱신 작업을 하는 루틴끼리 묶인 모듈이 속함
7) 순차적 응집도(Sequential Cohesion)
- 모듈 내부의 루틴(구성 요소)들이 이전의 명령어(활동)로부터 나온 출력 결과(자료)를 다음 명령어(활동)의 입력 자료로 사용하는 경우
- 모듈 내에서 한 활동으로부터 나온 출력값을 다른 활동의 입력값으로 사용하는 경우
- 행렬 입력 후 그 행렬의 역행렬을 구해서 이를 출력하는 경우
8) 기능적 응집도(Functional Cohesion, 함수적 응집도)
- 모듈 내부가 하나의 단일 기능으로 존재하는 경우로 프로그램 언어에서 지원받는 라이브러리가 모두 이에 속함
- C 언어에서는 sin(), cos(), sqrt(), scanf(), printf() 등이 있음
- 구조도 최하위 모듈(트리 구조의 단노드)에서 많이 발견됨
- 응집도 중 가장 강하고 좋은 모듈이라고 할 수 있음