정보처리기사/소프트웨어 설계

애플리케이션 설계 1

RangA 2023. 4. 26. 01:02

공통 모듈

01. 모듈(Module)

1) 모듈의 개념

  • 소프트웨어 구조를 이무려, 다른 것들과 구별할 수 있는 독립적인 기능을 갖는 단위
  • 하나 또는 몇 개의 논리적인 기능을 수행하기 위한 명령어들의 집합
  • 서로 모여 하나의 완전한 프로그램으로 만들어질 수 있음
  • 소프트웨어의 성능을 향상시키거나 시스템의 디버깅, 시험, 통합 및 수정을 용이하게 함
  • 추상화되어 재사용 및 공유 가능한 수준으로 만들어진 기능 단위를 모듈로 규정
  • 프로그램이 효율적으로 개발, 관리될 수 있도록 시스템을 분해하고 추상화하여 소프트웨어 제품의 성능을 향상시키거나 시스템의 수정 및 재사용, 유지 관리를 용이하게 하는 기법

2) 모듈의 기본 요소

  1. 입력 요소
  2. 출력 요소
  3. 기능 요소
  4. 기관 요소
  5. 내부 자료 요소

3) 모듈의 장점

  • 프로그램의 효율적인 관리 및 성능 향상
  • 전체적인 소프트웨어의 이해가 쉬워지고 복잡성을 감소
  • 소프트웨어의 시험, 통합, 수정을 쉽게 할 수 있음
  • 기능이 분리되어 인터페이스가 단순화됨
  • 오류의 파급으로 인한 부작용 최소화
  • 모듈의 재사용으로 개발과 유지보수 용이함

4) 모듈의 공유도(Fan-in)와 제어도(Fan-out)

1. 공유도

  • 얼마나 많은 모듈이 주어진 모듈을 호출하는가를 나타내는 척도
  • 상위 모듈의 수
  • 공유도가 높은 경우 해당 클래스를 사용하는 클래스의 수가 많다는 것을 의미
  • 공통 모듈화 측면에서 잘 설계되어 있으나, 단일 실패점이 발생할 수 있으므로 중점 관리 및 더 많은 테스트를 통한 검증 필요

2. 제어도

  • 주어진 모듈이 호출하는 모듈의 개수
  • 하위 모듈의 수
  • 제어도가 높은 경우 하나의 모듈이 많은 수의 다른 모듈을 사용한다는 것을 의미
  • 불필요한 기능을 호출하고 있지 않은지 추가 검토를 진행하고 업무 로직을 단순화시킬 수 있는지에 대해서 검토

5) 모듈의 개수 및 비용 간 상관관계

  • 모듈의 개수가 많을수록 노력 비용 감소(반비례 그래프)
  • 모듈의 개수가 많을수록 모듈 통합 비용 증가(비례 그래프)
  • 모듈 통합 비용과 모듈별 개발 비용이 교차되는 부분의 영역은 최소 노력 비용
  • 전체 소프트웨어 비용은 눈금 곡선 범위에서 결정되어야 함

6) 모듈의 특징

  • 프로그램에서 특정 기능을 처리할 수 있는 실행 코드
  • 다른 프로그램에서 재사용 가능
  • 코딩(구현), 컴파일이 독립적으로 수행
  • 실행은 종속적으로 수행
  • 모듈은 다른 모듈을 호출할 수도 있고 호출당할 수도 있음
  • 모듈 호출 시 매개 변수를 전달하거나 전달받을 수 있음
  • 기본 라인 수는 100라인 이내가 적당함
  • 모듈을 찾아서 실행하는 시간이 느림

7) 모듈의 크기

  1. 모듈의 크기가 너무 작은 경우
    • 모듈의 개수가 많아져 모듈을 통합하는 비용이 과도하게 발생
  2. 모듈의 크기가 너무 큰 경우
    • 모듈의 통합 비용은 감소하지만 하나의 모듈을 개발하는 소요 비용은 증가



02. 공통 모듈

1) 공통 모듈의 개념

  • 프로그램에서 공통적으로 사용할 수 있는 모듈
  • 복잡한 계산식, 반복 사용되는 검증 기능, 연관되어 발생하는 조건식 등의 경우 별도의 공통 모듈로 구성하여 프로젝트의 재사용성을 향상시킬 수 있음
  • 공통 모듈은 정보 시스템 구축 시 자주 사용하는 기능들로써 재사용이 가능하게 패키지로 제공하는 독립된 모듈을 의미

2) 공통 모듈의 원칙

  1. 정확성(Correctness) : 시스템 구현 시 필요한지 아닌지를 알 수 있도록 정확하게 작성
  2. 명확성(Clarity) : 일관되게 이해되고 한 가지로 해석될 수 있도록 작성
  3. 완전성(Completeness) : 시스템 구현 시 필요하고 요구되는 모든 것을 기술
  4. 일관성(Consistency) : 상호 충돌이 없도록 작성
  5. 추적성(Traceability) : 요구사항 출처와 시스템 간 유기적 관계에 대한 식별이 가능하도록 작성

3) 공통 모듈 식별 및 명세

1. 기능을 분석하여 공통 부분 식별

  • 단위 시스템의 업무 기능을 분석하여 공통 부분을 식별
  • 단위 시스템 중 공통으로 사용될 수 있는 기능을 식별하여 후보군으로 선정
  • 후보군으로 선정된 기능을 공통 모듈로 선정할지 여부에 대한 검토
  • 공통 모듈로 선정하는 경우 별도의 기능으로 분리

