라인과 지점 커버리지의 차이점


93

내 프로젝트 중 하나에 Cobertura Maven 플러그인을 사용합니다. 하지만 생성 된 보고서에 대한 질문이 있습니다.

라인과 지점 커버리지의 차이점은 무엇입니까?

답변:


168

줄 범위는 얼마나 많은 문을 사용했는지 측정합니다 (문은 일반적으로 주석, 조건문 등을 포함하지 않는 코드 줄임). 지점 적용 범위는 각 조건부 (if, while, for)에 대해 참 및 거짓 분기를 선택했는지 확인합니다. 조건문보다 두 배 많은 분기를 갖게됩니다.

왜 신경 쓰나요? 예를 고려하십시오.

public int getNameLength(boolean isCoolUser) {
    User user = null;
    if (isCoolUser) {
        user = new John(); 
    }
    return user.getName().length(); 
}

이 메서드를로 isCoolUser설정하여 호출 true하면 100 % 명세서 적용 범위를 얻습니다. 좋은가요? NOPE,을 호출하면 널 포인터가 될 것입니다 false. 그러나 첫 번째 경우에는 분기 범위가 50 %이므로 테스트에서 누락 된 부분이 있음을 확인할 수 있습니다 (그리고 종종 코드에서).


8
좋은 대답입니다! 라인 커버리지가 코드가 좋다는 잘못된 느낌을 줄 때 보여줍니다!
MAGx2

라인 커버리지 또는 지점 커버리지로 인해 발생할 수있는 버그는 무엇입니까?
Emna Ayadi

61

이 코드를 간단한 예로 보겠습니다.

if(cond) {
    line1();
    line2();
    line3();
    line4();
} else {
    line5();
}

테스트 cond가 사실임을 증명하고 else가지를 실행하지 않는 경우 :

  • 5 개 라인 중 4 개 포함
  • 2 개 지점 중 1 개가 포함됨

또한 Cobertura 보고서 자체는 열 머리글을 클릭 할 때 멋진 팝업 도움말 도구 설명을 소개합니다.

라인 적용 범위 -이 테스트 실행에 의해 실행 된 라인의 백분율입니다.

분기 범위 -이 테스트 실행에 의해 실행 된 분기의 비율입니다.


나는이 대답을 쓰고 싶었지만 당신은 나를 (수년에 걸쳐) 선점했습니다. 명확한 대답. 감사.
Soundararajan 2019

3
if(cond){
    //branch 1
}else{  
    //branch 2
}

LineCoverage 및 BranchCoverage 모두에 대해 100 % 커버리지를 얻으려면 모든 라인이 분기 1 및 분기 2 인 주소를 지정해야합니다.

다른 것에서 아무것도 놓치면 지점 커버리지의 절반을 받게됩니다. if 및 else 모두에서 라인 수에서 누락 된 사항이있는 경우 BranchCoverage는 100 %이지만 라인 적용 범위에서는 100 %가 아닙니다.

도움이 되었기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.