2019년 2월 7일
소프트웨어 모듈화(Modularity)
I. 효율적인 프로그램 구성 지원, 모듈화
가. 모듈화(Modularity)의 개념
- 프로그램을 분석하고 추상화하여 소프트웨어의 성능을 향상시키거나, 프로그램의 시험, 통합 및 수정을 용이하게 하는 설계 및 구현 기법
나. 모듈화의 특징
- 비용과 모듈의 관계: 모듈 수가 증가하면 인터페이스 비용 증가
- 정보 은폐: 어렵거나 변경 가능성이 있는 모듈은 다른 모듈로부터 은폐
특징 | 내용 |
---|---|
비용과 모듈 관계 | 모듈 수가 증가하면 인터페이스 비용 증가 |
정보 은폐 | 어렵거나 변경 가능성이 있다면 다른 모듈로부터 은폐 |
자료 추상화 | 자료구조 액세스 함수 내 자료구조 표현 내역 은폐 |
모듈 독립성 | 낮은 결합도와 높은 응집도 |
다. 모듈화의 필요성
구분 | 설명 |
---|---|
관리 측면 | 프로그램의 효율적인 관리 및 성능향상 요구 |
개발 측면 | 복잡도 감소로 프로그램 개발의 용이성, 시험, 통합 용이성 요구 |
유지보수 측면 | 프로그램 재사용을 통한 유지보수 용이성 요구 |
성능/비용 측면 | 오류 파급효과 최소화 요구 단위당 프로그램 개발 노력/비용 최소화 요구 |
II. 소프트웨어 모듈화의 최적화
가. 소프트웨어 모듈 수와 비용/노력과의 상관 관계 그래프
- 모듈 수가 증가할수록 모듈 비용은 감소하지만 인터페이스 비용이 증가하므로 적정 수준의 모듈 개수 유지 필요
나. 소프트웨어 개발 프로세스 별 모듈성과 개발 비용 관계
절차 | 모듈성(Modularity) | 비용요소 관계 |
---|---|---|
분석 | 요구기능과 프로세스 모델링 추상화 수준 | 요구도출, 검증비용, 설계단계 생산성 기반 |
설계 | 아키텍처 구성요소 정의 수준과 관계의 복잡성 | 설계의 복잡성, 인터페이스의 유연성, 구현 용이성 |
개발 | 프로시저, 객체, 컴포넌트, 서비스, 분리 기준 | 개발 영역 분할과 개발자간 의사소통 노력 |
테스트 | 요구 기능에 매칭되는 테스트 분해도 | 테스트 용이성, 오류 파급 효과, 잠재 오류 방지 |
통합 | 시스템/서브시스템/모듈/인터페이스 | 시스템 통합 및 테스트 비용 |
유지보수 | 모듈 간 자료공유도, 모듈 내 응집도 | S/W 이해와 변경의 노력 |
III. 소프트웨어 응집도 (Cohesion)
가. 소프트웨어 응집도(Cohesion)의 정의
- 정보 은닉 개념의 확장 개념으로, 하나의 모듈은 하나의 기능을 수행하는 집적성을 지칭
모듈의 독립성을 나타내는 개념으로 모듈 내부 구성원간의 연관도
나. 소프트웨어 응집도의 단계
응집도 | 설명 |
---|---|
우연적 | 아무 관련성 없는 작업을 한 모듈에 모음 |
논리적 | 유사한 성격의 작업들을 모음 |
시간적 | 같은 시간대에 처리되어야 하는 것들을 모음 |
절차적 | 모듈 진행 요소들이 서로 관계되고 순서대로 진행 |
통신적 | 동일한 입/출력 자료를 이용하여 서로 다른 기능 수행 |
순차적 | 작업의 결과가 다른 모듈의 입력자료로 사용 |
기능적 | 하나의 기능만 수행하는 모듈 |
IV. 소프트웨어 결합도 (Coupling)
가. 소프트웨어 결합도(Coupling)의 정의
- 모듈 내부가 아닌 외부 모듈과의 연관도(모듈 간의 상호연관도)를 측정하는 척도
나. 소프트웨어 결합도의 단계
결합도 | 설명 |
---|---|
자료 | 모듈들이 간단한 별수를 파라미터로 교환 |
스템프 | 모듈 사이에 자료구조 교환 |
제어 | 제어용 신호를 주고 받음 |
외부 | 모듈들이 소프트웨어의 외부 환경과 연관 되는 경우 |
공통 | 많은 모듈들이 전역변수를 참조할 때 발생 |
내용 | 한 모듈이 다른 모듈의 내부 자료나 제어정보를 사용 |
V. 모듈과 컴포넌트의 비교
구분 | 컴포넌트 | 모듈 |
---|---|---|
정의 | – 특정 기능 수행을 위한 독립적, 조립적 수행 가능한 SW 단위 | – 시스템을 분해하고 추상화하여 SW 성능을 향상시키고, 시스템의 디버깅, 시험, 수정 등을 용이하게 하는 SW 설계기법 – SW 유지보수 시에 편리 |
사용성 | – 독자적으로 사용자에게 특정 서비스를 제공할 수 있음 | – 다른 모듈과의 통합 및 연계에 의해서만 가치있는 서비스 가능 – 모듈 + 모듈 |
서비스 | – 다른 컴포넌트와의 IF를 이루면서 하나의 독립 APP으로 서비스 가능 | – 여러 개의 모듈이 조합하여 어플리케이션을 구성하여 서비스 가능한 형태 |
이기종 호환 | – 플랫폼 혹은 구현 기능에 독립적 | – 플랫폼 및 구현 기술에 종속적 |
응용형태 | – 분산 어플리케이션 | – 단일 어플리케이션 |
재사용 방식 | – 실행 코드 기반 | – 주로 Source 기반 |
접근방식 | – 모든 언어 대상 | – 객체 지향 언어 |
개발방식 | – 객체지향, CBD 개발방법론 | – 모듈화를 프로그래밍 기법 적용 – 정보공학, 구조적 개발방법론이 해당됨 |
VI. 효과적인 모듈화 방안
- 초기 프로그램의 구조를 평가하여 결합도를 줄이고 응집도를 개선시킴
- 높은 Fan-out를 가진 구조를 최소화하고 깊이가 증가할수록 Fan-in 노력
- 모듈의 제어영역 안에서 그 모듈의 영향영역을 유지함
- 모듈 인터페이스를 평가하여 복잡성과 중복성을 줄이고 일관성을 개선
- 기능이 예측 가능한 모듈을 정의하되 지나치게 제한적인 모듈은 피함
One Comment
잘 봤습니다