소프트웨어공학

모듈화 응집도, 결합도 우논시절통순기, 내공외제스자

스윙스윙 2021. 8. 30. 23:43

▣ 응집도, 결합도

 1. 응집도

  - 하나의 모듈 내부의 처리 요소들간의 기능적 연관성을 측정하는 척도

  - 응집도는 모듈의 독립성을 나타내는 개념으로, 모듈 내부 구성요소 간 연관 정도

  - 응집도의 유형은 우연적<논리적<시간적(일시적)<절차적<통신적<순차적<기능적 으로 응집도가 높아짐(높을수록 좋음)

 

유형 설명 예시
우연적 응집도
(Coincidental Cohesion)
- 모듈 내 요소들이 뚜렷한 관계 없이 존재
- 서로 다른 상위 모듈에 의해 호출되어 처리상의 연관성이 없는 서로 다른 기능을 수행할 경우의 응집도 (모듈 개념이 상실되어 이해하고 유지보수하기 힘듬)
논리적 응집도
(Logical Cohesion)
- 논리적으로 유사한 기능을 수행하지만 서로 관계는 밀접하지 않음

시간적 or 일시적 응집도
(Temporal Cohesion)
- 모든 기능 요소들이 같은 시간에 모두 실행
- 초기화 함수와 같이 시간적으로 연관이 있는 기능들을 묶어 놓음
절차적 응집도
(Procedural Cohesion)
- 모듈의 수행 요소들이 반드시 특정 순서대로 수행
- 한 모듈 내에서 다수의 기능 요소들이 배열된 순서대로 수행되지만, 한 기능 요소에서 다음 기능 요소로 자료가 아닌 제어가 넘어가는 경우

통신적 응집도
(Communication Cohesion)
- 두 개의 기능을 구현한 함수로 동일한 속성(attribute)을 사용하는 기능을 묶어 놓음
- 동일한 입력과 출력을 이용하여 서로 다른 기능을 수행

순차적 응집도
(Sequential Cohesion)
- 모듈내의 한 요소의 출력이 다음 요소의 입력으로 사용
- 두 개의 기능을 구현한 함수로 하나의 기능의 결과가 다른 기능의 입력으로 사용됨
기능적 응집도
(Functional Cohesion)
- 모듈 내부의 모든 요소들이 단일 기능을 수행
- 하나의 문제를 수행하는 기능을 구현한 함수

 

 2. 결합도

  - 소프트웨어 구조 내에서 모듈간의 관련성을 측정하는 척도

  - 결합도는 모듈 내부가 아닌 외부의 모듈과의 연관도 또는 모듈 간의 상호의존성을 나타내는 정도

  - 결합도의 유형은 내용>공통>외부>제어>스탬프>자료 결합도 순으로 결합도가 낮아짐 (낮을수록 좋음)

유형 설명 예제 구문
내용 결합도
(Content Coupling)
- 한 모듈이 다른 모듈 내부적인 기능 혹은 자료를 직접 참조하거나 수정하는 경우임
- 하나의 모듈이 직접적으로 다른 모듈의 내용을 참조할 때 두 모듈은 내용적으로 결합되어 있는 경우의 결합도 (피해야 함)
[A모듈] GO TO BB
AA;

[B모듈] BB :
GO TO AA;
공통 결합도
(Common Coupling)
- 서로 다른 모듈이 전역변수를 공유하여 통신하는 방식
- 타 모듈로 오류전파 가능성 크며 자료 무결성도 유지하기 힘듬
Common DS
전역변수 사용
외부 결합도
(External Coupling)
- 외부 변수로 선언된 데이터(예를 들어 설정파일 등)를 2개 이상의 모듈이 서로 참조하여 통신하는 방식
- 두개의 모듈이 외부에서 도입된 데이터 포맷, 통신 프로토콜, 또는 디바이스 인터페이스를 공유할 때 발생(기본적으로 외부 툴이나 디바이스와의 통신과 관련이 있음)
[A모듈]
Read config

