Search
🌈

[소프트웨어 공학론] 대학원 수업 정리

Ch 1-3. 소프트웨어 프로세스

소프트웨어 개발 모델

[주먹구구식 개발 모델 (Build-Fix Model)]
정의: 요구사항 분석, 설계 단계 없이 일단 개발에 들어간 후 만족할 때까지 수정
단점: 정해진 개발 순서가 없기에
계획이 정확하지 않음
관리자는 프로젝트 진행 상황 파악에 어려움
개발 문서가 없기에 개발 및 유지보수에 어려움
[폭포수 모델 (Waterfall Model)]
정의:
순차적으로 소프트웨어를 개발하는 전형적인 개발 모델
대부분의 소프트웨어 개발 프로젝트의 기본적 모델, 가장 많이 사용되는 모델
소프트웨어 개발의 전 과정을 체계적으로 나눠 순차적으로 접근
장점:
각 단계별로 정형화된 접근 가능
체계적인 문서화를 통해 명확한 프로젝트 진행 가능
단점:
앞 단계가 완료될 때까지 다음 단계들은 대기
실제 작동되는 SW를 개발 후반부에 확인 가능하기에 고객이 요구사항 만족 여부를 확인하기까지 많은 시간 요소
[원형 모델 (Prototyping Model)]
정의:
폭포수 모델의 단점을 보완한 모델
점진적으로 SW를 개발해 나가는 접근 방법
원형(Prototype)을 만들어 고객과 사용자가 함께 평가하며, SW 요구사항 정제
목적: 프로토타입을 빠르게 개발하여 고객과 검증하는 것
고객으로부터 피드백을 받은 후, 원형 폐기
SW 기능 중 중요한 부분만 구현하여 피드백을 얻은 후, 지속적으로 발전시켜 완제품을 제작
[나선형 모델 (Spiral Model)]
정의:
폭포수 모델과 원형 모델의 장점을 수용하고 위험 분석(Risk analysis)을 추가한 점증적 개발 모델
프로젝트 수행 시, 발생하는 위험을 관리하고 최소화하는 것이 목적
특징:
나선상의 각 원은 소프트웨어 개발의 점증적 주기 표현
엔지니어가 프로젝트 성격이나 진행 상황에 따라 단계 구분
장점:
프로젝트 모든 단계에서 기술적 위험을 직접 고려할 수 있어서 사전 위험 감소
요구사항 변경, 제품 개발 지연 등에 효과적으로 대응 가능
단점:
프로젝트 소요 기간 증가 가능성 및 정확한 위험 분석의 필요성
폭포수, 원형 모델에 비해 상대적으로 복잡하여 프로젝트 관리의 어려움

Ch 4-6. 소프트웨어 프로젝트 계획

기능 점수

[기능 점수 (Function Point)]
정의: 시스템을 구현한 기술에 독립적이고, 사용자에 의해 식별되는 기능에 기반하여 전체 시스템의 크기를 측정하는 척도
장점:
개발에 사용된 기술, 개발 환경(개발 언어, 도구 등) 및 개발자의 능력에 독립적
사용자 요구사항만으로 측정할 수 있어 개발 초기에 산정 가능
개발은 물론 계획, 운영 등 전 단계에서 측정 가능
단점:
측정에 비용과 시간이 소요
프로젝트 초기 단계에 모든 요구사항을 다 파악하기 어렵기에 정확한 예측 어려움

EVM

