イスタンブールカバレッジレポートの読み方


131

私は常にユニットテストにJasmineを使用してきましたが、最近、イスタンブールを使用してコードカバレッジレポートを提供し始めました。つまり、彼らが私に伝えようとしていることの要点はわかりますが、これらの各パーセンテージ(Stmts、Branches、Funcs、Lines)が何を表しているのか本当にわかりません。これまでのところ、グーグル検索では、しっかりした説明/リソースを見つけることができませんでした。

質問:要点はわかりましたが、誰かが適切な説明や適切な説明へのリンクを投稿できますか?

三次質問:コードの特定の部分がカバーされていないことを識別する方法はありますか?これまでのところ、このレポートを実際に確認することなく、基本的に推測しています。

-------------------|-----------|-----------|-----------|-----------|
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ファイルも生成されます(カバレッジフォルダーにある必要があります)。このHTMLは、ファイル/フォルダーをクリックしたときにドリルダウン情報を提供します
Yaron Schwimmer '29

@yaronsに感謝します。これは間違いなくカバレッジを詳しく調べ、具体的にカバーされていないものを特定するのに役立ちます。私はまだ本当に理解していない深さの割合は、= /何を意味しますか。
Scott Sword

回答:


217

カバレッジ基準はいくつかありますが、主なものは次のとおりです。

  • 関数カバレッジプログラム内の各関数(またはサブルーチン)が呼び出されましたか?
  • ステートメントカバレッジプログラム内の各ステートメントは実行されましたか?
  • 分岐カバレッジ各制御構造(ifおよびcaseステートメントなど)の各分岐(DDパスとも呼ばれる)が実行されましたか?たとえば、ifステートメントがある場合、trueブランチとfalseブランチの両方が実行されていますか?別の言い方をすれば、プログラムのすべてのエッジが実行されているのですか?
  • 行カバレッジは、ソースファイルの各実行可能行が実行されましたか?

各場合について、パーセンテージは表して実行されるコード VS -実行されないコードパーセントフォーマット(50%分岐、1/2など)で各画分に等しいです。

ファイルレポートで:

  • 'E' は、「else path not takeed」を意味します。つまり、マークされたif / elseステートメントでは、「if」パスはテストされていますが、「else」はテストされていません。
  • 'I' これは、「パスが使用されない場合」を意味します。これは、逆の場合です。「if」はテストされていません。
  • xN左の列の行が実行されたことを倍の量です。
  • 実行されなかった行、またはコードの一部は、赤で強調表示されます。

これはイスタンブールv0.4.0で検証されていますが、それが今後のバージョンにも当てはまるかどうかはわかりませんが、そのライブラリは確かな理論上の原則に基づいているため、新しいバージョンの動作はそれほど変化しないはずです。

また、いくつかのカラーコードを提供します-

ピンク:ステートメントはカバーされていません。

オレンジ:対象外の機能。

黄色:覆われていない枝。

ここにイスタンブールの完全なドキュメント:

https://istanbul.js.org

コードカバレッジに関するより詳細な理論については、次のとおりです。

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

それが役に立てば幸い!


8

istanbulを実行すると、レポートのHTMLファイルも生成されます(カバレッジフォルダーにある必要があります)。このHTMLは、ファイル/フォルダーをクリックしたときにドリルダウン情報を提供します。

カバーされる関数のパーセンテージは、テスト中に呼び出された関数の数を関数の総数で割ることによって計算されます。同じことが行とステートメントにも当てはまります(非常に長いステートメントがない限り、通常は互いに近くなります)。ブランチは、if-elseブロックのような決定ポイントを意味します。たとえば、コードに1つのif-elseステートメントしか含まれてifおらず、テストはその部分のみを通過し、else場合、ブランチの割合は50%になります。

物事がより明確になることを願っています。


で指定"test" : "nyc mocha"してイスタンブールを走らせましたpackage.json。カバレッジフォルダーが空白です。考え?
TheCrazyProgrammer 2017年

1
htmlレポーターを追加しました。現在は機能しています。"test" : "nyc --reporter=html mocha"
TheCrazyProgrammer 2017年

例として:ifブランチが大きく、elseブランチが小さい場合、ifブランチのみを実行すると、ラインカバレッジは見栄えがよくなりますが、ブランチカバレッジは50%だけになります。また、ステートメントがセミコロンで区切られている場合、または行に関数定義(独自のステートメントを含む)が含まれている場合は、1行に複数のステートメントを含めることができます。ステートメントの最後のセミコロンの前に改行がある場合、ステートメントごとに複数の行を含めることができます。
Hew Wolff

0

以前の回答に追加

%ステートメントは、テストでカバーされるステートメントの数のパーセンテージを取ることによって計算されます(例:12/18 * 100 = 66.67%)。これは、テストが66.67%しかカバーしていないことを意味します。

%Branchも同じ方法で計算されます。%Functionsと%linesについても同じです。

プロジェクトのルートディレクトリには、テストのHTML出力を含むカバレッジフォルダーがあります。それをクリックして、ブラウザで表示します。このようなものが見えるはずです

テスト結果の出力を示す画像

これがあなたがそれをよりよく理解するのに役立つことを願っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.