Proven by Intelligence
보이지 않는 안전을 인텔리전스로 증명하다.
기술 인사이트를 만나보세요.
안녕하세요. 🤗
임베디드 소프트웨어 전문 기업, MDS인텔리전스입니다.
이번 포스팅에서는 화이트박스 테스트와 이와 관련된 다양한 테스팅 기법에 대해 설명해 드리고자 합니다.
혹시~? 앞의 이어지는 글을 확인하셨나요? 아래 콘텐츠를 확인해 보시고 오시면 이해가 쏙쏙! 👍
🔎 연재글 [SW검증센터] 블랙박스 테스트

화이트박스 테스트(White box) 란?

구조 기반 테스트로도 알려진 화이트박스 테스트(Whitebox Test)는 소프트웨어의 소스 코드나 시스템의 구조, 즉 알고리즘을 중심으로 정밀하게 테스트하는 방법입니다.
화이트박스 테스트 설계 기법은 테스트 대상 소프트웨어의 구조를 분석하여 이를 어떤 방식으로 테스트할 것인지에 대한 구체적인 방법을 의미합니다.
화이트박스 테스트를 수행할 때 활용되는 주된 테스트케이스 설계기법은 아래와 같습니다.
1. 구문 커버리지(Statement coverage)
2. 결정 커버리지(Decision coverage)
3. 변경 조건/결정 커버리지(MC/DC coverage)

커버리지란 무엇인가?

시스템 또는 소프트웨어의 구조에 대한 테스트가 수행될 때, 테스트가 수행된 정도를 커버리지(coverage)라 하며, 특정 구조의 종류에 대하여 커버된 정도를 백분율로 표시합니다.
실제 테스트를 수행할 때는 ASIL 등급에 따른 테스트 설계기법을 적용하여 커버리지 100%를 목표로 수행합니다. 만일 커버리지가 100%가 아니라면, 누락된 부분을 테스트하기 위해 더 많은 테스트 케이스를 설계하여 커버리지를 높일 수 있습니다.
테스트 대상 소스코드 중 테스트된 정도를 백분율로 나타내는 커버리지에는 그 강도에 따라 다양한 종류가 존재하고 보장하는 범위가 모두 다릅니다.

화이트박스 테스트 설계기법

1. 구문 커버리지(Statement Coverage)
구문 커버리지는 테스트 대상 소스코드 중 테스트케이스에 의해 실행된 구문이 몇 퍼센트인지 측정하는 것입니다. 예를 들어, 테스트 대상 소스코드가 10,000 라인이라고 한다면 테스트케이스에 의해 실행된 구문이 10,000 라인이어야 구문 커버리지 100% 달성하게 되는 것입니다.
이와 같이 구문 커버리지는 코드의 모든 구문을 실행할 수 있는 테스트 데이터를 제공해 주면 달성됩니다. 적은 개수의 테스트 데이터로 쉽게 달성할 수 있지만 코드상에 존재하는 가능한 경우를 모두 검증하지 못하는 보장성이 비교적 낮은 커버리지입니다.
2. 결정 커버리지(Decision Coverage = Branch coverage)
결정 커버리지는 테스트 대상 소스코드 중 전체 조건식이 테스트케이스에 의해 최소한 참(True) 한번, 거짓(False) 한 번씩 실행되었는지 측정하여 퍼센트로 표현한 것입니다.
예를 들어, if ((A && B)>0)이라는 조건식이 있을 때 이 분기의 참(True)을 만족시키는 값을 포함한 테스트케이스를 수행하고 거짓(False)을 만족시키는 값을 포함한 테스트케이스를 수행하면 되는 것입니다. 해당 분기문에서 결정 커버리지 달성을 위한 테스트 케이스 설계 방법은 다음과 같습니다.

그림 1. 결정 커버리지 테스트케이스 예시
3. 변경 조건/결정 커버리지(MC/DC = Modify Condition/Decision Coverage)
변형 조건/결정 커버리지(MC/DC)는 테스트 대상 소스코드 중 각 개별 조건식이 다른 개별 조건식에 영향을 받지 않고 전체 조건식의 결과에 독립적으로 영향을 주도록 함으로써 조건/결정 커버리지를 향상시킨 것입니다.
여기에서 전체 조건식은 소스코드에서 분기하는 결정 포인트 전체를 의미합니다. 즉 if 나 While에 있는 조건문 전체를 칭하는 것입니다. 개별 조건식은 전체 조건식에 연산자(And, Or 등)로 구분되어 있는 개별의 조건식을 의미합니다.
예를 들어, if (A == 2 && B == 4) 라는 조건식이 있을 때,
전체 조건식은 if 문 괄호 (A == 2 && B == 4) 전체이고 개별 조건식은 A == 2, B == 4 이렇게 두 개입니다. 해당 분기분에서 변형 조건/결정 커버리지 달성을 위한 테스트 케이스 설계 방법은 다음과 같습니다.

그림 2. 변형 조건/결정 커버리지 테스트케이스 예시
위의 그림은 변형 조건/결정 커버리지(MC/DC) 테스트케이스 설계 기법을 통하여 해당 조건 문인 if (A == 2 && B == 4) 연산에 대한 조합을 보여줍니다. 표에서 확인 가능하듯 가능한 전체 조합에서 False, False 조합이 제외되었으므로 총 세 개의 개별 조건식 조합이 남게 됩니다.
전체 조합을 테스트하는 것은 현실적으로 불가능하기 때문에 가능한 의미 있게 조합의 수를 줄여 테스트하자는 것이 변형 조건/결정 커버리지(MD/DC) 개념의 핵심입니다.
출처: 개발자도 알아야 할 소프트웨어 테스팅 실무 제3판

마무리

커버리지의 종류를 단순히 암기하는 것보다, 커버리지의 의미를 테스트 기법과 연계하여 이해하는 능력이 있어야 합니다. 이는 테스트의 보장적인 측면에서 더 중요하며, 테스트 케이스를 도출하는 기법을 실제 업무에 적용하면서 자연스럽게 커버리지 개념을 이해하고 목표 커버리지를 달성하는 테스트 케이스를 작성하는 능력을 기르는 것이 중요합니다.
산업분야의 특성과 개발 및 테스트 조직의 성격에 맞게 변형시켜 적용되는 다양한 동적 검증 테스트 분야에서 MDS인텔리전스 소프트웨어 검증센터의 검증 서비스를 경험해 보세요.
MDS인텔리전스의 임베디드 소프트웨어 검증 센터는 차별화된 전문 인력과 다양한 프로젝트 경험을 바탕으로 많은 기업들과 프로젝트를 진행하고 있습니다.
더 구체적인 검증 서비스에 대해서 궁금하시거나, 기타 문의사항은 sve@mdsit.co.kr 로 문의 메일 부탁드립니다.

MDS인텔리전스
임베디드 소프트웨어 고품질 및 신뢰성 확보를 위한, SW 검증센터
E. sve@mdsit.co.kr
