정보처리기사 필기 - 4과목 소프트웨어 공학
3장 전통적 S/W 개발 방법론
128 요구사항 분석
① 전통적 소프트웨어 개발 방법의 개요
· 전통적(고전적) 소프트웨어개발 방법은 과거의 많은 소프트웨어 개발 경험을 토대로 하여 성공적으로 평가되는 소프트웨어 분석 및 설계 방법들을 집대성하여 하나의 개발 방법으로 정형화한 것
· 전통적(고전적) 소프트웨어 개발 방법을 구조적 소프트웨어 개발 방법이라고도 함
② 요구사항 분석의 개요
요구사항 분석은 소프트웨어 개발의 실제적인 첫 단계로 개발 대상에 대한 사용자의 요구사항을 이해하고 문서화(명세화)하는 활동 의미
· 사용자 요구의 타당성을 조사하고 비용과 일정에 대한 제약 설정
· 사용자의 요구 정확하게 추출하여 목표 정하고, 어떤 방식으로 해결할 것인지를 결정
· 요구사항 분석을 통한 결과는 소프트웨어 설계 단계에서 필요한 기본적인 자료가 되므로 사용자의 요구사항을 정확하고 일관성 있게 분석하여 문서화해야 함
· 소프트웨어 분석가에 의해 요구사항 분석이 수행되며, 이 작업 단계를 요구사항 분석 단계라고 함
③ 요구사항 분석 작업
요구사항 분석은 다음과 같은 작업으로 세분화되어 수해오딤
· 문제 인식 : 사용자와의 면담, 설문조사 및 협조, 각종 문서 검토 등을 통하여 사용자의 요구사항 찾아냄
· 모델 제작 : 평가와 종합을 바탕으로 자료와 제어의 흐름, 기능 처리, 동작 행위, 정보 내용 등을 이해하기 쉽도록 모델로 작성
개발할 소프트웨어에 대한 추상적인 모형을 만드는 것
· 문서화와 검토 : 요구사항 분석 명세서를 작성 → 소프트웨어의 기능, 성능, 제약 조건 등에 대하여 기술 하고 검토
④ 요구사항 분석의 어려움
대화 장벽
· 사용자와 개발자의 지식 배경의 다양화, 용어 불일치 등으로 의사 소통 곤란
· 해결책 : 다이어그램 및 프로토타입 이용
시스템의 복잡도
· 소프트웨어 체계화를 위해 새로운 개념이 필요해지고, 시스템 규모와 대상이 광범위해짐에 따라 난이도 증가에 의한 소프트웨어의 복잡화
· 해결책 : 구조적 분석이나 객체지향 분석 이용
요구의 변경
· 사용자 생각의 부정확성, 생각의 반복된 변경
· 해결책 : 수정 요구와 상반된 요구들의 수용 기술 필요
요구 명세화의 어려움
· 중복 현상, 애매모호함, 시험의 어려움, 과거와 다른 현재 상황 등의 내포에 따라 요구 명세서 작성이 어려움
· 해결책 : 제도적인 요구 분석 기술 필요
⑤ 요구사항 분석가의 자질
요구사항 분석가는 요구사항의 효율적인 분석과 정확한 명세화를 위해 다음과 같은 자질을 갖추어야 함
· 소프트웨어 개발에 많은 경험을 가지고 있어야 함
· 사용자의 요구를 정확히 수용하고, 여러 환경을 이해해야 함
· 설계에 필요한 자료를 충분히 제공할 수 있어야 함
· 다방면에 대한 해박한 지식을 가지고 있어야 함
· 시간 배정과 계획 등을 빠른 시간 내에 파악할 수 있어야 함
· 하드웨어, 소프트웨어를 포함함 컴퓨터에 대한 기술을 이해하고 있어야 함
· 고객이 사용할 시스템을 만들어야 하므로 상대의 관점(고객 관점)에서 문제를 파악할 수 있어야 함
⑥ 구조적 분석 기법
구조적 분석 기법은 자료의 흐름과 처리를 중심으로 하는 요구사항 분석 방법으로, 다음과 같은 특징이 있음
· 도형 중심의 분석용 도구와 분석 절차를 이용하여 사용자의 요구사항을 파악하고 문서화함
· 도형 중심의 도구를 사용하므로 분석가와 사용자 간의 대화가 용이
· 하향식 방법을 사용하여 시스템을 세분화할 수 있고, 분석의 중복을 배제할 수 있음
· 사용자의 요구사항을 논리적으로 표현하여 전체 시스템을 일관성 있게 이해할 수 있음
· 시스템 분석의 질이 향상되고, 시스템 개발의 모든 단계에서 필요한 명세서 작성이 가능
· 구조적 분석 기법에는 자료흐름도, 자료 사전, 소단위 명세서, 개체 관계도, 상태 전이도, 제어 명세서 등의 도구를 이용하여 모델링 함
129 구조적 분석 도구
① 자료 흐름도(DFD)의 개요
자료 흐름도(DFD, Data Flow Diagram)는 요구사항 분석에서 자료의 흐름 및 변환 과정과 기능을 도형 중심으로 기술하는 방법으로 자료 흐름 그래프, 버블 차트라고도 함
· 시스템 안의 프로세스와 자료 저장소 사이에 자료의 흐름을 나타내는 그래프로 자료 흐름과 처리를 중심으로 하는 구조적 분석 기법에 이용됨
· 자료 흐름도는 자료 흐름과 기능을 자세히 표현하기 위해 단계적으로 세분화됨
· 자료는 처리를 거쳐 변환될 때마다 새로운 이름이 부여되며, 처리는 입력 자료가 발생하면 기능을 수행한 후 출력 자료를 산출함
② 자료 흐름도 구성 요소 표기법
기호 |
의미 |
표기법 |
|
Yourdon/DeMacro |
Gane/Sarson |
||
프로세스(Process) |
· 자료를 변환시키는 시스템의 한 부분(처리과정)을 나타내며 처리, 기능, 변환, 버블이라고도 함 · 원이나 둥근 사각형으로 표시하고 그 안에 프로세스 이름을 기입 |
○ |
|
자료 흐름(Data Flow) |
· 자료의 이동(흐름)이나 연관관계를 나타냄 · 화살표 위에 자료의 이름을 기입 |
→ |
|
자료 저장소(Data Store) |
· 시스템에서의 자료 저장소(파일, 데이터베이스)를 나타냄 · 도형 안에 자료 저장소 이름을 기입 |
|
|
단말(Terminator) |
· 시스템과 교신하는 외부 개체로, 입력 데이터가 만드러지고 출력 데이터를 받음(정보의 생산자와 소비자) · 도형 안에 이름을 기입 |
|
|
③ 자료 흐름도의 세분화(상세화)
자료 흐름도의 세분화는 요구사항 분석이 진행됨에 따라 하나의 자료 흐름도를 보다 자세히 표현하기 위해 또 다른 자료 흐름도를 생성하는 것
· 단계(Level) 0의 자료 흐름도는 기본 시스템 모델 또는 배경도라고 하며, 전체 소프트웨어 요소를 표시하는 하나의 프로세스(원)과 입·출력을 나타내는 화살표로 표현
· 각각의 프로세스에 대하여 개별적인 상세화 및 계층화가 가능
· 세분화 단계가 많아질수록 소프트웨어 설계와 구현 작업이 용이해짐
④ 자료 사전(DD)
자료 사전(DD, Data Dictionary)은 자료 흐름도에 있는 자료를 더 자세히 정의하고 기록한 것이며, 이처럼 데이터를 설명하는 데이터를 데이터의 데이터 또는 메타 데이터라고 함
· 자료 흐름도에 시각적으로 표시된 자료에 대한 정보를 체계적이고 조직적으로 모아 개발자나 사용자가 편리하게 사용 가능
자료 사전 표기법 및 작성 시 유의사항
· 자료 사전의 한 항목은 자료에 대한 정의 부분과 설명 부분으로 구성되며, 정의 부분에는 자료의 이름을, 설명 부분에는 자료에 대한 자세한 내용을 표현
· 이름으로 정의를 쉽게 찾을 수 있어야 하며, 이름이 중복되어서는 안됨
· 갱신하기 쉬워야 하며, 정의하는 방식이 명확해야 함
· 자료 사전에서 사용되는 표시 기호는 다음과 같음
기호 |
의미 |
= |
자료의 정의 : ~로 구성되어 있다(is composed of) |
+ |
자료의 연결 : 그리고(and) |
( ) |
자료의 생략 : 생략 가능한 자료(Optional) |
[ | ] |
자료의 선택 : 또는(or) |
{ } |
자료의 반복 : Iteration of ① {}n : n번 이상 반복 ② {}n : 최대로 n 번 반복 ③ {}nm : m이상 n이하로 반복 |
* * |
자료의 설명 : 주석(Comment) |
⑤ 소단위 명세서(Mini-Spec.)
소단위 명세서는 세분화된 자료 흐름도에서 최하위 단계 버블(프로세스)의 처리 절차를 기술한 것으로 프로세스 명세서라고도 함
· 소단위 명세서는 분석가의 문서이며, 자료 흐름도(DFD)를 지원하기 위하여 작성
· 소단위 명세서는 서술문장, 구조적 언어, 의사결정나무, 의사 결정표(판단표), 그래프 등을 이용하여 기술
※ 최하위 단계 버블(프로세스)
더 이상 세분화할 수 없는 단계의 프로세스로, 원시 버블 또는 프리미티브 버블(Primitive Bubble)이라고도 함
※ 구조적 언어, 의사결정나무, 의사 결정표
· 구조적 언어 : 자연어의 일부분으로 한정된 단어와 문형, 제한된 구조를 사용하여 명세서를 작성하는 데 이용하는 명세 언어
· 의사결정나무 : 현재 상황과 목표와의 상호 관련성을 나무의 가지를 이용해 표현한 것으로 불확실한 상황에서의 의사결정을 위한 분석 방법
· 의사 결정표(Decision Table) : 복잡한 의사 결정 논리를 기술하는 데 사용하며, 주로 자료 처리 분야에서 이용됨
⑥ 개체 관계도(ERD)
개체 관계도(ERD, Entity Relationship Diagram)는 시스템에서 처리되는 개체(자료)와 개체의 구성과 속성, 개체 간의 관계를 표현하여 자료를 모델화하는데 사용
· 개체 관계도의 구성
개체(Entity) |
소프트웨어에 의해 인식되는 여러 종류의 자료 |
속성(Attribute) |
개체에 관련된 특성 |
관계(Relationship) |
개체 간에 존재하는 상호 작용 |
· 개체는 사각형, 속성은 타원, 관계는 다이아몬드로 표시
· 개체 관계의도 작성 순서
① 주요키를 포함하여 개체의 속성을 모두 찾아냄
② 기본적인 개체와 주요키를 정의하며, 개체 사이의 관계 정의
③ 1:M 관계를 단순화하기 위해 속성 개체를 추가하며, 연관 관계를 정의하여 M:N 관계를 표현함
④ 각 개체를 정규화, 누락된 개체 점검 및 클라스 구조가 필요한지 결정
⑦ 상태 전이도(STD)
상태 전이도(STD, State Transition Diagram)는 시스템에 어떤 일이 발생할 경우 시스템의 상태와 상태 간의 전이를 모델화한 것으로, 상태 전이도를 통해 개발자는 시스템의 행위 정의 가능
· 상태 전이도에서 사각형은 시스템의 상태를, 화살표는 상태 전이를 나타냄
· 화살표의 시작 부분은 상태 전이를 일으키는 사건을 의미하며, 화살표의 끝은 사건의 결과로 발생하는 동작
130 요구사항 분석 CASE와 HIPO
① 요구사항 분석을 위한 CASE(자동화 도구)
· 요구사항 분석을 위한 자동화 도구는 요구사항을 자동으로 분석하고, 요구사항 분석 명세서를 기술하도록 개발된 도구
· 요구사항 분석을 위한 자동화 도구 사용의 이점
- 표준화와 보고를 통한 문서화 품질 개선
- 데이터베이스가 모두에게 이용 가능하다는 점에서 분석자들 간의 적절한 조정
- 교차 참조도와 보고서를 통한 결함, 생략 불일치 등의 발견 용이성
- 변경이 주는 영향 추적의 용이성
- 명세에 대한 유지보수 비용의 축소
종류
요구사항 분석을 위한 자동화 도구에는 SADT, STEA, PSL/PSA, TAGS, EPOS 등이 있음
· SADT(Structed Analysis and Design Technique)
- SoftTech 사에서 개발한 것으로 시스템 정의, 소프트웨어 요구사항 분석, 시스템/소프트웨어 설계를 위해 널리 이용되어 온 구조적 분석 및 설계 도구
- 구조적 요구 분석을 하기 위해 블록 다이어그램을 채택한 자동화 도구
· SREM(Software Requirements Engineering Methodology) = RSL/REVS
- TRW 사가 우주 국방 시스템 그룹에 의해 실시간 처리 소프트웨어 시스템에서 요구사항을 명확히 기술하도록 할 목적으로 개발한 것으로, RSL과 REVS를 사용하는 자동화 도구
- RSL(Requirement Statement Language) : 요소, 속성, 관계, 구조들을 기술하는 요구사항 기술 언어
요소 |
요구사항 명세를 개발하기 위해 사용되는 개체와 개념 |
속성 |
요구를 수정하거나 수식하기 위한 것 |
관계 |
개체들 간의 관계 |
구조 |
정보 흐름을 묘사하기 위한 것 |
- REVS(Requirement Engineering and Validation System) : RSL로 기술된 요구사항들을 자동으로 분석하여 요구사항 분석 명세서를 출력하는 요구사항 분석기
· PSL/PSA
-미시간 대학에서 개발한 것으로 PSL과 PSA를 사용하는 자동화 도구
- PSL(Problem Statement Language) : 문제(요구사항) 기술 언어
- PSA(Problem Statement Analyzer) : PSL로 기술한 요구사항을 자동으로 분석하여 다양한 보고서를 출력하는 문제 분석기
· TAGS(Technology for Automated Generation of System)
- 시스템 공학 방법 응용에 대한 자동 접급 방법으로, 개발 주기의 전 과정에 이용할 수 있는 통합 자동화 도구
- 구성 : IORL, 요구사항 분석과 IORL 처리를 위한 도구, 기초적인 TAGS 방법론
- IORL : 요구사항 명세 언어
② HIPO
HIPO(Hierarchy Input Process Output)는 시스템의 분석 및 설계나 문서화할 때 사용되는 기법으로, 시스템 실행 과정인 입력, 처리, 출력의 기능을 나타냄
· 기본 시스템 모델은 입력, 처리, 출력으로 구성되며, 하향식 소프트웨어 개발을 위한 문서화 도구
· 체계적인 문서 관리 가능
· 기호, 도표등을 사용하므로 보기 쉽고 이해하기도 쉬움
· 기능과 자료의 의존 관계를 동시에 표현 가능
· 변경, 유지보수가 용이
· 시스템의 기능을 여러 개의 고유 모듈들로 분할하여 이들 간의 인터페이스를 계층 구조로 표현한 것을 HIPO Chart라고 함
HIPO Chart의 종류
가시적 도표(도식 목차) |
시스템의 전체적인 기능과 흐름을 보여주는 계층 구조도 |
총체적 도표(총괄도표, 개요 도표) |
프로그램을 구성하는 기능을 기술한 것으로 입력, 처리, 출력에 대한 전반적인 정보를 제공하는 도표 |
세부적 도표(상세 도표) |
총체적 도표에 표시된 기능을 구성하는 기본 요소들을 상세히 기술하는 도표 |
131 설계
① 구조적 설계 기법
· 구조적 설계 기법은 구조적 분석 기법의 결과물인 자료 흐름도 등으로부터 소프트웨어의 기능(자료 구조)과 프로그램 구조, 모듈을 설계하기 위한 전략, 평가 지침 및 문서화 도구를 제공하는 체계화된 기법
· 자료의 흐름을 중심으로 하는 설계 기법이므로 자료 흐름 중심 설계 기법이라고도 함
· 자료 흐름도, 자료 사전, 개체 관계도, 소단위 명세서 등이 준비된 이후에 설계
② 설계의 개요
설계는 요구사항 분석 단계의 산출물인 요구사항 분석 명세서의 기능이 실현되도록 알고리즘과 그 알고리즘에 의해 처리될 자료 구조를 문서화하는 것
· 좋은 소프트웨어를 개발하기 위한 가장 핵심이 되는 기술로, 소프트웨어의 품질 평가를 위한 지침이 됨
· 소프트웨어 설계 모형의 구성
[그림 1] 소프트웨어 설계 모형
데이터 설계 |
요구사항 분석 단계에서 생성된 정보를 소프트웨어를 구현하는 데 필요한 자료 구조로 변환하는 것으로, ERD를 이용하여 정의된 개체와 관계, 자료 사전에 정의된 자료의 설명 등이 데이터 설계의 기초가 됨 |
구조 설계 |
소프트웨어를 구성하는 모듈간의 관계와 프로그램 구조를 정의하는 것으로 DFD, DD, STD 등과 모듈의 상호 작용이 기초가됨 |
인터페이스 설계 |
소프트웨어와 상호 작용하는 시스템, 사용자 등과 어떻게 통신하는지를 기술하는 것으로 DFD 등이 인터페이스 설계에 기초가 됨 |
절차(프로시저) 설계 |
모듈이 수행할 기능을 절차적 기술로 바꾸는 것으로 소단위 명세서, 상태 전이도의 정보가 절차 설계의 기초가 됨 |
③ 설계의 기본 원리
소프트웨어 설계는 다음과 같은 기본 원리를 가지고 있으며 이는 소프트웨어 설계자에게 보다 더 효율적인 설계 방법을 제공함
모듈화(Modularity)
· 모듈화는 소프트웨어를 모듈 단위로 나누는 것
· 모듈은 서브루틴, 부(Sub) 시스템, 소프트웨어 내의 프로그램, 작업 단위 등을 의미함
· 모듈화를 이용하여 설계하면 확장성, 융통성, 경제성 등이 향상됨
추상화(Abstraction, 개념화)
· 문제의 세부 사항을 먼저 설계하기보다는 전체적이고 포괄적인 개념을 설계한 후 차례로 세분화하여 구체화시켜 나가는 설계 방법
· 추상화의 유형
기능 추상화 |
입력 자료를 출력 자료로 변환하는 과정을 추상화하는 방법 |
제어 추상화 |
제어의 정확한 메커니즘(절차, 방법)을 정의하지 않고 원하는 효과를 정하는 데 이용하는 방법 |
자료 추상화 |
자료와 자료에 적용될 수 있는 기능을 함께 정의함으로써 자료 객체를 구성하는 방법 |
단계적 정제(Stepwise Refinement)
· Niklaus Wirth에 의해 제안된 하향식 설계 전략으로, 문제를 상위의 중요 개념으로부터 하위의 개념으로 구체화시키는 분할 기법
· 추상화의 반복에 의해 세분화됨
· 소프트웨어 기능에서부터 시작하여 점차적으로 구체화하고, 상세한 내역(알고리즘, 자료 구조)은 가능한 한 뒤로 미루어 가면서 진행
정보 은닉(Information Hiding)
· 한 모듈 내부에 포함된 절차화 자료들의 정보가 감추어져 다른 모듈이 접근하거나 변경하지 못하도록 하는 기법
· 다른 모듈이 정보 은닉된 모듈과 인터페이스할 때는 소프트웨어 기능을 수행하는 데 반드시 필요한 정보만을 전달함
· 모듈을 독립적으로 수행할 수 있고, 하나의 모듈이 변경되더라도 다른 모듈에 영향을 주지 않으므로 수정, 시험, 유지보수가 용이함
프로그램 구조(Program Structure)
· 소프트웨어의 구성 요소인 모듈의 계층적 구성을 나타내는 것으로, 제어 계층 구조라고도 함
· 프로그램의 순서, 선택, 반복과 같은 소프트웨어의 절차적인 처리 과정을 나타내지 않음
· 프로그램 구조는 일반적으로 트리 구조의 다이어그램으로 표기함(사각형은 모듈을 나타냄)
· 프로그램 구조에서 사용되는 용어
공유도(Fan-In, 팬-입력) |
어떤 모듈을 제어(호출)하는 모듈의 수 |
제어도(Fan-Out, 팬-출력) |
어떤 모듈에 의해 제어(호출)되는 모듈의 수 |
깊이(Depth) |
제어의 계층 수 |
넓이(Width) |
제어의 분기된 수 |
주종적 모듈(Superordinate) |
다른 모듈을 제어(호출)하는 모듈 |
종속적 모듈(Subordinate) |
어떤 모듈에 의해 제어되는 모듈 |
자료 구조
· 자료 구조는 자료 사이의 논리적인 관계를 표현한 것으로 자료의 구성, 결합 정도, 접근 방법 등을 나타냄
· 자료 구조의 종류에는 스칼라 항목, 벡터, 연결 리스트, 계층적 자료 구조 등이 있음
④ 바람직한 설계의 특징
· 설계는 소프트웨어 구조를 나타내야 함
· 설계는 독립적인 기능적 특성을 가진 요소(모듈)로 구성되어야 함
· 설계는 모듈 구조, 즉 특정 기능 또는 부기능을 수행하는 논리적 요소들로 분리되는 구조를 가져야 함
· 소프트웨어 요소(모듈) 간의 효과적인 제어를 위해 설계에서 계층적 자료 조직이 제시되어야 함
· 설계는 자료와 프로시저에 대한 분명하고 분리된 표현을 포함해야 함
· 설계는 모듈 간과 외부 개체 간의 연결 복잡성을 줄이는 인터페이스를 가져야 함
· 설계는 요구사항 분석에서 얻어진 정보를 이용하여 반복적인 방법으로 이루어져야 함
· 요구사항을 모두 구현해야 하고, 유지보수가 용이해야 함
· 모듈의 기능을 예측할 수 있도록 정의
· 적당한 모듈의 크기를 유지하고, 모듈 간의 상관성(결합도)은 낮추고, 응집도는 높임
· 전체적이고 포괄적인 개념을 설계한 후 차례대로 세분화하여 구체화시켜 나감
· 이식성을 고려함
132 모듈과 모듈화
① 모듈과 모듈화 개요
모듈화는 소프트웨어를 각 기능별로 분할하는 것을 의미하며, 각 기능별로 분할한 것을 모듈이라고 함
· 모듈화를 수행하면 소프트웨어의 복잡도가 감소하고, 변경이 쉬우며 프로그램 구현이 용이함
· 모듈의 속성과 구성
모듈의 속성 |
· 입·출력 요소 : 자료를 받아들이고, 자료를 내보내는 요소 · 기능 요소 : 입력을 출력으로 바꾸는 요소, 즉 모듈의 처리 결과 · 기관 요소 : 기능을 수행하기 위한 절차상의 코드 또는 논리 · 내부 자료 요소 : 모듈 자체의 작업장, 모듈이 스스로 참조하는 자료 |
모듈의 구성 |
· 호출 모듈 : 다른 모듈을 호출하는 모듈 · 피호출 모듈 : 다른 모듈에 의해 호출되는 모듈 |
② 모듈의 기능적 독립성의 개요
모듈의 기능적 독립성은 소프트웨어를 구성하는 각 모듈의 기능이 독립됨을 의미하는 것으로 모듈화, 추상화, 정보 은닉의 부산물
· 모듈이 하나의 기능만을 수행하고 다른 모듈과의 과도한 상호작용을 배제함으로써 이루어짐
· 기능적으로 독립된 모듈은 특정 기능을 수행하고, 다른 모듈과는 간단한 인터페이스만을 가지므로 개발이 쉽고 재사용이 가능
· 독립성이 높은 모듈일수록 모듈을 수정하더라도 다른 모듈에게는 거의 영향을 미치지 않으며, 오류가 발생해도 쉽게 발견하고 해결 가능
· 모듈의 독립성은 결합도와 응집도에 의해 측정되며, 독립성을 높이려면 모듈의 결합도를 약하게 하고 응집도를 강하게 하며 모듈의 크기를 작게 만들어야 함
· 결합도와 응집도는 소프트웨어 설계시 평가 지침이 됨
③ 결함도(Coupling)
· 결합도는 모듈 간에 상호 의존하는 정도 또는 두 모듈 사이의 연관 관계를 의미
· 독립적인 모듈이 되기 위해서는 각 모듈 간의 결합도가 약해야 하며 의존하는 모듈이 적어야 함
· 결합도가 강하면 시스템 구현 및 유지보수 작업이 어려움
· 결합도의 종류
자료 결합도, 스탬프 결합도, 제어 결합도, 외부 결합도, 공통 결합도, 내용 결합도
결합도 약함 ↔ 결합도 강함
자료 결합도 (Data Coupling) |
· 자료 결합도는 모듈 간의 인터페이스가 자료 요소로만 구성될 때의 결합도 · 어떤 모듈이 다른 모듈을 호출하면서 매개 변수나 인수로 데이터를 넘겨 주고, 호출받은 모듈은 받은 데이터에 대한 처리 결과를 다시 돌려주는 것 · 자료 결합도는 모듈 간의 내용을 전혀 알 필요가 없는 상태로서 한 모듈의 내용을 변경하더라고 다른 모듈에는 전혀 영향을 미치지 않는 가장 바람직한 결합도 |
스탬프(검인) 결합도 (Stamp Coupling) |
· 스탬프 결합도는 모듈 간의 인터페이스로 배열이나 레코드 등의 자료 구조가 전달될 때의 결함도 · 두 모듈이 동일한 자료 구조를 조회하는 경우의 결합도이며 자료 구조의 어떠한 변화, 즉 포맷이나 구조의 변화는 그것을 조회하는 모든 모듈 및 변화되는 필드를 실제로 조회하지 않는 모듈에까지도 영향을 미치게 됨 |
제어 결합도 (Control Coupling) |
· 어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하기 위해 제어 신호를 이용하여 통신하거나 제어 요소를 전달하는 결합도 · 상위 모듈이 하위 모듈의 상세한 처리 절차를 알고 있어 이를 통제하는 경우나 처리 기능이 두 모듈에 분리되어 설계된 경우에 발생 · 하위 모듈에서 상위 모듈로 제어 신호가 이동하여 상위 모듈에게 처리 명령을 부여하는 권리 전도형상이 발생 |
외부 결합도 (External Coupling) |
· 외부 결합도는 어떤 모듈에서 외부로 선언한 데이터(변수)를 다른 모듈에서 참조할 때의 결합도 · 참조되는 데이터의 범위를 각 모듈에서 제한 가능 |
공통(공유) 결합도 (Common Coupling) |
· 공통 결합도는 공유되는 공통 데이터 영역을 여러 모듈이 사용할 때의 결합도 · 공통 데이터 영역의 내용을 조금만 변경하더라고 이를 사용하는 모든 모듈에 영향을 미치므로 모듈의 독립성을 약하게 만듬 |
내용 결합도 (Content Coupling) |
· 내용 결합도는 한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 직접 참조하거나 수정할 떄의 결합도 · 한 모듈에서 다른 모듈의 내부로 제어가 이동하는 경우에도 내용 결합도에 해당됨 |
④ 응집도(cohesion)
· 응집도는 정보 은닉 개념을 확장한 것으로, 명령어나 호출문 등 모듈의 내부 요소들의 서로 관련되어 있는 정도, 즉 모듈이 독립적인 기능으로 정의되어 있는 정도를 의미
· 독립적인 모듈이 되기 위해서는 각 모듈의 응집도가 강해야 함
· 응집도의 종류
기능적 응집도, 순차적 응집도, 교환(통신)적 응집도, 절차적 응집도, 시간적 응집도, 논리적 응집도, 우연적 응집도
응집도 강함 ↔ 응집도 약함
기능적 응집도 (Functional Cohesion) |
모듈 내부의 모든 기능 요소들이 단일 문제와 연관되어 수행될 경우의 응집도 |
순차적 응집도 (Sequential Cohesion) |
모듈 내 하나의 활동으로부터 나온 출력 데이터를 그 다음 활동의 입력 데이터로 사용할 경우의 응집도 |
교환(통신)적 응집도 (Communication Cohesion) |
동일한 입력과 출력을 사용하여 서로 다른 기능을 수행하는 구성 요소들이 모였을 경우의 응집도 |
절차적 응집도 (Procedural Cohesion) |
모듈이 다수의 관련 기능을 가질 때 모듈 안의 구성 요소들이 그 기능을 순차적으로 수행할 경우의 응집도 |
시간적 응집도 (Temporal Cohesion) |
특정 시간에 처리되는 몇 개의 기능을 모아 하나의 모듈로 작성할 경우의 응집도 |
논리적 응집도 (Logical Cohesion) |
유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들로 하나의 모듈이 형성되는 경우의 응집도 |
우연적 응집도 (Coincidental Cohesion) |
모듈 내부의 각 구성 요소들이 서로 관련 없는 요소로만 구성된 경우의 응집도 |
⑤ 효과적인 모듈화 설계 방안
· 결합도는 줄이고 응집도는 높여서 모듈의 독립성을 높임
· 모듈의 제어 영역 안에서 그 모듈의 영향 영역을 유지시킴
· 복잡도와 중복성을 줄이고 일관성을 유지시킴
· 모듈의 기능은 예측이 가능해야 하며 지나치게 제한적이어서는 안됨
· 유지보수가 용이해야 함
· 모듈 크기는 시스템의 전반적인 기능과 구조를 이해하기 쉬운 크기로 분해
· 하나의 입구와 하나의 출구를 갖도록 해야 함
· 인덱스 번호나 기능 코드들이 전반적인 처리 논리 구조에 예기치 못한 영향을 끼치지 않도록 모듈 인터페이스를 설계해야 함
133 설계 방법
① 자료 설계
· 자료 설계는 설계의 첫 번째 작업으로, 요구 사항 분석에서 생성된 여러 모델들을 소프트웨어를 구현하는 데 필요한 자료 구조로 변환하는 것
· 자료 구조가 프로그램 구조와 절차적 복잡성에 영향을 주므로 자료 설계는 소프트웨어 품질에 큰 영향을 줌
· 정보 은닉과 자료 추상화의 개념은 자료 설계를 위한 기초를 제공함
② 구조 설계
· 구조 설계는 프로그램의 구조를 개발하고, 소프트웨어 구성 요소들 간의 관계를 정의하는 것
· 프로그램이 처리하는 기능에 초점을 맞추어 모듈로 분해하고, 프로그램 전반에 걸친 자료의 흐름을 위한 인터페이스를 정의
구조적 설계 절차
구조적(자료 흐름 중심) 설계에서는 다음과 같은 설계 절차를 통해 구조를 설계함
① 정보 흐름의 유형을 설정
② 흐름의 경계 표시
③ 자료 흐름도를 프로그램 구조로 사상
④ 제어 계층을 분해시켜서 정의
⑤ 경험적 방법을 구체화시킴
DFD를 프로그램 구조로 사상시키는 방법
요구사항 분석에서 작성한 DFD를 프로그램 구조로 사상시키는 방법
· 변환 분해 접근법 : 요구 분석 단계의 DFD를 입력 흐름, 변환 흐름, 출력 흐름으로 구분하여 프로그램 구조 도표로 변환시키는 방법
· 거래 분해 접근법 : DFD에서 거래에 해당하는 부분을 찾아내어 이 거래 중심 자료 흐름도를 거래 중심 구조 도표로 변환하는 방법
구조 도표(Structure Chart, 설계 구조도)
· 구조 도표는 프로그램 구조를 설계할 대 사용되는 도구로, 소프트웨어 기능을 몇 개의 고유 기능으로 분할하여 블랙 박스로 나타내고 블랙 박스 간의 인터페이스를 계층 구조로 표현하는 것
· 소프트웨어의 기능을 모듈의 호출 관계와 인터페이스로 나타냄
③ 인터페이스 설계
인터페이스 설계는 소프트웨어와 상호 작용하는 시스템, 사용자 등과 어떻게 통신하는지를 기술하는 과정
· 소프트웨어와 모듈 사이, 소프트웨어와 정보 생산자·소비자 사이, 소프트웨어와 사용자 사이의 인터페이스 설계로 나눌 수 있음
· 변화 요인이 다양한 사용자와의 인터페이스에 중점을 두고 설계함
④ 절차(프로시저) 설계
· 절차(프로시저) 설계는 데이터 설계, 아키텍처 설계, 인터페이스 설계가 이루어진 후에 수행되는 설계 작업으로 모듈이 수행할 기능을 절차적 기술로 바꾸는 것
· 데이터 설계, 아키텍쳐 설계, 인터페이스 설계를 바탕으로 실제 운영되는 소프트웨어로 변환하기 위해 코드에 가까운 추상화 수준의 모듈 명세서를 작성하는 것
· 프로시저 설계는 그래픽 설계 표기법이나 프로그램 설계 언어 등을 사용하여 나타냄
그래픽 설계 표기법
그래픽 설계 표기법은 그림으로 프로시저를 상세히 설명하고 처리 절차를 기술하는 것으로 흐름도와 N-S 차트가 있음
· 흐름도(Flowchart)
· N-S 차트(Nassi-Schneiderman Chart)
- N-S차트는 논리의 기술에 중점을 둔 도형을 이용한 표현 방법으로 박스 다이어그램, Chapin Chart라고도 함
- 연속, 선택 및 다중 선택, 반복 등의 제어 논리 구조를 표현
- GOTO나 화살표 사용하지 않음
- 조건이 복합되어 있는 곳의 처리를 시각적으로 명확히 식별하는 데 적합
- 선택과 반복 구조를 시각적으로 표현
- 이해하기 쉽고, 코드 변환이 용이
- 읽기는 쉽지만 작성 어려워, 임의로 제어를 전이하는 것은 불가능
- 총체적인 구조 표현과 인터페이스를 나타내기 어려움
- 단일 입구와 단일 출구로 표현
프로그램 설계 언어(PDL)
프로그램 설계 언어(PDL; Program Design Language)는 영어 단어를 이용하여 구조적 프로그래맹의 제어 구조를 기술하는 것이며 의사 코드 또는 구조적 영어(언어)라고 함
· 모듈의 논리를 설계할 때 사고 과정을 체계화해 가는 방법이며, 하향식 접근 방식으로 논리의 전체 흐름을 표현
· 현재 프로그래밍 언어와 유사한 서술적 표현에 의하여 프로그램, 설계, 시스템의 검토에 사용하고, 문서화 기법으로도 사용됨
· 순서도 대용으로 활용할 수 있으며 사용자와의 의사소통이 용이하게 함
· 모듈 내의 논리를 문법적 제한 없이 자유롭게 표현 가능
134 구현
① 구현 단계의 개요
구현 단계는 설계 단계에서 생성된 설계 명세서를 컴퓨터가 알 수 있는 모습으로 변환하는 과정으로, 프로그래밍 또는 코딩 단계라고도 함
· 각 모듈을 특정 프로그래밍 언어를 이용하여 원시 코드로 작성하고 문서화하는 작업
· 구현은 설계를 철저히 반영시키고, 원시 코드를 간단 명료하게 작성하며, 디버깅 및 변경, 검사가 용이하도록 해야 함
· 구현 단계에서는 사용할 프로그래밍 언어와 코딩 스타일 등을 결정해야 함
② 프로그래밍 언어
프로그래밍 언어의 분류
1세대 언어 |
기계어, 어셈블리어와 같은 저급 언어 |
2세대 언어 |
과학 계산용 / 정보 처리 분야 / 인터프리터 방식 |
3세대 언어 |
범용 언어 / 인공지능용 언어 / 객체지향형 언어 / 대화식 그래픽 언어 / 배열과 벡터 처리용 언어 / 보고서 작성용 언어 CAI용 언어 / 마이크로프로세서 프로그램 언어 / 수치 제어 기계용 도구를 위해 설계된 언어 |
4세대 언어 |
· 비절차적 언어, 자연 언어, 사용자 중심 언어, 응용 프로그램 생성기 언어 · 프로토타입 언어, 질의어(SQL), 정보 검색어, 보고서 작성기 |
프로그래밍 언어의 선정 기준
친밀감 |
언어의 능력 |
처리의 효율성 |
과거의 개발 실적 |
알고리즘과 계산상의 난이도 |
자료 구조의 난이도 |
성능 고려 사항들 |
프로그램 구조 |
프로그램의 길이 |
이식성 |
대상 업무의 성격 |
소프트웨어의 수행 환경 |
개발 담당자의 경험과 지식 |
컴파일러의 이용 가능성 |
③ 코딩 스타일 = 코딩의 표준화
프로그래머가 코딩하는 방법이 다르므로 이러한 코딩 방법의 일관성을 유지하고 좋은 코딩을 위해 제시된 표준을 코딩 스타일이라고 함
· 프로그램 논리를 명확하게 작성해야 함
· 지나치게 기교를 부리지 않음
· 수식은 간결하고 직접적으로 표현
· 임시 변수의 사용을 금함
· 혼동을 초래하는 변수명은 사용하지 말고, 일관성 있는 변수명 사용
· 블록 구조 사용
· 들여쓰기 사용
· 판단에 맞는 정확한 제어 구조 사용
· If뒤에 바로 If가 오지 않도록 하고, Else뒤에 Null이 되지 ㅇ낳게 함
· 모듈화와 서브루틴 사용
· 매개 변수가 5개 이상인 모듈은 유의
· 하나의 변수를 다목적으로 사용하지 않음
· 너무 깊은 중첩 구조는 피함
④ 구조적 프로그래밍
· 구조적 프로그래밍은 Dijkstra에 의해 제안된 것으로 신뢰성 있는 소프트웨어의 생산과 코딩의 표준화 등을 위해 개발된 방법
· 구조적 프로그래밍의 기본 제어 구조는 순차, 선택 반복
순차 |
명령을 순서적으로 나열 |
선택 |
특정 논리에 기초하여 명령 선택 |
반복 |
순환 제공 |
· 순차, 선택, 반복을 사용하면 프로그램의 복잡도를 줄여주고, 유지보수 용이
· 분기(GOTO) 없이 프로그래밍하여 읽고, 테스트하기 쉬움
· 오류 없는 프로그램 구성으로 품질 향상시킴
· 완전무결한 프로그래밍 규칙을 제공
· 생산성 증진을 통한 프로그래밍 경비를 감소시킴
· 프로그래밍 규칙
- 프로그램의 제어 흐름을 선형화
- 단일 입구와 단일 출구만을 가지게 함
- GORO문을 사용하지 않음
- 순차, 선택, 반복의 세 가지 기본 제어 구조 사용
135 검사 기법
① 검사의 개요
· 검사(Test)는 소프트웨어 품질 보증 활동의 하나로, 소프트웨어에 대한 요구사항의 만족도 및 예상 결과와 실제 결과의 차이점을 여러 방법으로 사용하여 검사하고 평가하는 일련의 과정을 의미
· 소프트웨어 품질을 평가하는 작업이며 분석이나 설계, 코딩 결과를 최종적으로 점검하는 과정
· 오류를 발견하기 위해 프로그램이나 시스템을 수행하는 과정
· 검사의 목적은 소프트웨어를 구성하는 요소들이 잘 조화를 이루며 정상적으로 동작하고 성능이 요구에 맞다는 것을 보장하기 위해서임
② 검사의 목적을 달성하기 위한 규칙
Glen Myers은 검사의 목적을 달성하기 위해 다음과 같은 규칙 제시
· 오류를 찾기 위해 프로그램을 실행시키는 절차를 검사하 함
· 오류 발견 확률을 높이기 위해 훌륭한 검사 사례를 이용
· 성공적인 검사는 아직 발견되지 않은 오류를 찾아내는 것
※ 검사 자료 : 검사 자료나 실행될 조건을 의미하는 것으로, 소프트웨어 오류를 찾아낼 수 있는 가능성이 가장 높은 테스트를 얻어내는 것
③ 검사 기법
· 검사 기법은 최소한의 시간과 노력으로 대부분의 오류를 찾아내기 위해 검사 사례를 설계하는 방법
· 검사 사례를 설계하는 검사 기법에는 화이트 박스 테스트와 블랙 박스 테스트가 있음
· 검사 사례 설계의 고려사항
- 모듈 내의 모든 독립적인 경로가 적어도 한 번은 수행되어야 함
- 가능한 한 복잡한 논리는 배제시킴
- 임의의 조건을 만족시켜야 함
- 내부 자료 구조를 사용하여 테스트를 수행함
④ 화이트 박스 테스트의 개요
화이트 박스 테스트(White Box Test)는 모듈의 원시 코드를 오픈시킨 상태에서 원시 코드의 논리적인 모든 경로를 검사하여 검사 사례를 설계하는 방법
· 설계된 절차에 초점을 둔 구조적 테스트로, 프로시저(절차) 설계의 제어 구조를 사용하여 검사 사례를 설계하며, 테스트 과정의 초기에 적용됨
· 모듈 안의 작동을 직접 관찰
· 원시 코드(모듈)의 모든 문장을 한 번 이상 수행함으로써 수행됨
· 프로그램의 제어 구조에 따라 선택, 반복 등의 분기접 부분들을 수행함으로써 논리적 경로를 제어함
· 각 조건에서의 참과 거짓의 모든 논리적 결정이 적어도 한 번 이상 실행됨
· 논리 흐름도, 루프 구조, 순환 복잡도에 관한 오류를 찾을 수 있음
· 화이트 박스 테이트 기법에는 기초 경로 검사, 제어 구조 검사(조건 검사, 루프 검사, 데이터 흐름 검사) 등이 있음
⑤ 기초 경로 검사(Basic Path Testing)
· 기초 경로 검사는 Tom McCabe가 제안한 것으로 대표적인 화이트 박스 테스트 기법
· 검사 사례 설계자가 절차적 설계의 논리적 복잡성을 측정할 수 있게 해주고, 이 측정 결과는 실행 경로의 기초를 정의하는 데 지침으로 사용됨
· 기초 경로 검사 절차
① 설계나 원시 코드를 기초로 해서 흐름도를 작성
② 흐름도의 논리적 복잡도를 측정
③ 독립 경로들의 기초 집합을 결정
④ 기초 지합의 각 경로를 실행시키는 검사 사례를 선정
· 제어 흐름도
- 제어 흐름을 표현하기 위해 사용되는 그래프로 프로그램 그래프, 흐름 그래프라고 함
- 제어 흐름도는 각 제어마다 다음과 같은 기호를 사용하여 표시함
▶ 노드(원) : 절차적 명령문을 나타냄
▶ 화살표 : 제어의 흐름을 나타냄
▶ 영역 : 화살표와 노드(원)로 둘러싸인 구역으로, 외부 구역도 하나의 영역으로 포함
· 순환 복잡도
순환 복잡도는 한 프로그램의 논리적인 복잡도를 측정하기 위한 소프트웨어의 척도로, 제어 흐름도 이론에 기초를 둠
- 순환 복잡도를 이용하여 계산된 값은 프로그램의 독립적인 경로의 수를 정의하고, 모든 경로가 한 번 이상 수행되었음을 보장하기 위해 행해지는 테스트 횟수의 상한선을 제공
- 제어 흐름도 G에서 순환 복잡도V(G)는 다음과 같은 방법으로 계산할 수 있음
▶ 순환 복잡도는 제어 흐름도의 영역 수와 일치하므로 영역 수를 계산함
▶ V(G) = E - N + 2 → E는 화살표 수, N은 노드의 수
⑥ 제어 구조 검사
· 조건 검사(Condition Testing)
- 프로그램 모듈 내에 있는 논리적 조건을 검사하는 검사 사례 설계 기법
- 프로그램에 있는 각 조건을 검사하는 데 초점을 맞추는 방법으로 조건 검사 범위 측정이 간단함
· 루프 검사(Loop Testing)
- 프로그램의 반복(Loop) 구조에 초점을 맞춰 실시하는 검사 사례 설계 기법
- 루프 검사는 단순 루프, 중첩 루프, 연결 루프, 비구조적 루프의 네 가지를 사용하여 정의할 수 있음
- 초기화 오류, 인덱싱 및 증가 오류, 경계값 오류 등을 발견할 수 있음
· 데이터 흐름 검사(Data Flow Testing)
- 프로그램에서 변수의 정의와 변수 사용의 위치에 초점을 맞춰 실시하는 검사 사례 설계 기법
⑦ 블랙 박스 테스트 개요
블랙 박스 테스트(Black Box Test)는 소프트웨어가 수행할 특정 기능을 알기 위해서 각 기능이 완전히 작동되는 것을 입증하는 검사로서, 기능 검사
· 소프트웨어 인터페이스에서 실시되는 검사
· 부정확하거나 누락된 기능, 인터페이스 오류, 자료 구조나 외부 데이터베이스 접근에 따른 오류, 행위나 성능 오류, 초기화와 종료 오류 등을 발견하기 위해 사용되며 테스트 과정의 후반부에 적용됨
· 소프트웨어 산물의 각 기능별로 적절한 정보 영역(입·출력)을 정하여 적합한 입력에 대한 출력의 정확성을 점검함
· 블랙 박스 테스트의 종류에는 동치 분할 검사, 경계값 분석, 원인-효과 그래프 검사, 오류 예측 검사, 비교 검사 등이 있음
⑧ 동치 분할 검사(Equivalence Partitioning Testing)
· 동치 분할 검사는 입력 자료에 초점을 맞춰 검사 사례를 만들고 검사하는 방법으로 동등 분할 기법이라고도 함
· 프로그램의 입력 조건에 타당한 입력 자료와 타당하지 않은 입력 자료의 개수를 균등하게 하여 검사 사례를 정하고, 해당 입력 자료에 맞는 결과가 출력되는지 확인하는 방법
⑨ 경계값 분석(Boundary Value Analysis)
· 경계값 분석은 입력 자료에만 치중한 동치 분할 기법을 보완하기 위한 기법
· 입력 조건의 중간값보다 경계값에서 오류가 발생될 확률이 높다는 점을 이용하여 입력 조건의 경계값을 검사 사례로 선정하여 검사
⑩ 원인-효과 그래프 검사(cause-effect graphing testing)
· 원인-효과 그래프 검사는 입력 데이터 간의 관계와 출력에 영향을 미치는 상황을 체계적으로 분석하여 효용성 높은 검사 사례를 선정하여 검사하는 기법
· 프로그램의 외부 명세에 의한 입력 조건과 입력으로부터 발생되는 출력을 논리적으로 연결시킨 그래프로 표현하여 검사함
⑪ 오류 예측 검사(fault based testing) = Mutation Testing
· 오류 예측 검사는 과거의 경험이나 확인자의 감각으로 검사하는 기법
· 다른 블랙 박스 테스트 기법으로는 찾아낼 수 없는 오류를 찾아내는 일련의 보충적 검사 기법이며, 데이터 확인 검사
⑫ 비교 검사(Comparison Testing)
여러 버전의 프로그램에 동일한 검사 자료를 제공하여 동일한 결과가 출력되는지 검사하는 기법
136 검사 전략
① 검사 전략의 개요
검사 전략은 설계된 검사 사례를 수행하는 것으로, 다음과 같은 순서에 의해 진행됨
① 단위(코드) 검사 : 검사는 프로그램의 기본 단위인 모듈(코드) 수준에서 시작
② 통합(설계) 검사 : 단위 검사 후 모듈을 겹합하여 저체 시스템에 대해 검사
③ 검증(요구사항) 검사 : 사용자의 요구사항을 충족시키는가를 검사
④ 시스템 검사 : 개발된 소프트웨어가 컴퓨터 시스템에서 오나벽하게 수행되는지를 검사
② 단위 검사
· 단위 검사(Unit Test)는 코딩이 이루어진 후 소프트웨어 설계의 최소 단위인 모듈에 초점을 맞추어 검사하는 것
· 단위 검사는 화이트 박스 테스트 기법을 사용
· 단위 검사에서는 이터페이스, 외부적 I/O, 자료 구조, 독립적 기초 경로, 오류 처리 경로, 경계 조건 등을 검사
③ 통합 검사의 개요
· 통합 검사(Integration Test)는 단위 검사가 완료된 모듈들을 결합하여 하나의 시스템으로 완성시키는 과정에서의 검사를 의미
· 통합 검사는 모듈 간의 인터페이스와 연관된 오류를 밝히기 위한 검사 기법
· 통합 검사 방법에는 다음과 같이 비점진적 통합 방식과 점진적 통합 방식
비점진적 통합 방식 |
· 단계적으로 통합하는 절차 없이 모든 모듈이 미리 결합되어 프로그램 전체를 검사하는 방법으로, 빅뱅 통합 검사 있음 · 전체 프로그램을 대상으로 하므로 오류 발견이 힘들고, 수정이 어려움 |
점진적 통합 방식 |
· 모듈 단위로 단계적으로 통합하면서 검사하는 방법이며 하향식, 상향식 혼합식 통합 검사가 있음 · 오류 수정이 용이하고, 인터페이스와 연관된 오류를 완전히 검사할 가능성이 높음 |
④ 하향식 통합 검사(Top Down Integration Test)
하향식 통합 검사는 프로그램의 상위 모듈에서 하위 모듈 방향으로 통합하면서 검사하는 기법
· 주요 제어 모듈(주요 프로그램)을 기준으로 하여 아래 단계로 이동하면서 통합되는데, 이때 깊이 우선 통합법이나 넓이 우선 통합법을 사용할 수 있음
· 하향식 통합 방법 수행 절차
① 주요 제어 모듈을 드라이버로 사용하고, 주요 제어 모듈의 종속 모듈들은 스터브(Stub)로 대체함
② 깊이 우선 또는 넓이 우선 등의 통합 방식에 따라 종속 스터브들이 실제 모듈로 교체됨
③ 모듈이 통합될 때마다 검사를 실시함
④ 새로운 오류가 발생하지 않음을 보증하기 위해 회귀 검사(전에 수행된 검사의 일부나 전체를 다시 검사하는 것)를 실시함
※ 하향식 통합 방법
· 깊이 우선 통합법 : 주요 제어 모듈을 중심으로 이 모듈에 종속된 모든 모듈을 통합하는 것
· 넓이 우선 통합법 : 구조의 수평을 중심으로 해당하는 모듈을 통합하는 것
· 드라이버(Driver) : 검사 사례 자료를 입력 받고, 검사를 위해 받은 자료를 모듈로 넘기며, 관련된 결과를 출력하는 제어 프로그램
· 스터브(Stub) : 일시적으로 필요한 조건만을 가지고 임시로 제공되는 가짜 모듈, 즉 시험용 모듈
· 스터브(Stub) 사용 이유 : 하향식 통합 방식에서는 먼저 상위의 주요 제어 모듈을 검사하게 되는데, 이 때 주요 제어 모듈은 이에 종속된 모듈이 모두 결합되어야 정상적으로 검사될 수 있음. 그러므로 주요 제어 모듈이 정상적으로 운용되도록 스터브를 사용하는 것
⑤ 상향식 통합 검사(Bottom up integration Test)
상향식 통합 검사는 프로그램의 하위 모듈에서 상위 모듈 방향으로 통합하면서 검사하는 기법
· 가장 하위 단계의 모듈부터 통합 및 검사가 수행되므로 스터브는 필요하지 않지만, 하나의 주요 제어 모듈과 관련된 종속 모듈의 그룹인 클러스터가 필요함
· 상향식 통합 방법 수행 절차
① 하위 모듈들을 클러스터로 결합
② 검사 사례 입·출력을 조정하기 위해 드라이버 작성
(드라이버 작성 : 주요 제어 모듈이 있어야 프로그램이 동작하게 되는데, 상향식 통합 검사에서는 하위 모듈에서 상위 모듈로 통합·검사되므로 클러스터를 시험하기 위한 제어 프로그램이 필요)
③ 클러스터 검사
④ 드라이버 제거하고, 클러스터는 프로그램 구조의 상위로 이동하여 결합
⑥ 혼합식 통합 검사
혼합식 통합 검사는 하위 수준에서 상향식 통합, 상위 수준에서 하향식 통합을 사용하여 최적의 검사를 지원하는 방식으로 샌드위치식 통합 검사 방법
⑦ 검증 검사(확인 검사, 인수 검사)
· 검증 검사(Validation Test)는 소프트웨어가 사용자의 요구사항을 충족시키는가에 중점을 두고 검사하는 방법
· 통합 검사가 끝난 후 전체가 하나의 소프트웨어로 통합되어 요구사항 명세서를 토대로 진행하며, 블랙 박스 테스트를 이용하여 진행
· 검증 검사 기법
형상 검사(구성 검토, 감사) |
소프트웨어 구성 요소, 목록, 유지보수를 지원하기 위해 필요한 사항들이 제대로 표현되었는지를 검사하는 기법 |
알파 검사 |
· 개발자의 장소에서 사용자가 개발자 앞에서 행하는 검사 기법 · 통제된 환경에서 행해지며, 오류와 사용상의 문제점을 사용자와 개발자가 함게 확인하면서 기록 |
베타 검사 |
· 선정된 최종 사용자가 여러 명의 사용자 앞에서 행해지는 검사 기법 · 실업무를 가지고 사용자가 직접 시험하는 것으로, 개발자에 의해 제어되지 않은 상태에서 검사가 행해지며, 발견된 오류와 사용상의 문제점을 기록하고 개발자에게 주기적으로 보고 |
⑧ 시스템 검사
· 시스템 검사(System Test)는 개발된 소프트웨어가 해당 컴퓨터 시스템에서 완벽하게 수행되는가를 검사하는 것
· 시스템 검사의 종류
복구 검사 |
소프트웨어에 여러 가지 결함을 주어 실패하도록 한 후 올바르게 복구되는지를 확인하는 검사 |
보안 검사 |
시스템 내에 설치된 보호 도구가 부적당한 침투로부터 시스템을 보호할 수 있는지를 확인하는 검사 |
강도 검사 |
비정상적인 상황에서 소프트웨어를 실행시키기 위한 검사로 비정상적인 양, 빈도 등의 자원을 요구하는 환경에서 소프트웨어를 실행시킴 |
성능 검사 |
통합된 시스템에서 소프트웨어의 실시간 성능을 검사하기 위한 것으로, 검사 단계의 전 과정에 걸쳐 수행됨 |
⑨ 디버깅(Debugging)
디버깅은 검사 단계에서 검사 사례에 의해 오류를 찾은 후 그 오류를 수정하는 과정이며 검사 기법은 아님
· 디버깅은 성공적인 검사 결과로 발생함
· 디버깅은 인간의 심리적인 요소가 많이 관여하기 때문에 매우 어려움
디버깅 접근법
· 맹목적 강요 : 디버깅할 수 있는 모든 방법을 동원하여도 실패하게 된 경우에 사용되는 가장 비효율적인 방법
· 역추적(Backtracking) : 오류가 발견된 위치에서 원인이 발견될 때까지의 코딩 부분으로 거슬러 올라가면서 수정하는 가장 닐반적인 방법이며, 작은 프로그램에서 성공적으로 사용할 수 있음
· 원인 제거(Cause Elimination) : 오류 가능성이 있는 원인을 제거하여 버그를 분리하기 위해 사용
137 유지보수
① 유지보수의 개요
유지보수(Maintenance)는 개발된 소프트웨어의 품질을 항상 최상의 상태로 유지하기 위한 것으로, 소프트웨어 개발 단계 중 가장 많은 노력과 비용이 투입되는 단계
· 유지보수는 소프트웨어가 사용자에게 인수되어 설치된 후 발생하는 모든 공학적 작업
· 소프트웨어 유지보수를 용이하게 하려면 시험 용이성, 이해성, 수정 용이성, 이식성 등이 고려되어야 함
· 유지보수는 수리 보수, 적응 보수, 완전화 보수, 예방 보수 활동으로 구분 할 수 있고, 이 활동을 통해 소프트웨어의 수명은 연장시키는 작업
수정(Corrective) 보수 = 수리·교정·정정·하자 보수 |
시스템을 운영하면서 검사 단계에서 발견하지 못한 잠재적인 오류를 찾아 수정하는 활동으로, 오류의 수정과 진단을 포함 |
적응(Adaptive)보수 = 환경 적응, 조정 보수 |
· 소프트웨어의 수명 기간 중에 발생하는 환경의 변화(하드웨어, 운영체제 등)를 기존의 소프트웨어에 반영하기 위하여 수행하는 활동 · 운영체제나 컴파일러와 같은 프로그래밍 환경의 변화와 주변장치 또는 다른 시스템 요소가 향상되거나 변경될 대 대처할 수 있는 유지보수 활동 |
완전화(Perfective) 보수 = 기능 개선, 기능 보수 |
· 소프트웨어의 본래 기능에 새로운 기능이 추가하거나 성능을 개선하기 위해 소프트웨어를 확장시키는 활동 · 유지보수 활동 중 가낭 큰 업무 및 비용을 차지하는 활동 |
예방(Prevention) 보수 |
· 장래의 유지보수성 또는 신뢰성을 개선하거나 소프트웨어의 오류발생에 대비하여 미리 예방 수단을 강구해 두는 활동 · 예방 유지보수를 소프트웨어 재공학이라고 함 |
② 유지보수의 과정
① 유지보수 요구 : 유지보수 활동이 필요할 경우 이에 대한 요구를 수행
② 현 시스템에 대한 이해 : 요구된 유지보수 활동을 수행하기 위해서는 먼저 현재 시스템에 대한 이해를 필요로 하며, 현재 시스템에 대해 이해하지 못한 상태에서 유지보수 활동을 수행하면 오류가 발생할 수 있음
③ 수정 및 시험 : 유지보수 활동을 수행하고, 유지보수 활동을 수행한 후에도 정상적으로 기능이 수행되는지를 확인하기 위해 테스트
③ 유지보수의 비용
· 소프트웨어 유지보수 단계에서 사용되는 비용은 소프트웨어 개발에 필요한 비용 중 약 70%를 차지함
· 유지보수 비용은 분석, 평가, 설계 변경, 코딩 등의 생산적인 활동과 프로그램과 자료 구조의 이해, 인터페이스의 특성 파악, 성능 측정 등의 실험 활동에 따라 달라질 수 있음
· 유지보수 비용은 일반적으로 bl 방법에 의해 다음과 같은 산정함
M = P + Ke(c-d) | M : 유지보수를 위한 노력(인원/월) P : 생산적인 활동에 드는 비용 K : 통계값에서 구한 상수 | c : 복잡도 d : 소프트웨어에 대한 지식의 정도 |
④ 유지보수의 문제점
· 다른 사람이 개발한 소프트웨어는 이해하기가 어려울 뿐만 아니라 소프트웨어 개발자들의 이직률이 높기 때문에 개발된 소프트웨어에 대한 전문적인 설명을 들을 수가 없음
· 소프트웨어에 대한 변경이 자주 발생하므로 변경된 내용을 문서화하지 않을 경우 추적하기 어려움
· 소프트웨어에 대한 적절한 문서가 없거나 문서의 질이 형편없을 수도 있음
· 대부분의 소프트웨어는 변경 가능하도록 설계되지 않음
· 유지보수는 매혹적인 작업이 아니므로 기피하는 경향이 있음
※ 유지보수의 부작용 / 외계인 코드
유지보수의 부작용 : 유지보수 활동을 통해 예기치 못한 부작용이 발생될 수 있음
· 코딩 부작용 : 코딩 내용의 변경으로 인해 발생하는 부작용
· 자료 부작용 : 자료나 자료 구조의 변경으로 인해 발생하는 부작용
· 문서화 부작용 : 자료 코드에 대한 변경이 설계문서나 사용자가 사용하는 매뉴얼에 적용되지 않을 때에 발생하는 부작용
외계인 코드(Alien Code)
· 외계인 코드는 아주 오래 전에 개발되어 유지보수 작업이 매우 어려운 프로그램을 의미
· 일반적으로 15년 전 또는 그 전에 개발된 프로그램을 의미하며, 문서화를 철저하게 해 두면 외계인 코드 방지 가능
출처 : 2017 시나공 정보처리기사 필기
'정보처리기사 > 소프트웨어 공학' 카테고리의 다른 글
소프트웨어 공학 오답노트 (0) | 2017.02.26 |
---|---|
5장 S/W 공학의 발전적 추세 (0) | 2017.02.10 |
4장 객체지향 S/W 공학 (0) | 2017.02.09 |
2장 소프트웨어 프로젝트 관리 (0) | 2017.02.06 |
1장 소프트웨어 공학의 개요 (0) | 2017.02.06 |