コード・カバレッジ・ツール

インテル® C++ コンパイラのコード・カバレッジ・ツールは、IA-32 アーキテクチャと Itanium® アーキテクチャの両方で使用できるツールで、さまざまな方法により、開発効率を改善し、問題を少なくして、アプリケーションのパフォーマンスを向上させます。コード・カバレッジ・ツールの主な特徴は次のとおりです:

コマンドライン構文

このツールの構文は次のとおりです。

codecov [-codecov_option]

-codecov_option はツール・オプションです。オプションを使用しない場合、ツールはプログラム全体についてトップレベルのコード・カバレッジを出力します。

ツールのオプション

次の表は、ツールが使用するオプションの一覧です。

オプション 説明 デフォルト
-help コード・カバレッジ・ツールのすべてのオプションを出力します。  
-spi file 静的プロファイル情報ファイル (.spi) のパス名を設定します。 pgopti.spi
-dpi file 動的プロファイル情報ファイル (.dpi) のパス名を設定します。 pgopti.dpi
-prj プロジェクト名を設定します。  
-counts 動的実行カウントを生成します。  
-nopartial 一部カバーされたコードを完全にカバーされたコードとして扱います。  
-comp 処理するファイルのリストを含むファイル名を設定します。  
-ref ref_dpi_file に関する差分カバレッジを検索します。  
-demang 関数名とその引数の両方を復号します。  
-mname Web ページの所有者の名前を設定します。  
-maddr Web ページの所有者のメールアドレスを設定します。  
-bcolor カバーされなかったブロックの html カラー名またはコードを設定します。 #ffff99
-fcolor カバーされなかった関数の html カラー名またはコードを設定します。 #ffcccc
-pcolor 一部カバーされたコードの html カラー名またはコードを設定します。 #fafad2
-ccolor カバーされたコードの html カラー名またはコードを設定します。 #ffffff
-ucolor 不明なコードの html カラー名またはコードを設定します。 #ffffff

アプリケーションのコード・カバレッジのビジュアル・プレゼンテーション

アプリケーションをテストするときにインストルメント済みバイナリを実行して集められたプロファイル情報を基に、インテル・コンパイラはコード・カバレッジ・ツールを使用して HTML ファイルを作成します。これらの HTML ファイルはテストによって実行された (実行されなかった) ソースコードの部分を示します。パフォーマンス・ワークロードのプロファイルが適用されると、コード・カバレッジ情報は実行されたワークロードがアプリケーションの重要なコードをどの程度カバーするかを示します。プロファイルに基づく最適化の利点を完全に受けるためには、パフォーマンス・クリティカルなモジュールの高いカバレッジが必要です。

コード・カバレッジ・ツールは、2 つのレベルのカバレッジを作成することができます:

トップレベルのカバレッジ

トップレベルのカバレッジは選択されたモジュールのコード・カバレッジ全体をレポートします。次のオプションがあります:

次の例は、プロジェクトのトップレベル・カバレッジの要約を示しています。モジュール名 (例えば、SAMPLE.C) をクリックすると、ブラウザはそのモジュールのカバレッジ・ソース・ビューを表示します。

フレームのブラウジング

コード・カバレッジ・ツールは、カバーされなかったコードが容易に識別できるようにフレームを作成します。上のフレームにはカバーされなかった関数のリストが、下のフレームにはカバーされた関数のリストがそれぞれ表示されます。カバーされなかった関数については、各関数の基本ブロックの総数も表示されます。カバーされた関数については、ブロックの総数とカバーされたブロックの数、その比率 (つまり、カバレッジ率) が表示されます。

例えば、66.67(4/6) は、対応する関数の 6 つのブロックのうち 4 つのブロックがカバーされたことを示します。関数のブロック・カバレッジ率は 66.67% になります。これらのリストは、カバレッジ率、ブロック数、関数名でソートすることができます。 関数名はソースビューで関数が開始する場所とリンクされています。つまり、クリック 1 つで、ユーザはリストで最も少なくカバーされた関数を見ることができます。もう一回クリックすると、ブラウザは関数のソースを表示します。その後、ユーザはソースビューでスクロールして関数のソースを参照することができます。

