정보처리기사/소프트웨어 설계
애플리케이션 설계 1
RangA
2023. 4. 26. 01:02
공통 모듈
01. 모듈(Module)
1) 모듈의 개념
- 소프트웨어 구조를 이무려, 다른 것들과 구별할 수 있는 독립적인 기능을 갖는 단위
- 하나 또는 몇 개의 논리적인 기능을 수행하기 위한 명령어들의 집합
- 서로 모여 하나의 완전한 프로그램으로 만들어질 수 있음
- 소프트웨어의 성능을 향상시키거나 시스템의 디버깅, 시험, 통합 및 수정을 용이하게 함
- 추상화되어 재사용 및 공유 가능한 수준으로 만들어진 기능 단위를 모듈로 규정
- 프로그램이 효율적으로 개발, 관리될 수 있도록 시스템을 분해하고 추상화하여 소프트웨어 제품의 성능을 향상시키거나 시스템의 수정 및 재사용, 유지 관리를 용이하게 하는 기법
2) 모듈의 기본 요소
- 입력 요소
- 출력 요소
- 기능 요소
- 기관 요소
- 내부 자료 요소
3) 모듈의 장점
- 프로그램의 효율적인 관리 및 성능 향상
- 전체적인 소프트웨어의 이해가 쉬워지고 복잡성을 감소
- 소프트웨어의 시험, 통합, 수정을 쉽게 할 수 있음
- 기능이 분리되어 인터페이스가 단순화됨
- 오류의 파급으로 인한 부작용 최소화
- 모듈의 재사용으로 개발과 유지보수 용이함
4) 모듈의 공유도(Fan-in)와 제어도(Fan-out)
1. 공유도
- 얼마나 많은 모듈이 주어진 모듈을 호출하는가를 나타내는 척도
- 상위 모듈의 수
- 공유도가 높은 경우 해당 클래스를 사용하는 클래스의 수가 많다는 것을 의미
- 공통 모듈화 측면에서 잘 설계되어 있으나, 단일 실패점이 발생할 수 있으므로 중점 관리 및 더 많은 테스트를 통한 검증 필요
2. 제어도
- 주어진 모듈이 호출하는 모듈의 개수
- 하위 모듈의 수
- 제어도가 높은 경우 하나의 모듈이 많은 수의 다른 모듈을 사용한다는 것을 의미
- 불필요한 기능을 호출하고 있지 않은지 추가 검토를 진행하고 업무 로직을 단순화시킬 수 있는지에 대해서 검토
5) 모듈의 개수 및 비용 간 상관관계
- 모듈의 개수가 많을수록 노력 비용 감소(반비례 그래프)
- 모듈의 개수가 많을수록 모듈 통합 비용 증가(비례 그래프)
- 모듈 통합 비용과 모듈별 개발 비용이 교차되는 부분의 영역은 최소 노력 비용
- 전체 소프트웨어 비용은 눈금 곡선 범위에서 결정되어야 함
6) 모듈의 특징
- 프로그램에서 특정 기능을 처리할 수 있는 실행 코드
- 다른 프로그램에서 재사용 가능
- 코딩(구현), 컴파일이 독립적으로 수행
- 실행은 종속적으로 수행
- 모듈은 다른 모듈을 호출할 수도 있고 호출당할 수도 있음
- 모듈 호출 시 매개 변수를 전달하거나 전달받을 수 있음
- 기본 라인 수는 100라인 이내가 적당함
- 모듈을 찾아서 실행하는 시간이 느림
7) 모듈의 크기
- 모듈의 크기가 너무 작은 경우
- 모듈의 개수가 많아져 모듈을 통합하는 비용이 과도하게 발생
- 모듈의 크기가 너무 큰 경우
- 모듈의 통합 비용은 감소하지만 하나의 모듈을 개발하는 소요 비용은 증가
02. 공통 모듈
1) 공통 모듈의 개념
- 프로그램에서 공통적으로 사용할 수 있는 모듈
- 복잡한 계산식, 반복 사용되는 검증 기능, 연관되어 발생하는 조건식 등의 경우 별도의 공통 모듈로 구성하여 프로젝트의 재사용성을 향상시킬 수 있음
- 공통 모듈은 정보 시스템 구축 시 자주 사용하는 기능들로써 재사용이 가능하게 패키지로 제공하는 독립된 모듈을 의미
2) 공통 모듈의 원칙
- 정확성(Correctness) : 시스템 구현 시 필요한지 아닌지를 알 수 있도록 정확하게 작성
- 명확성(Clarity) : 일관되게 이해되고 한 가지로 해석될 수 있도록 작성
- 완전성(Completeness) : 시스템 구현 시 필요하고 요구되는 모든 것을 기술
- 일관성(Consistency) : 상호 충돌이 없도록 작성
- 추적성(Traceability) : 요구사항 출처와 시스템 간 유기적 관계에 대한 식별이 가능하도록 작성
3) 공통 모듈 식별 및 명세
1. 기능을 분석하여 공통 부분 식별
- 단위 시스템의 업무 기능을 분석하여 공통 부분을 식별
- 단위 시스템 중 공통으로 사용될 수 있는 기능을 식별하여 후보군으로 선정
- 후보군으로 선정된 기능을 공통 모듈로 선정할지 여부에 대한 검토
- 공통 모듈로 선정하는 경우 별도의 기능으로 분리
2. 공통 부분에 대한 검토회의
- 공통 부분으로 식별된 기능을 시스템 담당자와 검토회의를 통하여 공통화 여부에 대해 확정
- 업무 선임 개발자와 주요 개발자를 식별하고, 이해관계자와 함께 검토회의 일정을 수립
- 식별된 공통 기능이 재사용의 효과성이 높은지에 대해 검토
- 식별되지 않은 공통 기능이 있다면 추가하여 효율성을 높일 수 있는지 의견을 취합
- 공통 기능에 대한 관리 담당자 선정
4) 공통 모듈의 재사용 범위에 따른 분류
- 함수와 객체 재사용
- 클래스나 메소드 단위로 사용하며, 소스 코드 등을 재사용
- 컴포넌트 재사용
- 컴포넌트 단위로 재사용하며, 컴포넌트 자체는 수정하지 않고 인터페이스를 통해 통신
- 애플리케이션 재사용
- 공통된 업무가 기능을 제공하도록 구현된 애플리케이션을 공유하여 재사용
재공학(Re-Engineering)
1) 소프트웨어 재사용 정의
- 이미 개발된 소프트웨어를 반복 사용하여 생산성을 향상시키는 방법으로 소프트웨어를 개발할 때 재사용이 가능한 정보를 찾아 재사용이 가능한 코드로 발전시키는 것
- 개발 기간이나 비용을 줄이기 위해 기능을 파악하고 재구성하여 시스템에 응용하기 위한 최적화 작업
2) 소프트웨어 재사용의 두 가지 기본 기술
- 생상 중심(Generation Based, 모듈화)
- 재사용 단위를 찾아 발전시키는 기술
- 전자칩 같은 유용한 소프트웨어 부품을 찾아내는 기술
- 합성 중심(Composition Based, 모델화)
- 모듈을 생산성 있게 조립하는 기술
- 전자칩 같은 소프트웨어 부품, 즉 블록(모듈)을 만들어서 끼워 맞추는 방법으로 소프트웨어를 완성시키는 기술
3) 소프트웨어 재사용의 이점
- 개발 시간 및 비용 단축
- 프로젝트 실패 위험 감소
- 개발 지식 공유 가능
- 소프트웨어 품질 향상
- 소프트웨어 개발 생산성 향상
4) 재사용 모듈 설계의 유의 사항
- 재사용 모듈의 내용이 이해하기 쉬워야 함
- 누구나 사용할 수 있도록 사용법이 공개되어야 함
- 검토 결과를 적용한 공통 기능에 대해 응집도가 최대한 높게 구성되었는지 확인해야 함
- 모듈의 독립성 향상을 위해 결합도가 최대한 낮게 구성되었는지 확인해야 함
- 모듈 간의 접속 관계를 분석하여 복잡도와 중복성을 줄이고 일관성을 유지
- 모듈의 기능은 예측할 수 있어야 하며 지나치게 제한적이지 않아야 함
- 유지보수가 용이해야 함
- 공유도는 높이고, 제어도는 낮추어 설계되었는지 최종 검토해야 함
- 모듈 간의 효과적인 제어를 위해 설계에서 계층적 자료 조직이 제시되어야 함
5) 모듈의 평가 기준
- 결합도(연관성) : 모듈 간의 관계성을 나타내는 척도
- 응집도(완성도) : 한 모듈 내에 있는 처리 요소들 사이의 기능적인 연관 정도를 나타낸 것
- 결합도(Coupling)와 응집도(Cohesion)는 모듈의 독립성을 판단하는 기준
- 좋은 설계를 위해서는 결합도는 작게 할수록 좋음
- 좋은 설계를 위해서는 집도는 크게 할수록 좋음
- 결합도가 높으면 시스템 구현 및 유지보수가 매우 어려워짐
- 모듈 간의 결합도가 약하게 되면 모듈의 독립성이 향상되고 재사용성이 많아져 활용도가 좋음
6) 소프트웨어 재공학(Software Re-Engineering)
- 소프트웨어의 위기를 해결하기 위해 개발의 생산성이 아닌 유지보수의 생산성으로 해결하려는 방법
- 시스템에 대한 재분석, 문서화 작업을 통해 공학적으로 우수한 시스템을 만드는 것
- 도구를 사용하여 소프트웨어를 분석하고 수정하는 과정을 포함함
- 정보 저장소에 정보를 충분히 활용해야 함
- 활동은 분석, 재구성, 역공학, 이식 활동 등으로 구분
7) 역공학과 재공학이 등장한 순서
- 유지보수 : 자신이 개발하지 않은 소프트웨어를 유지보수 함
- 외계인 코드 : 유지보수하는 과정에서 15년 이전 코드, 문서 부재, 개발자 부재인 소프트웨어
- 복구 : 최선을 다해 소프트웨어 수정
- 역공학 : 차후에 발생할 2차적인 유지보수를 위해 소스 코드를 보고 문서화
- 재공학 : 체계적으로 문서화하는 과정에서 문제점이 발견되어 소스 코드를 변경
8) 소프트웨어 역공학 정의
- 코드의 역공학(Reverse Engineering of Code)
- 코드로부터 자료 흐름도(DFD)를 변경
- 데이터의 역공학(Reverse Engineering of Data)
- 코드로부터 자료 사전(DD)을 변경