コードカバレッジとは何ですか?
テストコードカバレッジの自動化に関するこの質問がありました。自動化ツールの外では、科学よりも芸術であるようです。コードカバレッジの使用方法の実例はありますか?
コードカバレッジは、自動テストの実行中にコードの行/ブロック/アークが実行された回数の測定値です。
コードカバレッジは、専用のツールを使用して収集され、バイナリをインスツルメントしてトレースコールを追加し、インスツルメントされた製品に対して完全な自動テストを実行します。優れたツールを使用すると、実行されるコードの割合だけでなく、データを掘り下げて特定のテスト中に実行されたコードの行を正確に確認できます。
私たちのチームは Magellan -コードカバレッジツールの社内セットを使用しています。 .NETショップの場合、Visual Studioにはコードカバレッジを収集するためのツールが統合されています。 この記事 のようないくつかのカスタムツールを使用することもできます。
C++ショップの場合、Intelには tools があり、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
を実行するだけで、サブ、行、条件ごとのカバレッジを示すNice HTMLサイトを取得できます。 。
以前の回答では、コードカバレッジが適切に説明されています。 iOS
およびOSX
プラットフォームで作業している場合、Xcodeはコードカバレッジをテストおよび監視する機能を提供します。
参照リンク:
https://medium.com/zendesk-engineering/code-coverage-and-xcode-6b2fb8756a51
どちらも、Xcodeを使用したコードカバレッジの学習と調査に役立つリンクです。