テスト・プライオリタイゼーション・ツール

インテル® コンパイラのテスト・プライオリタイゼーション・ツールを使用すると、以前のアプリケーション実行プロファイルを基にアプリケーション・テストの選択と重要度付けを行う、プロファイルに基づく最適化を行うことができます。ツールは、テストがボトルネックとなる大規模なアプリケーションのテストと開発にかかる時間を大幅に節約します。ツールは、IA-32 アーキテクチャと Itanium® アーキテクチャの両方で使用することができます。

ツールは、アプリケーションのコードのサブセットに対して最も適切なテストを選択し、重要度付けを行います。アプリケーションの特定のモジュールが変更された場合、テスト・プライオリタイゼーション・ツールはその変更によって最も影響を受けるテストを知らせます。ツールは、以前に実行されたアプリケーションのプロファイル・データを分析して、アプリケーションのコンポーネントとテストの依存性を確認し、この情報を基にテストのプロセスをガイドします。

特徴と利点

ツールは、アプリケーションのコード・カバレッジを基に、効果的なテスト階層を示します。ツールを使用する利点は、次のように要約することができます:

コマンドライン構文

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

tselect -dpi_list file

-dpi_list は必須のツール・オプションで、重要度付けが必要なテストの .dpi ファイルのリストを含む DPI リストファイル (file) へのパスを設定します。

ツールのオプション

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

オプション 説明
-help テスト・プライオリタイゼーション・ツールのすべてのオプションを出力します。
-spi file 静的プロファイル情報ファイル (.spi) のパス名を設定します。デフォルトは pgopti.spi です。
-dpi_list file 動的プロファイル情報ファイル (.dpi) の名前を含むファイルのパス名を設定します。ファイルの各行には 1 つの .dpi ファイル名のみを記述し、オプションでファイル名の後にその実行時間を記述します。名前はテストを一意に識別しなければなりません。
-prof_dpi file 出力レポートファイルのパス名を設定します。
-comp 処理するファイルのリストを含むファイル名を設定します。
-cutoff value 累積ブロック・カバレッジがあらかじめ計算された合計カバレッジの value% に達した場合に終了します。value は 0.1 以上でなければなりません (例えば、99.00)。100 まで設定できます。
-nototal あらかじめ合計カバレッジを計算しません。
-mintime テストの実行時間を最小限にします。各テストの実行時間は、dpi_list ファイルのテスト名が含まれる行に、テスト名に続いて dd:hh:mm:ss 形式で記述されていなければなりません。
-verbose プログラム進行に関してより多くのロギング情報を生成します。

使用要件

アプリケーションのテストでテスト・プライオリタイゼーション・ツールを実行するには、次のファイルが必要です:

以前に実行した、または他のテストで使用した、無関係な .dyn ファイルがディレクトリ中に含まれていないことを確認することは非常に重要です。この確認を怠ると、プロファイル情報は不適切なプロファイル・データに基づくことになります。その結果、不適切なカバレッジ情報が生成され、最適化されたコードのパフォーマンスに悪影響を与えることがあります。

ツールを正しく実行するには、次の操作を行ってください:

例: Test1.dpi 00:00:60:35 は、Test1 が (0 日 0 時間) 60 分 35 秒実行されることを示します。実行時間の記述はオプションです。しかし、実行時間が記述されていない場合、ツールは実行時間を最小限にするテストの重要度付けを行いません。テストの数を最小限にする重要度付けのみを行います。

使用モデル

次の図は、テスト・プライオリタイゼーション・ツールの使用モデルを示しています。

IA-32 システム用の簡単な例 (myApp.c) について順に説明します。

1. 環境変数の設定

PROF_DIR=/myApp/prof_dir

2. コマンドの発行

prompt>icpc -prof_genx myApp.c

このコマンドは、プログラムをコンパイルして、インストルメント済みバイナリと静的プロファイル情報ファイル pgopti.spi を生成します。

3. コマンドの発行

