커버리지 기준을 정의하는 목표
커버리지 기준을 달성함으로써 주어진 프로그램 소스 코드를 다양하고 체계적으로
프로그램의 모든 부분을 최대한 넓게 실행할 수 있게 되는 것이 목표입니다
함수 커버리지
단순히 프로그램 내에 존재하는 모든 함수가 한 번이라도 호출되었는지를 측정
결정 커버리지
여기서 결정이 의미하는 바는 프로그램 흐름에 변화가 있을 때 해당 변화에 가능한 모든 조건을 다 테스트
조건 커버리지
모든 Boolean Subexpression이 각각 참과 거짓으로 한 번씩 설정되었는지를 체크하는 커버리지 기준
Modified Condition/Decision 커버리지
줄여서 보통 MC/DC 커버리지라고 합니다
이 경우에는 Condition/Decision 커버리지를 만족하고 추가로 조건에 사용되는 모든 Boolean Subexpression들이 그 값이 바뀌었을 때 실제로 결정, Decision에 영향을 주는지를 확인할 수 있는 테스트 입력을 제공해야 합니다
Compound Condition 커버리지
조건을 구성하는 Subexpression들이 가능한 모든 조합을 다 만족하였는지를 측정
if(x&&(y||z))의 경우 커버리지를 알아보겠습니다
Decision 커버리지
X |
Y |
Z |
true |
false |
true |
false |
true |
true |
Decision 커버리지가 요구하는 바는 궁극적으로 이 If문이 한 번은 TRUE Branch로, 한 번은 FALSE Branch로 방문하게 하는 것입니다
첫 번째 입력
x도 TRUE, y도 TRUE, z도 TRUE입니다.
이 경우에는 전체 Predicate이 TRUE가 돼서 TRUE Branch를 방문하게 됩니다
두 번째 입력
y와 z는 여전히 TRUE이지만 x가 FALSE입니다
이 경우에는 y or z는 TRUE이지만 x가 FALSE이기 때문에 And문의 조건상 전체 Predicate이 FALSE Branch를 방문하게 됩니다
x, y, z의 가능한 모든 참, 거짓 조합을 시도해 보지는 않았지만 전체 결정이 참으로 한 번, 거짓으로 한 번 실행되었기 때문에 Decision 커버리지를 100% 달성했다고 할 수 있습니다
Condition 커버리지
X |
Y |
Z |
true |
true |
true |
false |
true |
true |
Condition 커버리지는 x, y, z variable이 각각 TRUE와 FALSE로 한 번씩 설정될 것을 요구합니다
하지만 Decision 커버리지 달성을 위해서 사용했던 이전의 테스트 입력의 경우에는 x만 TRUE와 FALSE 양쪽 값을 모두 설정해 보았을 뿐 y와 z는 늘 TRUE로 남아 있었습니다
이 경우에는 Condition 커버리지를 만족하지 않습니다
X |
Y |
Z |
true |
true |
true |
false |
false |
false |
이 경우에는 각각의 Variable이 모두 TRUE와 FALSE 한 번씩 경험했기 때문에 Condition 커버리지를 100% 달성
그다음에 조금 더 생각해 보시면 전체 분기문이 TRUE로 한 번, FALSE로 한 번 방문하게 되기 때문에 Decision 커버리지 역시 100% 여전히 충족하고 있다고 할 수 있습니다
MC/DC 커버리지
X |
Y |
Z |
true |
false |
false |
true |
false |
true |
false |
false |
true |
true |
true |
false |
첫 번째와 네 번째 입력에서 Y 값의 바뀜에 따라 결정 방향이 바뀌는 것을 알 수 있습니다
첫 번째와 두 번째 입력에서 Z 값의 바뀜에 따라 결정 방향이 바뀌는 것을 알 수 있습니다
두 번째와 세 번째 입력에서 X 값의 바뀜에 따라 결정 방향이 바뀌는 것을 알 수 있습니다
변형 조건/결정 커버리지(이하 ‘MC/DC’)는 다른 조건식과 무관하게 분기를 결정하는 개별 조건식의 true, false 중 테스트에 의해 실행된 것을 측정한 값이므로 커버리지를 100% 달성했다고 할 수 있습니다
'테스트이론 > 소프트웨어 테스팅' 카테고리의 다른 글
테스트 적합도 (0) | 2021.04.21 |
---|---|
조합적 상호작용 테스팅과 제약조건 (0) | 2021.03.18 |
조합적 상호작용 테스팅 (0) | 2021.03.10 |
등가 파티션 (0) | 2021.03.08 |
블랙박스 테스팅 (0) | 2021.03.08 |