[EVM의 개요]
정의:
프로젝트가 계획대로 잘 진행되고 있는지를 통제하기 위한 모니터링 관리 기법
프로젝트의 일정 상태, 비용 상태 그리고 완료된 작업량을 비용화하여 계획 대비 실적을 비교 및 평가함으로써 프로젝트의 성과와 진행률을 정량적으로 관리
특징:
비용과 시간을 모두 화폐 단위로 통합하여 정량화
프로젝트의 일정, 비용 그리고 완료를 모두 금액으로 환산
특정 시점까지 완료된 작업량을 비용화하여, 계획된 비용과 비교 평가
[EVM의 기본 용어]
BCWS (Budgeted Cost of Work Scheduled)
PV(Planned Value)
계획된 작업량의 계획된 비용
BCWP (Budgeted Cost of Work Performed)
EV(Earned Value)
수행한 작업의 계획된 비용
ACWP (Actual Cost of Work Performance)
AC(Actual Cost)
수항한 작업의 실제 비용
BAC (Budget at Completion)
BCWS의 합
전체 작업에 대한 계획된 비용
EAC (Estimate at Completion)
ACWP + {(BAC - BCWP) / CPI} (남은 작업량에 대한 예측된 비용)
전체 작업이 완료되는 데 예측되는 실제 비용
SV (Schedule Variance)
BCWP - BCWS
계획된 작업량과 실제 수행된 작업량의 차이
마이너스 값: 일정 지연
CV (Cost Variance)
BCWP - ACWP
계획된 비용과 실제 비용의 차이
마이너스 값: 비용초과
VAC (Variance at Completion)
VAC = BAC - EAC
마이너스 값: 전체 작업을 완료할 때, 계획보다 비용이 초과됨
플러스 값: 전체 작업을 완료할 때, 계획보다 비용이 남음
SPI (Schedule Performance Index)
SPI = BCWP / BCWS
SPI < 1 : 일정 지연
CPI (Cost Performance Index)
CPI = BCWP / ACWP
CPI < 1 : 비용 초과

Ch 7-8. 소프트웨어 요구사항 분석

요구사항

[요구사항의 분류]
기능적 요구사항 (Functional Requirements)
목표로 하는 제품의 구현을 위해 소프트웨어가 가져야 하는 기능적 속성
예) 워드 프로세서에서 파일 저장 기능, 편집 기능, 보기 기능 등
비기능적 요구사항 (Non-Functional Requirements)
제품의 품질 기준을 만족시키기 위해 소프트웨어가 가져야 하는 성능, 사용성, 안전성과 같은 품질 속성
예) 응답 시간, 처리량, 사용의 용이성, 신뢰도, 보안성, 안전성 등
[요구사항 분석]
구조적 분석 (Structured Analysis)
시스템의 기능을 중심으로 분석
시스템의 기능을 정의하기 위해서 프로세스들을 도출하고, 도출된 프로세스 간의 데이터 흐름 정의
자료 흐름도 (Data Flow Diagram)
객체지향 분석 (Object-Oriented Analysis)
사용자 중심의 시나리오를 중심으로 분석
유스케이스 모델 (Use-case Model)
정보공학 분석 (Data-Oriented Analysis)
자료 또는 데이터를 중심으로 분석
자료를 처리학 위해 필요한 기능을 도출하고 정체
ER 다이어그램
[요구사항 검증]
무결성(correctness) 및 완전성(completeness): 사용자 요구를 에러 없이 완전하게 반영하고 있는가?
일관성(consistency): 요구사항이 서로 간에 모순되지 않는가?
명확성(unambiguous): 요구분석의 내용이 모호함 없이 모든 참여자들에 의해 명확하게 이해될 수 있는가?
기능성(functional): 요구사항 명세서가 “어떻게”보다 “무엇을”에 관점을 두고 기술되었는가?
검증 가능성(verifiable): 기술된 내용이 사용자의 요구를 만족하는가? / 개발된 시스템이 요구사항 분석 내용과 일치하는지를 검증할 수 있는가?
추적 가능성(traceable): 요구사항과 설계 문서를 추적할 수 있는가?

유스케이스 기반 요구사항 분석

