본문 바로가기
정보처리기사

[정보처리기사] 공통 모듈 설계

by minux_s 2021. 2. 4.
728x90

[1] 공통 모듈

1. 공통 모듈의 개념

1) 모듈의 개념

  • 모듈은 크게 독립된 하나의 소프트웨어 또는 하드웨어 단위를 지칭하는 용어
  • 모듈화를 통해 분리된 시스템의 기능들로 서브프로그램, 서브 루틴, 소프트웨어 내의 단위 프로그램, 작업 단위 등과 같은 의미로 사용된다.

2) 모듈의 특징

  • 각각의 모듈은 상대적으로 독립성을 가지고 있다.
  • 모듈 내부에는 그 모듈을 하나로 통합하는 수많은 조합이 존재할 수 있다.
  • 모듈은 단독으로 컴파일할 수 있으며, 재사용할 수 있다
  • 독립성이 높은 모듈일수록 모듈 수정 시에도 다른 모듈들에는 영향을 거의 미치지 않고, 오류가 발생 시에도 쉽게 해결할 수 있다.
  • 모듈의 독립성은 결합도와 응집도에 의해 측정되며, 독립성을 높이려면 모듈의 결합도는 약하게, 응집도는 강하게, 모듈의 크기는 작게 만들어야 한다.

3)  공통 모듈의 개념

  • 전체 프로그램의 기능 중 특정 기능을 처리할 수 있는 실행 코드를 의미한다
  • 자체적으로 컴파일 가능하고, 다른 프로그램에서 재사용이 가능하다.
  • 여러 기능 및 프로그램에서 공통으로 사용할 수 있는 모듈을 의미하며 날짜 처리를 위한 유틸리티 모듈 등이 해당된다.

2. 공통 모듈 원칙

원칙 설명
정확성(Correctness) - 해당 기능이 실제 시스템 구현 시 필요한지 아닌지를 알 수 있도록 정확하게 작성
명확성(Clarity) - 해당 기능에 대해 일관되게 이해되고 한 가지로 해석될 수 있도록 작성
완전성(Completeness) - 시스템이 구현될 때 필요하고 요구되는 모든 것을 기술
일관성(Consistency) - 공통 기능 간에 상호 충돌이 없도록 작성
추적성(Tranceability) - 공통 기능에 대한 요구사항 출처와 관련 시스템 등의 유기적 관계에 대한 식별이 가능하도록 작성

3. 모듈화

1) 모듈화 개념

  • 모듈화는 프로그램이 효율적으로 관리될 수 있도록 시스템을 분해하고 추상화함으로써 소프트웨어 제품의 성능을 향상시키거나 시스템의 수정 및 재사용, 유지 관리를 쉽게 하는 기법
  • 소프트웨어의 성능을 향상시키거나 복잡한 시스템의 수정, 재사용, 유지 관리 등이 용이하도록 기능 단위의 모듈로 분해하는 설계 및 구현 기법
기법 설명
루틴 (Routine) - 소프트웨어에서 특정 동작을 수행하는 일련의 코드로 기능을 가진 명령들의 모임
메인 루틴 (Main Routine) - 프로그램의 주요한 부분이며, 전체의 개략적인 동작 절차를 표시하도록 만들어진 루틴
- 메인 루틴은 서브 루틴을 호출
서브 루틴 (Subroutine) - 메인 루틴에 의해 필요할 때마다 호출되는 루틴

2) 모듈화 필요성

  • 모듈의 크기가 너무 작아 모듈 개수가 ㅁ낳아지면 모듈 간 통합 비용이 많이 발생한다
  • 모듈의 크기가 너무 크면 모듈 간의 통합 비용이 줄어드는 대신 모듈 당 개발 비용이 커진다

3) 바람직한 모듈 설계 방안

  • 모듈의 독립성과 재사용성을 높이기 위하여 결합도는 낮추고 응집도는 높인다,
  • 모듈의 복잡도와 중복성을 줄이고 일관성을 유지한다
  • 모듈의 기능은 예측이 가능하여야 하며, 지나치게 제한적이어서는 안된다.
  • 적당한 모듈의 크기를 유지한다
  • 모듈 간의 효과적인 제어를 위해 설계에서 계층적 자료 조직이 제시되어야 한다
  • 유지보수가 용이해야 한다.

