← 블로그 목록

[Core2026] UnitTest Line Coverage

@Nor-s
  • #ThorVG
  • #Unit Test
  • #Coverage
  • #Mentoring
목차
  • ThorVG: Catch2 test executable을 대상으로 Line Coverage 관리 (80% 이상)
  • Coverage: 테스트의 코드 실행 여부를 나타내는 지표
    • Line Coverage: 실행 파일에 포함된 executable source line 중 테스트가 한 번 이상 실행한 라인의 비율
    • Function Coverage: 함수 진입 여부 집계
    • Branch Coverage: 조건식과 분기의 실행 여부 집계
  • ThorVG Unit Test: API를 사용해 엔진 내부 코드까지 커버하는 테스트 작성

1. UnitTest 와 함께 Coverage 측정 하는 방법

ThorVG Wiki의 Unit Tests 문서
ThorVG Wiki의 Unit Tests 문서
  • ThorVG Unit Tests Wiki
  • Meson test와 LCOV·GenHTML을 함께 사용
  • b_coverage=true는 compiler와 linker에 coverage instrumentation을 적용
  • coverage-html target은 실행 후 생성된 counter를 수집해 HTML report를 생성
meson setup builddir \
  -Dtests=true \
  -Db_coverage=true \
  -Dengines="all" \
  -Dloaders=all \
  -Dsavers=all \
  -Dextra=""

ninja -C builddir install test
ninja -C builddir install test coverage-html

2. coverage-html

  • 빨간 부분: 현재 ThorVG 의 유닛 테스트에서 실행되지 않은 라인
  • 파랑 부분: 현재 ThorVG 의 유닛 테스트에서 실행된 라인

3. LineCoverage -> UnitTest

LCOV에서 확인한 blendExclusion 실행 라인
LCOV에서 확인한 blendExclusion 실행 라인
src->blend(BlendMethod::Exclusion)
└─ Paint::blend()
   └─ Paint::Impl::blend()
      └─ ShapeImpl::render()
         └─ SwRenderer::blend()

소스의 흐름을 보고 -> 적절한 테스트 코드작성

  • 현재 테스트 코드를 다듬거나, 새로운 테스트 코드를 작성하여 커버리지를 높일 수 있음