[요구 분석 단계의 작업]
구조적 분석: 기능(프로세스) 중심으로 요구사항 분석 using DFD(Data Flow Diagram)
객체지향 분석: 사용자 상호작용 중심으로 요구사항 분석 using 유스케이스 다이어그램
정보공학 분석: 정보나 자료를 중심으로 요구사항 분석 using ER 다이어그램
[모델링 방법론]
부치 방법론 (4+1 뷰)
시스템을 여러 개의 뷰(View)로 분석하여 모델링
유스케이스 뷰 + 논리 뷰, 구현 뷰, 프로세스 뷰, 배포 뷰
야콥슨의 OOSE (Object Oriented Software Engineering)
유스케이스를 강조한 방법론
사용자와 상호작용하는 시스템의 요구사항을 정의
정의된 유스케이스를 개발, 테스트, 검증 단계에서 사용
럼바우 OMT (Object Modeling Technique)
시스템을 기술하기 위해 3가지 모델 사용
객체 모델 (Object Model): 정적 구조 (클래스, 객체)
기능 모델 (Functional Model): 데이터 변환 (DFD)
동적 모델 (Dynamic Model): 제어 흐름 및 상호 작용 (상태 및 동작)

유스케이스 다이어그램

[시스템 (System)]
정의: 만들고자 하는 프로그램을 나타냄
표기: 사각형 틀로 시스템 명칭을 안쪽 상단에 작성함
[액터 (Actor)]
정의: 시스템의 외부에 있고, 시스템과 상호작용을 하는 사람 또는 다른 시스템
표기: 원과 선을 조합한 사람으로 표현
[유스케이스 (Usecase)]
정의: 시스템이 액터에게 제공해야 하는 기능
표기: 타원으로 표시하고, 이름은 “~한다”와 같이 동사로 표현
[관계 (Relationship)]
정의: 액터와 유스케이스 사이의 의미 있는 관계
종류:
연관 관계 (Association)
유스케이스와 액터를 실선으로 연결
상호작용이 있음을 표현
의존 관계 (Dependency)
포함 관계 (Include)
하나의 유스케이스가 다른 유스케이스의 실행을 전제로 실행될 때 형성되는 관계
A → B: B가 실행되어야 A가 실행됨
확장 관계 (Extend)
확장 기능(Extending) 유스케이스와 확장 대상(Extended) 유스케이스 사이에 형성되는 관계
A → B: B를 실행할 때, A도 실행할 수 있음
일반화 관계 (Generalization)
유사한 유스케이스들 또는 액터들을 모아 추상화함으로써 이해도를 높이기 위한 관계
A → B: 추상적인 A들은 구체적인 B로 포함될 수 있음
[유스케이스 다이어그램 작성 순서]
1.
시스템 및 액터 식별
시스템 식별
사용자의 역할 식별
외부 시스템 식별
2.
유스케이스 식별
액터가 요구하는 서비스 식별
액터가 시스템과 상호작용하는 행위 식별
3.
관계 정의
액터와 유스케이스 간 일반화/연관 관계 정의
유스케이스 간 포함/확장 관계 정의

Ch 9. 소프트웨어 구조 설계

소프트웨어 설계

