PMDEXIT 프로젝트 용어사전

테스트 커버리지

Test Coverage

테스트가 대상의 얼마를 덮었는지의 지표. RFP에 명시되기 시작했다.

테스트 커버리지란

테스트 커버리지(Test Coverage)는 수행한 테스트가 대상의 얼마만큼을 실제로 덮었는지를 수치로 나타내는 품질 지표다. 여기서 대상은 소스 코드의 구문이나 분기일 수도 있고, 요구사항이나 기능 목록일 수도 있다.

막연히 테스트를 많이 했다는 주장 대신, 무엇을 어느 정도 확인했는지를 정량으로 제시한다는 데 의의가 있다. 최근에는 RFP에 일정 수준의 커버리지 달성을 명시하는 사례가 늘면서, 단순한 개발 내부 지표를 넘어 계약과 검수의 기준선으로 자리 잡고 있다.

라인·경로 실행미검증 요건측정 방식 점검계약 충족 입증측정 기준(코드/요구)읽는 관점(QC/QA)
기준과 관점으로 본 커버리지

코드 기준과 요구사항 기준

커버리지는 무엇을 분모로 삼느냐에 따라 성격이 갈린다. 구문 커버리지는 실행된 코드 라인의 비율을, 분기 커버리지는 조건문의 참·거짓 경로가 모두 실행되었는지를 본다.

반면 요구사항 커버리지는 정의된 요건 중 시험으로 검증된 비율을 본다. 코드 기준 지표는 개발자 관점에서 내부 견고함을 말해주지만, 발주사가 정작 궁금한 것은 합의한 요구사항이 빠짐없이 검증되었는가다.

따라서 두 축을 함께 관리해야 기술적 완성도와 계약상 충족도를 동시에 입증할 수 있다.

높은 수치의 함정

커버리지가 높다는 것이 곧 결함이 없다는 뜻은 아니다. 라인이 실행되었다는 사실과 그 결과가 올바른지를 검증했다는 사실은 다르며, 단언문 없이 코드를 통과시키기만 해도 수치는 올라간다.

또한 모든 경로의 조합과 경계 조건, 예외 상황을 다 다루는 것은 현실적으로 불가능하다. 그래서 100%라는 숫자 자체를 목표로 삼으면 의미 없는 시험을 양산해 지표만 부풀리는 부작용이 생긴다.

커버리지는 시험의 빈틈을 찾는 진단 도구이지, 품질을 보증하는 도장이 아니라는 점을 분명히 해야 한다.

구분분모무엇을 본다
구문 커버리지코드 라인실행된 라인 비율
분기 커버리지조건 경로참·거짓 경로 실행
요구사항정의 요건검증된 요건 비율
커버리지 종류별 측정 대상

설계 기법과 맞물려야 한다

커버리지는 그 자체로 시험을 만들어주지 않는다. 어떤 입력과 경로를 골라 시험할지는 테스트 설계 기법이 결정하고, 커버리지는 그 설계가 대상을 충분히 덮었는지 사후에 측정한다.

동등 분할이나 경계값 분석 같은 명세 기반 기법으로 케이스를 도출한 뒤, 분기 커버리지로 미검증 경로가 남아 있는지 점검하는 식의 결합이 효과적이다. 설계 없이 수치만 좇으면 시험의 깊이가 얕아지고, 측정 없이 설계만 하면 누락을 알아채지 못한다.

두 활동은 보완적으로 맞물릴 때 비로소 의미 있는 품질 활동이 된다.

QA·QC 관점에서의 위치

커버리지는 결함을 직접 걸러내는 QC 활동의 결과물을 정량화하는 동시에, 시험 프로세스가 제대로 설계·수행되었는지를 점검하는 QA 활동의 근거 자료로도 쓰인다. QC 관점에서는 미달 구간이 곧 추가 시험이 필요한 위험 영역을 가리키고, QA 관점에서는 커버리지 목표와 측정 방식 자체가 프로세스의 성숙도를 보여준다.

같은 수치라도 어느 관점에서 읽느냐에 따라 해석과 후속 조치가 달라진다. 따라서 커버리지를 보고할 때는 숫자만 던지지 말고, 어떤 기준으로 무엇을 측정했는지를 함께 명시해야 오해가 줄어든다.

계약 지표로서의 운용

RFP에 커버리지 목표가 들어오면 그 수치는 검수 통과 여부를 가르는 계약 조건이 된다. 이때 PM은 목표 수치 자체보다 측정 대상과 방법의 합의를 먼저 확보해야 한다.

구문 기준인지 분기 기준인지, 자동화 도구로 산출하는지, 제외 구간을 어떻게 정의하는지가 명확하지 않으면 같은 80%도 서로 다르게 해석되어 분쟁의 불씨가 된다. 또한 달성 자체에만 매달려 실효 없는 시험을 늘리는 왜곡을 경계해야 한다.

커버리지를 건강한 지표로 쓰려면, 숫자를 결과로 받아들이되 그 숫자가 가리키는 빈틈을 진짜로 메우는 데 초점을 두어야 한다.

관련 용어