소프트웨어 모듈화

반응형
  • 모듈화의 개요
    • 모듈화의 정의
      • 시스템을 분해하고 추상화하여 소프트웨어의 성능을 향상시키거나 시스템의 디버깅, 시험, 통합 및 수정을 용이하도록 하는 소프트웨어 설계 기법
    • 모듈화의 장점
      • 프로그램의 효율적인 관리 및 성능 향상
      • 전체적인 소프트웨어 이해의 용이성 증대 및 복잡성 감소
      • 소프트웨어 시험, 통합, 수정 시 용이성 제공
      • 기능의 분리가 가능하고 인터페이스가 단순
      • 오류의 파급 효과를 최소화
      • 모듈의 재사용 가능으로 개발과 유지보수가 용이
    • 모듈화의 목표
      • 모듈 간 결합도의 최소화
      • 모듈 내 요소들 간의 응집도 최대화
           
  • 결합도(Coupling)
    • 결합도의 정의
      • 소프트웨어 구조 내에서 모듈 간의 관련성을 측정하는 척도
    • 결합도의 목표
      • 모듈 상호간 낮은 결합도 추구
      • 이해하기 쉬운 소프트웨어 구현을 위해 간단한 연결 추구
      • 오류 발생 시 전파되어 다른 오류의 원인이 되는 파급효과의 최소화
    • 낮은 결합도 구현 방법
      • 불필요한 관련성 제거
      • 불필요한 인터페이스를 가능한 한 제거
      • 필요한 관계를 연결
    • 모듈 결합도 스펙트럼
      • 자료 결합도(Data Coupling)
        • 두 모듈간 필요한 자료만을 매개변수로 전달하여 참조하는 경우
        • 가장 낮은 모듈 결합도 지원 가능
      • 스탬프 결합도(Stamp Coupling)
        • 두 모듈이 동일한 복합 자료구조(예: 배열, 레코드, 구조체 등)를 매개변수로 전달하여 참조하는 경우
        • 배열, 레코드, 구조체 중에 관련 없는 내용 포함이 가능
      • 제어 결합도(Control Coupling)
        • 한 모듈이 다른 모듈의 내부에서 작용하는 논리적 흐름을 제어하기 위하여 제어 플래그(Flag)나 정보를 매개변수로 전달하는 경우
        • 권리 전도 현상(Inversion of Authority)의 발생이 가능
      • 외부 결합도(External Coupling)
        • 모듈들이 외부 환경(예:특수H/W, 통신 프로토콜, OS, 컴파일러 등)과 연관되어 있는 경우
        • 음성적 정보 교환 방법
      • 공통 결합도(Common Coupling)
        • 두 모듈이 동일한 자료 영역(예: 전역변수)을 공통으로 조회하는 경우
        • 동일한 자료 영역 내의 오류 발생 시 타 모듈로 오류 전파 가능성이 큼
      • 내용 결합도(Contents Coupling)
        • 한 모듈이 다른 모듈의 내부 기능 및 자료를 직접 참조하는 경우
        • 한 모듈의 제어가 다른 모듈 내부로 분기하는 경우로, 모듈이라는 개념은 무시
           
  • 응집도(Cohesion)
    • 응집도의 정의
      • 하나의 모듈 내부의 처리 요소들 간의 기능적 연관성을 측정하는 척도
    • 응집도의 특징
      • 정보 은닉 개념의 확장
      • 가장 응집도가 높은 모듈은 단지 하나의 기능만을 실행해야 함
    • 응집도의 목표
      • 가능한 한 높은 응집도를 추구하여 유지보수 용이성을 확보
      • 모듈간의 결합도를 최소화하고, 각 모듈은 양호한 응집도를 추구
    • 모듈 응집도 스펙트럼
      • 기능적 응집도(Functional Cohesion)
        • 모듈 내의 모든 요소들이 단일 기능을 수행
      • 순차적 응집도(Sequential Cohesion)
        • 모듈 내의 한 요소의 출력 자료가 다음 요소의 입력 자료로 사용
      • 통신적 응집도(Communicational Cohesion)
        • 모듈 내의 요소들이 동일한 입출력 자료를 이용하여 서로 다른 기능 수행
      • 절차적 응집도(Procedural Cohesion)
        • 모듈의 수행 요소들이 반드시 특정 순서대로 수행
      • 일시적 응집도(Temporal Cohesion)
        • 모듈의 기능 요소들이 같은 시간에 모두 실행
      • 논리적 응집도(Logical Cohesion)
        • 논리적으로 유사함 기능을 수행하지만 서로의 관계는 밀접하지 않음
      • 우연적 응집도(Coincidental Cohesion)
        • 모듈 내 요소들이 뚜렷한 관계 없이 존재
             
  • 효율적 모듈성을 위한 설계 지침
    • 초기 프로그램 구조를 평가하여 결합도를 줄이고 응집도를 개선 시킴
    • 높은 Fan-out을 가진 구조를 최소화하고, 깊이가 증가할수록 Fan-in에 노력함
    • 모듈의 제어 영역 안에서 그 모듈의 영향 영역을 유지
    • 모듈 인터페이스를 평가하여 복잡성과 중복성을 줄이고 일관성을 개선시킴
    • 기능은 예측 가능한 모듈을 정의하되 지나치게 제한적인 모듈들은 피함
    • 하나의 입구와 하나의 출구를 지닌 모듈을 취하고 '병적인 연결(모듈 중간에서의 분기나 참조)'은 피함
    • 설계 제약과 이식성 요구 사항에 기초하여 소프트웨어를 패키지화
         
  • 모듈 설계의 방향
    • 모듈의 독립성을 위해 추상화, 캡슐화, 정보 은닉, 다형성 등 객체 지향 개념 및 기술의 적용
    • 객체 지향 관련 기술의 영향으로 컴포넌트 형식으로의 독립성 추구 방안이 모색되고 있으며, CBD 개발 방식의 급부상
반응형

'밥벌이 > 소프트웨어 공학' 카테고리의 다른 글

소프트웨어 설계 개요  (0) 2010.11.25
소프트웨어 설계 원리  (0) 2010.11.25
소프트웨어 설계 방법  (0) 2010.11.25
소프트웨어 요구사항의 개요  (0) 2010.10.18
소프트웨어 분석 모델  (0) 2010.10.18