C++test には、アセンブリ言語のコード カバレッジ レポートを生成する機能があります (このカバレッジはオブジェクト コード カバレッジとも呼ばれます)。アセンブリ コード カバレッジは、単体テストまたはアプリケーション検証と組み合わせることが可能です。このカバレッジは以下のコンパイラをサポートします。

  • Green Hills Software Compiler for PPC v. 3.5.x
  • Green Hills Software Compiler for PPC v. 4.0.x
  • Green Hills Software Compiler for PPC v. 4.2.x
  • Green Hills Software Compiler for PPC v. 2017.1.x

C++test は、Green Hills Software の PPC シミュレーターからアセンブリ レベルのカバレッジ データを収集するようにあらかじめ設定されています。オブジェクト カバレッジ データを収集するように設定したい場合は、テクニカル サポートにお問い合わせください。

アセンブリ言語のコード カバレッジ レポートは、テストの実行後に生成され、HTML、テキスト、または CSV ファイルで確認することができます。アセンブリ カバレッジ データは、C++test の [カバレッジ] ビュー、ソース コード エディター、および C++test Eclipse または Visual Studio プラグインの他のコンポーネントには表示されません。詳細については「オブジェクト カバレッジ レポートの生成」を参照してください。

プロジェクトの設定

単体テストまたはアプリケーション メモリ検出のためにプロジェクトがすでに準備できている場合、アセンブリ カバレッジの監視のための設定を行う必要はありません。ただし、アセンブリ言語のカバレッジ メトリクスがサポートされたコンパイラ用にプロジェクトをセットアップする必要があります。

(C++test が追加した) テストハーネスのイニシャライザーをアセンブリ カバレッジのレポートから除外できます。それには、[プロジェクト プロパティ] の [Parasoft] > [C++test] > [ビルド設定] > [コンパイラ オプション] をクリックし、以下のオプションを追加します。

-DCPPTEST_USE_GLOBAL_OBJECTS_TO_INIT_RUNTIME=0

これにより、テストハーネスのイニシャライザーがテスト対象のコンパイル単位に追加されなくなります。C++test は個別の「テスト ランナー」を生成してテストハーネスの初期化を行います。

アセンブリ コードの収集

C++test には、アセンブリ カバレッジの監視を行う単体テストのためのビルトイン テスト コンフィギュレーションが用意されています。このテスト コンフィギュレーションの設定を確認するには、以下の操作を行います。

  1. [Parasoft] > [テスト コンフィギュレーション] をクリックします。  
  2. [ビルトイン] > [Embedded Systems]> [Green Hills Software] > [Run GHS Tests with Assembly Coverage Monitoring] を選択します。  

カバレッジはテスト対象プログラムのメモリ バッファーに蓄えられ、テストが完了してテスト モジュールが終了した後、収集されたカバレッジ情報が定義済みのチャネル (通常はファイルに直接) を通じて保存されます。たとえば、テスト実行モジュールがクラッシュしたり、メモリが破壊された場合は、カバレッジ情報を格納したバッファーが破壊され、保存されない場合があります。すべての単体テスト ケースをレビューしてアプリケーションのクラッシュの原因となる可能性があるテスト ケースをテスト セッションから除外することを推奨します。

アセンブリ コード カバレッジをレポートするテスト コンフィギュレーションでは以下の [テスト実行フロー] プロパティを使用できます (「オブジェクト カバレッジ レポートの生成」も参照)。

プロパティ名
Assembly coverage report format
選択できるフォーマット: html、xml、txt、flattxt、csv
デフォルト:html
Assembly coverage report encoding
html レポートに使用するエンコーディング
デフォルト: UTF-8

ターゲットでのテスト実行からオブジェクト カバレッジ データを収集したい場合は、テクニカル サポートにお問い合わせください。

ユーザー定義テスト コンフィギュレーションでのアセンブリ コード カバレッジの有効化

「Run GHS Tests with Assembly Coverage Monitoring 」ビルトイン テスト コンフィギュレーションを複製し (テスト コンフィギュレーションを右クリックして [複製] をクリックします)、プロジェクト固有のカスタマイズを行うためのベースとして使用できます。

  1. [Parasoft] メニューの [テスト コンフィギュレーション] をクリックし、テスト コンフィギュレーション設定ダイアログを開きます。
  2. [実行] > [全般] タブを選択し、[編集] をクリックしてインストゥルメント モード オプションを開きます。
  3. インストゥルメンテーション機能セクションでアセンブリ コード カバレッジ ソースを有効にし、コンフィギュレーションの変更を保存します。
  4. テスト コンフィギュレーションを実行します。テスト実行中にアセンブリ コード カバレッジが収集されます。

