본문으로 건너뛰기

코드 커버리지 (Code Coverage)

✔️ 코드 커버리지 (Code Coverage)

테스트 케이스들이 프로덕션 코드를 실행한 정도를 나타냅니다. 코드 커버리지는 측정하는 기준에 따라서 크게 구문 커버리지(Statement Coverage), 결정 커버리지(Decision Coverage), 조건 커버리지(Condition Coverage)로 나뉩니다.

1) 구문 커버리지 (Statement Coverage)

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

2) 결정 커버리지(Decision Coverage)

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

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

3) 조건 커버리지(Condition Coverage)

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

✔️ 커버리지가 높다고 무조건 좋을까? 🤔

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

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

Loading comments...