web-dev-qa-db-ja.com

イスタンブールのカバレッジレポートを読むにはどうすればよいですか?

ユニットテストには常にJasmineを使用していましたが、最近、イスタンブールを使用してコードカバレッジレポートを提供し始めました。つまり、Gistが私に伝えようとしていることの内容を取得しますが、これらのパーセンテージのそれぞれが何を表しているのか本当にわかりません(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 |
-------------------|-----------|-----------|-----------|-----------|
100
Scott Sword

カバレッジ基準は多数ありますが、主なものは次のとおりです。

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

各ケースの割合は、実行済みコードvs未実行コードを表します、パーセント形式の各分数に相当します(例:50%分岐、1/2)。

ファイルレポート:

  • 'E'は 'else path not taken'を表します。つまり、マークされたif/elseステートメントの場合、 'if'パスはテストされていますが、 'else'はテストされていません。
  • 'I'は、 'if path not taken'を表します。これは逆のケースです: 'if'はテストされていません。
  • 左の列のxNは、その行が実行された回数です。
  • 実行されていない行またはコードの一部は、赤で強調表示されます。

これはイスタンブールv0.4.0で検証されていますが、これが後続のバージョンにも適用されるかどうかはわかりませんが、そのライブラリは強固な理論的原理に基づいているため、新しいバージョンでは動作があまり変わらないはずです。

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

ピンク:対象外のステートメント。

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

黄色:枝は覆われていません。

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

https://gotwarlost.github.io/istanbul/public/apidocs/index.html

コードカバレッジの詳細な理論:

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

それが役に立てば幸い!

169
Amy Pellegrini

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

対象となる機能の割合は、テスト中に呼び出された機能の数を機能の総数で割って計算されます。行と文についても同じことが言えます(非常に長い文がない限り、通常は互いに近くなります)。ブランチは、if-elseブロックのような決定ポイントを意味します。たとえば、コードに含まれるif-elseステートメントが1つだけで、テストがif部分のみを通過し、else部分を通過しない場合、分岐率は50%になります。

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

7
yarons

前の回答に追加する

%Statementsは、12/18 * 100 = 66.67%のように、テストでカバーされるステートメントの数の割合を取ることによって計算されます。これは、テストが66.67%のみをカバーしたことを意味します。

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

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

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

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

0
Samuel Pinheiro