アセンブリ レベルでのコード インストゥルメンテーションを有効化するほかに、テスト実行フローを変更してアセンブリ カバレッジ レポート生成のステップを含める必要があります。このステップは、Run GHS Tests with Assembly Coverage Monitoring  ビルトイン テスト コンフィギュレーションではすでに設定済みです。

  1. [Parasoft] メニューの [テスト コンフィギュレーション] をクリックし、テスト コンフィギュレーション設定ダイアログを開きます。
  2. [実行] > [全般] タブを選択し、[編集] をクリックしてテスト実行フロー エディターを開きます。
  3. エディターで次のテスト実行フローの箇所を探し、閉じ括弧の後ろをクリックして挿入ポイントを作成します。

    <ReadTestLogStep
    	     testLogFile="${cpptest:testware_loc}/
    cpptest_results.tlog"
    	     timeoutInfoProperty="test_exec_timeouted"
    	/>
    	<ReadDynamicCoverageStep
    		covLogFile="${cpptest:testware_loc}/
    cpptest_results.clog"
    	/>
  4. 次のステップを挿入します。

    <GenASMToolReportFlowStep 
    	asmToolCmdPattern="$(asmReportTool) --generate-report=on --workspace=$(asmWorkspace) 
    --psrc=$(additionalOptions) --report-format=$(asmReportFor-mat) --results-directory=$(asmReportdir)
    --project-name=$(asmProjectName)  --input-file=$(asmInputFile) --report-encoding=$(asmReportEncoding) --psrc=$(advancedOp-
    tionsFile)" 
    	asmReportFormat="${cpptestproperty:repor_format}"
    	asmReportEncoding="${cpptestprop-erty:repor_encoding}"
    	asmReportdir="${cpptestproperty:repor_loc}"   
    	asmInputFile="${cpptest:testware_loc}/${cpptestprop-erty:oc_result_file_name}" 
    />

asmToolCmdPattern 属性は、レポートを生成するツールのコマンド ラインを定義します。この属性は、レポート生成設定を簡単にするために変数を使用します。テスト実行フロー プロパティによって変数を編集可能にするには、テスト実行フローの先頭に次を追加します。

<SetProperty key="repor_format" value="html||xml||flat-
txt||txt||csv" uiEditable="true"
displayName="Assembly coverage report format" />
	<SetProperty key="repor_encoding" value="UTF-8" uiEdit-
able="true" displayName="Assembly
coverage report encoding" />
	<SetProperty key="report_loc"
value="${workspace_loc}/.cpptest/${project_name}/cpptestasm/
report-data" uiEditable="true"
displayName="Assembly coverage report location" />

アセンブリ カバレッジ レポートの生成

アセンブリ言語のカバレッジ レポートはテスト実行後に生成され、HTML、テキスト、または CSV フォーマットで参照できます。C++test のカバレッジ ビュー、ソース コード エディター、あるいはその他の C++test Eclipse または Visual Studio プラグインのコンポーネントには、アセンブリ カバレッジのデータは表示されません。ユーザー定義コンフィギュレーションでアセンブリ カバレッジを生成した場合、必ず上の説明に従ってテスト実行フローを設定してください。

  1. テスト コンフィギュレーションの実行後、[レポートの生成] ボタンをクリックします。
  2. [設定] ボタンをクリックし、[フォーマット] ドロップダウン メニューから [C++test アセンブリ カバレッジ] を選択します。
  3. 設定を適用し、[OK] をクリックして [設定] ダイアログを閉じます。  
  4. [OK] をクリックして [レポートとパブリッシュ] ダイアログを閉じます。  

この設定によって、メイン レポートの最後にある [追加のレポート] セクションにアセンブリ カバレッジ レポートへのリンクが表示されるようになります。


HTML レポートのリンクは相対パスであり、レポートを別の場所に移動したときもリンクは壊れません。

アセンブリ カバレッジ レポート設定で利用可能なテスト実行フロー プロパティについては、「アセンブリ コードの収集」の下のテーブルを参照してください。

アセンブリ カバレッジについての注意事項

  • アセンブリ カバレッジ メトリクスは、特定の GHS PPC コンパイラでだけサポートされます (「アセンブリ コード カバレッジ」を参照)。サポートされていないコンパイラ用のプロジェクトに対してアセンブリ カバレッジの監視を実行した場合、C++test のコンソールにメッセージが出力されます。
  • アセンブリ カバレッジは、C/C++ のインストゥルメント コードから生成されたアセンブラーのソース コード インストゥルメントを使って収集されます。したがって、C/C++ のインストゥルメント コードをオリジナル コードと非常に異なるものにするようなインストゥルメント機能を有効にしてはいけません。推奨するインストゥルメント機能の設定を以下の画像に示します。




  • No labels