제1장. 소프트웨어 모듈화
제1절. 모듈화의 정의
l  시스템을 분해하고 추상화하여 소프트웨어의 성능을 향상시키거나 시스템의 디버깅시험통합 및 수정을 용이하도록 하는 소프트웨어 설계 기법
l  모듈화는 소프트웨어를 각 기능별로 분할하는 것을 의미하며각 기능별로 분할한 것을 모듈이라고 한다.
 
제2절. 모듈화의 장점
l  프로그램의 효율적인 관리 및 성능 향상
l  전체적인 소프트웨어 이해의 용이성 증대 및 복잡성 감소
l  소프트웨어 시험통합수정 시 용이성 제공
l  기능의 분리가 가능하고 인터페이스가 단순
l  오류의 파급 효과를 최소화
l  모듈의 재사용 가능으로 개발과 유지보수가 용이
 
제3절. 모듈화의 목표
l  모듈 간 결합도의 최소화
l  모듈 내 요소들 간의 응집도 최대화
 
제4절. 모듈의 기능적 독립성
l  모듈이 하나의 기능만을 수행하고 다른 모듈과의 과도한 상호 작용을 배제함으로써 이루어진다.
l  기능적으로 독립된 모듈은 특정 기능을 수행하고다른 모듈과는 간단한 인터페이스만을 가지므로 개발이 쉽고 재 사용이 가능하다.
l  독립성이 높은 모듈일수록 모듈을 수정하더라도 다른 모듈들에게는 거의 영향을 미치지 않으며오류가 발생해도 쉽게 발견하여 해결할 수 있다.
 
제2장. 결합도 (Coupling)
제1절. 결합도의 정의
l  모듈간에 상호 의존하는 정도 또는 두 모듈 사이의 연관 관계를 의미한다.
 
제2절. 결합도의 목표
l  모듈 상호간 낮은 결합도 추구하여 의존하는 모듈이 적어야 한다.
l  오류 발생시 전파되어 다른 오류의 원인이 되는 파급 효과를 최소화해야 한다.
 
제3절. 결합도 스펙트럼

[감리사-2015-32] 모듈 사이의 결합은 강한 정도(가장 바람직하지 못한 경우)에서부터 약한 정도(가장 바람직한 경우)에 이르기까지 나열할 수 있다다음 보기 중 강한 정도에서 약한 정도 순으로 가장 적절하게 나열된 것은?
 
1. 내용결합도 - 공통결합도 - 제어결합도 - 스템프 결합도 - 자료결합도
2. 내용결합도 - 제어결합도 - 공통결합도 - 스템프 결합도 - 자료결합도
3. 내용결합도 - 공통결합도 - 스템프결합도 - 제어 결합도 - 자료결합도
4. 내용결합도 - 제어결합도 - 스템프결합도 - 공통 결합도 - 자료결합도
[감리사-2005-43] 소프트웨어의 모듈간의 결합도(coupling)와 모듈내 요소간의 응집도(cohesion)에 대해서 소프트웨어 설계시 가장 바람직 한 것은?
 
1. 응집도는 높게 결합도는 낮게 설계한다.
2. 응집도는 낮게 결합도는 높게 설계한다.
3. 양쪽 모두 낮게 설계한다.
4. 양쪽 모두 높게 설계한다.
[감리사-2009-44] 다음중에서 소프트웨어 설계시 결합도와 응집도 측면에서 가장 바람직한 항목으로 묶여진 것은 어느것인가?
 
1. 내용 결합(content coupling) – 순차적 응집(sequential cohesion)
2. 스탬프 결합(stamp coupling) – 교환적 응집(communicational cohesion)
3. 자료 결합(data coupling) – 기능적 응집(functional cohesion)
4. 제어 결합(control coupling) – 시간적 응집(temporal cohesion)

 
제1항. 자료 결합도 (Data Coupling)
ü  한 모듈이 다른 모듈을 호출할 때 필요한 자료만을 매개변수로 전달하여 참조하는 경우

