このセクションの内容
C/C++test のマルチメトリクス カバレッジ解析機能は、スタンドアロンアプリケーションやライブラリを C/C++test の外で実行した際のコード カバレッジをモニターできます。
C/C++testには、以下のコンポーネントからなるスタンドアロンのカバレッジ パッケージが付属しています。
<INSTALL_DIR>/bin/cpptestcc
- ビルド プロセスに統合し、カバレッジデータを収集できるようアプリケーションをインストゥルメントするカバレッジツールです。<INSTALL_DIR>/bin/engine/coverage/runtime
- インストゥルメントされたアプリケーションに統合する必要があるカバレッジランタイム ライブラリです。cpptestcc
によるカバレッジの収集は、以下の 3 つのフェーズで行われます。cpptestcc
ツールをビルドに統合し、アプリケーションをインストゥルメントする。cpptestcc
のクイックスタート<INSTALL_DIR>/bin
へのパスを PATH
システム変数に追加し、cpptestcc
を実行できるようにします。
--
を区切り文字としたコンパイラコマンドの接頭辞としてcpptestcc
実行モジュールを含めます。 例:元のコンパイル コマンド ライン
cc -I app/includes -D defines -c source.cpp |
変更後のコンパイル コマンド ライン
cpptestcc -compiler gcc_9-64 -line-coverage -- cc -I app/includes -D defines -c source.cpp |
cpptestcc ツールを利用するには、少なくとも以下のパラメーターがコマンドラインに設定されている必要があります。- コンパイラ識別子 - カバレッジメトリクス (例: その他のオプションについては、「cpptestcc コマンド ライン リファレンス」を参照してください。 |
元のコンパイル コマンド ライン
lxx -L app/lib app/source.o somelib.lib -o app.exe |
変更後のコンパイル コマンド ライン
lxx -L app/lib app/source.o somelib.lib [INSTALL_DIR]/bin/engine/coverage/runtime/lib/cpptest.lib -o app.exe |
カバレッジ ランタイムのライブラリが共有 (動的ロード) ライブラリとしてリンクされる場合、インストゥルメントされたアプリケーションの開始時にカバレッジ ツールのライブラリを確実にロードできるようにする必要があります。通常は、 |
C/C++test には、Window および Linux のネイティブ アプリケーション用にビルド済みのカバレッジ ランタイム ライブラリが付属しています。クロスプラットフォームおよび組み込みテストの場合は、 |
cpptestcc
は .cpptest/cpptestcc
フォルダーを作成します。ここには、重要なカバレッジ関連データ (「カバレッジ マップ」) が保存されます。デフォルトでは、フォルダーは現在のコンパイルの作業ディレクトリに作成されます。-workspace <path>
オプションを使用してデフォルトの場所を変更できます。詳細は「cpptestcc コマンド ライン リファレンス」を参照してください。 cpptest_results.clog
ファイルにカバレッジ データ (「カバレッジ ログ」) が保存されます。Load Application Coverage テスト コンフィギュレーションは、.cpptest/cpptestcc
フォルダーと cpptest_results.clog
ファイルの両方がデフォルトの場所にあると仮定します。場所をカスタマイズするには、テスト コンフィギュレーションの実行の詳細オプション ([実行] > [全般] > [実行の詳細]) で以下のように設定します。
- Coverage map files root location - デフォルト: ${project_loc}/.cpptest/cpptestcc
- Coverage log files - デフォルト: ${project_loc}/*.clog
デフォルトでは、Load Application Coverage テスト コンフィギュレーションは、すべてのサポート対象カバレッジ メトリクスの情報をロードしようとします。サポート対象カバレッジ メトリクスのリストをカスタマイズするには、 [実行] > [全般] > [実行の詳細] > [インストゥルメント モード] > [インストゥルメント機能]> [C/C++ コード カバレッジ メトリクス] に移動し、レポートしたいメトリクスを選択します。
コンパイル コマンドラインで cpptestcc
ツールに対して有効に指定したメトリクスと一貫性を保つよう推奨します。
C/C++test には、C/C++test のコード カバレッジ解析を直接 CMake のプロジェクトに統合できるようにする CMake 用拡張が付属しています。CMake 用拡張は、ビルド時に cpptestcc
カバレッジ ツールを使用するよう、自動的にコンパイラ/リンカー コマンドを変更します。結果として、インストゥルメントされたアプリケーションを実行したり、機能テストまたは単体テストを行うと、C/C++test カバレッジ ログ ファイル (.clog) が作成されます。その後、カバレッジ ログ ファイルを使用して完全なコード カバレッジ レポートを生成できます。
CMake との統合には以下が含まれます。
<CPPTEST_INSTALL_DIR>/integration/cmake/cpptest-coverage.cmake
拡張 – CMake 用 C/C++test 拡張ファイルです。CMakeFiles.txt ビルド ファイルに追加する必要があります。<CPPTEST_INSTALL_DIR>/integration/cmake/cpptest.templates/*
内のテンプレート – C/C++test (Eclipse) プロジェクトを生成するための C/C++test テンプレートのセットです。CPPTEST_COVERAGE=ON
and CPPTEST_HOME=<CPPTEST_INSTALL_DIR>
オプション – CMake でアプリケーションをビルドしたときに拡張をアクティベートするために提供されているオプションです。cpptest_coverage_report
ターゲット – .clog ファイルを入力としてカバレッジ レポートを生成するために提供されているターゲットです。また、<CPPTEST_INSTALL_DIR>/examples/Timer
ディレクトリには、CMake プロジェクトのコード カバレッジを取得するサンプル プロジェクトがあります。
その他の要件:
c:/folder/source.cpp
または c:\folder\source.cpp
)。Windows では、Unix 形式のパス (例: /c/folder/source.cpp
) はサポートされていません。<CPPTEST_INSTALL_DIR>/integration/cmake/cpptest-coverage.cmake
および <CPPTEST_INSTALL_DIR>/integration/cmake/cpptest.templates/*
を CMake プロジェクトにコピーします。cpptest-coverage.cmake
ファイルのカバレッジ設定の詳細を確認し、必要に応じてオプションを変更します。 最低でも、 CPPTEST_COMPILER_ID
オプションで指定されたコンパイラ構成が使用しているコンパイラに一致していることを確認する必要があります。利用可能なオプションについては、「Coverage Extension for CMake のカスタマイズ」を参照してください。
cpptest-coverage.cmake
拡張をインクルードします。コンパイラ/リンカー コマンドが自動的に変更されるよう、拡張はすべてのビルド ターゲットより前に位置していなければなりません。CMake プロジェクトを設定およびビルドする際、CPPTEST_COVERAGE および CPPTEST_HOME
オプションを使用して拡張をアクティベートします。
> cmake -DCPPTEST_COVERAGE=ON -DCPPTEST_HOME=<CPPTEST_INSTALL_DIR> .. |
デフォルトでは、C/C++test のカバレッジ データ ファイルは <CMAKE_SOURCE_DIR>/../cpptest-coverage/<CMAKE_PROJECT_NAME>/.cpptest
に作成されます。
<CMAKE_SOURCE_DIR>/../cpptest-coverage/<CMAKE_PROJECT_NAME>/<CMAKE_PROJECT_NAME>.clog
に作成されます。cpptest_coverage_report
ヘルパー ターゲットを実行し、カバレッジ レポートを生成します。
> make cpptest_coverage_report |
C/C++test ターゲットが作成されます。
- IDE で直接開くことができるワークスペース<CMAKE_SOURCE_DIR>/../cpptest-coverage
- ワークスペース内の C/C++test (Eclipse) プロジェクト<CMAKE_SOURCE_DIR>/../cpptest-coverage/<CMAKE_PROJECT_NAME>
- reports ディレクトリのカバレッジ レポート<CMAKE_SOURCE_DIR>/../cpptest-coverage/<CMAKE_PROJECT_NAME>/reports
cpptest_coverage_report
ターゲットを使用してカバレッジ レポートを生成することを推奨します。あるいは、 Load Application Coverage テスト コンフィギュレーションを使用して C/C++test を実行し、<CMAKE_SOURCE_DIR>/../cpptest-coverage/<CMAKE_PROJECT_NAME>
にあるカバレッジ データからレポートを生成することもできます。詳細については「カバレッジ データのインポート」を参照してください。
C/C++test 拡張を使用したカバレッジの収集をカスタマイズするには、CMake プロジェクトにコピーした cpptest-coverage.cmake
ファイルを開いて C/C++test オプションを変更します。
オプション名 | 説明 | デフォルト値 |
---|---|---|
CPPTEST_COMPILER_ID | 使用するコンパイラに一致するコンパイラ構成を指定します。 | gcc_9-64 |
CPPTEST_COVERAGE_TYPE_FLAGS | カバレッジ タイプを指定します。利用可能なオプションについては「cpptestcc コマンド ライン リファレンス」を参照してください。 | -optimized-line-coverage |
CPPTEST_COVERAGE_WORKSPACE | デフォルトで C/C++test カバレッジ データ ファイルが保存されるカバレッジ ツールのためのワークスペースへのパスを指定します。 | <CMAKE_SOURCE_DIR>/../cpptest-coverage/<CMAKE_PROJECT_NAME> |
CPPTEST_COVERAGE_LOG_FILE | C/C++test カバレッジ ログ ファイル (.clog) の名前と場所を指定します。 重要: インストゥルメントされたアプリケーションを実行する前に、カバレッジ ログ ファイルのディレクトリが存在していなければなりません。 | <CPPTEST_COVERAGE_WORKSPACE>/<CMAKE_PROJECT_NAME>.clog |
CPPTEST_CPPTESTCC_OPTS | cpptestcc カバレッジ ツールのオプションを指定します。 |
また、以下を確認するとよいでしょう。
cpptestcli
のパラメーターを指定する cpptest_coverage_report
ターゲットの定義# Build C/C++test coverage runtime library
セクション。C/C++test のランタイム ライブラリ (カバレッジ拡張によって自動的にビルドされます) の設定が含まれます。CPPTEST_LINKER_FLAGS
オプション。C/C++test カバレッジ ランタイムをリンクする方法を定義します。このセクションでは、C/C++test の CMake 用カバレッジ拡張を使用して次の場所にあるサンプル プロジェクトのカバレッジ データを取得する方法を説明します。 <CPPTEST_INSTALL_DIR>/examples/Timer
Timer プロジェクトは <CPPTEST_INSTALL_DIR>/integration/cmake
にある cpptest-coverage.cmake
拡張を使用するよう設定されています。
サンプル プロジェクトのカバレッジを取得するには、次の操作を行います。
<CPPTEST_INSTALL_DIR>/integration/cmake/cpptest-coverage.cmake
に移動し、デフォルト値の CPPTEST_COMPILER_ID
を使用するコンパイラに合わせて変更します。サンプル プロジェクトをビルドします。
> cd <CPPTEST_INSTALL_DIR>/examples/Timer > mkdir build > cd build > cmake -DCPPTEST_COVERAGE=ON -DCPPTEST_HOME=<CPPTEST_INSTALL_DIR> .. > make |
アプリケーションを実行します。
> ./timer |
カバレッジ レポートを生成します。
> make cpptest_coverage_report |
レポートは <CPPTEST_INSTALL_DIR>/examples/cpptest-coverage/Timer/reports
に作成されます。
<CPPTEST_INSTALL_DIR>/examples/cpptest-coverage
ワークスペースを開いて IDE でカバレッジの詳細を確認します。C/C++test には、カバレッジ解析を統合するよう MSBuild プロジェクトをすばやく再設定するスクリプトが付属しています。このスクリプトは、Visual Studio および CMake で生成された MSBuild プロジェクトの両方をサポートします。スクリプトはターゲットの .vcxproj ファイルのバックアップを作成し、要求された Parasoft 機能をすべてのビルド ターゲットで使用できるようにプロジェクトを変更します。
C/C++test には、インクルードされたツールを実行するための Python スクリプトが付属しています。スクリプトは次の場所にあります。
<CPPTEST_INSTALL_DIR>/bin/engine/bin/cpptestpy.exe |
MSBuild 統合スクリプトは次の場所にあります。
<CPPTEST_INSTALL_DIR>/integration/msbuild/msbuild_cpptest.py |
MSBuild プロジェクトのカバレッジを取得するには、次の操作を行います。
= の後にダブル クオーテーションを使用しないようにしてください。使用すると、文字列が誤って解釈されます。
CPPTEST_INSTALL_DIR
変数をセットアップします。
set CPPTEST_HOME=<CPPTEST_INSTALL_DIR> |
PATH
変数をセットアップします。
set PATH=%PATH%;%CPPTEST_HOME\bin\engine\coverage\runtime\bin |
(CMake のみ) CMake を使用して MSBuild ファイルを生成します。
cd <PROJECT_DIR> mkdir build cd build cmake .. |
統合スクリプトを実行します。
<cpptestpy.exe> <msbuild_cpptest.py> -c -f project.vcxproj |
MSBuild を使用してプロジェクトをビルドします。
msbuild -t:Rebuild project.sln |
カバレッジを収集するには、ビルド ディレクトリに移動してプロジェクトを実行します。
cd x64\Debug project.exe |
現在の作業ディレクトリにカバレッジ情報を含む .clog ファイルが作成されます。
デフ ォルトのファイル名は cpptest_results.clog
です。
カバレッジ レポートを生成します。
cpptestcli.exe \ -data ../workspace \ -bdf cpptestscan.bdf \ -property bdf.import.location=BDF_LOC \ -config "builtin://Load Application Coverage" |
cpptestcc
コマンド ライン リファレンス 次のコマンドを実行すると、利用可能なオプションがコンソールに表示されます:
cpptestcc -help
以下のオプションがあります。
-compiler <name|path>コード解析およびインストゥルメンテーションに使用するコンパイラ構成の名前を指定します。「コンパイラ」でサポート対象コンパイラの一覧を参照するか、 例:
設定ファイルの書式 (-psrc を参照): -list-compilersサポート対象のすべてのコンパイラ コンフィギュレーション名を出力します。 設定ファイルの書式 (-psrc を参照): -include <file|pattern> and -exclude <file|pattern>指定されたパターンに一致するすべてのファイルをインストゥルメントのスコープに含めたり、スコープから除外します。 最終的なフィルタリングは、すべての include/exclude を指定された順序で適用した結果によって決まります。 次のワイルドカードがサポートされています。
シェルが
設定ファイルの書式 (-psrc を参照): 例 1: サンプル プロジェクト レイアウト:
プロジェクトのレイアウトが上記のとおりである場合、下記のコマンドは
例 2: サンプル プロジェクト レイアウト:
プロジェクトのレイアウトが上記のとおりである場合、下記のコマンドはヘッダー ファイルだけをインストゥルメントします (ソース ファイルはインストゥルメントされません)。
-ignore <pattern>処理時に無視されるソース ファイルを指定します。指定されたパターンに一致するファイルは、コンパイルはされますが、パースもインストゥルメントもされません。
次のワイルドカードがサポートされています。
シェルが
設定ファイルの書式 (-psrc を参照): 例:
-line-coverage行カバレッジ メトリクスの収集を有効にします。 ランタイム カバレッジの結果は、コード実行と同時に結果ログに書き込まれます。これによってテスト対象コードの実行時間にオーバーヘッドが加わりますが、アプリケーションがクラッシュした場合でもカバレッジ データが収集されることを保証できます。 設定ファイルの書式 (-psrc を参照): -optimized-line-coverage最適化された行カバレッジの収集を有効にします。 ランタイム カバレッジの結果はメモリに格納され、アプリケーションの終了後またはユーザーが要求したときに結果ログに書き込まれます。これによってパフォーマンスが向上しますが、アプリケーションがクラッシュした場合は結果が失われます。 設定ファイルの書式 (-psrc を参照): -function-coverage関数カバレッジの収集を有効にします。 設定ファイルの書式 (-psrc を参照): -optimized-function-coverage最適化された関数カバレッジの収集を有効にします。設定ファイルの書式 (-psrc を参照):
-statement-coverageステートメント カバレッジの収集を有効にします。設定ファイルの書式 (-psrc を参照):
-optimized-statement-coverageステートメント カバレッジの収集を有効にします。 設定ファイルの書式 (-psrc を参照): -block-coverageブロック カバレッジの収集を有効にします。 設定ファイルの書式 (-psrc を参照): -optimized-block-coverage最適化されたブロック カバレッジの収集を有効にします。 設定ファイルの書式 (-psrc を参照): -path-coverageパス カバレッジの収集を有効にします。 設定ファイルの書式 (-psrc を参照): -decision-coverage判断文 (Decision) カバレッジの収集を有効にします。 設定ファイルの書式 (-psrc を参照): -optimized-decision-coverage最適化された判断文 (Decision) カバレッジの収集を有効にします。 設定ファイルの書式 (-psrc を参照): -simple-condition-coverage単純条件カバレッジの収集を有効にします。 設定ファイルの書式 (-psrc を参照): -optimized-simple-condition-coverage最適化された単純条件カバレッジの収集を有効にします。 設定ファイルの書式 (-psrc を参照): -mcdc-coverageMC/DC カバレッジの収集を有効にします。 設定ファイルの書式 (-psrc を参照): -call-coverageコール カバレッジの収集を有効にします。 設定ファイルの書式 (-psrc を参照): -optimized-call-coverage最適化されたコール カバレッジの収集を有効にします。 設定ファイルの書式 (-psrc を参照): -coverage-early-initアプリケーションのエントリ ポイント先頭でカバレッジ モジュールの初期化を有効にします。 設定ファイルの書式 (-psrc を参照): -coverage-auto-finalizationこのオプションがオンの場合、アプリケーション終了時に自動的にカバレッジの収集を終了します。このオプションはデフォルトでオンです。 設定ファイルの書式 (-psrc を参照): -optimized-coverage-corruption-detection最適化されたカバレッジで破損検出アルゴリズムを有効にします。 設定ファイルの書式 (-psrc を参照): -template-coverageテンプレート クラスおよび関数のカバレッジ収集を有効にします。 設定ファイルの書式 (-psrc を参照): -coverage-data-variants同じソース ファイルの異なるコンパイルに対応する複数のカバレッジ データを保存できるようにします。 デフォルトでは、cpptestcc は各ソース ファイルのカバレッジ データをビルドごとに 1 つ収集します。まれに、1 回のビルドで 1 つのソース ファイルが複数回コンパイルされるケースでは、このオプションを使用し、同じソース ファイルに対してコンパイルごとに異なる複数のカバレッジ データを保存できます。 このオプションは、同じソース ファイルを複数回コンパイルすることで、コードの競合が発生するシナリオをサポートしていません。 -disable-auto-recovery-modeカバレッジ インストゥルメントの自動リカバリー モードを無効にします。 デフォルトでは、ファイルを正常にインストゥルメントできない場合、ビルドでは元の (インストゥルメントされていない) ファイルが使用されます。このオプションを有効にすると、インストゥルメントの問題が起きた場合、ビルドはエラーで失敗します。
|
カバレッジ ランタイム ライブラリは、アプリケーション実行時にカバレッジ情報を出力するためにソース コード インストゥルメンテーションによって使用されるヘルパー関数およびサービスのコレクションです。インストゥルメントされたアプリケーションは、ライブラリなしではリンクできません。ランタイム ライブラリを最終的なテスト可能なバイナリにリンクする方法は、テスト対象プロジェクトのタイプに応じて複数あります。
インストゥルメントされたコードに基本的なサービスを提供するほか、ライブラリはコード カバレッジ ソリューションを特定の開発環境向けに調整するためにも使用されます。たとえば、テスト対象の組み込みデバイスと開発ホストの間でカバレッジ結果を送受信するために非標準的なトランスポートをサポートする場合などです。
C/C++test にはランタイム ライブラリのビルド済みのバージョンが付属しています。これらのバージョンは、C/C++test がインストールされているのと同じプラットフォームでの使用に適しています。多くの場合、ネイティブで開発されたアプリケーションは、ランタイム ライブラリのビルド済みのバージョンを使用してコード カバレッジを収集できます。
クロスプラットフォームのアプリケーションを開発するユーザーは、適切なクロス コンパイラおよび場合によってはリンカーを使用してカバレッジ ランタイム ライブラリのカスタム ビルドを用意する必要があります。C/C++test にはコード カバレッジ ランタイム ライブラリのソース コードが付属しています。
カバレッジ ランタイム ライブラリのカスタム ビルドの準備に必要なプロセスは、通常は、カバレッジ ランタイム ライブラリのソース コードをコンパイルすることだけです。状況によっては、一部のソース コードをインストールしてコード カバレッジを特定の開発プラットフォーム向けに変更する必要がある場合もあります。このプロセスについては、後のセクションで説明します。
C/C++test には以下のバイナリ ファイルが含まれています。
Windows (x86 および x86-64)
ファイル | 説明 |
---|---|
<INSTALL_DIR>/bin/engine/coverage/runtime/lib/cpptest.a | Cygwin GNU GCC で使用される 32 bit 版のインポート ライブラリです。リンク コマンド ラインに追加します。 |
<INSTALL_DIR>/bin/engine/coverage/runtime/lib/cpptest64.a | Cygwin GNU GCC コンパイラで使用される 64 bit 版のインポート ライブラリです。リンク コマンド ラインに追加します。 |
<INSTALL_DIR>/bin/engine/coverage/runtime/lib/cpptest.lib | Microsoft Visual C++ コンパイラで使用される 32 bit 版のインポート ライブラリです。リンク コマンド ラインに追加します。 |
<INSTALL_DIR>/bin/engine/coverage/runtime/lib/cpptest64.lib | Microsoft Visual C++ コンパイラで使用される 64 bit 版のインポート ライブラリです。リンク コマンド ラインに追加します。 |
<INSTALL_DIR>/bin/engine/coverage/runtime/bin/cpptest.dll | 32 bit 版の動的リンク ライブラリです。PATH 環境変数に <INSTALL_DIR> /bin/engine/coverage/runtime/bin を追加します。 |
<INSTALL_DIR>/bin/engine/coverage/runtime/bin/cpptest64.dll | 64 bit 版の動的リンク ライブラリです。PATH 環境変数に <INSTALL_DIR> /bin/engine/coverage/runtime/bin を追加します。 |
ファイル | 説明 |
---|---|
<INSTALL_DIR>/bin/engine/coverage/runtime/lib/libcpptest.so | 32-bit 版の共有ライブラリです。リンク コマンド ラインに追加します。LD_LIBRARY_PATH に <INSTALL_DIR> /bin/engine/coverage/runtime/lib を追加します。 |
<INSTALL_DIR>/bin/engine/coverage/runtime/lib/libcpptest64.so | 64-bit 版の共有ライブラリです。リンク コマンド ラインに追加します。LD_LIBRARY_PATH に <INSTALL_DIR>/bin/engine/coverage/runtime/lib を追加します。 |
あらかじめ用意されていない形式のランタイム ライブラリを使用する必要がある場合、特定の開発環境の要件に合わせたカバレッジ ランタイム ライブラリのカスタム ビルドを用意します。詳細については、「ランタイム ライブラリのカスタマイズ」を参照してください。
カバレッジ ランタイム ライブラリをテスト対象アプリケーションと統合するリンク プロセスでは、通常はリンカー コマンド ラインの変更が必要であり、場合によっては実行環境の変更も必要です。このセクションでは、C/C++test に付属しているビルド済みのバージョンを使用する場合にリンク プロセスを変更する方法を説明します。
Windows Cygwin GNU GCC コンパイラ用の静的ライブラリの場合
Microsoft Visual C++ コンパイラ用の動的リンク ライブラリの場合
ビルド スクリプトを変更し、リンカー コマンド ラインの任意の場所にカバレッジ ランタイム ライブラリを指定します。できればすべてのオブジェクト ファイルの後に指定します。例:
$(LXX) $(PRODUCT_OBJ) $(OFLAG_EXE)$(PROJ_EXECUTABLE) $(LXXFLAGS) $(SYSLIB) $(EXECUTABLE_LIB_LXX_OPTS) <INSTALL_DIR>/bin/engine/coverage/runtime/lib/cpptest.lib |
PATH
環境変数に lib
ディレクトリへのパスが追加され、テスト対象プログラム起動時にライブラリを発見できるようになっていることを確認します。cpptest.dll
(またはcpptest64.dll
) ファイルを実行モジュールと同じディレクトリ、またはテスト対象アプリケーションの起動時に動的リンク ライブラリを検索するその他の場所にコピーすることを検討するとよいでしょう。
GNU GCC コンパイラ用共有ライブラリの場合
ビルド スクリプトを変更し、リンカー コマンド ラインの任意の場所にカバレッジ ランタイム ライブラリを指定します。できればすべてのオブジェクト ファイルの後に指定します。例:
$(LXX) $(PRODUCT_OBJ) $(OFLAG_EXE)$(PROJ_EXECUTABLE) $(LXXFLAGS) $(SYSLIB) $(EXECUTABLE_LIB_LXX_OPTS) -L <INSTALL_DIR>/bin/engine/coverage/runtime/lib -lcpptest |
-L
および -lcpptest
オプションが追加されていることに注意してください。LD_LIBRARY_PATH
環境変数に lib
ディレクトリへのパスが追加されていることを確認します。以下の条件に当てはまる場合、ランタイム ライブラリをカスタマイズする必要がある可能性があります。
C/C++test に付属しているランタイム ライブラリのソース コードは、[INSTALL_DIR]/bin/engine/coverage/runtime
ディレクトリにあります。次の表は構造を表しています。
コンポーネント | 説明 |
---|---|
include | ライブラリのインクルード ファイルがあるディレクトリです。 |
src | ライブラリのソース コードがあるディレクトリです。 |
Makefile | ランタイム ライブラリのビルド用に提供されている基本的な Makefile です。 |
target | 一般的に利用されている開発環境用にランタイム ライブラリを準備するためのコンパイラ固有のオプションが設定された Makefile インクルード ファイルのセットがあるディレクトリです。 |
channel | サポート対象の通信チャネル用構成を含む Makefile インクルード ファイルのセットがあるディレクトリです。 |
ランタイム ライブラリはさまざまな通信チャネル経由でのデータ収集をサポートしています。使用される通信チャネルは開発環境に依存します。多くの場合、結果を 1 つまたは複数のファイルに格納するのが適切ですが、TCP/IP ソケットまたは RS232 による転送が必要な場合もあります。cpptest.c
ライブラリ ソース ファイルをコンパイルするときに専用のマクロに値を設定することで、特定の通信チャネルを有効にできます。値を設定するには、コンパイル コマンド ラインに -D<MACRO>
を追加します。次の表は、通信チャネル制御マクロの一覧です。
チャネル | 説明 |
---|---|
CPPTEST_NULL_COMMUNICATION | 空の実装です。このチャネルを有効にすると、結果は送信されません。初回のテスト ビルドおよびデバッグに適しています。 |
CPPTEST_FILE_COMMUNICATION | ファイルベースの実装です。ANSI C のファイル I/O インターフェイスが使用されます。このチャネルを有効にすると、結果はローカル ドライブのファイルに書き込まれます。 次の詳細設定マクロがあります。
|
CPPTEST_SPLIT_FILE_COMMUNICATION | ファイルベースの実装です。ANSI C のファイル I/O インターフェイスが使用されます。このチャネルを有効にすると、結果はローカル ドライブのファイルに書き込まれます。 以下のマクロを使ってこのチャネルを設定できます。
一連のすべてのファイルが同じディレクトリに置かれるようにします。
|
CPPTEST_UNIX_SOCKET_COMMUNICATION | TCP/IP ソケット ベースの実装です。POSIX API が使用されます。このチャネルを有効にすると、結果は指定された TCP/IP ポートに送信されます。次の詳細設定マクロがあります。
|
CPPTEST_WIN_SOCKET_COMMUNICATION | 上記と同じですが、MS Windows API が使用されます。 |
CPPTEST_UNIX_SOCKET_UDP_COMMUNICATION | CPPTEST_UNIX_SOCKET_COMMUNICATION と同じですが、UDP ベースの実装です。 |
CPPTEST_RS232_UNIX_COMMUNICATION | RS232 ベースの実装です。POSIX API が使用されます。このチャネルを有効にすると、結果は指定された RS232 システム デバイスを経由して送信されます。次の詳細設定マクロがあります。
|
CPPTEST_RS232_WIN_COMMUNICATION | CPPTEST_RS232_UNIX_COMMUNICATIONと同じですが、MS Windows API が使用されます。 |
CPPTEST_RS232_STM32F103ZE_COMMUNICATION | STM32F103x USART ベースの実装です。STM Cortex ライブラリ インターフェイスが使用されます (ST/STM32F10x/stm32f10x.h ヘッダーが必要です)。 |
CPPTEST_HEW_SIMIO_COMMUNICATION | Renesas HEW シミュレーター固有の実装です。 |
CPPTEST_LAUTERBACH_FDX_COMMUNICATION | Lauterbach TRACE32 ベースの実装です (FDX が使用されます)。 |
CPPTEST_ITM_COMMUNICATION | ARM CoreSight ITM ユニット ベースの通信です。CMSIS ヘッダー ファイルが必要です。 |
CPPTEST_CUSTOM_COMMUNICATION | カスタム実装のための空のテンプレートを有効にします。 |
提供されている Makefile でカバレッジ ランタイム ライブラリをビルドする場合、[INSTALL_DIR]/bin/engine/coverage/runtime/channel
ディレクトリにある make 設定ファイルを使用できます。
お使いの開発環境に合う通信チャネルの実装がない場合、カスタム実装を使用できます。次の手順は、ランタイム ライブラリをカスタマイズして通信チャネルのカスタム実装を使用する方法を説明しています。
セクション 1.13 "Custom Communication Implementation" の場所を探します。
カスタム通信の実装セクションには、4 つの異なるメソッドのための空のテンプレートがあります。
関数 | 説明 |
---|---|
void cpptestInitializeStream(void) | この関数は通信チャネルの初期化を行います。たとえば、ソケットの作成および接続や、UART デバイスの初期化などを行います。 |
void cpptestFinalizeStream(void) | この関数は、通信チャネルの後処理を行います。たとえば、TCP/IP ソケットのクローズなどを行います。 |
| この関数は、データ バッファーからのサイズ バイトを送信します。 |
void cpptestFlushData(void) | この関数は、データをフラッシュします。フラッシュの意味は、トランスポートタイプによって異なります。一部の実装では、あまり意味がない可能性もあります。その場合、関数は空のままにしておきます。 |
cpptest.c
をコンパイルします。"-DCPPTEST_CUSTOM_COMMUNICATION"
ランタイム ライブラリはマルチスレッド アプリケーションをサポートします。POSIX、Windows、および VxWorks API がサポートされます。cpptest.c
をコンパイルする際にコマンド ラインに -D<MACRO>
を追加することで特定のマルチスレッド API のサポートを有効化できます。次の表は、マルチスレッド API サポート制御マクロの一覧です。
マクロ | 説明 |
---|---|
CPPTEST_NO_THREADS | 空の実装です。カバレッジ ランタイムはマルチスレッド アプリケーションと共に使用できません。 |
CPPTEST_WINDOWS_THREADS | Windows のマルチスレッド API 実装です。 |
CPPTEST_UNIX_THREADS | POSIX のマルチスレッド API 実装です。 |
CPPTEST_VXWORKS_THREADS | VxWorks のマルチスレッド API 実装です。 |
サポート対象外のマルチスレッド API を使用するマルチスレッド アプリケーションと共に C/C++test のカバレッジ エンジンを使用する場合、お使いのマルチスレッド API と共に動作するようランタイム ライブラリをカスタマイズできます。それには、次の手順を行う必要があります。
セクション 2.5 "Custom Communication Implementation" の場所を探します。
カスタム通信の実装セクションには、4 つの異なるメソッドのための空のテンプレートがあります。
関数 | 説明 |
---|---|
static int cpptestLock(void) | この関数は、カバレッジ ツール ランタイム ライブラリ内の処理が同期されることを保証します。あるスレッドがランタイム ライブラリ サービスへのアクセスをロックした場合、その間はアトミックな処理が行われ、他のスレッドがランタイム ライブラリ サービスを使用できないことを意味します。ロックが解放されると、他のスレッドがランタイム ライブラリ サービスを使用できるようになります。 |
static int cpptestUnlock(void) | ランタイム ライブラリ サービスを解放します。 |
お使いの環境の要件に合わせてこれらのメソッドを実装します。
コンパイル コマンド ラインに次のマクロ定義を付加して cpptest.c
をコンパイルします。"-DCPPTEST_CUSTOM_THREADS"
生成されたオブジェクト ファイルが十分ではない場合、ニーズに合わせてさらにファイルを編集できます (たとえば共有ライブラリを作成するなど)。
C/C++test にはランライム ライブラリのビルド プロセスを簡略化するシンプルな Makefile (「ライブラリのソース コードの構造」を参照) が付属しています。しかし、ソース コードがすでにビルド プロセス用に最適化されているため、多くの場合、付属の make ファイルは必要ありません。唯一の必須の手順は、メイン cpptest.c
ソース ファイルをコンパイルすることです。生成されたオブジェクト ファイルをさらに処理する必要があるかどうかは、個々の開発環境や、ランタイム ライブラリを共有ライブラリとして提供するかなどの要件によります。
次のコマンド ラインを呼び出すと、単一のオブジェクト cpptest.<OBJ_EXT>
を含むサブディレクトリ build
が作成されます。それを使用してインストゥルメントされたアプリケーションとリンクできます。
make TARGET_CFG=<target config file name> CHANNEL_FILE=<channel config file name> |
コマンドは次のようになります。
make TARGET_CFG=gcc-static.mk CHANNEL_FILE=channel/unix-socket.mk |
チャネル タイプを指定することもできます。
make TARGET_CFG=gcc-static.mk CHANNEL_TYPE=unix-socket |
カバレッジ ランタイム ライブラリのユーザー ビルドをセットアップするには、次の操作を行います。
コンパイル フラグを変更し、コンパイラ インクルード フラグ (通常は -I
) に次の値を含めます。-I <INSTALL_DIR>/bin/engine/coverage/runtime/include
-D
) 。例:-DCPPTEST_FILE_COMMUNICATION -DCPPTEST_NO_THREADS
エラーや警告の情報など、カバレッジ ワークスペースの診断情報を表示する方法カバレッジ ワークスペースにはインストゥルメントされたコード、対応する静的カバレッジ データとともに、コードがインストゥルメントされたときに生成されたログや設定ファイルが保存されています。 デフォルトでは、現在のディレクトリにあるカバレッジ ワークスペースにある診断データが検索されます。-workspace オプションを使用して別のワークスペースの場所を指定することもできます。 例:
カバレッジ ワークスペースの診断情報を Parasoft 製品サポートに送信する方法
デフォルトでは、現在のディレクトリにあるカバレッジ ワークスペースにある診断データが検索されます。-workspace オプションを使用して別のワークスペースの場所を指定することもできます。 例:
アプリケーション カバレッジのレポートを生成したとき、見つからないソース ファイルがあった場合カバレッジ レポートを生成するとき、C/C++test はコード カバレッジ収集のためにインストゥルメントされたすべてのファイルが元の場所にあることを必要とします。C/C++test が元の場所でファイルを見つけられなかった場合、カバレッジ レポートは不完全になります。そのような場合、C/C++test は警告メッセージとともに見つからないファイルのリストを表示します。 別の場所に移動されたファイルのカバレッジ データを含むカバレッジ レポートを生成するには、
元のパスの中で '*' をワイルドカードとして使用できます。例:
リスト ファイル (*.lst) でパス マッピングのリストを指定し、ファイルの場所を値として設定することもできます。例:
*.lst ファイルの各項目は個別のエントリとして扱われます。 例次の例では、カバレッジ収集のために foo.cpp ファイルがインストゥルメントされた後、別の場所に移動されました。
foo.cpp ファイルのカバレッジ データを含むカバレッジ レポートを生成するには、次の操作を行います。
コード カバレッジ収集のためにコードをインストゥルメントできなかった場合にビルドを失敗させる方法デフォルトでは、ファイルを正常にインストゥルメントできない場合、ビルドでは元の (インストゥルメントされていない) ファイルが使用され、警告が表示されます。カバレッジ収集のためにインストゥルメントできないソース ファイルがあった場合にビルドを失敗させるには、 例cpptestcc -disable-auto-recovery-mode [...] 1 回のビルドで複数回コンパイルされるファイルのカバレッジを収集する方法デフォルトでは、ビルドに含まれるソース ファイルごとに 1 つのコンパイルのカバレッジ データが保存されます。結果として、まれに 1 回のビルドでソース ファイルが複数回コンパイルされる場合、最後のコンパイルのカバレッジ データだけが保存されます。結果として、レポートを生成すると、次の警告とともに不完全なカバレッジ レポートが生成される場合があります。「コードの構造に関する一部の情報が現在のワークスペースに存在しないため、カバレッジ レポートは不完全です。」1 つのソース ファイルに対して複数のカバレッジ データ (コンパイルごとに 1 つのバリアント) を保存するには、
例cpptestcc -coverage-data-variants [...] |