▣ 테스트 설계기법_동적테스트_구조기반(화이트박스), 구문, 문장, 조건, 결정, 조건 결정, 변경 조건, 다중 조건, 경로 커버리지
상세기법 | 조건 | 설명 |
구문 or 문장 커버리지 (SC, Statement Coverage) |
문장 1회 | 모든 문장이 적어도 한번 실행 테스트 Suite(테스트 케이스 묶음)에 실행된 구문이 몇 퍼센트인지를 측정 |
분기 or 결정 커버리지 (DC, Decision Coverage) |
T/F | 모든 결정의 분기가 적어도 한번씩은 실행되어야 함 |
조건 커버리지 (CC, Condition Coverage) |
TF, FT | 전체 조건식의 결과와 관계없이 각 개별 조건식이 참/거짓 한번 모두 갖도록 수행 |
조건/결정 커버리지 (C/DC, Condition Decision Coverage) |
TT, FF | 전체 조건식 참/거짓 한번씩 하면서 개별 조건식 참/거짓 모두 한번씩 갖도록 조함 |
변경조건/결정 커버리지 (MC/DC, Modified Condition Decision Coverage) |
TT, FF, TF, FT, A and B (0,0 = F, F 경우 제외), A or B(1,1 = T,T 경우 제외) | 결정 내부의 하나의 조건이 다른 조건과 무관하게 독립적으로 결정에 영향을 주는 경우를 추가 결정 포인트 내 모든 개별 조건식은 독립적으로 전체 조건식에 영향 A and B (0,0 = F, F 경우 제외), A or B(1,1 = T,T 경우 제외) |
다중조건 커버리지 (MCC, Multiple Condition Coverage) |
TT, TF, FT, FF | 결정 포인트 내의 모든 개별조건식의 모든 가능한 논리적 조합 100% 보장 |
경로(All Path) 커버리지 |
* 조건 커버리지 ≠ 분기(결정) 커버리지
2018년 36번
정답 : 4번
주어진 테스트 케이스 2개를 소스코드에 대입해 보면 아래는 만족하지 못함
문장 커버리지 : 3번, 4번, 6번 라인은 실행되지 않됨
조건 커버리지 : 5번 조건식의 왼쪽 개별 조건식(x>0)은 만족하지 않음
결정 커버리지 : 1번 조건식의 False, 5번 조건식의 True는 만족하지 않음
1번 if( x < 7 || y > 0)
t1 : T, F -> T , t2 : T, T -> T → OR연산이여서 F, F 조건 필요 x > 7, y < 0
5번 if( x > 0 && y < 0)
t1 : F, T -> F , t2 : F, F -> F -> AND연산이여서 T, T 조건 필요 x >0, y < 0
{t3:<x = 8, y = -2} 케이스만이 부족한 문장, 조건, 결정 커버리지를 모두 만족 시킬수 있음
* Short-circuit evaluation : and, or 논리 연산에서 인자 하나만 보고 결과를 확실히 알 수 있을 때, 뒤에 나오는 인자를 확인하지 않고 바로 답을 내는 방법
2019년 50번
정답 : 3번
문장 커버리지는 a=11, b=0을 할당하면 가능, 최소 테스트 케이스 수는 1개
분기 커버리지는 모든 조건문에서 T/F가 실행되어야 함으로 (a=11, b=0), (a=9, b=0), 최소 테스트 케이스 수는 2개
if 문의 else문이 없고, 단일 조건 비교문이여서 케이스가 상대적으로 적음
* 분기 커버리지는 결정 커버리지임
2021년 29번
정답 : 3번
조건 커버리지와 결정 커버리지는 포함관계가 아님
조건 커버리지 ≠ 결정 커버리지
2012년 46번
정답 : 3번
3)번 경로 검증 기준(path coverage)는 최소 4개의 테스트케이스가 필요함
문장 커버리지 | 2 | a-b-c-d-e-f-g a-b-c-d-e-f-h |
분기 커버리지 | 2 | a-b-d-e-f-h a-b-c-d-e-f-g |
경로 커버리지 | 4 | a-b-d-e-f-h a-b-c-d-e-f-h a-b-d-e-f-g a-b-c-d-e-f-g |
2014년 44번
정답 : 3번
조건/결정 커버리지 (C/DC, Condition Decision Coverage) |
TT, FF | 전체 조건식 참/거짓 한번씩 하면서 개별 조건식 참/거짓 모두 한번씩 갖도록 조함 |
모든 결정이 실행되려면 if(x<50 || y>=30)의 결과가 True인 경우가 적어도 한번, False인 경우가 적어도 한번이어야 함
모든 조건이 실행되려면 x < 50, y >= 30 조건이 실행되어야 함
1. 보기에서 x가 50보다 큰거, 작은거 선택 / y가 30보다 큰거, 작은 거 선택
2. OR 조건이니 (x 참, y 참) , (x 거짓, y 거짓) 고르기
2016년 38번
정답 : 3번
2017년 44번
정답 : 2번
*5행은 이전 x 계산된 값으로 조건 비교하므로 최초 값으로 비교 하면 안됨
1행 if (x>0 && y<5) 이므로, AND는 TT조건을 만족해야 함.
즉 x > 0, x <= 0 만족하는 보기를 찾아야 하므로 1), 2)만 답에 해당됨.
x > 0 (T), y < 5 (T) 만족해야함.
구분 | (2, -3) | (-4, 6) | (-2, 3) | (1, -4) |
x > 0 && y < 5 | T, T T |
F, F F |
F, T F |
T, T T |
x 계산식 | -3+5 = 2 | 6 -5 = 1 | 3 - 5 = -2 | -4 + 5 = 1 |
x <= 0 | F | F | T | F |
5행 if (x <= 0)은 앞의 x = y + 5;, x = y -5에 영향을 받음
1번보기 (2, -3) 일 때는 x = -3 + 5 = 2로 8행 실행 / (-4, 6) 일 때는 x = 6 -5 =1 로 8행 실행 -> 6행 실행되지 않음
2번보기 (-2, 3) 일 때는 x = 3 -5 = -2로 6행 실행 / (1,-4) 일 때는 x = 1 + 5 = 6 로 8행 실행 -> 모든 문장 실행되므로 정답
2020년 33번
정답 : 2번
경로 커버리지(Path Coverage)란 구조기반 테스트 기법 중 실행 흐름의 시작부터 종료 때까지의 실행 가능한 모든 경로(Path)가 수행되도록 설계하는 것임
탐침삽입기법(instrumentation)은 프로그램 경로 상에서 전략적인 지점에 탐침(probe, 프로그램에 추가되는 문장)을 삽입하여 경로가 실행되었는지 아닌지를 알려주는 기능을 구현하여 커버리지를 측정하는 방법임
4행 if(x<0) Y일 때는 5행(하단의 if문 있으니 하단에서 탐침), N일 때는 11행 실행 -> 1개 필요
5행 if(y<0) Y, N -> 2개 필요 (두번째 분기가 첫번째 분기내에 포함되어 있음)
14행 if(z>=0) Y, N -> 2개 필요
총 5개 필요
2020년 47번
정답 : 2번
X가 음수일 때만 L07행으로 이동함. 하지만 if 절내 && 연산이기 때문에 x > 0 && y = 20 일때만 참이 되기 때문에 절대로 L08은 테스트 할 수 없음
T1 : L01-L02-L03-L11
T2 : L01-L02-L07-L11
T3 : L01-L02-L03-L04-L11
T4 : L01-L02-L07-L11
라인 | 소스코드 | T1 x=70, y=50 |
T2 x=-70, y=50 |
T3 x=70, y=10 |
T4 x=-70, y=20 |
1 | f (int x, int y) { | 실행 | 실행 | 실행 | 실행 |
2 | if (x * x * x > 0) { | if(T) | if(F) | if(T) | if(F) |
3 | if(x > 0 && y == 10) { | if(T&&F) | if(T&&T) | ||
4 | fail(); | 실행 | |||
5 | } | ||||
6 | } else { | ||||
7 | if ( x > 0 && y == 20) { | if(F&&F) | if(F&&T) | ||
8 | fail(); | ||||
9 | } | ||||
10 | } | ||||
11 | complete(); | 실행 | 실행 | 실행 | 실행 |
12 | } |