08. 서버 프로그램 구현
Chapter 02. 모듈 구현
1. 모듈 구현 ⭐⭐
(1) 재사용 (Reuse)
- 목표 시스템의 개발 시간 및 비용 절감을 위해 검증된 기능을 파악하고 재구성하여 시스템에 응용하기 위한 최적화 작업
- 이미 개발되어 기능, 성능 및 품질을 인정받았던 소프트웨어의 전체 또는 일부분을 다시 사용하는 기법
[1] 재사용의 종류
1. 재공학 (Re-Engineering)
- 기존 소프트웨어를 버리지 않고 기능을 개선하거나 새로운 소프트웨어로 재활용하는 소프트웨어 재사용 기법
- 재공학 장점으로 위험부담 감소, 비용 절감, 개발 기간 단축, 시스템 명세 오류 억제가 있음
2. 재개발 (Re-Development)
- 기존 시스템 내용 참조하여 완전히 새로운 시스템 개발
- 기존 시스템에 새로운 기능 추가, 기존 시스템 기능 변경하는 기법
(2) 모듈 구현
- 모듈(Module)은 그 자체로 하나의 완전한 기능을 수행할 수 있는 독립된 실체
- 모듈화를 통해 분리된 시스템의 각 기능들로 서브프로그램, 서브 루틴, 소프트웨어 내 단위 프로그램, 작업 단위 등과 같은 의미로 사용
[1] 모듈 특징
- 독립성이 높은 모듈일수록 모듈 수정 시에도 다른 모듈에 영향 거의 미치지 않고, 오류 발생 시에도 쉽게 해결
- 모듈 독립성은 결합도와 응집도에 의해 측정
- 독립성 높이려면 결합도는 약하게 (낮게), 응집도는 강하게 (높게), 모듈 크기는 작게 만들어야 함
[2] 모듈화(Modularization)의 개념
- 소프트웨어의 성능을 향상시키거나 복잡한 시스템의 수정, 재사용, 유지 관리가 용이하도록 기능 단위의 모듈로 분해하는 설계 및 구현 기법
[3] 모듈화 기법
1. 루틴 (Routine)
소프트웨어에서 특정 동작을 수행하는 일련의 코드로 기능을 가진 명령들의 모임
2. 메인 루틴 (Main Routine)
프로그램의 주요 부분으로 전체의 개략적 동작 절차를 표시하도록 만들어진 루틴
메인 루틴은 서브 루틴 호출
3. 서브 루틴 (Subroutine)
메인 루틴에 의해 필요시 마다 호출되는 루틴
(3) 소프트웨어 모듈 응집도
- 응집도는 모듈의 독립성을 나타내는 정도로, 모듈 내부 구성요소 간 연관 정도이다
- 하나의 모듈은 하나의 기능을 수행할수록 응집도가 높다
※ 응집도와 결합도는 필기/실기 모두 중요한 핵심 개념 !!
[1] 응집도 유형
우연적 < 논리적 < 시간적 < 절차적 < 통신적 < 순차적 < 기능적 응집도 순
- 응집도 높을수록 좋은 품질
1. 우연적 응집도 (Coincidental Cohesion)
- 모듈 내부 각 구성요소가 연관이 없을 경우의 응집도
2. 논리적 응집도 (Logical Cohesion)
- 유사 성격을 갖거나 특정 형태로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우의 응집도
3. 시간적 응집도 (Temporal Cohesion)
- 연관 기능이라기보다 특정 시간에 처리되어야 하는 활동들을 한 모듈에서 처리할 경우의 응집도
4. 절차적 응집도 (Procedural Cohesion)
- 모듈이 다수의 관련 기능을 가질 때 모듈 안 구성요소들이 그 기능을 순차적으로 수행할 경우의 응집도
5. 통신적 응집도 (Communication Cohesion) = 교환적 응집도
- 동일 입력과 출력을 사용하여 다른 기능을 수행하는 활동들이 모여있을 경우의 응집도
6. 순차적 응집도 (Sequential Cohesion)
- 모듈 내에서 한 활동으로부터 나온 출력값을 다른 활동이 사용할 경우의 응집도
7. 기능적 응집도 (Functional Cohesion)
- 모듈 내부 모든 기능이 단일 목적을 위해 수행되는 경우의 응집도
# 응집도의 유형
※ 우논시절통순기 : 우연적 / 논리적 / 시간적 / 절차적 / 통신적 / 순차적 / 기능적
▶ 우리가 논 시절의 통은 순기다.
(4) 소프트웨어 모듈 결합도 (Coupling)
- 결합도는 모듈 내부가 아닌 외부 모듈과의 연관도 또는 모듈 간의 상호의존성
- 소프트웨어 구조에서 모듈 간 관련성 측정하는 척도
[1] 결합도 유형
내용 > 공통 > 외부 > 제어 > 스탬프 > 자료 결합도 순 결합도
- 결합도는 낮을수록 좋은 품질
1. 내용 결합도 (Content Coupling)
다른 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 경우의 결합도하나의 모듈이 직접적으로 다른 모듈의 내용을 참조할 때 두 모듈은 내용적으로 결합되어 있는 결합도
2. 공통 결합도 (Common Coupling)
파라미터가 아닌 모듈 밖에 선언된 전역 변수를 참조하고 전역 변수를 갱신하는 식으로 상호 작용하는 경우의 결합도공유되는 공통 데이터 영역을 여러 모듈이 사용할 때의 결합도
3. 외부 결합도 (External Coupling)두 개 모듈이 외부에서 도입된 데이터 포맷, 통신 프로토콜, 디바이스 인터페이스를 공유할 경우의 결합도외부 모듈에서 선언한 데이터(변수)를 외부 다른 모듈에서 참조할 때의 결합도
4. 제어 결합도 (Control Coupling)
어떤 모듈이 다른 모듈의 내부 논리 조직 제어 목적으로 제어 신호 이용하여 통신하는 경우의 결합도하위 모듈에서 상위 모듈로 제어 신호가 이동하여 상위 모듈에게 처리 명령을 부여하는 권리 전도 현상이 발생하는 결합도
5. 스탬프 결합도 (Samp Coupling)
모듈 간 인터페이스로 배열이나 객체, 구조 등이 전달되는 경우의 결합도두 모듈이 동일한 자료 구조를 조회하는 경우의 결합도, 자료구조의 어떠한 변화는 모든 모듈에 영향을 미침
6. 자료 결합도 (Data Coupling)
모듈 간 인터페이스로 전달되는 파라미터를 통해서만 모듈 간 상호 작용이 일어나는 경우의 결합도한 모듈의 내용을 변경해도 다른 모듈에 영향을 미치지 않는 상태로 가장 바람직한 결합도
# 결합도 유형
※ 내공 외제 스자 : 내용 / 공통 / 외부 / 제어 / 스탬프 / 자료 결합도
▶ 내부 공사는 외제를 쓰자! (스자)
(5) 팬인 (Fan-In) 및 팬아웃(Fan-Out)
- 소프트웨어의 구성요소인 모듈을 계층적으로 분석하기 위해 팬인 (Fan-In), 팬아웃(Fan-Out) 활용- 팬인과 팬아웃 분석을 통해 시스템 복잡도 측정
- 시스템 복잡도 최적화를 위해 팬인은 높게, 팬아웃은 낮게 설계
- 팬인 (Fan-In)
- 어떤 모듈을 제어(호출)하는 모듈의 수 - 모듈 자신을 기준으로 모듈에 들어오면 팬인 (in)
- 팬인이 높으면, 재사용 측면에서 설계가 잘되었지만, 단일 장애점 발생 가능- 팬인 높으면 관리 비용 및 테스트 비용 증가
- 팬아웃 (Fan-Out)
- 어떤 모듈에 의해 제어(호출)되는 모듈의 수
- 모듈 자신을 기준으로 모듈에서 나가면 팬아웃(out)
- 팬아웃이 높으면, 불필요한 모듈 호출 여부 검토 필요
- 팬아웃 높으면, 단순화 여부 검토 필요
[1] 팬인(Fan-In) 및 팬아웃(Fan-Out) 계산 방법
※ 정확하게 답을 구하는 계산 문제로, 출제되기 좋으니 잘 익혀두자!

