본문 바로가기

테스트이론/소프트웨어 테스팅

구조적 커버리지의 종류

커버리지 기준을 정의하는 목표

커버리지 기준을 달성함으로써 주어진 프로그램 소스 코드를 다양하고 체계적으로

프로그램의 모든 부분을 최대한 넓게 실행할 수 있게 되는 것이 목표입니다

함수 커버리지

단순히 프로그램 내에 존재하는 모든 함수가 한 번이라도 호출되었는지를 측정

결정 커버리지

여기서 결정이 의미하는 바는 프로그램 흐름에 변화가 있을 때 해당 변화에 가능한 모든 조건을 다 테스트

조건 커버리지

모든 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