커버리지 검증 기법

1. 커버리지 검증 기법 개요

1.1 커버리지 검증 기법이란?

  • 커버리지 검증(Coverage Verification)
  • 소프트웨어 테스팅에서 사용되는 개념으로, 테스트가 얼마나 광범위하게 코드 또는 기능을 다루고 있는지를 측정하고 평가하는 방법을 총칭
  • 특히 AI 시스템의 경우, 모델의 입력 공간, 내부 상태, 의사 결정 경로 등을 얼마나 테스트했는지를 확인하여 모델의 신뢰성을 판단하는 데 활용됨
  • 즉, “내 테스트가 이 시스템의 얼마나 많은 부분을 확인했을까?”를 숫자로 보여주는 지표라고 할 수 있음

1.2 커버리지 검증의 중요성

  • 테스트의 효율성 평가
    • 현재 작성된 테스트 케이스들이 시스템의 핵심 부분을 충분히 검증하고 있는지 평가함
  • 잔존 결함 예측
    • 커버리지가 낮다는 것은 테스트되지 않은 부분이 많다는 의미
    • 잠재적인 결함이나 오류가 숨어 있을 가능성이 높다고 추론할 수 있음
  • 테스트 케이스 개선
    • 커버리지가 낮은 부분 발견
    • 해당 부분을 추가적으로 테스트할 수 있는 새로운 테스트 케이스를 만들거나
    • 기존 테스트를 보강하여
    • 테스트의 완성도를 높일 수 있음
  • AI 모델의 신뢰성 확보
    • AI 모델의 복잡한 동작 경로, 다양한 입력 조건, 예측 결과의 견고성 등을 종합적으로 평가
    • AI 시스템의 신뢰성을 확보하는 데 필수적

1.3 주요 커버리지 검증 기법의 종류

1.3.1 코드 커버리지

  • 소프트웨어의 소스 코드가 테스트를 통해 얼마나 실행되었는지 측정함

  • 문장 커버리지 (Statement Coverage)
    • 코드의 각 문장이 최소 한 번 이상 실행되었는지 확인
    • 가장 기본적인 커버리지 측정 방법
  • 분기/결정 커버리지 (Branch/Decision Coverage)
    • 프로그램의 모든 결정 지점(예: if, for, while 문 등)이 truefalse 분기 모두 한 번 이상 실행되었는지 확인
    • 문장 커버리지보다 더 깊은 테스트 보장
  • 조건 커버리지 (Condition Coverage)
    • 조건문 내의 개별 불리언(boolean) 표현식 각각이 truefalse 값을 한 번 이상 가졌는지 확인
  • MC/DC (Modified Condition/Decision Coverage) 커버리지
    • 각 조건이 전체 결정의 결과에 독립적으로 영향을 미치는지 확인하는 매우 엄격한 커버리지 기법
    • 안전이 매우 중요한 시스템(예: 항공 소프트웨어)에서 주로 사용됨

1.3.2 기능 커버리지

  • 소프트웨어의 기능적 요구사항이나 설계 사양이 얼마나 테스트되었는지를 측정함

  • 요구사항 커버리지 (Requirements Coverage)
    • 모든 기능 요구사항이 테스트 케이스로 작성되었고 해당 테스트가 실행되었는지 확인
  • 시나리오 커버리지 (Scenario Coverage)
    • 사용자 시나리오나 사용 사례(use case)가 얼마나 테스트되었는지 확인
  • 데이터 커버리지 (Data Coverage)
    • 중요한 데이터 범위나 조합이 얼마나 테스트되었는지 확인

1.3.3 AI 시스템 특화 커버리지

  • AI 모델의 특성을 고려하여 모델의 동작을 검증하는 기법

  • 뉴런 커버리지 (Neuron Coverage)
    • 신경망의 내부 뉴런들이 테스트 실행 중에 얼마나 활성화되었는지 측정
    • AI 모델이 얼마나 다양한 내부 상태를 거쳤는지 파악하는 데 사용됨
  • 결정 경계 커버리지 (Decision Boundary Coverage)
    • AI 모델의 의사 결정 경계(예: 분류 모델이 특정 데이터를 어떻게 분류하는지)가 얼마나 테스트되었는지 측정
  • 입력 공간 커버리지 (Input Space Coverage)
    • 모델이 처리해야 할 전체 입력 데이터 공간 중 얼마나 많은 부분이 테스트되었는지 측정
    • 특히 적대적 예제(adversarial examples)나 이상치(outliers)에 대한 모델의 반응을 테스트하는 데 중요함
  • 테스트 케이스 다양성(Test Case Diversity)
    • 생성된 테스트 케이스들이 얼마나 다양하고 독립적인 입력 변화를 포함하는지 측정
    • 모델의 일반화 능력을 평가

1.4 커버리지 검증의 활용 단계

  1. 목표 설정
    • 어떤 유형의 커버리지를 몇 퍼센트까지 달성할 것인지 목표 설정
    • 예: 문장 커버리지 90%, 분기 커버리지 70%
  2. 측정 도구 사용
    • Coverage.py(파이썬), JaCoCo(자바), Istanbul(자바스크립트) 등과 같은 전용 도구를 사용하여 커버리지 측정
  3. 결과 분석
    • 측정된 커버리지 데이터를 분석하여 테스트가 충분히 이루어지지 않은 영역 식별
  4. 테스트 보강
    • 커버리지가 낮은 부분을 대상으로 새로운 테스트 케이스를 추가하거나 기존 테스트를 개선