- 팬인 (Fan-In) : 모듈 자신 기준으로 모듈에 들어오면 팬인(in)
A : 0, B : 1, C : 1, D : 1, E : 1, F : 2, G : 1, H : 2, I : 1, J : 1
- 팬아웃 (Fan-Out) : 모듈 자신 기준으로 모듈에서 나가면 팬아웃(out)
A : 3, B : 2, C : 2, D : 1, E : 1, F : 1, G : 1, H : 0, I : 0, J : 0
2. 모듈 테스트
(1) 모듈 테스트 개요
- 모듈 테스트를 위해 IDE (Integrated Development Environment) 도구 활용하여 개별 공통 모듈에 디버깅 수행
- 모듈 테스트는 화이트박스 기법 활용
- 대표적 단위 테스트 도구인 xUnit 활용하여 테스트 코드 구현
# 화이트 박스(Whitebox) 기법
프로그램 로직 이해하고, 내부 구조와 동작 검사하는 소프트웨어 테스트 방식
(2) 모듈 테스트 종류
- xUnit은 자바(jUnit), C++(cppUnit), Net(nUnit) 등 다양한 언어 지원하는 단위테스트 프레임워크
- 소프트웨어 함수나 클래스 같은 서로 다른 구성 원소(단위) 테스트할 수 있게 해주는 도구
- xUnit 에는 jUnit, CppUnit, HttpUnit 등이 있다
- 공통 모듈 테스트 종류
1. jUnit
- 자바 프로그래밍 언어용 단위 테스트 도구
- 자바 코드에 주석을 달아 특별한 의미를 부여한 어노테이션 (Annotation, '@') 기호 활용
2. CppUnit
- 자바 jUnit을 C++로 구현한 단위 테스트 도구
3. HttpUnit
- 웹 브라우저 없이 웹사이트 테스트 수행하는 단위 테스트 도구
'WorkOut > 정보처리기사' 카테고리의 다른 글
요구사항 확인 | 소프트웨어 개발 방법론 (1) | 2024.04.19 |
---|---|
서버 프로그램 구현 | 배치 프로그램 (0) | 2024.04.18 |
서버 프로그램 구현 | 개발환경 구축 (0) | 2024.04.16 |
SQL 문제 풀이 | SQL 활용 및 최적화 (0) | 2024.04.15 |
SQL 문제 풀이 | 응용 SQL (0) | 2024.04.15 |