정보처리기사/소프트웨어 설계

애플리케이션 설계 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() 등이 있음
  • 구조도 최하위 모듈(트리 구조의 단노드)에서 많이 발견됨
  • 응집도 중 가장 강하고 좋은 모듈이라고 할 수 있음