[상위 설계와 하위 설계]
상위 설계 (High-Level Design)
아키텍처 설계(Architecture Design), 예비 설계(Preliminary Design) 라고도 함
소프트웨어 구성 모듈들 간의 관계로 표현되는 시스템의 전체적인 구조
아키텍처 설계(시스템 구조도), 외부 파일 및 DB 설계(레코드 레이아웃, ERD), 화면 인터페이스 설계 등이 포함됨
하위 설계 (Low-Level Design)
모듈 설계(Module Design), 상세 설계(Detail Design)라고 함
시스템 구성 요소들의 내부 구조, 동적 행위 등을 결정함
각 구성 요소의 제어와 데이터들 간의 연결에 대한 정의
모듈 설계, 알고리즘 설계, 자료구조 설계 등이 포함됨
[설계 방식]
프로세스 지향 설계 (Process Oriented Design)
업무의 처리절차를 중심으로 설계의 구성 요소들을 구분
어떠한 절차를 거쳐서 작업을 수행하는가, 어떠한 입출력 자료를 생성하는가에 초점
객체지향 설계 (Object Oriented Design)
시스템을 이루는 실제 객체 요소를 중심으로 설계
자료구조와 그에 대한 연산을 묶어서 구성되는 객체들을 정의하고, 객체 간 상호작용의 기본이 되도록 설계
[설계 원리]
추상화 (Abstraction)
정의:
특정 목적과 관련된 필수 정보만 추출하여 강조하고
관련이 없는 세부 사항을 생략함으로써 본질적인 문제에 집중할 수 있도록 하는 작업
단계: 상위 레벨에서의 설계를 먼저 고려하고, 점차 하위 레벨로 구체화
종류:
과정 추상화 (Procedure Abstraction)
입력 자료를 출력 자료로 변환하는 과정을 추상화
수행 과정의 자세한 단계를 고려하지 않고, 상위 수준에서 수행 흐름만 먼저 설계
데이터 추상화 (Data Abstraction)
데이터 구조를 대표할 수 있는 표현으로 대체하는 것
예) “연, 월, 일” 데이터 타입을 단순히 “날짜”로 추상화하는 것
제어 추상화 (Control Abstraction)
제어 로직을 대표할 수 있는 표현으로 대체하는 것
예) “윤년이면, 윤년 요일 계산을 수행한다.”, “평년이면, 평년 요일 계산을 수행한다.” ⇒ “윤년 여부에 따라 요일 계산을 수행한다.” 로 추상화 가능
단계적 분해 (Stepwise Refinement)
정의: 문제를 상위 개념부터 더 구체적인 단계로 분할하는 하향식 기법의 원리
과정:
문제를 하위 수준의 독립된 단위로 나누는 것
분해된 문제의 자세한 내용은 가능한 뒤로 미루는 것
점증적으로 구체화 작업을 계속함
모듈화 (Modularization)
정의: 수행 가능 명령어, 자료구조 또는 다른 모듈을 포함하고 있는 독립 단위
특성:
독립적으로 컴파일 및 동작
다른 모듈 사용 가능
다른 프로그램에서 사용 가능
모듈의 크기: 모듈 내의 응집력은 높게, 모듈 간의 결합력은 약하게
응집력 (Cohesion):
정의:
모듈을 이루는 각 요소들의 서로 관련되어 있는 정도
강한 응집력을 가진 모듈을 만드는 것이 모듈 설계의 목표
응집력 정도:
1.
기능적 응집 (Functional Cohesion)
한 모듈이 하나의 기능을 수행하는 데 관련된 요소들만 포함하고 있는 경우
예) 판매 총액 계산
2.
순차적 응집 (Sequential Cohesion)
모듈 내 한 구성 요소의 출력이 다른 구성 요소의 입력이 되는 경우
예) 판매 총액 계산 후, 평균 값을 구하는 경우
3.
교환적 응집 (Communication Cohesion)
한 모듈 내에 2개 이상의 기능이 존재하고 단계별로 수행되는 경우 각 기능은 동일한 입력 자료를 사용하면서도 서로 다른 출력을 생성
예) 하나의 모듈 내의 특정 데이터를 저장소에 저장, 동일한 데이터를 프린터로 출력하는 경우
4.
절차적 응집 (Procedural Cohesion)
모듈 안의 요소들이 서로 연관이 있고, 특정 순서에 의해서만 수행되는 경우
예) DB로부터 부품 번호를 읽은 후, 이력 파일에 수리 기록을 갱신
5.
시간적 응집 (Temporal Cohesion)
한 모듈 내에서 같은 시기에 수행되는 요소들을 모아놓은 형태
예) 변수 초기화, 드라이버 초기화로 구성된 특정 프로그램의 초기화 모듈
6.
논리적 응집 (Logical Cohesion)
관계가 있는 요소들로 형성되고, 하나 이상의 작업 및 기능을 담고 있는 형태
예) 하나의 모듈이 데이터 파일을 입력, 삭제, 업데이트하는 경우
7.
우연적 응집 (Coincidental Cohesion)
아무 관련 없는 요소들로 모듈이 형성되는 경우
예) 하나의 모듈 내에 관계 없는 요소 및 작업들이 혼재하는 경우
결합력 (Coupling):
정의:
모듈 간에 연결되어 상호 의존하는 정도
약한 결합도를 갖는 모듈을 만드는 것이 목표
결합도 정도:
1.
자료 결합 (Data Coupling)
모듈 간의 인터페이스가 같은 성질의 자료 요소로만 구성된 경우
예) 회원 등록 관련 모듈 간 전달 파라미터로 회원 관련 데이터인 아이디, 비밀번호, 주민번호가 사용되는 경우
2.
구조 결합 (Stamp Coupling)
모듈 간의 인터페이스로 배열이나 레코드 등의 자료 구조가 전달되는 경우
예) 모듈 A가 모듈 B의 C란 데이터를 참조하는 데 있어서, 하나의 배열 또는 레코드 안에 있는 D, E, F도 함께 참조하는 경우
3.
제어 결합 (Control Coupling)
한 모듈이 다른 모듈에게 제어 요소(function code, switch, tag 등)를 전달하는 경우
예) 모듈 A가 모듈 B의 취할 액션을 결정하는 경우
4.
공통 결합 (Common Coupling)
여러 모듈이 공통 자료(전역 자료) 영역을 사용하는 경우
예) 모듈 A와 모듈 B가 전역 변수 C를 참조하는 경우
5.
내용 결합 (Content Coupling)
한 모듈이 다른 모듈의 일부분을 직접 참조 또는 수정하려는 경우
예) 모듈 A가 모듈 B의 지역 변수를 참조하는 경우 / GoTo 사용하는 경우

