소프트웨어 테스팅 Condition Coverage
지금까지 구문 커버리지와 결정 커버리지에 대해 알아보았습니다. 결정 커버리지에 구문 커버리지가 포함된다고 했었죠? 그런데 결정 커버리지로도 발견할 수 없는 유형의 버그가 있습니다. 이를 찾아내기 위해 등장한 조건 커버리지 기법에 대해 알아보겠습니다.
num1이 0이거나 num2가 0보다 크면 num2는 num2를 num1로 나눈 값과 동일하도록 코드를 작성했습니다. 이 코드에는 결정 커버리지 100%여도 발견 못하는 에러가 있는데요. 바로 ZeroDivisionError: division by zero입니다. 왜 결정 커버리지로는 발견하지 못할까요?
위 테스트 케이스는 결정 커버리지 100% 상태입니다. 참, 거짓 모두 한 번씩 검증했기 때문이죠. 결과도 문제가 없네요. 이렇듯 결정 커버리지는 전체 조건식을 기준으로 참, 거짓이 한 번씩 수행되도록 검증하기 때문에 개별 조건식에서 발생할 수 있는 오류는 찾아내지 못합니다.
if의 첫 번째 조건인 num1 == 0에서 num1이 0인 경우를 테스트했더니 ZeroDivisionError: division by zero 발생했습니다. 해당 전체 조건은 or 조건이기 때문에 num1이 0이 아니더라도 num2 조건만 True이면 코드가 실행되었어서 발견하지 못했던 에러입니다. 조건 커버리지는 개별 조건식의 T/F를 커버하면 조건 커버리지는 100% 달성하게 됩니다.
그런데 만약 조건이 너무 많아서 모든 조건을 검증하기 힘들 경우가 있을 텐데요. 어떤 값(조건)을 사용해서 테스트하는 것이 효과적일까요? 이때 등장한 것이 바로 변형 조건/결정 커버리지(MC/DC)입니다. 다음장에서 MC/DC에 대해서 살펴보겠습니다.