[B모듈]
Read config
제어 결합도
(Control Coupling)
- 한 모듈이 다른 모듈의 내부 논리를 제어하기 위한 목적으로 제어 신호를 주고 받는 경우용하여 통신하는 경우의 결합도
- 하위 모듈에서 상위 모듈로 제어 신호가 이동하여 상위 모듈에게 처리 명령을 부여하는 권리 전도 현상(inversion of authority)이 발생하는 결합도
[A모듈]
Call B (a)

[B모듈]
IF (a = 1)
   (a = 2)
내부제어가 조정
스탬프 결합도
(Stamp Coupling)
- 모듈 간 스탬프를 사용해 통신한다는 것은 모듈간 자료구조(레코드나 배열 등)를 사용해 통신한다는 것임, struct 구조체 사용
- 주고 받는 자료 구조에 불필요한 데이터의 존재가 생길 수 있고 필요 이상의 자료가 모듈에 전달될 수 있는 문제가 있음
- 모듈 간의 인터페이스로 배열이나 객체, 구조 등이 전달되는 경우의 결합도
[A모듈]
Call B(구조체)
struct 구조체 사용
자료 결합도
(Data Coupling)
- 모듈 간 매개변수로 통신함
- 매개변수로 통신한다는 것은 서로 인터페이스를 통해 통신한다는 이야기이며, 이것은 서로 상대방 모듈의 내부 구현에는 간섭하지 않는다는 것을 의미함
- 모듈 간의 인터페이스로 전달되는 파라미터를 통해서만 모듈 간의 상호 작용이 일어나는 경우의 결합도 (가장 이상적)
- 모듈 간의 매개변수로 통신하는 결합도
[A모듈]
Call B (데이터)
모듈간 매개변수로 통신

2015년 32번

정답 : 1번

내용>공통>외부>제어>스탬프>자료 

* 내공외제스자

 


2015년 40번

정답 : 3번

응집도는 모듈 내부의 요소를 대상으로 하므로 우선 모듈과 내부요소가 무엇인지 파악해야 함

문제 소스코드에서 모듈은 setValue함수라고 할 수 있고, 내부 요소는 2개의 각 if문임

응집도는 모듈 내부 요소간의 관계를 보는 것인데,  문제를 보면 각 요소들(if문)은 단지 if문이라는 공통점만 있을 뿐 서로 큰 관련은 없음 -> 논리적 응집

 

결합도는 모듈 간의 관련성을 보는 것으로,  문제 소스코드에서 한 모듈은 setValue 함수이고, 다른 한 모듈은 SetValue함수를 호출하는 대상임.

 'String name, int value' 이라는 2개의 파라메터를 통해 관계를 주고 받음

 여기까지만 보면 자료 결합(Data Coupling)이라고 생각할 수도 있지만,  name의 값에 따라 제어문(if문)이 통제됨으로 제어결합임

논리적 응집도
(Logical Cohesion)
- 논리적으로 유사한 기능을 수행하지만 서로 관계는 밀접하지 않음

제어 결합도
(Control Coupling)
- 한 모듈이 다른 모듈의 내부 논리를 제어하기 위한 목적으로 제어 신호를 주고 받는 경우용하여 통신하는 경우의 결합도
- 하위 모듈에서 상위 모듈로 제어 신호가 이동하여 상위 모듈에게 처리 명령을 부여하는 권리 전도 현상(inversion of authority)이 발생하는 결합도
[A모듈]
Call B (a)

[B모듈]
IF (a = 1)
   (a = 2)
내부제어가 조정

 


2014년 49번

정답 : 4번

- 한 모듈이 다른 모듈의 내부논리를 제어하기 위한 목적으로 제어신호를 이용해 통신하는 결합성에

   해당되므로 제어 결합도임

제어 결합도
(Control Coupling)
- 어떤 모듈이 다른 모듈의 내부 논리 조직을 제어하기 위한 목적으로 제어 신호를 이용하여 통신하는 경우의 결합도
- 하위 모듈에서 상위 모듈로 제어 신호가 이동하여 상위 모듈에게 처리 명령을 부여하는 권리 전도 현상(inversion of authority)이 발생하는 결합도
[A모듈]
Call B (a)

