개발자 끄적끄적
구조 기반 테스트 본문
<구조 기반 테스트란?>
- 화이트박스 테스트 케이스 설계
- 프로그램 결함 식별을 목적으로 프로그램 코드로부터 생성 되는 여러 정보(제어흐름정보, 자료흐름정보, 조건등을 이용하여 테스트 케이스를 설계하는 방법
<구조 기반 테스트/구조 커버리지 분석의 종류>
- Statement Testing(문장 테스팅)
- Branch Testing(분기 테스팅)
- Decision Testing(결정 테스팅)
- Condition Testing(조건 테스팅)
- Branch Condition Testing(분기 조건 테스팅)
- Multiple Condition Testing(다중조건 테스팅)
- MC/DC(Modified Condition/Decision Coverage)
- 기본 경로 테스트(Basis path test)
<문장 테스팅>
- 테스트하려는 프로그램 내의 모든 문장들을 '적어도 한번 이상' 실행하도록 요구하는 테스트 케이스 설계 방법
- 가장 기본적인 구조기반/화이트 박스 테스트
- 100%의 문장 커버리지: 프로그램 내의 모든 문장들을 적어도 한번씩 접근하여 테스트
- 제어 흐름 그래프의 모든 블록이 수행되면 당연히 프로그램의 모든 문장들이 수행되었음을 의미
- 테스트 커버리지 아이템: 문장
- 문장 커버리지 = # of executed statements/# of total statements
<절차>
(1) 테스트 대상 프로그램에 해당하는 제어 흐름 그래프를 작성한다
(2) 모든 실행 가능한 기본 블록들을 지나가는 프로그램 경로 집합을 식별한다
(3) 프로그램 경로 집합에 있는 각 프로그램 경로에 대해 다음을 수행한다
A. 경로를 실행하는 입력 데이터를 식별한다
B. 명세 등으로부터 해당 입력에 대한 기대 출력(expected output)을 식별한다
<예제>
<생각해봅시다>
<문장 테스팅 문제>
<분기(Branch) 테스팅>
- 분기 테스팅은 프로그램을 제어 흐름 그래프로 변환했을 때 '제어 흐름 그래프의 모든 간선을 최소한 한 번은 실행'하는 테스트 케이스가 테스트 케이스 집합에 포함되도록 요구
- 테스트 커버리지 아이템: 분기 또는 간선
<생각해봅시다>
- 문장 커버리지를 만족하면 분기 커버리지를 만족하는가? X, 모든 노드들이 실행됐다고해서 모든 간선들이 실행되는것이 아니다
- 분기 커버리지를 만족하면 문장 커버리지를 만족하는가? O, 분기 커버리지를 만족하면 문장 커버리지를 만족한다
<결정(Decision) 테스팅>
- 프로그램의 모든 결정들에 대해 모든 가능한 결과를 가져올 수 있도록 테스트 케이스 집합을 설계한다.
- 각 결정이 가질 수 있는 경우는 ‘true’와 ‘false’이므로 프로그램의 각 결정 에 대해 ‘true’와 ‘false’가 산출될 수 있도록 하는 테스트 케이스가 최소한 1개 포함되어 있어야 한다.
- 테스트 커버리지 아이템: 결정이 가질 수 있는 모든 값(true/false)
즉 하나의 결정에 두개의 테스트 커버리지 아이템(true가 되는 경우와 false가 되는 경우)이 있다.
<결정과 조건>
- 조건: NOT을 제외한 AND, OR 등의 논리 연산자가 없는 조건
기본 조건식을 그냥 조건 또는 ‘clause’라고도 한다.
- 결정 : 조건이나 조건이 AND, OR등의 논리 연산자로 관계 되어 있음
<Decision Testing vs. Branch Testing>
- ISTQB에서는 결정 테스팅과 분기 테스팅을 구별하지 않지만
- ISO/IEC/IEEE 29119에서는 결정 테스팅과 분기 테스팅을 달리 정의한다.
- ISO/IEC/IEEE 29119에서 정의한 '분기 테스팅'은 프로그램을 제어 흐름 그래프로 표현했을 때 제어 흐름 그래프상의 분기(또는 간선)들을 최소한 한 번은 실행되기를 요구
<Decision Testing = Branch Testing?>
- 결정문이 분기를 가지지 않은 경우에는 분기 테스팅(Branch Testing)의 테스트케이스 집합과 결정 테스팅(Decision Testing)의 테스트 케이스 집합이 동일하지 않을 수 있다
1. 분기 테스팅을 만족?
2. 결정 테스팅을 만족?
<결정 테스팅>
'소프트웨어공학' 카테고리의 다른 글
조합 테스팅 (0) | 2024.05.29 |
---|---|
명세 기반 테스트 (0) | 2024.05.21 |
클래스 다이어그램 정리 (0) | 2024.05.20 |