코드 커버리지
테스트 케이스들이 프로덕션 코드를 실행한 정도를 나타낸 것을 코드 커버리지(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)
를 입력하는 상황처럼 조건 커버리지는 만족하여도 다른 커버리지는 만족하지 못할 수 있는 상황도 존재함.
커버리지가 높으면 좋을까?
커버리지가 높다는 것은 코드의 일부가 테스트에 의해 실행되어 검증되었다는 것을 의미함. 높은 커버리지는 일반적으로 코드의 안정성과 신뢰성을 높일 수 있지만, 이것이 무조건 항상 좋다고 말할 수는 없음.
또한, 커버리지가 높다고 해서 모든 버그를 찾아낼 수 있는 것은 아님. 커버리지가 높더라도 테스트 케이스가 부족하거나 부적절하게 작성되었다면 여전히 중요한 버그가 발생할 수 있음. 또한, 모든 코드를 테스트하는 것이 현실적이지 않을 수도 있음. 특히 예외 상황이나 경계 조건을 모두 다루기는 어려울 수 있음.
Last updated
Was this helpful?