4. 모듈화 유형

유형 설명
응집도 - 모듈 내부에서 구성요소 간에 밀접한 관게를 맺고 있는 정도
- 응집도가 높을수록 필요한 요소들로 구성되어 있고 낮을수록 관련이 적은 요소들로 구성
결합도 - 모듈과 모듈 간에 어느 정도 관련성이 있는지를 나타내는 정도
- 관련이 적을수록 모듈의 독립성이 높아 모듈 간 영향이 적어짐

5. 팬인(Fan-In) 및 팬아웃(Fan-Out)

1) 팬인(Fan-In) 팬아웃(Fan-Out) 개념

  • 소프트웨어의 구성요소인 모듈을 계층적으로 분석하기 위해서 팬인, 팬아웃을 활용한다
  • 팬인과 팬아웃 분석을 통하여 시스템의 복잡도를 측정할 수 있다.
  • 시스템 복잡도를 최적화하기 위해서는 팬인은 높게, 팬아웃은 낮게 설계해야 한다.
구분 팬인 팬아웃
개념 - 어떤 모듈을 제어(호출)하는 모듈의 수 - 어떤 모듈에 의해 제어(호출)되는 모듈의 수
모듈 숫자 계산 - 모듈 자신을 기준으로 모듈에 들어오면 팬인 - 모듈 자신을 기준으로 모듈에서 나가면 팬아웃
고려사항 - 팬인이 높으면 재사용 측면에서 설계가 잘되었지만, 단일 장애점 발생 가능
- 팬인이 높으면 관리 비용 및 테스트 비용 증가
- 팬아웃이 높을 경우는 불필요한 모듈 호출 여부 검토 필요
- 팬아웃이 높을 경우는 단순화 여부 덤토 필요

 

2) 팬인 및 팬아웃 계산 방법

  • G의 팬인은 B,C,D 3개
  • G의 팬아웃은 I,J 2개

[2] 설계 모델링

1. 설계 모델링

1) 설계 모델링 개념

  • 설계 모델링은 요구사항 분석 단계에서 규명된 필수 기능들의 구체적인 구현 방법을 명시하는 기법이다.
  • 소프트웨어에 요구되는 기능과 성능 조건들을 만족하는 소프트웨어의 내부 기능, 구조 및 동적 행위들을 모델링하여 표현, 분석, 검증하는 과정이다.

2) 설계 모델링 원칙

  • 소프트웨어 설계는 변경이 쉽도록 구조화되어야 한다
  • 하나의 함수 안에 특정 기능을 수행하는데 필요한 자료만 사용하도록 규제한다.
  • 독립적이고 기능적인 특성을 지닌 모듈 단위로 분할 설계한다.
  • 계층적 구조를 가져야 한다

3) 설계 모델링 유형

유형 설명 구성요소
구조 모델링 - 소프트웨어를 구성하는 컴포넌트들의 유형, 인터페이스 내부 설계 구조 및 이들의 상호 연결 구조를 모델링
- 시스템의 구성요소들과 이들 사이의 구조적인 관계와 특성들을 모델링
프로시저, 데이터 구조, 모듈, 파일 구조
행위 모델링 - 소프트웨어의 구성요소들의 기능들과 이들이 언제, 어떠한 순서로 기능을 수행하고 상호작용하는지를 모델링
- 시스템의 구성요소들이 언제 어떠한 순서로 수행되는가와 같은 동적인 특성들을 모델링
입력 데이터, 출력 데이터, 데이터 흐름, 데이터 변환, 데이터 저장 등

 

*프로시져란?

- 프로그램을 기능에 따라 여러 개의 단위로 분해하여 작성하는 것으로 크게 서브 프로시저와 함수 프로시저로 구분한다

 

*모듈이란?

- 프로그램을 구성하는 구성요소의 일부로 관련된 함수나 변수 또는 클래스를 모아 놓은 파일.

2. 소프트웨어 설계 유형

  • 자료 구조 설계 (Data Structure Design)
  • 아키텍처 설계 (Architecture Design)
  • 인터페이스 설계 (Interface Design)
  • 프로시저 설계 (Procedure Design)
  • 협약에 의한 설계 (Design by Contract)

자료 구조, 아키텍처, 인터페이스, 프로시저는 상위 설계,  모듈 설계는 하위설계

