모듈화는 소프트웨어를 기능적 관련성에 따라 독립적인 단위로 나누는 설계 기법이다. 좋은 설계 지침은 모듈 간 독립성을 높이는 것이며, 이를 위해 결합도는 약하게 하고 응집도는 강하게 한다. 모듈화는 확장성, 융통성, 경제성을 주고 복잡성을 줄이는 방향으로 작동하므로, 복잡성을 장점으로 적거나 예측 불가능한 정의를 설계 원칙으로 삼는 설명은 틀리다.
모듈 구조의 관계를 나타내는 용어도 함께 본다. 팬인(Fan-in)은 주어진 한 모듈을 제어하는 상위 모듈의 수이고, 팬아웃(Fan-out)은 한 모듈이 제어하는 하위 모듈의 수다. 결합도는 모듈 사이의 의존 정도로, 공통 결합은 여러 모듈이 공통 자료 영역을 사용하는 경우이고 제어 결합은 모듈 간에 제어 정보를 전달하는 경우다. 응집도는 한 모듈 내부 요소들이 공통의 목적을 달성하기 위해 서로 관련된 기능적 연관의 정도다.
설계 품질을 평가하는 기준으로는 모듈성, 명확성, 계층성 같은 성질이 쓰이며, 통합적 서브루틴 유도는 좋은 설계의 기준이 아니다. 소프트웨어 재공학은 유지보수성 향상을 목표로 기존 소프트웨어를 재설계하거나 형식을 바꾸는 개념이다. HIPO는 시스템의 기능을 계층적으로 표현하는 도구로, 가시적 도표는 전체 구조를 보여 주는 목차이고 세부 다이어그램이 특정 기능의 상세 입력·처리·출력을 담당한다.
예제
출제 패턴은 네 가지다. ① 설계 원칙 — 결합도는 약하게, 응집도는 강하게가 옳고, 그 반대로 적거나 복잡성을 장점으로 적은 선지가 오답이다. ② 구조 용어 — 한 모듈을 제어하는 상위 모듈의 수는 팬인, 한 모듈이 호출하는 하위 모듈의 수는 팬아웃이다. ③ 결합도·응집도 — 공통 자료 영역은 공통 결합, 제어 정보 전달은 제어 결합이고, 모듈 내부의 기능적 연관 정도는 응집도다. ④ 설계 품질·재공학·HIPO — 통합적 서브루틴 유도를 품질 기준으로 적거나, 재공학을 재설계·형식 변경과 무관하게 적거나, 가시적 도표가 상세 입출력을 담당한다고 적은 선지가 틀리다.
대표 기출 3문항
소프트웨어 설계를 위한 지침에 대한 설명으로 거리가 먼 것은?
소프트웨어 요소간의 효과적 제어를 위해 설계에서 계층적 자료조직이 제시되어야 한다.
설계는 종속적인 기능적 특성을 가진 모듈화로 유도되어야 한다.
소프트웨어는 논리적으로 특별한 기능과 부기능을 수행하는 요소들로 나누어져야 한다.
설계는 자료와 프로시저에 대한 분명하고 분리된 표현을 포함해야 한다.
정답과 해설 보기
정답 ② · 이 문제는 소프트웨어 설계 지침에 대한 설명 중 거리가 먼 것을 고르는 문제다. 좋은 설계는 모듈의 독립성을 높여야 하며, 모듈화는 기능적 응집성을 기준으로 서로 독립적으로 나누는 것이지 종속적인 특성으로 유도하는 것이 아니다.
모듈화는 기능적 관련성(기능적 결합)으로 나누어야 하며, 종속성보다는 독립성과 결합도 개념이 설계 지침의 핵심이다.
소프트웨어 구조와 관련된 용어로, 주어진 한 모듈(module)을 제어하는 상위 모듈 수를 나타내는 것은?
Modularity
Subordinate
Fan-in
Superordinate
정답과 해설 보기
정답 ③ · 한 모듈을 제어하는 상위 모듈의 수를 나타내는 소프트웨어 구조 용어를 묻는 문제이다. Fan-in은 어떤 모듈을 호출하는 상위 모듈의 개수를 의미하고, Fan-out은 그 모듈이 호출하는 하위 모듈의 개수를 의미한다.
Fan-in은 한 모듈을 호출하는 상위 모듈의 수를 나타내며, Fan-out은 한 모듈이 호출하는 하위 모듈의 수이다.
설계품질을 평가하기 위해서는 반드시 좋은 설계에 대한 기준을 세워야 한다. 다음 중 좋은 기준이라고 할 수 없는 것은?
설계는 모듈적이어야 한다.
설계는 자료와 프로시저에 대한 분명하고 분리된 표현을 포함해야 한다.
소프트웨어 요소들 간의 효과적 제어를 위해 설계에서 계층적 조직이 제시되어야 한다.
설계는 서브루틴이나 프로시저가 전체적이고 통합적이 될 수 있도록 유도되어야 한다.
정답과 해설 보기
정답 ④ · 좋은 설계에 대한 기준에 해당하지 않는 것을 찾는 문제이다. 좋은 설계는 기능적 독립성을 위해 모듈적이어야 하고, 자료와 프로시저에 대한 분명하고 분리된 표현을 포함해야 하며, 소프트웨어 요소 간 효과적 제어를 위한 계층적 조직을 제시해야 한다.
좋은 설계는 모듈성, 명확성, 계층성을 갖추어야 하며 통합적 서브루틴 유도는 기준이 아니다.