아키텍처 유형

[계층식 (Layered)]
정의:
여러 모듈들을 계층적으로 배치
하위 모듈의 그룹으로 나눌 수 있는 구조화된 시스템에서 활용
하위 모듈들은 특정한 수준의 추상화, 각 계층은 상위 계층에 서비스 제공
계층:
인터페이스 계층
사용자에게 정보를 제공, 사용자의 명령을 해석
응용 & 도메인 계층
소프트웨어에서 요구되는 작업 정의
룰 체킹, 처리, 통지 등의 동작 제어하는 객체 포함
인프라스트럭쳐 계층
상위 계층을 지원하는 일반화된 기술적 기능 제공
저장, 검색, 질의 메시지 전송 등
[클라이언트-서버 (Client-Server)]
계층:
클라이언트:
사용자로부터 입력을 받아 범위 체크
데이터베이스 트랜잭션을 구동하여 필요한 모든 데이터 수집
서버:
트랜잭션을 수행
데이터의 일관성 보장
[모델-뷰-컨트롤러 (MVC)]
계층:
모델 (Model): 도메인의 지식을 저장 및 보관
뷰 (View): 사용자에게 보여줌
제어 (Control): 사용자와의 상호작용을 관리
분리 이유: 사용자 인터페이스, 즉 뷰와 제어가 도메인 지식을 나타내는 모델보다는 더 자주 변경될 수 있기 때문임

Ch 10-11. 소프트웨어 테스팅

테스팅 개요 및 원칙

[소프트웨어 테스트 개요]
SW 테스트의 정의:
남아 있는 결함이나 오류를 발견하기 위한 활동
오류가 없음을 확인시켜 주지는 않음
사전에 오류를 예방하는 것이 매우 중요함
고객의 요구를 만족시키는지 확인
소프트웨어 테스트의 목적:
잠재적 오류와 결함의 발견
요구사항의 준수 여부(기능/비기능) 확인
소프트웨어 신뢰성 등 품질 확인
고객 만족도 향상
[소프트웨어 테스팅의 원칙]
살충제 패러독스 (Pesticide Paradox):
정의:
동일 테스트 케이스로 동일 테스트를 반복하는 경우, 새로운 버그를 찾아내기 어려움
잠재된 많은 결함을 발견하기 위해서는 테스트 케이스를 정기적으로 리뷰/개선/추가할 필요가 있음
해결 방법:
테스트 기법의 다앙성 적용: 동일한 테스트를 반복하는 대신, 블랙박스/화이트박스 테스트, 성능 테스트 등 다양한 테스트 기법을 조합하여 사용해야 됨
테스트 자동화: 자동화 도구를 사용하여 반복적인 테스트 작업을 자동화하면서도, 정기적으로 테스트 스크립트를 업데이트하고 새로운 시나리오를 추가해야 됨
리스크 기반 테스트: 중요도가 높은 영역이나 결함이 발생할 가능성이 높은 영역에 대해 더 집중적으로 테스트를 수행하는 리스크 기반 테스트를 도입해야 됨

