예를 들어, 다음과 같은 복잡한 조건문이 있다고 가정합시다.
def complex_condition(a, b):
if (a > 1) and (b < 5):
return True
else:
return False
이 경우에:
결정 커버리지:
(a > 1) and (b < 5)
가 참인 경우와 거짓인 경우 모두 테스트.complex_condition(2, 3)
(참), complex_condition(0, 6)
(거짓).이거
아니면 이거 둘 중 하나만해도 됨. 분기마다 참, 거짓 둘 다 나옴
조건 커버리지:
a > 1
이 참/거짓, b < 5
가 참/거짓 각각을 모두 테스트.complex_condition(2, 6)
(a > 1
참, b < 5
거짓), complex_condition(0, 3)
(a > 1
거짓, b < 5
참).def is_even(number):
if number % 2 == 0:
return True
else:
return False
조건 커버리지는 복합 조건식 내의 각 개별 조건이 참과 거짓을 모두 가지도록 테스트하는 것을 의미합니다. 예를 들어, 조건식 if (A && B)
에서 조건 커버리지를 달성하려면 각 조건 A와 B가 각각 최소 한 번씩 참과 거짓을 가져야 합니다. 따라서, 주어진 조건이 두 개일 경우 가능한 모든 조합을 테스트해야 합니다:
분기1 참, 분기2 거짓
분기1 거짓, 분기2 참 (확인 필요)
is_even
은 숫자가 짝수인지 아닌지를 판단
이 예시를 바탕으로 각 커버리지 개념을 설명하겠습니다.
구문(문장) 커버리지 (Statement Coverage):
is_even(2)
, is_even(3)
를 테스트하면 모든 명령문이 한 번씩 실행됩니다.결정 커버리지 (Decision Coverage):
is_even(2)
(참), is_even(3)
(거짓)을 테스트하면 if 문의 두 가지 결과를 모두 확인할 수 있습니다.조건 커버리지 (Condition Coverage):
is_even(2)
와 is_even(3)
으로 커버할 수 있습니다.조건/결정 커버리지 (Condition/Decision Coverage):
is_even(2)
와 is_even(3)
으로 커버할 수 있습니다.변경 조건/결정 커버리지 (Modified Condition/Decision Coverage):
다중 조건 커버리지 (Multiple Condition Coverage):
기본 경로 커버리지 (Base Path Coverage):
is_even(2)
와 is_even(3)
두 가지 경로를 모두 테스트하여 모든 경로를 커버합니다.제어 흐름 테스트 (Control Flow Testing):
데이터 흐름 테스트 (Data Flow Testing):
number
의 값이 어떻게 사용되는지 확인합니다.