모듈

모듈화를 통해 분리된 시스템의 각 기능들. 서브루틴(메인 루틴에 의해 필요할 때마다 호출되는 루틴), 서브시스템(단위시스템), 소프트웨어 내의 프로그램, 작업 단위 등과 같은 의미로 사용된다.

  • 모듈은 단독으로 컴파일 가능
  • 모듈은 재사용 가능
  • 모듈의 기능적 독립성 : 소프트웨어를 구성하는 각 모듈의 기능은 서로 독립됨
  • 독립성이 높은 모듈일수록 모듈을 수정하더라도 다른 모듈들에게는 거의 영향을 미치지 않으며, 오류가 발생해도 쉽게 발견하고 해결할 수 있다.
  • 모듈의 독립성을 높이려면, 결합도는 약하게, 응집도는 강하게, 모듈의 크기는 작게 만들어야 한다.

결합도

모듈 간에 상호 의존하는 정도. 모듈 간 연관 관계.

  • 결합도가 약할수록 품질이 높다.
  • 결합도가 강하면 시스템 구현 및 유지보수 작업이 어렵다.
  • 아래는 결합도가 약한 순서대로
    • 자료 결합도
    • 스탬프 결합도
    • 제어 결합도
    • 외부 결합도
    • 공통 결합도
    • 내용 결합도

자료 결합도

모듈 간의 인터페이스가 자료 요소로만 구성될 때의 결합도이다. 어떤 모듈이 다른 모듈을 호출하면서 매개 변수나 인수로 데이터를 넘겨주고, 호출받은 모듈은 받은 데이터에 대한 처리 결과를 다시 돌려주는 방식이다. 모듈 간 내용을 전혀 알 필요가 없는 상태로서 한 모듈의 내용을 변경하더라도 다른 모듈에는 전혀 영향을 미치지 않는 가장 바람직한 결합도이다.

응집도

정보 은닉(한 모듈 내부에 포함된 절차와 자료들의 정보가 감추어져 다른 모듈이 접근하거나 변경하지 못하도록 하는 기법) 개념을 확장한 것. 명령어나 호출문 등 모듈의 내부 요소들의 서로 관련되어 있는 정도. 즉, 모듈이 독립적인 기능으로 정의되어 있는 정도를 말한다.

  • 응집도가 강할수록 품질이 높다.
  • 아래는 응집도가 강한 순서대로
    • 기능적 응집도 : 모듈의 모든 기능이 단일 문제와 연관되어 수행
    • 순차적 응집도 : 모듈 내 하나의 활동으로부터 나온 출력 데이터를 그 다음 활동의 입력 데이터로 사용
    • 교환적 응집도
    • 절차적 응집도
    • 시간적 응집도
    • 논리적 응집도
    • 우연적 응집도

팬인(Fan-In) / 팬아웃(Fan-out)

  • 팬인 : 어떤 모듈을 제어(호출)하는 모듈의 수
  • 팬아웃 : 어떤 모듈에 의해 제어(호출)되는 모듈의 수
  • 팬 인이 높다 = 재사용 측면에서 설계가 잘 되어 있다. 단일 장애점 될 수 있으므로 집중 테스트.
  • 팬아웃이 높다 = 단순화 가능 여부 검토 필요
  • 시스템 복잡도를 최적화 하려면, 팬인은 높게, 팬 아웃은 낮게 설계해야 한다.