본문 바로가기
Back-End

코드 커버리지

by 코젼 2025. 6. 17.
728x90
반응형

테스트 케이스들이 프로덕션 코드를 실행한 정도를 나타낸 것을 코드 커버리지(Code Coverage) 라고 합니다.

코드 커버리지는 측정하는 기준에 따라서 크게 구문 커버리지(Statement Coverage)조건 커버리지(Condition Coverage)결정 커버리지(Decision Coverage) 로 나뉩니다.

구문 커버리지 (라인 커버리지)

구문 커버리지는 라인 커버리지라고도 불립니다. 단순히 프로덕션 코드의 라인이 실행된 것을 확인합니다. 예를 들어, 5줄의 코드를 포함하는 A 메서드를 테스트했는데, 5줄 모두 실행된 경우 구문 커버리지는 100%가 됩니다.

결정 커버리지 (브랜치 커버리지)

결정 커버리지는 브랜치 커버리지라고도 불립니다. 이는 프로덕션 코드에 모든 조건식이 참이거나 거짓으로 평가되는 케이스가 최소 한 번씩 실행되는 것을 판단합니다. 예를 들어 아래와 같은 코드가 존재했을 때, 조건식이 참과 거짓으로 평가시킬 수 있는 테스트 케이스를 작성해야 결정 커버리지 기준을 만족합니다. 예를 들어, productionCode(1, 1), productionCode(0, 1)인 경우, 결정 커버리지를 만족합니다. 결정 커버리지는 코드 내에서 실행 흐름이 분기되는 모든 경로를 테스트하는 것을 목표로합니다.

public void productionCode(int a, int b) {
    if(a > 0 && b > 0) { // 조건식
    }
}

조건 커버리지

조건 커버리지는 메서드 내부의 모든 조건식이 참과 거짓으로 모두 평가되는 것을 의미합니다. 예를 들어, 위 코드에서 결정 커버리지는 a > 0 && b > 0을 참과 거짓으로 평가할 수 있는 케이스가 있어야 하는 반면에, 조건 커버리지는 각 a > 0, b > 0이 참과 거짓으로 평가되는지 확인합니다. productionCode(1, 0), productionCode(0, 1)를 입력하는 상황처럼 조건 커버리지는 만족하여도 다른 커버리지는 만족하지 못할 수 있는 상황도 존재합니다.

커버리지가 높다고 무조건 좋은가?

커버리지가 높다는 것은 코드의 일부가 테스트에 의해 실행되어 검증되었다는 것을 의미합니다. 높은 커버리지는 일반적으로 코드의 안정성신뢰성을 높일 수 있지만, 이것이 무조건 항상 좋다고 말할 수는 없습니다.

또한, 커버리지가 높다고 해서 모든 버그를 찾아낼 수 있는 것은 아닙니다. 커버리지가 높더라도 테스트 케이스가 부족하거나 부적절하게 작성되었다면 여전히 중요한 버그가 발생할 수 있습니다. 또한, 모든 코드를 테스트하는 것이 현실적이지 않을 수도 있습니다. 특히 예외 상황이나 경계 조건을 모두 다루기는 어려울 수 있습니다.

추가 학습 자료

728x90
반응형

'Back-End' 카테고리의 다른 글

CQRS 패턴  (1) 2025.06.19
CI/CD 파이프라인  (0) 2025.06.18
의존성 주입  (0) 2025.06.16
스프링 트랜잭션 AOP 동작 흐름  (0) 2025.06.13
전략 패턴  (3) 2025.06.12

댓글