3. 코드 설계

1) 코드 설계 개념

  • 코드 설계는 데이터의 분류나 조합을 쉽게 하기 위하여 사물을 표현하는 코드를 설계하는 기법

2) 코드의 기능

기능 설명
표준화 - 정보들 종류, 모양, 크기 등의 일정한 기준에 따라 통일적으로 표현하는 기능
분류 - 정보들을 동일한 특성을 가진 데이터로 그룹화하여 나누는 기능
식별 - 다른 것과 구별될 수 있는 기능
배열 - 일련의 순서로 나열할 수 있는 기능
간소화 - 정보의 표현을 간소화해서 나타낼 수 있는 기능
연상 - 정보를 표현하고자 하는 대상체 뜻과 의미가 코드에 내포되게 하는 기능
암호화 - 정보의 외부 표현을 감추고자 하는 기능
오류 검출 - 정보 입력이나 관리 시 잘못된 정보를 찾아내는 기능

3) 코드 설계 종류

종류 설명
연상 코드(Memonic Code) - 코드만 보고 대상을 연상할 수 있도록 명칭 일부를 약호(간단하고 알기 쉽게 나타내어 만든 부호) 형태로 넣어 구성된 코드
-> 나라 이름 (한국:KR)
블록 코드(Block Code) - 공통성이 있는 것끼리 블록으로 구분하고, 각 블록 내에서 일련번호를 부여하는 코드
- 구분 코드라고도 불림
-> 전화번호 (지역번호-국번-일련번호 조합에서 지역번호-국번은 같은 지역끼리 공통)
순차 코드(Sequence Code) - 일정한 기준에 따라 순서대로 일련번호를 부여한 코드
-> 중고등 학생들의 반에서 번호 (가나다순으로 1번,2번)
표의 숫자 코드(Significant Digit Code) - 대상 자료의 물리적인 수치인 길이, 넓이, 용량 등을 표시한 코드
-> 20-10-300(길이-넓이-용량 조합)
십진 코드 (Decimal Code) - 10진수 형태로 표현한 코드
-> 상품 바코드 (880...)
그룹 분류식 코드 (Group Classification Code) - 대상을 기준에 따라 대분류, 중분류, 소분류로 구분하여 번호를 부여한 코드
-> 학번(입학 연도 - 일련번호 조합)

4) 코드 설계 절차

  • 코드화 항목 선정 -> 코드화 목적 설정 -> 코드화 대상 확인 -> 코드화 범위 결정 -> 코드 사용 기간 설정 -> 코드화 항목의 특성 분석 -> 코드화 방식 결정 -> 문서화

5) 코드 오류 종류

종류 설명
사본 오류 (Transcription Error) - 한 자리를 잘못 표기한 경우
- 필사 오류, 오자 오류라고도 불림
전위 오류 (Transposition Error) - 연속된 두 글자가 서로 바뀌어 표기된 경우
생략 오류 (Omission Error) - 한 글자를 빼먹고 기술한 경우
첨가 오류 (Addition Error) - 한 글자를 추가되어 기술한 경우
이중 전위 오류(Double Transposition Error) - 전위 오류가 중복 발생한 경우

4. HIPO

1) HIPO 개념

- HIPO는 시스템의 분석 및 설계, 문서화할 때 사용되며 하향식 소프트웨어 개발을 위한 문서화 도구이다.

2) HIPO 특징

  • 체계적인 문서 관리가 가능하다
  • 기호, 도표 등을 사용해서 보기가 쉽고 이해가 쉽다.
  • 기능과 자료의 의존 관계를 동시에 표현할 수 있다.
  • 변경, 유지보수가 용이하다
  • 시스템의 기능을 고유 모듈들로 분할하여 이들 간의 인터페이스를 계층구조로 표현한 것을 HIPO 차트라고 한다

3) HIPO 차트 종류

종류 설명
가시적 도표 (VIsual Table of Contents) - 시스템의 전체적인 기능과 흐름을 보여주는 계층구조도
총체적 도표 (Overview Diagram) - 입력, 처리, 출력에 대한 정보를 제공하는 도표
- 프로그램을 구성하는 기능을 기술
세부적 도표 (Detail Diagram) - 총체적 도표에 표시된 기능을 구성하는 기본 요소들을 상세히 기술하는 도표

 

728x90

댓글