테스트 커버리지 != 테스트 품질
자동화 테스트 코드를 작성하면서 테스트 커버리지(Test coverage)를 테스트의 목표로 설정하는 프로그래머들이 있습니다. 그러나 이것은 잘못된 목표 설정입니다. 그리고 커버리지 100%는 자랑스러울만한 일이 아닙니다.
테스트 커버리지 != 테스트 품질
Free Grey Image on Unsplash
자동화 테스트 코드를 작성하면서 테스트 커버리지(Test coverage)를 테스트의 목표로 설정하는 프로그래머들이 있습니다. 그러나 이것은 잘못된 목표 설정입니다. 그리고 커버리지 100%는 자랑스러울만한 일이 아닙니다.
테스트 커버리지는 테스트 품질을 판단하는데에 큰 도움이 되지 못합니다.
테스트 커버리지
테스트 커버리지는 일반적으로 코드 커버리지와 분기 커버리지로 전체 커버리지를 계산합니다.
코드 커버리지는 코드베이스의 코드 라인들이 테스트 코드들에의해 실행되었는지를 백분율로 나타냅니다. 즉 3줄의 코드 라인에서 3줄이 모두 실행되었으면 100% 이고 2줄만 실행되었으면 66.66%입니다.
분기 커버리지는 코드 베이스의 모든 분기(if 등)들이 테스트 코드들에의해 실행되었는지를 백분율로 나타냅니다. if-else 분기에서 if-else가 모두 실행되었으면 100%이고 else가 실행되지 않았다면 50%입니다.
테스트 품질을 나타내지 못하는 사례
아래에는 하나의 함수와 해당 함수를 테스트하는 간단한 테스트 코드가 있습니다.
Java로 작성되었지만 사례를 살펴봄에 문제가 없습니다.

테스트 커버리지를 품질로 바라볼 수 없는 사례
위 코드 베이스의 테스트 커버리지는 100%입니다. 그런데 정말 이것으로 여러분의 테스트가 품질 좋은 Test suite이라고 생각할 수 있으신가요?
절대 그렇지 못합니다.
divide 함수는 두가지로 결과를 내는 함수입니다. 아래와 같습니다.
- 나누어진 값
- 0으로 나누었을 때의 Exception
실제로 divide 함수는 value2에 해당하는 인자값을 0으로 받으면
ArithmeticException(in java)으로 결과냅니다.
위에서 두번째에 해당하는 내용이 divide 함수의 의도된 usecase라면 테스트 대상입니다.
즉 Test coverage가 100%임에도 올바른 Test suite을 갖추지 못했습니다.
—
마치며
이번에 살펴본 사례 외에도 테스트 커버리지를 신봉해선 안되는 사례들이 많습니다. 예를 들어 참조하여 사용하는 라이브러리들이 있습니다.
테스트 커버리지 측정 도구들은 코드 베이스가 참조하여 사용하는 라이브러리까지 파고 들어가지 않습니다.
메타데이터
- post_id
- cdf0f4a792e4
- slug
- 테스트-커버리지를-믿지-마세요-cdf0f4a792e4
- url
- https://medium.com/@Thwj/%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%BB%A4%EB%B2%84%EB%A6%AC%EC%A7%80%EB%A5%BC-%EB%AF%BF%EC%A7%80-%EB%A7%88%EC%84%B8%EC%9A%94-cdf0f4a792e4
- canonical_url
- https://medium.com/@Thwj/%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%BB%A4%EB%B2%84%EB%A6%AC%EC%A7%80%EB%A5%BC-%EB%AF%BF%EC%A7%80-%EB%A7%88%EC%84%B8%EC%9A%94-cdf0f4a792e4
- author_url
- https://medium.com/@Thwj
- status
- ok
- fetched_at
- 2026-07-14 16:56:33