소프트웨어 모듈화(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

콘텐츠 사용 시 출처 표기 부탁 드리고, 궁금한 점이나 의견은 댓글 남겨주세요^^