본문 바로가기

시즌1/Java Tips

코드 커버리지(Code Coverage)

Code Coverage

코드 커버리지(Code Coverage)는 소프트웨어 테스트 시 사용되는 측정 기준 중에 하나이며, 이는 소스 코드가 테스트된 정도를 나타냅니다. 당연히, 소스 코드 내부를 들여다 봐야 하므로, 화이트박스 테스트(White box testing)에 속합니다.

코드 커버리지 기준은 다음과 같이 7개 기준이 있으며(아래 5개의 기준과 제일 밑에 2개의 기준), 특정 테스트 케이스(Test Case)를 어느 기준을 적용하여 테스트하느냐에 따라 커버리지 비율이 틀려지게 됩니다.

  1. Function coverage - 소프트웨어 내에 정의된 Function이 호출되는 정도
  2. Statement coverage - 소프트웨어 내에 기술된 Statement가 수행되는 정도
  3. Decision coverage - 소프트웨어 내에 기술된 조건문이 참/거짓 모두 수행되는 정도
  4. Condition coverage (or Predicate coverage) - 소프트웨어 내에 기술된 조건문에서 사용되는 개별 조건이 참/거짓 모두 수행되는 정도
  5. Modified Condition/Decision Coverage (MC/DC) - 소프트웨어 내에 기술된 조건문에 참/거짓이 되기 위한 조건들의 가능한 조합 모두가 수행되는 정도

문제는 어느 기준들을 적용하여 코드 커버리지 분석을 하느냐 인데, 이는 해당 소프트웨어의 중요성 및 수행 비용에 따라 결정하게 됩니다. 당연히, 더 상세한 커버리지 분석을 위해서는 더 많은 테스트 케이스가 필요하게 되며, 이는 비용과 직결되게 됩니다. 따라서, 어느 수준까지 커버리지 분석을 수행할지는 프로젝트 별로 비용 및 중요성을 판단하여 조기에 결정하여 수행하면 됩니다. ( 사실 여러 프로젝트를 수행해 봤지만, 아직 코드 커러비지 분석을 한 프로젝트는 한 번도 없었습니다. )
 
참고로, 항공기에 탑재되어 수행되는 소프트웨어를 인증하기 위해 미 Federal Aviation Administration(FAA)에서 정의한 DO-178B 표준에 의하면, DO-178B Level A(인명과 직결되는 소프트웨어) 인증을 받기 위해서는 MC/DC Coverage가 100%를 만족하도록 정의되어 있습니다.

코드 커버리지 기준에 다음 두 가지가 더 있지만, 아직 사용되는 부분을 보지 못해 생략합니다.

  1. Path coverage
  2. Entry/exit coverage