모듈(Module)이란?
- 전체 프로그램에서 어떠한 기능을 수행할 수 있는 실행 코드를 의미
- 자체적으로 컴파일 가능, 다른 프로그램에서 재사용 가능
- 시스템 개발 시 기관고 노동력을 절감할 수 있다.
- 모듈의 독립성은 결합도와 응집도에 의해 측정된다.
- 서브루틴 = 서브 시스템 = 작업 단위
- 변수의 선언을 효율적으로 할 수 있어 기억 장치를 유용하게 사용할 수 있다.
- 모듈마다 사용할 변수를 정의하지 않고 상속하여 사용할 수 있다.
- 각 모듈의 기능이 서로 다른 모듈과의 과도한 상호작용을 회피함으로서 이루어지는 것을 기능적 독립성이라고 한다.
- 여러 기능 및 프로그램에서 공통으로 사용할 수 있는 모듈(예-날짜 처리를 위한 유틸리티 모듈 등)
결합도
- 서로다른 두 모듈간의 상호 의존도로서 두 모듈간의 기능적인 연광 정도를 나타낸다.
- 모듈 간의 결합도를 약하게 하면 모듈 독립성이 향상되어 시스템을 구현하고 유지보수 작업이 쉬워진다.
결합도의 종류(결합도의 오름차순)
① 자료 결합도
- 모듈 간의 인터페이스가 자료 요소로만 구성된 경우로 다른 모듈 간에 영향을 주지 않는 가장 바람직한 결합도.
- 모듈 간의 내용을 전혀 알 필요가 없다.
② 스탬프 결합도
- 두 모듈이 같은 자료를 조회하는 경우의 결합도이며, 자료 구조의 어떠한 변화 즉 포맷이나 구조의 변화는 그것을 죄화는 모든 모듈 및 변화되는 필드를 실제로 조회하지 않는 모모듈까지도 영향을 미치게 된다.
- 배열, 레코드, 구조 등이 모듈 간 인터페이스로 전달되는 경우에 해당한다.
③ 제어 결합도
- 어떤 모듈이 다른 모듈의 내부 논리 조작을 제어하기 위한 목적으로 제어 신호를 이용하여 통신하는 경우이다.
- 하위 모듈에서 상위모듈로 제어 신호가 이동하여 상위 모듈에 처리 명령을 부여하는 권리 전도 현상이 발생하게 된다.
④ 외부 결합도
- 어떤 모듈에서 외부로 선언한 변수(데이터)를 다른 모듈에서 참조할 경우와 관계된다.
⑤ 공통 결합도
- 여러 모듈이 공통 자료 영역을 사용하는 경우로, 공통 데이터 영역 내용을 수정하면 이 데이터를 사용하는 모든 모듈에 영향을 준다.
⑥ 내용 결합도
- 가장 강한 결합도를 가지고 있으며, 한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 조회하도록 설계된 경우이다.
- 한 모듈에서 다른 모듈의 내부로 제어 또는 이동된다.
- 한 모듈이 다른 모듈 내부 자료의 조회 또는 변경이 가능하다.
- 두 모듈이 같은 문자(리터럴)의 공유가 가능하다.
응집도
- 명령어, 명령어의 모임, 호출문, 특정 작업 수행 코드 등 모듈 안의 요소들이 서로 관련된 정도를 말한다.
- 구조적 설계에서 기능 수행 시 모듈 간의 최소한의 상호작용을 하여 하나의 기능만을 수행하는 정도를 표현한다.
- 모듈이 독립적인 기능으로 구성된 정도를 의미한다.
- 응집도가 낮다는 것은 요소 간의 관련성이 적음을 의미한다.
응집도의 종류 (응집도가 강한 순서부터 내림차순)
① 기능적 응집도
- 모듈 내부의 모든 기능 요소들이 한 문제와 연관되어 수행되는 경우
② 순차적 응집도
- 한 모듈 내부의 한 기능 요소에 의해 출력 자료가 다음 기능 요소의 입력자료로 제공되는 경우
③ 교환적 응집도
- 같은 입력과 출력을 사용하는 소 작업이 모인 경우
④ 절차적 응집도
- 모듈이 다수의 관련 기능을 가질 때 , 모듈 내부의 기능 요소들이 그 기능을 순차적으로 수행할 경우와 관계
⑤ 시간적 응집도
- 특정 시간에 처리되는 여러 기능을 모아 한 개의 모듈로 작성할 경우와 관계된다.
⑥ 논리적 응집도
- 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들로 하나의 모듈이 형성되는 경우와 관계된다.
⑦ 우연적 응집도
- 모듈 내부의 각 기능 요소들이 서로 관련이 없는 요소로만 구성된 경우와 관계된다.
효과적인 모듈화 설계 방법
- 출입구를 하나씩 갖게 하여 복잡도와 중복성을 줄이고 일관성을 유지한다.
- 유지보수가 용이하도록 설계한다
- 모듈 크기는 시스템의 전반적인 기능과 구조를 이해하기 쉬운 크기로 설계한다.
- 모듈 기능은 예측이 가능해야 하며 지나치게 제한적이어서는 안 된다.
- 모듈 간의 효과적인 제어를 위해 설계에서 계층적 자료 조직이 제시되어야 한다.
- 적당한 모듈의 크기를 유지하고 모듈 간의 접속 관계를 부넉하여 복잡도와 중복을 줄인다.
모듈 설계의 특징
- 모듈 독립성이 높다는 것은 단위 모듈을 변경하더라도 타 모듈에 영향이 적다는 의미이며, 오류의 발견과 해결이 용이해진다.
- 모듈 인터페이스 설계시 인덱스 번호, 기능 코드 등 전반적이 논리 구조에 영향을 끼치지 않도록 한다.
모듈과 컴포넌트이 차이
모듈
- 자신만으로 동작할 수 있는 명령어의 집합
- 실제로 가장 맨 앞에 위치하는 구현된 단위, 자료구조, 알고리즘 등을 제공하는 인터페이스
- 정의하지 않는 이상 바로 재활용 불가
컴포넌트
- SW 시스템에서 독립적인 업무 또는 기능을 수행하는 모듈로 교체가 가능한 부품이다.
- 모듈화의 생산성에 나아가 소스코드의 재활용을 통해 재사용성을 도모하기 위해 등장
- 인터페이스를 통해 연결된다.
모듈과 컴포넌트 비교
구분 | 모듈 | 컴포넌트 |
목적 | 소프트웨어 복잡도 해소 | 소프트웨어 재사용성 향상 |
재사용 단위 | 소스 코드 | 실행 코드 |
독립성 | 구현언어 종속적 플랫폼 종속적 |
구현언어 종속적 동일 플랫폼 기반 개별적 연결 |
응용 | 단일 어플리케이션 | 분산 어플리케이션 |
중심사상 | 모듈화 추상화 |
객체지향 CBD(Component Based Development) |
특징 | 여러 모듈이 하나의 애플리케이션을 형성하는 계층 구조 | 다른 컴포넌트와 소통하는 네트워크를 이루며 서비스 제공 |
재사용이란?
- 검증된 기능을 파악하여 재구성하는 것
- 모듈을 최적화하여 다른 시스템에서 적용하면 개발 비용과 기간을 낮출 수 있다.
- 생산성 및 소프트웨어 품질이 향상된다.
- 재사용 시 해당 모듈은 외부 모듈과의 응집도는 높고, 결합도는 낮아야 한다.
- 기존 소프트웨어에 재사용 소프트웨어를 추가하기 어려운 문제점이 발생할 수 있다.
재사용 규모에 따른 구분
① 함수와 객체 : 클래스, 메소드 단위로 소스코드 재사용
② 애플리케이션 : 애플리케이션 단위로 공유하여 재사용
③ 컴포넌트 : 컴포넌트 단위로 재사용
공통 모듈
- 각 서브시스템에서 공통으로 사용하는 기능을 묶어 하나의 공통 모듈로 개발
- 모듈 재사용성을 높이고 중복 개발로 인한 낭비를 줄일 수 있다.
- 같은 기능을 재사용함으로서 기능에 대한 정합성, 신뢰성을 확보할 수 있다.
- 유지보수 단계에서도 모듈 변경을 통해 관련 시스템을 일괄 변경할 수 있다.
공통 모듈 – 명세 기법
① 정확성 : 실제 구현시 꼭 필요한 기능인지 확인
② 명확성 : 해당 기능에 대해 일관된 이해로 하나로 해석될 수 있도록 작성
③ 완전성 : 시스템 구현시 필요한 모든 것을 작성
④ 일관성 : 공통 기능 간 서로 충돌이 발생하지 않도록 작성
⑤ 추적성 : 공통 기능에 대한 요구사항 출처, 관련 시스템의 유기적 관계 구분 가능하도록 작성
공통 모듈 테스트 종류
① 화이트박스 테스트 : 소스코드를 보면서 테스트케이스를 만듦
② 메소드 기반 텍스트 : 공통 모듈의 외부에 공개된 메소드 기반 테스트
③ 화면 기반 테스트 : 화면 단위로 모듈 개발 후 화면에 직접 입력하여 테스트
모듈 명세화 도구
흐름도, N-S 도표, 의사 코드, 의사 결정표, 의사 결정도, PDL, 상태 전이도, 행위도
N-S 도표(Nassi-Scheierman chart)
- 구조적 프로그램의 순차, 선택, 반복의 구조를 사각형으로 도식화하여 알고리즘을 논리적 기술에 중점을 둔 도형식 표현법
- 주로 박스 다이어그램을 사용하여 논리적 제어구조로 흐름을 표현함
- 임의로 제어 이동이 어려움
- 이해하기 쉽고 코드 변환이 용이하다
- 조건이 복합되어 있는 곳의 처리를 시각적으로 명확히 식별하는 데 적합함.
제어구조
① 순차, ② 선택 및 다중선택, ③ 반복
'CS BASIC > 정보시스템 일반' 카테고리의 다른 글
[CS BASIC] 소프트웨어 아키텍처 디자인 패턴(Software Architecture Design Pattern) (0) | 2023.07.30 |
---|---|
[CS BASIC] 소프트웨어 아키텍처 (Software Architecture) (0) | 2023.07.16 |
[CS BASIC] 사용자 인터페이스(UI, User Interface)의 설계 (0) | 2023.07.13 |
[CS BASIC] 사용자 인터페이스(UI, User Interface)와 표준 및 지침 (0) | 2023.07.12 |
[CS BASIC] UI(User Interface) 표준을 위한 환경 분석 (0) | 2023.07.11 |