コードカバレッジとは何ですか? また、それをどのように測定しますか?
テスト コード カバレッジの自動化に関して、この質問を受けました。自動化されたツール以外では、科学というよりはアートのようです。コード カバレッジの使用方法の実例はありますか?
コードカバレッジとは何ですか? また、それをどのように測定しますか?
テスト コード カバレッジの自動化に関して、この質問を受けました。自動化されたツール以外では、科学というよりはアートのようです。コード カバレッジの使用方法の実例はありますか?
コード カバレッジは、自動テストの実行中に実行されたコードの行数/ブロック数/アーク数の測定値です。
コード カバレッジは、特殊なツールを使用してバイナリを計測し、トレース呼び出しを追加して、計測された製品に対して自動テストの完全なセットを実行することによって収集されます。優れたツールは、実行されたコードのパーセンテージを提供するだけでなく、データを掘り下げて、特定のテスト中に実行されたコード行を正確に確認することもできます。
私たちのチームは、社内のコード カバレッジ ツール セットであるMagellanを使用しています。.NET ショップの場合、Visual Studio にはコード カバレッジを収集するためのツールが統合されています。この記事で説明されているように、いくつかのカスタム ツールをロールすることもできます。
あなたが C++ ショップなら、Intel にはWindows と Linux で動作するツールがいくつかありますが、私はそれらを使用していません。また、GCC 用の gcov ツールがあると聞いたことがありますが、それについては何も知らないので、リンクを提供することはできません。
使用方法については、コード カバレッジは各マイルストーンの終了基準の 1 つです。実際には、単体テスト (開発チームによる) のカバレッジ、(テスト チームによる) シナリオ テストによるカバレッジ、および組み合わせたカバレッジの 3 つのコード カバレッジ メトリクスがあります。
ところで、コード カバレッジはどれだけのテストを行っているかを示す良い指標ですが、製品をどれだけうまくテストしているかを示す良い指標とは限りません。品質を確保するために、コード カバレッジと共に使用する必要がある他の指標があります。
コード カバレッジは基本的に、テストでカバーされているコードの量を示します。たとえば、コード カバレッジが 90% の場合、コードの 10% がテストでカバーされていないことを意味します。
コードの 90% がカバーされていればそれで十分だと考えているかもしれませんが、別の角度から見る必要があります。100% のコード カバレッジを得ることを妨げているものは何ですか?
良い例は次のとおりです。
if(customer.IsOldCustomer())
{
}
else
{
}
上記のコードには、2 つのパス/分岐があります。常に "YES" ブランチをヒットしている場合は、"else" 部分をカバーしていないため、コード カバレッジの結果に表示されます。カバーされていないことがわかり、「else」部分をカバーするテストを作成できるため、これは良いことです。コード カバレッジがなければ、時限爆弾の上に座って、爆発するのを待っているだけです。
NCoverは、コード カバレッジを測定するための優れたツールです。
「100%コードカバレッジ」があるからといって、すべてが完全にテストされるわけではありません。つまり、コードのすべての行がテストされるということですが、すべての(一般的な)状況でテストされるわけではありません。
コードカバレッジを使用して、おそらくテストを作成する必要があるコードのビットを強調します。たとえば、現在の単体テストの実行中にmyImportantFunction()が実行されないことを示すコードカバレッジツールがあれば、おそらく改善する必要があります。
基本的に、100%のコードカバレッジは、コードが完璧であることを意味するわけではありません。より包括的な(単体)テストを作成するためのガイドとして使用してください。
以前の回答の多くにいくつかの点を補足します。
コード カバレッジとは、テスト セットがソース コードをどの程度カバーしているかを意味します。つまり、一連のテスト ケースでソース コードがどの程度カバーされているかということです。
上記の回答で述べたように、パス、条件、関数、ステートメントなど、さまざまなカバレッジ基準があります。ただし、カバーされる追加の基準は次のとおりです。
注: 静的コード分析では、到達不能なコードやぶら下がっているコード (つまり、他の関数呼び出しでカバーされていないコード) があるかどうかが検出されます。また、他の静的カバレッジ。静的コード分析で 100% のコードがカバーされていることが報告されたとしても、考えられるすべてのコード カバレッジがテストされている場合、テスト セットに関するレポートは提供されません。
コードカバレッジは、以前の回答で十分に説明されています。したがって、これは質問の2番目の部分に対する答えです。
コードカバレッジを決定するために3つのツールを使用しました。
これらのツールを使用して
コード カバレッジは、テストされるコードの単なる尺度です。測定可能なカバレッジ基準にはさまざまなものがありますが、通常は、プログラム内のさまざまなパス、条件、関数、およびステートメントによって、カバレッジ全体が構成されます。コード カバレッジ メトリックは、これらのカバレッジ基準のそれぞれを実行するテストの割合です。
プロジェクトの単体テスト カバレッジを追跡する方法に関しては、静的コード分析ツールを使用して追跡しています。
Perl には、モジュールで定期的に使用する優れたDevel::Coverモジュールがあります。
ビルドとインストールが Module::Build によって管理されている場合は、実行するだけで./Build testcover
、サブ、行、および条件ごとのカバレッジを示す素敵な HTML サイトを取得できます。きれいな色で、カバーされていないコード パスを簡単に確認できます。