커버리지 검증 기법
1. 커버리지 검증 기법 개요
1.1 커버리지 검증 기법이란?
- 커버리지 검증(Coverage Verification)
- 소프트웨어 테스팅에서 사용되는 개념으로, 테스트가 얼마나 광범위하게 코드 또는 기능을 다루고 있는지를 측정하고 평가하는 방법을 총칭
- 특히 AI 시스템의 경우, 모델의 입력 공간, 내부 상태, 의사 결정 경로 등을 얼마나 테스트했는지를 확인하여 모델의 신뢰성을 판단하는 데 활용됨
- 즉, “내 테스트가 이 시스템의 얼마나 많은 부분을 확인했을까?”를 숫자로 보여주는 지표라고 할 수 있음
1.2 커버리지 검증의 중요성
- 테스트의 효율성 평가
- 현재 작성된 테스트 케이스들이 시스템의 핵심 부분을 충분히 검증하고 있는지 평가함
- 잔존 결함 예측
- 커버리지가 낮다는 것은 테스트되지 않은 부분이 많다는 의미
- 잠재적인 결함이나 오류가 숨어 있을 가능성이 높다고 추론할 수 있음
- 테스트 케이스 개선
- 커버리지가 낮은 부분 발견
- 해당 부분을 추가적으로 테스트할 수 있는 새로운 테스트 케이스를 만들거나
- 기존 테스트를 보강하여
- 테스트의 완성도를 높일 수 있음
- AI 모델의 신뢰성 확보
- AI 모델의 복잡한 동작 경로, 다양한 입력 조건, 예측 결과의 견고성 등을 종합적으로 평가
- AI 시스템의 신뢰성을 확보하는 데 필수적
1.3 주요 커버리지 검증 기법의 종류
1.3.1 코드 커버리지
소프트웨어의 소스 코드가 테스트를 통해 얼마나 실행되었는지 측정함
- 문장 커버리지 (Statement Coverage)
- 코드의 각 문장이 최소 한 번 이상 실행되었는지 확인
- 가장 기본적인 커버리지 측정 방법
- 분기/결정 커버리지 (Branch/Decision Coverage)
- 프로그램의 모든 결정 지점(예:
if,for,while문 등)이true와false분기 모두 한 번 이상 실행되었는지 확인 - 문장 커버리지보다 더 깊은 테스트 보장
- 프로그램의 모든 결정 지점(예:
- 조건 커버리지 (Condition Coverage)
- 조건문 내의 개별 불리언(boolean) 표현식 각각이
true와false값을 한 번 이상 가졌는지 확인
- 조건문 내의 개별 불리언(boolean) 표현식 각각이
- 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 커버리지 검증의 활용 단계
- 목표 설정
- 어떤 유형의 커버리지를 몇 퍼센트까지 달성할 것인지 목표 설정
- 예: 문장 커버리지 90%, 분기 커버리지 70%
- 측정 도구 사용
- Coverage.py(파이썬), JaCoCo(자바), Istanbul(자바스크립트) 등과 같은 전용 도구를 사용하여 커버리지 측정
- 결과 분석
- 측정된 커버리지 데이터를 분석하여 테스트가 충분히 이루어지지 않은 영역 식별
- 테스트 보강
- 커버리지가 낮은 부분을 대상으로 새로운 테스트 케이스를 추가하거나 기존 테스트를 개선