[감리사-2014-49] 다음과 같은 C 프로그램이 주어졌을 때모듈 abc와 모듈 def 간의 결합도와 모듈 def의 응집도를 가장 적절하게 나타낸 것은?
 
void abc(void) {     
      int a, b, in;     
      int res;     
      scanf("%d %d %d", &a, &b, &in);     
      res = def(a, b, in);
      printf("result = %d\n", res);
}
 
int def(int x, int y, int v) {     
      if(v > 0) {        
            return(x+y);
      } 
      else {        
            return(x-y);
      }
}
 
1. 자료 결합도(data coupling),      교환적 응집도(communication cohesion)
2. 공통 결합도(common coupling),  절차적 응집도(procedural cohesion)
3. 자료 결합도(data coupling),      절차적 응집도(procedural cohesion)
4. 제어 결합도(control coupling),    논리적 응집도(logical cohesion)

 
제2항. 스탬프 결합도 (Stamp Coupling)
ü  두 모듈이 동일한 복합 자료 구조(배열구조체 등)를 매개변수로 전달하여 참조하는 경우
 

[감리사-2011-28] 다음 코드에서 함수의 결합도는?
 
struct {
      int x, y;
} X;
 
int doSomething(struct X p) {
      return p.x + p.y;
}
 
1. 데이터(data) 결합도
2. 스탬프(stamp) 결합도
3. 제어(control) 결합도
4. 공통(common) 결합도

 
제3항. 제어 결합도 (Control Coupling)
ü  한 모듈이 다른 모듈의 내부에서 작용하는 논리적 흐름을 제어하기 위하여 제어 플래그(Flag)나 정보를 매개변수로 전달하는 경우
 

[감리사-2015-40] 다음의 상단 코드는 하단의 코드로 리팩토링하는 것이 권장된다상단의 코드를 응집도와 결합도 측면에서 올바르게 설명한 것은?
 
void setValue(String name, int value) 
{   
      if ( name.equals(“height”) ) {
            height = value ;   
       }   
      
      if ( name.equals(“width”) ) {
            width = value ;
      }
}
 
void setHeight(int arg) {   _height = arg ; }
void setWidth(int arg) {   _width = arg ; }
 
1. 응집도기능적 응집도결합도데이터 결합도
2. 응집도논리적 응집도결합도데이터 결합도
3. 응집도논리적 응집도결합도제어 결합도
4. 응집도기능적 응집도결합도제어 결합도

 
제4항. 외부 결합도 (External Coupling)
ü  모듈들이 외부 환경(특수 H/W, 통신프로토콜, OS, 컴파일러 등)과 연관되어 있는 경우
 