[B모듈]
IF (a = 1)
   (a = 2)
내부제어가 조정

 

- 관계가 있는 요소들로 하나의 모듈이 형성되나 If문을 통해 하나 이상의 작업을 담고 있는 경우에

   해당되므로 논리적 응집도임

논리적 응집도
(Logical Cohesion)
- 논리적으로 유사한 기능을 수행하지만 서로 관계는 밀접하지 않음

 


2011년 28번

정답 : 2번

struct 구조체를 이용하는 것을 알 수 있음. 따라서 문제 결합 유형은 '스탬프 결함'임

스탬프 결합도
(Stamp Coupling)
- 모듈 간 스탬프를 사용해 통신한다는 것은 모듈간 자료구조(레코드나 배열 등)를 사용해 통신한다는 것임
- 주고 받는 자료 구조에 불필요한 데이터의 존재가 생길 수 있고 필요 이상의 자료가 모듈에 전달될 수 있는 문제가 있음
- 모듈 간의 인터페이스로 배열이나 객체, 구조 등이 전달되는 경우의 결합도
[A모듈]
Call B(구조체)
struct 구조체 사용

 


2012년 34번

정답 : 2번

절차적 응집도(procedural cohesion) : 한 모듈 내에서 다수의 기능 요소들이 배열된 순서대로 수행되지만,

한 기능 요소에서 다음 기능 요소로 자료가 아닌 제어가 넘어가는 경우

절차적 응집도
(Procedural Cohesion)
- 모듈의 수행 요소들이 반드시 특정 순서대로 수행
- 한 모듈 내에서 다수의 기능 요소들이 배열된 순서대로 수행되지만, 한 기능 요소에서 다음 기능 요소로 자료가 아닌 제어가 넘어가는 경우

 


2012년 45번

정답 : 4번

소스코드를 보면 두 모듈(doSomething함수와 doSomething함수를 호출하는 함수)은 xyz라는 전역변수를 공유하고 있어서 공통 결합도임

공통 결합도
(Common Coupling)
- 서로 다른 모듈이 전역변수를 공유하여 통신하는 방식
- 타 모듈로 오류전파 가능성 크며 자료 무결성도 유지하기 힘듬
Common DS
전역변수 사용

 

 


2013년 45번

정답 : 2번

내공외제스자, 함수 f2가 자료결합으로 가장 약한 결합도임

f1 함수는 공통결합 : g라는 전역변수를 공유하고 있음

f2 함수는 자료결합 : x, y변수를 이용해 모듈간 매개변수로 통신하고 있음

f3 함수는 스템프 결합 : struct RECT라는 구조체 이용

f4 함수는 제어결합 : p인자로 인해 내부 제어가 조종되고 있으므로 제어 결합

 


2013년 50번

정답 : 3번

-id 변수 이용해 내부적인 제어를 수행하므로 제어결합임

 


2018년 46번

정답 : 2번

coincidental cohesion - logical cohesion - temporal cohesion - procedural cohesion -
communicational cohesion  - sequential cohesion - functional cohesion
우연적 - 논리적 - 일시적 - 절차적 - 통신적 - 순차적 - 기능적 응집도를 영어로 적절하게 표현한 것

 


2021년 36번

정답 : 1번

응집도의 유형은 우연적<논리적<시간적(일시적)<절차적<통신적<순차적<기능적 으로 응집도가 높아짐(높을수록 좋음)

 

마. 기능적 : 하나의 문제를 수행하는 기능을 구현한 함수이다.

라. 순차적 : 두 개의 기능을 구현한 함수로 하나의 기능의 결과가 다른 기능의 입력으로 사용된다.

나. 통신적 : 두 개의 기능을 구현한 함수로 동일한 속성(attribute)을 사용하는 기능을 묶어 놓았다.

다. 시간적(일시적) : 초기화 함수와 같이 시간적으로 연관이 있는 기능들을 묶어 놓았다.

가. 우연적 : 서로 연관성이 없는 기능들을 묶어 놓았다.