테스팅 유형

[테스트에 대한 시각]
검증 (Verification):
개발과정 테스트 - Are we building the product right?
개발 단계의 산출물이 설정된 조건을 만족하는지 평가
확인 (Validation):
결과를 테스트 - Are we building the right product?
명시된 요구사항들을 만족하는지 평가
[테스트 목적]
회복 테스트 (Recovery): 고의적 실패 유도
보안 테스트 (Security): 불법적인 오남용 및 침해
스트레스 테스트 (Stress): 대형 또는 복합 데이터 구조, 과부하 테스트, 장기 테스트
성능 테스트 (Performance): 응답시간, 처리량, 속도
회귀 테스트: 변경 또는 수정이 새로운 오루를 발생시키 않음을 확인
[V-Model]
테스트 작업의 유형과 관련된 생명 주기를 모형화한 것
V-Model은 실행 작업과 그 작업 결과의 검증에 초점을 둠
각 테스트 단계에서 오류를 발견하면, 왼쪽의 요구사항 정의 및 분석, 설계 및 구현으로 되돌아갈 수 있는 추적성(traceability)을 보장

테스팅 단계

[단위 테스팅 (Unit Testing)]
정의: 구현 단계에서 각 모듈이 완성되었을 경우, 개별적인 모듈을 테스팅
테스팅의 주체: 해당 모듈의 개발자
화이트박스/블랙박스 테스팅 모두 가능
테스트할 모듈을 단독적으로 실행할 수 있는 환경 필요
스텁(Stub): 테스팅 대상 모듈에서 호출하는 모듈
드라이버(Driver): 테스팅 대상 모듈을 호출하는 환경
[통합 테스팅 (Integration Testing)]
정의:
모듈을 통합하는 단계에서 수행되는 테스팅
모듈 간의 상호작용을 검사하는 테스팅
통합 방법:
빅뱅 기법 (Big Bang):
모듈을 한꺼번에 통합하여 테스팅을 하는 방법
오류가 발생하였을 경우, 어느 부분에서 오류가 났는지 찾기가 어려움
하향식 기법 (Top-Down):
가장 상위 모듈부터 하위 모듈로 점진적으로 통합하는 방법
상위 모듈 테스팅 시, 하위 모듈에 대한 스텁(Stub)이 필요함
상향식 기법 (Bottom-Up):
하위 모듈부터 테스팅하고 상위 모듈로 점진적으로 통합하는 방법
하위 모듈 테스팅 시, 상위 모듈에 대한 테스트 드라이버(Driver)가 필요함
[인수 테스팅 (Acceptance Testing)]
정의: 시스템이 사용자에게 인수되기 전, 사용자에 의해 실시되는 테스팅
종류:
알파 테스팅: 개발자 환경에서 사용자 실시
베타 테스팅: 실제 사용자 환경에서 실시
인수 테스팅을 통과해야만, 시스템이 정상적으로 사용자에게 인수되고 프로젝트는 종료됨
[시스템 테스팅 (System Testing)]
모듈이 모두 통합된 후, 사용자의 요구사항이 만족되었는지 검사하는 테스팅
고객에게 시스템을 전달하기 전, 시스템을 개발한 조직이 주체가 되는 마지막 테스팅
테스팅 대상: 요구사항 명세서를 기초하여 사용자의 기능 요구사항 및 보안, 성능, 신뢰성 등의 비기능 요구사항

정적 테스트