個々のモジュール・ソース・ビュー

個々のモジュール・ソース・ビューで、ツールはカバーされなかった関数のリストとカバーされた関数のリストを表示します。リストは、ソースコードを容易に参照できるように、2 つの別々のフレームに表示されます。リストは、次の項目でソートすることができます:

次の図は、SAMPLE.C のカバレッジ・ソース・ビューの例です。

コード・カバレッジ用の配色の設定

ツールは、次のようにカバレッジ・カテゴリを色分けします:

カバレッジ情報を示すためにツールが使用するデフォルト色を、次の表に示します。

色の種類 意味
カバーされたコード テストが実行されたコードの部分を示します。デフォルト色は -ccolor オプションで無効にすることができます。
カバーされなかった基本ブロック テスト中に実行された関数内にある、テストが実行されなかった基本ブロックを示します。デフォルト色は -bcolor オプションで無効にすることができます。
カバーされなかった関数 テスト中に呼び出されなかった関数を示します。デフォルト色は -fcolor オプションで無効にすることができます。
一部カバーされたコード この場所でコード用に複数の基本ブロックが生成されたことを示します。カバーされたブロックとカバーされなかったブロックがあります。デフォルト色は -pcolor オプションで無効にすることができます。
不明 このソース行に対してソースが生成されなかったことを示します。ほとんどの場合、この場所のソースはコメント、ヘッダファイルのインクルード、または変数宣言です。デフォルト色は -ucolor オプションで無効にすることができます。

デフォルト色は、上記の表の各カバレッジ・カテゴリで説明されているオプションを使用して、任意の HTML カラーにカスタマイズすることができます。

コード・カバレッジ・プレゼンテーションでは、コード・カバレッジ・ツールは次のヒューリスティックを使用します。ソース文字は、プロファイル情報によって基本ブロックの先頭として示されたソースの場所に達するまでスキャンされます。その基本ブロックのプロファイル情報でカバレッジのカテゴリが変わったことが示された場合、ツールはコードのその部分のカバレッジ条件に対応するように色を変更し、HTML ファイルに適切なタグを挿入します。

コードのコンテキスト中の色を解釈する必要があります。例えば、実行されなかった基本ブロックに続くコメント行はカバーされなかったブロックと同じ色になります。C/C++ アプリケーションの閉じ括弧も同様です。

モジュール・サブセットのカバレッジ解析

インテル・コンパイラのコード・カバレッジ・ツールの機能の 1 つに、アプリケーションのモジュール・サブセットの効率的なカバレッジ解析があります。この解析を行うには、-comp オプションを選択してツールを実行します。

アプリケーション全体、またはサブセットのプロファイル情報を生成し、カバーされたモジュールを異なるコンポーネントに分割してから、コード・カバレッジ・ツールを使用して各コンポーネントのカバレッジ情報を取得します。アプリケーション・モジュールのサブセットのみが -prof_genx オプション付きでコンパイルされた場合、カバレッジ情報はこのコンパイル・オプションに関係するモジュール用にだけ生成されるため、他のモジュール用のプロファイルを生成するオーバーヘッドを回避することができます。

処理するモジュールを指定するには、-comp オプションを使用します。このオプションは引数としてファイル名を指定します。指定するファイルは、解析するモジュール名またはディレクトリ名を含むテキストファイルでなければなりません:

codecov -prj Project_Name -comp component1

コンポーネント・ファイルの各行には 1 つのモジュール名のみを記述するようにしてください。

