소프트웨어 테스팅 Statement Coverage
화이트박스 테스팅 기법에 대해 알아보겠습니다. 총 4가지 기법을 알아볼 텐데요. 우선 화이트 박스 테스트 기법을 이해하기 위해서는 최소 1가지 이상 언어를 다룰 수 있어야 합니다. 서비스 중인 제품이 자바로 만들어졌다면 화이트 박스 테스트를 하기 위해선 자바 문법을 알아야 합니다. 파이썬으로 만들어진 서비스라면 파이썬을 다룰 줄 알아야겠죠? 블랙박스 테스트와 달리 내부 구조를 살펴보며 검증하기 때문이죠. 코드 이해가 비교적 쉬운 파이썬과 간단한 예제를 활용해 테스팅 기법 원리를 알아보겠습니다.
먼저 구문 커버리지에 대해 알아보겠습니다. 구문 커버리지는 코드 내부의 실행 가능한 데이터 값을 커버하는 것을 의미합니다. 최소한의 입력 값으로 코드 내부의 모든 조건들을 테스트 가능하다면 100% 구문 커버리지를 달성했다고 볼 수 있습니다. 구문 커버리지에서의 효율적인 화이트 박스 테스트 설계는, 가장 적은 수의 테스트 케이스를 활용해 코드 내부 모든 조건 검증이 가능한 것을 의미합니다. 예시를 살펴볼까요?
예상되는 번호를 맞추는 코드를 작성했습니다. 제가 의도한 흐름은 사용자가 y를 누르고 10을 입력했다면 '우와 정답입니다!'를 출력하고, 그렇지 않다면 '틀렸습니다!'를 출력하는 흐름입니다. 구문 커버리지를 100% 만족하는 테스트를 해볼까요?
저는 해당 프로그램을 설계했기 때문에 사용자의 올바른 입력값을 이미 알고 있습니다. 구문 커버리지는 프로그램이 의도한 흐름대로 동작하는지 검증하기 위해 조건문 로직들 실행이 가능한 값들을 입력하는 것입니다.
첫 번째 테스트 케이스는 user_input 변수에 y를 저장하여 첫 번째 if 조건을 통과 후 10을 입력했을 때 '우와 정답입니다!'가 출력되는지 확인하는 케이스입니다. 제가 원하는 값이 출력되었습니다. 1번째 테스트 케이스는 통과입니다.
두 번째 테스트 케이스는 else문의 '틀렸습니다!'가 출력되는지 검증하는 케이스입니다. 두 번째 if 로직 실행 구간에서 10이 아닌 다른 숫자를 입력해보겠습니다. 9를 입력했더니 제가 원했던 '틀렸습니다!'가 출력되었습니다.
이로써 입력값 y, 10, 9를 통해 구문 커버리지 100%를 달성했습니다.
그런데 말이죠. 만약 화이트박스 테스트를 구문 커버리지만 진행하면 어떻게 될까요? 구문 커버리지는 '그렇지 않은 상황'에 대한 커버리지까지 보장하지 않기 때문에 예상치 못했던 버그가 발생할 수 있습니다.
구문 커버리지는 빠른 테스트 가능하다는 장점이 있지만 효과적이지 못합니다. 구문 커버리지의 부족한 점을 보완하기 위해 생겨난 기법이 바로 결정 커버리지입니다.
다음 장에서 구문 커버리지만 활용할 경우 위 코드에서 어떠한 문제가 발생하는지 살펴보고 이를 보완한 결정 커버리지를 통해 코드를 보완하겠습니다.