rm PROF_DIR /*.dyn

関係しない .dyn ファイルを削除します。

4. コマンドの発行

myApp < data1

このコマンドは、インストルメント済みアプリケーションを実行して、PROF_DIR で指定されたディレクトリに拡張子 .dyn で 1 つ以上の新規動的プロファイル情報ファイルを生成します。

5. コマンドの発行

profmerge -prof_dpi Test1.dpi

このステップで、profmerge ツールは、すべての .dyn ファイルを、Test1 におけるアプリケーションの合計のプロファイル情報を表わす 1 つのファイル (Test1.dpi) にマージします。

6. コマンドの発行

rm PROF_DIR /*.dyn

関係しない .dyn ファイルを削除します。

7. コマンドの発行

myApp < data2

このコマンドは、インストルメント済みアプリケーションを実行して、PROF_DIR で指定されたディレクトリに拡張子 .dyn で 1 つ以上の新規動的プロファイル情報ファイルを生成します。

8. コマンドの発行

profmerge -prof_dpi Test2.dpi

このステップで、profmerge ツールは、すべての .dyn ファイルを、Test2 におけるアプリケーションの合計のプロファイル情報を表わす 1 つのファイル (Test2.dpi) にマージします。

9. コマンドの発行

rm PROF_DIR /*.dyn

関係しない .dyn ファイルを削除します。

10.  コマンドの発行

myApp < data3

このコマンドは、インストルメント済みアプリケーションを実行して、PROF_DIR で指定されたディレクトリに拡張子 .dyn で 1 つ以上の新規動的プロファイル情報ファイルを生成します。

11. コマンドの発行

profmerge -prof_dpi Test3.dpi

このステップで、profmerge ツールは、すべての .dyn ファイルを Test3 におけるアプリケーションの合計のプロファイル情報を表わす 1 つのファイル (Test3.dpi) にマージします。

12. tests_list という名前で 3 行のファイルを作成します。1 行目に Test1.dpi、2 行目に Test2.dpi、3 行目に Test3.dpi と記述します。

これらの項目が利用可能になると、次の例で記述されているように PROF_DIR ディレクトリでコマンドラインからテスト・プライオリタイゼーション・ツールを起動できます。すべての例で、同じセットのデータを参照しています。

例 1 テストの数を最小限にする

tselect -dpi_list tests_list -spi pgopti.spi

-spi オプションは .spi ファイルへのパスを指定します。

テスト・プライオリタイゼーション・ツールを実行した場合の出力例を次に示します:

Total number of tests = 3

Total block coverage ~ 52.17

Total function coverage ~ 50.00

 
Num %RatCvrg %BlkCvrg %FncCvrg Test Name @ Options
1 87.50 45.65 37.50 Test3.dpi
2 100.00 52.17 50.00 Test2.dpi

この例で、テスト・プライオリタイゼーション・ツールは次の情報を出力しています:

例 2 実行時間を最小限にする

tests_list ファイルで、各テストの実行時間が次のように記述されているとします:

Test1.dpi 00:00:60:35

Test2.dpi 00:00:10:15

Test3.dpi 00:00:30:45

次のコマンドは、実行時間を最小限にする -mintime オプション付きでテスト・プライオリタイゼーション・ツールを実行します:

tselect -dpi_list tests_list -spi pgopti.spi -mintime

出力例を次に示します:

Total number of tests = 3

Total block coverage ~ 52.17

Total function coverage ~ 50.00

Total execution time = 1:41:35

 
num elapsedTime %RatCvrg %BlkCvrg %FncCvrg Test Name @ Options
1 10:15 75.00 39.13 25.00 Test2.dpi
2 41:00 100.00 52.17 50.00 Test3.dpi

この例では、すべてのテストを続けて実行すると 1 時間 45 分 35 秒必要ですが、選択したテストを実行すると 41 分で同じ合計ブロック・カバレッジを達成できることが示されています。

優先度付けが実行時間を最小限にすることを基に行われる場合のテストの順序 (最初に Test2、次に Test3) は、優先度付けがテストの数を最小限にすることを基に行われる場合と異なることがあります。例 1 では、最初に Test3、次に Test2 になります。例 2 では、Test2 は実行時間あたりのカバレッジが最も高くなるテストです。このため、最初のテストとして選択されます。

他のオプションの使用

-cutoff オプションは、テスト・プライオリタイゼーション・ツールが指定されたレベルの基本ブロック・カバレッジに達した場合、ツールを終了します。

tselect -dpi_list tests_list -spi pgopti.spi -cutoff 85.00

ツールが上記の例で 85.00 の cutoff 値で実行された場合、45.65% のブロック・カバレッジを達成する Test3 のみが選択されます。これは 3 つのテストすべてで達する合計ブロック・カバレッジの 87.50% に相当します。

テスト・プライオリタイゼーション・ツールは、すべてのテストを実行して得られる合計カバレッジを決定するために、すべてのプロファイル情報を最初にマージします。-nototal オプションは、このステップをスキップします。この場合、全体的なカバレッジは不明なまま、確実なカバレッジ情報のみがレポートされます。