정보처리기사

[정처기] 실기요약 - 8-2. 공통모듈 구현

검이 2024. 1. 16. 21:00

목차

5. 인터페이스 구현

Chapter 01  인터페이스 설계 확인
Chapter 02  인터페이스 기능 구현
Chapter 03  인터페이스 구현 검증

6. 프로그래밍 언어 활용

Chapter 01  프로그래밍을 위한 기본 사항
Chapter 02  C언어
Chapter 03  자바
Chapter 04  파이썬

7. SQL 응용

Chapter 01  데이터베이스 기본
Chapter 02  응용 SQL 작성하기
Chapter 03  SQL 활용 및 최적화

8. 서버 프로그램 구현

Chapter 01  개발환경 구축
Chapter 02  공통 모듈 구현
Chapter 03  배치 프로그램 구현

9. 소프트웨어 개발 보안 구축

Chapter 01  소프트웨어 개발 보안 설계
Chapter 02  소프트웨어 개발 보안 구현


재사용 종류

재공학 / 재개발

재공학
- 기존 소프트웨어를 버리지 않고 기능을 개선시키거나 기능을 새로운 소프트웨어로 재활용하는 소프트웨어 재사용 기법
- 장점: 위험부담 감소, 비용 절감, 개발 기간 단축, 시스템 명세의 오류억제

재개발
- 기존 시스템 내용을 참조하여 완전히 새로운 시스템 개발, 기존 시스템에 새로운 기능 추가, 기존 시스템의 기능 변경


재사용 규모에 따른 분류

함수와 객체 재사용 / 컴포넌트 재사용 / 애플리케이션 재사용

모듈

- 그 자체로 완전한 기능을 수행할 수 있는 독립된 실체
- 분리된 시스템의 각 기능들로 서브프로그램, 서브 루틴, 소프트웨어 내의 단위 프로그램, 단위 작업 등과 같은 의미로 사용

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

2. 모듈화 기법

루틴 / 메인 루틴 / 서브 루틴

 

3. 공통 모듈 구현
- 기능을 분할하고 추상화하여 성능을 향상시키고 유지보수를 효과적으로 하기 위한 공통 컴포넌트 구현 기법
- 인터페이스 모듈, 데이터베이스 접근 모듈 등 필요한 공통 모듈을 구현
- 모듈간의 결합도는 줄이고, 응집도는 높인 공통 모듈 구현 권장


소프트웨어 모듈 응집도 유형

우연적 / 논리적 / 시간적 / 절차적 / 통신적 / 순차적 / 기능적

  • 우연적: 모듈 내부의 각 구성요소가 연관이 없을 경우
  • 논리적: 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우
  • 시간적: 연관된 기능이라기보다는 특정 시간에 처리되어야 하는 활동들을 한 모듈에서 처리할 경우
  • 절차적: 모듈이 다수의 관련 기능을 가질 때 모듈 안의 구성요소들이 그 기능을 순차적으로 수행할 경우
  • 통신적: 동일한 입력과 출력을 사용하여 다른 기능을 수행하는 활동들이 모여있을 경우
  • 순차적: 모듈 내에서 한 활동으로부터 나온 출력값을 다른 활동이 사용할 경우
  • 기능적: 모듈 내부의 모든 기능이 단일한 목적을 위해 수행되는 경우

소프트웨어 모듈 결합도 유형

내용 / 공통 / 외부 / 제어 / 스탬프 / 자료 결합

 

  • 내부 : 다른 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 경우 / 하나의 모듈이 직접적으로 다른 모듈의 내용을 참조할 때 두 모듈은 내용적으로 결합되어있는 경우
  • 공통: 파라미터가 아닌 모듈 밖에 선언되어 있는 전역 변수를 참조하고 전역 변수를 갱신하는 식으로 상호작용하는 경우 / 공유되는 공통 데이터 영역을 여러 모듈이 사용할 때
  • 외부: 두 개의 모듈이 외부에서 도입된 데이터 포맷, 통신 프로토콜, 또는 디바이스 인터페이스를 공유할 경우 / 외부 모듈에서 선언한 데이터를 외부의 다른 모듈에서 참조할 때
  • 제어: 어던 모듈이 다른 모듈의 내부 논리 좆깅르 제어하기 위한 목적으로 제어 신호를 이용하여 통신하는 경우 / 하위 모듈에서 상위 모듈로 제어 신호가 이동하여 상위 모듈에게 처리 명령을 부여하는 권리 전도현상이 발생
  • 스탬프: 모듈 간의 인터페이스로 배열이나 객체, 구조 등이 전달되는 경우 / 두 모듈이 동일한 자료 구조를 조회하는 경우의 결합도이며, 자료 구조의 어떠한 변화는 모든 모듈에 영향을 미치게 됨
  • 자료: 모듈간의 인터페이스로 전달되는 파라미터를 통해서만 모듈 간의 상호작용이 일어나는 경우 / 한 모듈의 내용을 변경하더라도 다른 모듈에는 영향을 미치지 않는 상태.

팬인 / 팬아웃

  팬인 팬아웃
개념 어떤 모듈을 제어(호출)하는 모듈의 수 어떤 모듈에 의해 제어(호출)되는 모듈의 수
모듈 숫자 계산 모듈 자신을 기준으로 모듈에 들어오면 팬인 모듈 자신을 기준으로 모듈에서 나가면 팬아웃
고려사항 팬인이 높으면 재사용 측면에서 설계가 잘 되었지만 단일 장애점 발생 가능
팬인이 높으면 관리 비용 및 테스트 비용 증가
팬아웃이 높을 경우는 불필요한 모듈 호출 여부 검토 필요
팬아웃이 높을 경우는 단순화 여부 검토 필요

시스템 복잡도를 최적화 하기 위해 팬인은 높게, 팬아웃은 낮게 설계해야 함.


공통 모듈 테스트

- IDE 도구를 활용하여 개별 공통 모듈에 대한 디버깅 수행
- 화이트박스 기법 활용
- xUnit을 활용하여 테스트 코드 구현

** 화이트박스 기법: 프로그램의 로직을 이해하고, 내부 구조와 동작을 검사하는 소프트웨어 테스트 방식

공통 모듈 테스트 종류

jUnit, CppUnit, HttpUnit
  • jUnit: 자바 프로그래밍 언어용 단위 테스트 도구 / Erich Gamma와 Kent Beck등이 작성한 오픈소스
  • CppUnit: 자바의 jUnit을 C++로 구현한 단위 테스트 도구
  • HttpUnit: 웹 브라우저 없이 웹사이트 테스트를 수행