コンポーネント・ファイルに記述されているアプリケーションのすべてのモジュールについてカバレッジ解析が行われます。例えば、上記の例で、ファイル component1 のある行に mod1.cpp と記述されていた場合、同じ名前のモジュールがあるアプリケーションのすべてのモジュールが選択されます。ユーザは、特定のパス情報を記述することで特定のモジュールを指定することができます。例えば、ある行に /cmp1/mod1.cpp と記述されていた場合、ディレクトリ cmp1 にある mod1.cpp という名前のモジュールのみが選択されます。コンポーネント・ファイルが指定されていない場合、-prof_genx オプション付きでコンパイルされたすべてのファイルがカバレッジ解析用に選択されます。

動的カウンタ

この機能は、アプリケーションの各基本ブロックの動的実行カウントを表示して、カバレッジとパフォーマンス・チューニングの両方に有用な情報を提供します。

コード・カバレッジ・ツールは、動的実行カウントに関する情報を生成するように設定することができます。この設定を行うには、-counts オプションを使用します。カウント情報は、対応する基本ブロックが開始するソースの場所で、^ 記号の後のコードで正確に表示されます。そのソースの場所でコードに複数の基本ブロックが生成される場合 (例えば、マクロ)、そのようなブロックの総数と実行されたブロックの総数が実行カウントの前に表示されます。

特定の状況では、1 つのソース用に生成されたすべてのブロックを 1 つのエンティティとして考慮する必要があります。この場合、少なくとも 1 つのブロックがカバーされたのであれば、1 つのソースの場所用に生成されたすべてのブロックがカバーされたと仮定する必要があります。仮定するには、-nopartial オプションを使用します。このオプションが指定されれば、カバレッジの決定は無効になり、関連する統計がそれに従って調節されます。コードの 11 行目および 12 行目は、12 行目の printf 分がカバーされたことを示しています。しかし、11 行目の条件の 1 つのみが常に真であったとします。-nopartial オプションを使用すると、ツールは (11 行目のコードのように) 一部がカバーされたコードを完全にカバーされたコードとして扱います。

差分カバレッジ

コード・カバレッジ・ツールを使用すると、アプリケーションの 2 つの実行 (リファレンス実行と新規実行) を比較して、新規実行ではカバーされるがリファレンス実行ではカバーされないコードを識別することができます。この機能は、アプリケーションがカスタマによって実行される場合に、アプリケーションのテストでカバーされないアプリケーションのコードの部分を検索するために使用することができます。また、アプリケーションのテストスペースに新しく追加されたテストのインクリメンタル・カバレッジの影響を検索するためにも使用されます。

差分カバレッジ用のリファレンス実行の動的プロファイル情報は、次のコマンドのように、-ref オプションで指定されます。

codecov -prj Project_Name -dpi customer.dpi -ref appTests.dpi

差分カバレッジのカバレッジ統計は、新規実行で実行され、リファレンス実行で実行されなかったコードの比率をパーセントで表示します。この場合、コード・カバレッジ・ツールはカバーされなかったコードを含むモジュールのみを表示します。

ソースビューの配色も同様に解釈すべきです。コードが両方の実行で同じカバレッジ・プロパティ (カバーされたまたはカバーされなかった) の場合、コードはカバーされたコードとして扱われます。コードが新規実行でカバーされ、リファレンス実行でカバーされなかった場合、コードはカバーされなかったコードとして扱われます。逆に、コードがリファレンス実行でカバーされ、新規実行でカバーされなかった場合、差分カバレッジのソースビューはコードをカバーされたコードとして表示します。

差分カバレッジ用の実行

インテル・コンパイラのコード・カバレッジ・ツールを差分カバレッジ用に実行するには、次のファイルが必要です:

一旦必要なファイルが利用可能になると、コード・カバレッジ・ツールを次のコマンドラインから起動できます:

codecov -prj Project_Name -spi pgopti.spi -dpi pgopti.dpi

-spi および -dpi オプションは、対応するファイルへのパスを指定します。

コード・カバレッジ・ツールには、各 HTML ページの最後に -mname および -maddr オプションを使用して指定されたアドレスに電子メールを送信するリンクを生成する、次の追加オプションもあります。

codecov -prj Project_Name -mname John_Smith -maddr js@company.com