インテル® コンパイラのコード・カバレッジ・ツールは、IA-32 アーキテクチャと Itanium® アーキテクチャの両方で使用できるツールで、さまざまな方法により、開発効率を改善し、問題を少なくして、アプリケーションのパフォーマンスを向上させます。 コード・カバレッジ・ツールの主な特徴は次のとおりです:
色分けしたアプリケーションのコード・カバレッジ情報のビジュアル・プレゼンテーション
アプリケーションの各基本ブロックの動的実行カウントの表示
アプリケーションを 2 回実行した場合の差分カバレッジまたはプロファイルの比較
このツールの構文は次のとおりです。
codecov [-codecov_option]
-codecov_option はコード・カバレッジの実行に使用するツール・オプションです。オプションを使用しない場合、ツールはプログラム全体についてトップレベルのコード・カバレッジを出力します。
次の表は、ツールが使用するオプションの一覧です。
アプリケーションをテストするときにインストルメント済みバイナリを実行して集められたプロファイル情報を基に、インテル・コンパイラはコード・カバレッジ・ツールを使用して 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.f90 と記述されていた場合、同じ名前のモジュールがあるアプリケーションのすべてのモジュールが選択されます。ユーザは、特定のパス情報を記述することで特定のモジュールを指定することができます。例えば、ある行に /cmp1/mod1.f90 と記述されていた場合、ディレクトリ cmp1 にある mod1.c という名前のモジュールのみが選択されます。コンポーネント・ファイルが指定されていない場合、-prof_genx オプション付きでコンパイルされたすべてのファイルがカバレッジ解析用に選択されます。
この機能は、アプリケーションの各基本ブロックの動的実行カウントを表示するもので、カバレッジおよびパフォーマンスの調整に役立ちます。
コード・カバレッジ・ツールは、動的実行カウントに関する情報を生成するように設定することができます。この設定を行うには、-counts オプションを使用します。カウント情報は、対応する基本ブロックが開始するソースの場所で、^ 記号の後のコードで正確に表示されます。そのソースの場所でコードに複数の基本ブロックが生成される場合 (例えば、マクロ)、そのようなブロックの総数と実行されたブロックの総数が実行カウントの前に表示されます。
例えば、コードの行 11 は IF 文です。
11 IF ((N .EQ.1).OR.(N .EQ.0))
^ 10 (1/2)
12 PRINT N
^ 7
行 11 と 12 のカバレッジ行には次の情報が含まれています。
行 11 の IF 文は 10 回実行された。
行 11 の IF 文に対して 2 つの基本ブロックが生成された。
これら 2 ブロックのうち 1 つだけが実行されているため、部分的なカバレッジの色で表示される。
10 回のうち 7 回のみ、変数 n が 0 または 1 の値となった。
特定の状況では、1 つのソース用に生成されたすべてのブロックを 1 つのエンティティとして考慮する必要があります。この場合、少なくとも 1 つのブロックがカバーされたのであれば、1 つのソースの場所用に生成されたすべてのブロックがカバーされたと仮定する必要があります。仮定するには、-nopartial オプションを使用します。このオプションが指定されれば、カバレッジの決定は無効になり、関連する統計がそれに従って調節されます。コードの 11 行目および 12 行目は、12 行目の PRINT 文がカバーされたことを示しています。しかし、11 行目の条件の 1 つのみが常に真であったとします。-nopartial オプションを使用すると、ツールは (11 行目のコードのように) 一部がカバーされたコードを完全にカバーされたコードとして扱います。
コード・カバレッジ・ツールを使用すると、アプリケーションの 2 つの実行 (リファレンス実行と新規実行) を比較して、新規実行ではカバーされるがリファレンス実行ではカバーされないコードを識別することができます。この機能は、アプリケーションがカスタマによって実行される場合に、アプリケーションのテストでカバーされないアプリケーションのコードの部分を検索するために使用することができます。また、アプリケーションのテストスペースに新しく追加されたテストのインクリメンタル・カバレッジの影響を検索するためにも使用されます。
差分カバレッジ用のリファレンス実行の動的プロファイル情報は、次のコマンドのように、-ref オプションで指定されます。
codecov -prj Project_Name -dpi customer.dpi -ref appTests.dpi
差分カバレッジのカバレッジ統計は、新規実行で実行され、リファレンス実行で実行されなかったコードの比率をパーセントで表示します。この場合、コード・カバレッジ・ツールはカバーされなかったコードを含むモジュールのみを表示します。
ソースビューの配色も同様に解釈すべきです。コードが両方の実行で同じカバレッジ・プロパティ (カバーされたまたはカバーされなかった) の場合、コードはカバーされたコードとして扱われます。コードが新規実行でカバーされ、リファレンス実行でカバーされなかった場合、コードはカバーされなかったコードとして扱われます。逆に、コードがリファレンス実行でカバーされ、新規実行でカバーされなかった場合、差分カバレッジのソースビューはコードをカバーされたコードとして表示します。
インテル・コンパイラのコード・カバレッジ・ツールを差分カバレッジ用に実行するには、次のファイルが必要です:
アプリケーションのソース
インテル・コンパイラでインストルメント済みバイナリ用に -prof_genx オプション付きでアプリケーションをコンパイルしたときに生成される .spi ファイル。
インテル・コンパイラの profmerge ツールで各アプリケーション・テストの動的プロファイル情報ファイル (.dyn) をマージして生成される .dpi ファイル、またはインテル・コンパイラで -prof_use オプション付きでアプリケーションをコンパイルしたときに暗黙的に生成される .dpi ファイル。
「PGO の使用モデル」を参照してください。
一旦必要なファイルが利用可能になると、コード・カバレッジ・ツールを次のコマンドラインから起動できます:
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