제5항. 공통 결합도 (Common Coupling)
ü  모듈들이 동일한 자료영역(전역변수을 공통으로 조회하는 경우
ü  동일한 자료 영역내의 오류 발생시 타 모듈로 오류 전파 가능성이 큼
 

[감리사-2012-45] 다음 코드에서 함수의 결합도는?
 
int xyz = 0; 
int doSomething(int delta) {   
      xyz += delta;   
      return xyz;
}
 
1. 자료(data) 결합도
2. 스탬프(stamp) 결합도
3. 제어(control) 결합도
4. 공통(common) 결합도

 
제6항. 내용 결합도 (Contents Coupling)
ü  한 모듈이 다른 모듈의 내부 기능 및 자료를 직접 참조하거나 수정하는 경우
ü  한 모듈에서 다른 모듈의 중간으로 분기되는 경우에도 내용 결합도에 해당된다.
 

 
제3장. 응집도 (Cohesion)
제1절. 응집도의 정의
l  하나의 모듈 내부의 처리 요소들 간의 기능적 연관성을 측정하는 척도
l  모듈안의 요소들이 서로 관련되어 있는 정도 즉모듈이 독립적인 기능으로 정의되어 있는 정도를 말하는 것으로독립적인 모듈이 되기 위해서는 각 모듈의 응집도가 강해야 한다.
 
제2절. 응집도의 목표
l  가능한 높은 응집도를 추구하여 유지보수 용이성을 확보
 
제3절. 응집도 스펙트럼

제1항. 기능적 응집도(Functional Cohesion)
ü  모듈 내부의 모든 기능 요소들이 단일 문제와 연관되어 수행될 경우
ü  모든 명령이 한가지 문제해결을 위한 작업을 수행
ü  코사인 계산
 
제2항. 순차적 응집도(Sequential Cohesion)
ü  한 활동의 출력이 다음 활동의 입력으로 사용
ü  파일에서 데이터를 읽고 데이터를 처리하는 기능
 
제3항. 통신적 응집도(Communicational Cohesion)
ü  서로 다른 기능이 동일자료를 사용하나 처리순서는 상관없음
ü  모듈의 모든 기능이 동일한 데이터 구조를 참조하거나 업데이트하는 경우 모듈은 통신적 응집력을 가지고 있다고 합니다.
ü  배열 또는 스택에 정의된 함수 집합
 
제4항. 절차적 응집도(Procedural Cohesion)
ü  모듈이 다수의 관련 기능을 가질 경우모듈 안의 구성 요소들이 그 기능을 순차적으로 수행할 경우
ü  관련없는 기능요소가 배열된 순서로 수행되는 것으로 한 모듈내의 활동들이 순차적으로 수행한다.
ü  요소들이 서로 관련이 없다는 점을 제외하면 순차 응집력과 유사합니다.
 

[감리사-2012-34] 모듈의 독립성을 측정하는데 있어 응집도(cohesion)는 모듈 안의 요소들이 서로 관련되어 있는 정도를 나타내는데다음 설명은 어느 응집도를 나타내는 것인가?
 
한 모듈 내에서 다수의 기능 요소들이 배열된 순서대로 수행되지만한 기능 요소에서 다음 기능 요소로 자료(data)가 아닌 제어(control)가 넘어가는 경우
   
1. 논리적 응집도(logical cohesion)
2. 절차적 응집도(procedural cohesion)
3. 시간적 응집도(temporal cohesion)
4. 우연적 응집도(coincidental cohesion)

 
제5항. 일시적(시간적응집도(Temporal Cohesion)
ü  모듈의 기능 요소들이 같은 시간에 모두 실행
ü  각 기능 요소가 순서 상관없이 특정시점에 반드시 수행되는 기능이 모여 있는 경우
ü  열린 파일을 닫을 때 예외사항이 발생한 후 호출되는 함수를 예를 들수 있습니다오류 로그를 작성하고사용자에게 알리는 기능이 순서에 상관없이 수행됩니다.
 
제6항. 논리적 응집도(Logical Cohesion)
ü  논리적으로 유사한 기능을 수행하지만 서로의 관계는 밀접하지 않음
ü  유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들로 모듈을 형성하는 경우
ü  모든 마우스 및 키보드 입력 처리 루틴 그룹화

[감리사-2010-32] 다음 코드에서 사용된 함수의 응집도는?
 
void readWrite(int type, int* data, int size) {
      switch(type) {
            0: read(data, size);
            break;
            
            1: write(data, size);
            break;
      }
}
 
1. 기능적 응집도
2. 순차적 응집도
3. 교환적 응집도
4. 논리적 응집도

 
제7항. 우연적 응집도(Coincidental Cohesion)
ü  모듈 내부의 각 구성요소들이 서로 관련 없는 요소로만 구성된 경우
ü  논리적 응집력과 유사하지만활동이 동일한 유형이 아니며 모듈을 수정할 때마다 부작용을 유발할 가능성이 높다
ü  Utility class : 이 클래스는 public 및 static 함수의 콜렉션을 포함하며다른 클래스에서 액세스 할 수 있습니다그리고 Utility class의 변경사항은 이 클래스를 액세스하는 다른 클래스에도 영향을 미칩니다.


'IT Topic' 카테고리의 다른 글

[My Project] 페이 (암호화, PG, 카드사)  (0) 2017.08.02
체크섬(checksum) 구하기  (0) 2017.08.02
연관분석 Apriori 원리  (0) 2017.08.02
동기부여 이론  (0) 2017.08.02
터크먼의 팀 개발 모델  (0) 2017.08.02

+ Recent posts