이스탄불 보장 보고서를 어떻게 읽습니까?


131

저는 항상 단위 테스트에 Jasmine을 사용했지만 최근에는 Istanbul을 사용하여 코드 검사 보고서를 제공하기 시작했습니다. 내 말은 그들이 나에게 말하려는 내용 의 요점 을 알지만 이러한 각 백분율이 나타내는 것이 무엇인지 실제로는 모르겠습니다 (Stmts, Branches, Funcs, Lines). 지금까지 인터넷 검색은 확실한 설명 / 리소스를 찾을 수 없었습니다.

질문 : 내가 말했듯이 요지는 알지만 누군가가 적절한 설명이나 적절한 설명에 대한 링크를 게시 할 수 있습니까?

3 차 질문 : 코드에서 다루지 않는 특정 부분을 식별 할 수있는 방법이 있습니까? 지금까지이 보고서를 정말 괴롭히지 않고 기본적으로 추측하고 있습니다.

-------------------|-----------|-----------|-----------|-----------|
File               |   % Stmts |% Branches |   % Funcs |   % Lines |
-------------------|-----------|-----------|-----------|-----------|
   controllers/    |      88.1 |     77.78 |     78.57 |      88.1 |
      dashboard.js |      88.1 |     77.78 |     78.57 |      88.1 |
-------------------|-----------|-----------|-----------|-----------|
All files          |      88.1 |     77.78 |     78.57 |      88.1 |
-------------------|-----------|-----------|-----------|-----------|

3
istanbul을 실행하면 보고서에 대한 HTML 파일도 생성됩니다 (coverage 폴더에 있어야 함). 이 HTML은 파일 / 폴더를 클릭 할 때 드릴 다운 정보를 제공합니다.
Yaron Schwimmer 2014 년

@yarons 감사합니다. 이는 보장 범위를 자세히 살펴보고 특별히 보장되지 않는 항목을 식별하는 데 확실히 도움이됩니다. 나는 여전히 백분율이 의미하는 바를 깊이 이해하지 못합니다 = /.
Scott Sword

답변:


217

적용 범위 기준에는 여러 가지가 있으며 주요 기준은 다음과 같습니다.

  • 기능 범위 프로그램의 각 기능 (또는 서브 루틴)이 호출 되었습니까?
  • 명령문 적용 프로그램의 각 명령문이 실행 되었습니까?
  • 분기 범위 각 제어 구조 (예 : if 및 case 문)의 각 분기 (DD-path라고도 함)가 실행 되었습니까? 예를 들어 if 문이 주어 졌을 때 참과 거짓 분기가 모두 실행 되었습니까? 이것을 말하는 또 다른 방법은 프로그램의 모든 에지가 실행 되었습니까?
  • 라인 커버리지 소스 파일의 각 실행 가능한 라인이 실행 되었습니까?

각 사례에 대해 백분율은 실행 된 코드실행 되지 않은 코드를 나타내며 백분율 형식의 각 분수와 같습니다 (예 : 50 % 분기, 1/2).

파일 보고서에서 :

  • 'E' 'else path not taken'을 나타내며 표시된 if / else 문에 대해 'if'경로가 테스트되었지만 'else'가 아님을 의미합니다.
  • 'I' 'if'가 테스트되지 않은 경우 인 'if not taken'을 의미합니다.
  • xN좌항 라인이 실행되었는지 시간의 양이다.
  • 실행되지 않은 줄이나 코드 조각은 빨간색으로 강조 표시됩니다.

이것은 Istanbul v0.4.0에 대해 확인되었습니다. 이것이 후속 버전에도 여전히 적용되는지 확실하지 않지만 라이브러리가 견고한 이론적 원칙에 기반하고 있기 때문에 새로운 버전에 대해 동작이 너무 많이 변경되어서는 안됩니다.

또한 몇 가지 색상 코드를 제공합니다.

분홍색 : 설명이 적용되지 않습니다.

주황색 : 해당 기능이 없습니다.

노란색 : 가지가 덮이지 않습니다.

전체 이스탄불 문서 :

https://istanbul.js.org

코드 커버리지에 대한 심층 이론 :

https://en.wikipedia.org/wiki/Code_coverage

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


8

istanbul을 실행하면 보고서에 대한 HTML 파일도 생성되어야합니다 (coverage 폴더에 있어야 함). 이 HTML은 파일 / 폴더를 클릭 할 때 드릴 다운 정보를 제공해야합니다.

포함 된 함수의 백분율은 테스트 중에 호출 된 함수 수를 총 함수 수로 나눈 값으로 계산됩니다. 행과 명령문도 마찬가지입니다 (매우 긴 명령문이 없으면 일반적으로 서로 가깝습니다). 분기는 if-else블록 과 같은 결정 지점을 의미 합니다. 예를 들어 코드에 if-else명령문이 하나만 포함되어 있고 테스트가 if부분을 통과 하지 않고 부분 만 통과 else한다고 가정하면 분기 비율은 50 % 여야합니다.

그것이 일을 더 명확하게 해주기를 바랍니다.


"test" : "nyc mocha"에서 지정하여 이스탄불을 실행 했습니다 package.json. 내 커버리지 폴더가 비어 있습니다. 생각?
TheCrazyProgrammer

1
html 기자를 추가했습니다. 이제 작동합니다. "test" : "nyc --reporter=html mocha"
TheCrazyProgrammer

예를 들어, 큰 if-branch와 작은 else-branch가 있고 if-branch 만 실행 된 경우 회선 적용 범위는 훌륭해 보이지만 분기 적용 범위는 여전히 50 %에 불과합니다. 또한 명령문이 세미콜론으로 구분되거나 행에 함수 정의 (자체 명령문 포함)가 포함 된 경우 행당 여러 명령문을 가질 수 있습니다. 마지막 세미콜론 앞에 줄 바꿈이있는 경우 문당 여러 줄을 사용할 수 있습니다.
Hew Wolff

0

이전 답변에 추가

% Statements는 테스트에서 다루는 문 수의 백분율을 사용하여 계산됩니다 (예 : 12/18 * 100 = 66.67 %). 이는 귀하의 테스트가 66.67 %만을 차지했음을 의미합니다.

% Branch도 같은 방식으로 계산됩니다. % Functions 및 % lines와 동일합니다.

프로젝트 루트 디렉토리에는 테스트의 HTML 출력이 포함 된 커버리지 폴더가 있습니다. 그것을 클릭하고 브라우저에서 봅니다. 다음과 같은 것이 보일 것입니다.

테스트 결과의 출력을 보여주는 이미지

이것이 당신이 그것을 더 잘 이해하는 데 도움이되기를 바랍니다.

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