2. 공통 부분에 대한 검토회의

  • 공통 부분으로 식별된 기능을 시스템 담당자와 검토회의를 통하여 공통화 여부에 대해 확정
  • 업무 선임 개발자와 주요 개발자를 식별하고, 이해관계자와 함께 검토회의 일정을 수립
  • 식별된 공통 기능이 재사용의 효과성이 높은지에 대해 검토
  • 식별되지 않은 공통 기능이 있다면 추가하여 효율성을 높일 수 있는지 의견을 취합
  • 공통 기능에 대한 관리 담당자 선정

4) 공통 모듈의 재사용 범위에 따른 분류

  1. 함수와 객체 재사용
    • 클래스나 메소드 단위로 사용하며, 소스 코드 등을 재사용
  2. 컴포넌트 재사용
    • 컴포넌트 단위로 재사용하며, 컴포넌트 자체는 수정하지 않고 인터페이스를 통해 통신
  3. 애플리케이션 재사용
    • 공통된 업무가 기능을 제공하도록 구현된 애플리케이션을 공유하여 재사용



재공학(Re-Engineering)

1) 소프트웨어 재사용 정의

  • 이미 개발된 소프트웨어를 반복 사용하여 생산성을 향상시키는 방법으로 소프트웨어를 개발할 때 재사용이 가능한 정보를 찾아 재사용이 가능한 코드로 발전시키는 것
  • 개발 기간이나 비용을 줄이기 위해 기능을 파악하고 재구성하여 시스템에 응용하기 위한 최적화 작업

2) 소프트웨어 재사용의 두 가지 기본 기술

  1. 생상 중심(Generation Based, 모듈화)
    • 재사용 단위를 찾아 발전시키는 기술
    • 전자칩 같은 유용한 소프트웨어 부품을 찾아내는 기술
  2. 합성 중심(Composition Based, 모델화)
    • 모듈을 생산성 있게 조립하는 기술
    • 전자칩 같은 소프트웨어 부품, 즉 블록(모듈)을 만들어서 끼워 맞추는 방법으로 소프트웨어를 완성시키는 기술

3) 소프트웨어 재사용의 이점

  • 개발 시간 및 비용 단축
  • 프로젝트 실패 위험 감소
  • 개발 지식 공유 가능
  • 소프트웨어 품질 향상
  • 소프트웨어 개발 생산성 향상

4) 재사용 모듈 설계의 유의 사항

  • 재사용 모듈의 내용이 이해하기 쉬워야 함
  • 누구나 사용할 수 있도록 사용법이 공개되어야 함
  • 검토 결과를 적용한 공통 기능에 대해 응집도가 최대한 높게 구성되었는지 확인해야 함
  • 모듈의 독립성 향상을 위해 결합도가 최대한 낮게 구성되었는지 확인해야 함
  • 모듈 간의 접속 관계를 분석하여 복잡도와 중복성을 줄이고 일관성을 유지
  • 모듈의 기능은 예측할 수 있어야 하며 지나치게 제한적이지 않아야 함
  • 유지보수가 용이해야 함
  • 공유도는 높이고, 제어도는 낮추어 설계되었는지 최종 검토해야 함
  • 모듈 간의 효과적인 제어를 위해 설계에서 계층적 자료 조직이 제시되어야 함

5) 모듈의 평가 기준

  1. 결합도(연관성) : 모듈 간의 관계성을 나타내는 척도
  2. 응집도(완성도) : 한 모듈 내에 있는 처리 요소들 사이의 기능적인 연관 정도를 나타낸 것
  • 결합도(Coupling)와 응집도(Cohesion)는 모듈의 독립성을 판단하는 기준
  • 좋은 설계를 위해서는 결합도는 작게 할수록 좋음
  • 좋은 설계를 위해서는 집도는 크게 할수록 좋음
  • 결합도가 높으면 시스템 구현 및 유지보수가 매우 어려워짐
  • 모듈 간의 결합도가 약하게 되면 모듈의 독립성이 향상되고 재사용성이 많아져 활용도가 좋음

6) 소프트웨어 재공학(Software Re-Engineering)

  • 소프트웨어의 위기를 해결하기 위해 개발의 생산성이 아닌 유지보수의 생산성으로 해결하려는 방법
  • 시스템에 대한 재분석, 문서화 작업을 통해 공학적으로 우수한 시스템을 만드는 것
  • 도구를 사용하여 소프트웨어를 분석하고 수정하는 과정을 포함함
  • 정보 저장소에 정보를 충분히 활용해야 함
  • 활동은 분석, 재구성, 역공학, 이식 활동 등으로 구분

7) 역공학과 재공학이 등장한 순서

  1. 유지보수 : 자신이 개발하지 않은 소프트웨어를 유지보수 함
  2. 외계인 코드 : 유지보수하는 과정에서 15년 이전 코드, 문서 부재, 개발자 부재인 소프트웨어
  3. 복구 : 최선을 다해 소프트웨어 수정
  4. 역공학 : 차후에 발생할 2차적인 유지보수를 위해 소스 코드를 보고 문서화
  5. 재공학 : 체계적으로 문서화하는 과정에서 문제점이 발견되어 소스 코드를 변경

8) 소프트웨어 역공학 정의

  1. 코드의 역공학(Reverse Engineering of Code)
    • 코드로부터 자료 흐름도(DFD)를 변경
  2. 데이터의 역공학(Reverse Engineering of Data)
    • 코드로부터 자료 사전(DD)을 변경