제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 |