[동료 검토 (Peer Review)]
정의:
개발 동료들이 결함의 검출을 위해 소프트웨어 작업 산출물을 검토하는 작업
개발자가 자신의 동료들이 완료한 작업을 검토하는 것
목적: 사용자 인터페이스. 요구 명세서, 아키텍처, 기타 기술적 산출물의 품질 보증
[인스펙션 (Inspection)]
정의: 엄격한 절차에 따라 공식적으로 진행되는 코드나 문서의 검토 과정
특징:
사람에 의해서 수행되는 테스트로 개발 초기에 오류를 발견하여 개발 비용을 줄이기 위함
인스펙션 절차를 사용하여 평균 비용 65~80% 감소
테스터들 간 회의 활동을 통해 오류를 찾음
다음 프로세스로 넘어가기 전, 오류를 수정하기 위함
[워크스루 (Walkthrough)]
정의: 작성자가 자신의 코드나 문서를 팀 앞에서 설명하고, 팀이 이에 대해 의견을 제시하는 검토 과정
특징:
약간 공식적: 인스펙션보다는 덜 공식적으로, 일정한 절차에 따라 진행됨
작성자 주도: 작성자가 자신의 작업을 직접 설명하며 팀의 피드백을 받음
교육적 목적: 팀원 간의 지식 공유와 교육을 목적으로 할 때도 많음

동적 테스팅

[블랙박스 테스팅 (Black-Box Testing)]
정의:
요구사항 명세서를 참조하면서 수행하는 테스팅
소스 코드 자체의 로직에는 관심이 없고 입출력 값에만 관심이 있음
방법:
구문 테스팅 (Syntax Testing)
블랙박스 테스팅 중 가장 단순한 방법
입력 데이터가 미리 정의된 데이터 유형에 적합한지를 검증하는 방법
즉, 입력값을 적합(Valid)과 부적합(Invalid)으로 분류한 뒤, 예상되는 결과를 검증하는 방법
동등 분할 (Equivalence Partioning)
정의: 입력값 범위가 정해져 있을 경우, 각 범위의 대표값을 이용하여 테스팅
장점:
간단하고 이해하기 쉬움
랜덤 테스팅보다 체계적임
경계 값 분석 (Boundary Value Analysis)
정의: 입력 값의 주요 오류 대상인 경계 값을 입력 값으로 테스트 케이스를 작성하여 테스팅
의사결정 테이블 (Decision Table)
정의: 입/출력 값이 True, False로 결정될 수 있는 경우 모든 경우의 수를 확인해볼 수 있는 방법
활용:
입력, 출력 값이 Yes, No로 결정될 수 있는 경우
적은 수의 조건을 가진 입력 값에 유용함
[화이트박스 테스팅 (White-Box Testing)]
정의: 소스 코드를 직접 참조하면서 수행하는 테스팅
방법:
문장 커버리지 (Statement Coverage)
프로그램을 구성하는 문장들이 최소한 한 번은 실행될 수 있는 입력 값을 테스트 케이스로 선정함
분기 커버리지 (Branch Coverage)
프로그램에 있는 분기를 최소한 한 번은 실행하게 하는 테스팅 방법
조건 커버리지 (Condition Coverage)
&&, || 등의 조건을 가진 분기문이 전체 조건식의 결과와 관계없이, &&나 || 전후의 각 개별 조건식이 참 한 번, 거짓 한 번을 갖도록 테스트 케이스를 만드는 방법
다중 조건 커버리지 (Multiple Condition Coverage)
조건 커버리지가 각 개별 조건식의 조건을 검사하는 것이라면, 다중 조건 커버리지는 전체 조건식의 모든 경우의 조건을 검사하는 테스트 케이스를 만드는 방법
[기본 경로 테스팅 (Basic Path Testing)]
정의:
프로그램의 제어구조를 플로우 그래프(Flow Graph)로 표현하고
순환복잡도(Cyclomatic Complexity)를 통해 독립적인 경로의 수를 찾아 테스트 케이스를 추출하는 기법
테스트 케이스 추출 단계:
1.
테스팅 대상의 플로우 그래프를 그린다.
2.
순환복잡도를 계산한다.
순환복잡도를 통해 전체 프로그램 내부구조를 시험할 수 있는 독립적인 경로의 수 계산
순환복잡도 공식: CC = R의 수 = E- N + 2 = P + 1
3.
독립적인 경로들을 정의한다.
4.
정의된 각 경로의 테스트 케이스를 작성한다.
“50대의 추교현이 20대의 추교현에게 감사할 수 있도록 하루하루 최선을 다해 살고 있습니다.”
The End.