このセクションの内容

はじめに

C/C++test のマルチメトリクス カバレッジ解析機能は、スタンドアロンアプリケーションやライブラリを C/C++test の外で実行した際のコード カバレッジをモニターできます。

C/C++testには、以下のコンポーネントからなるスタンドアロンのカバレッジ パッケージが付属しています。

  • <INSTALL_DIR>/cpptestcc - ビルド プロセスに統合し、カバレッジデータを収集できるようアプリケーションをインストゥルメントするカバレッジツールです。
  • <INSTALL_DIR>/engine/coverage/runtime - インストゥルメントされたアプリケーションに統合する必要があるカバレッジランタイム ライブラリです。
cpptestcc によるカバレッジの収集は、以下の 3 つのフェーズで行われます。

  1. cpptestcc ツールをビルドに統合し、アプリケーションをインストゥルメントする。
  2. インストゥルメントされたコードを実行し、raw カバレッジ データを収集する。
  3. ビルトイン テスト コンフィギュレーションを使用して raw カバレッジ データを C/C++test にインポートし、C/C++test でカバレッジを確認する。

cpptestccのクイックスタート

  1. コンパイル コマンドを変更し、-- を区切り文字としたコンパイラコマンドの接頭辞として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 ツールを利用するには、少なくとも以下のパラメーターがコマンドラインに設定されている必要があります。

    - コンパイラ識別子-compiler <COMPILER_ID>

    - カバレッジメトリクス (例: -decision-coverage)

    その他のオプションについては、「cpptestcc コマンド ライン リファレンス」を参照してください。

  2. リンカー コマンドを変更し、C/C++test に付属のビルド済みカバレッジランタイム ライブラリへのパスを指定して、アプリケーションにこのライブラリを追加します。例:

    元のコンパイル コマンド ライン

    lxx -L app/lib app/source.o somelib.lib -o app.exe

    変更後のコンパイル コマンド ライン

    lxx -L app/lib app/source.o somelib.lib [INSTALL_DIR]/engine/coverage/runtime/lib/cpptest.lib -o app.exe

    重要

    カバレッジ ランタイムのライブラリが共有 (動的ロード) ライブラリとしてリンクされる場合、インストゥルメントされたアプリケーションの開始時にカバレッジ ツールのライブラリを確実にロードできるようにする必要があります。通常は、 <INSTALL_DIR>/engine/coverage/runtime/bin を PATH 環境変数に追加するか (Windows の場合)、または <INSTALL_DIR>/engine/coverage/runtime/lib  を LD_LIBRARY_PATH 環境変数に追加する必要があります (Linux の場合)。

    C/C++test には、Window および Linux のネイティブ アプリケーション用にビルド済みのカバレッジ ランタイム ライブラリが付属しています。クロスプラットフォームおよび組み込みテストの場合は、  <INSTALL_DIR>/engine/coverage/runtime/bin のソースからランタイム ライブラリをビルドする必要があります。 詳細は「カバレッジ ランタイム ライブラリ」を参照してください。

  3. アプリケーションをビルドします。コードをインストゥルメントする際、cpptestcc.cpptest/cpptestcc フォルダーを作成します。ここには、重要なカバレッジ関連データ (「カバレッジ マップ」) が保存されます。デフォルトでは、フォルダーは現在のコンパイルの作業ディレクトリに作成されます。-workspace <path> オプションを使用してデフォルトの場所を変更できます。詳細は「cpptestcc コマンド ライン リファレンスを参照してください。 
  4. アプリケーションを実行します。cpptest_results.clogファイルにカバレッジ データ (「カバレッジ ログ」) が保存されます。
  5. C/C++test がインストールされた IDE で、アプリケーションのすべてのソース ファイルを含む新規プロジェクトを作成します。
    (info)ファイルおよびすべてのパスに変更がないことを確認します。
  6. プロジェクトを選択し、IDE のメニューで [Parasoft] > [テスト コンフィギュレーション] > [Utilities] > [Load Application Coverage] をクリックしてカバレッジ データをインポートします (詳細は「カバレッジ データのインポート」を参照)。
  7. カバレッジ情報を参照します (「カバレッジ情報の参照」を参照)。

カバレッジ データのインポート

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 ツールに対して有効に指定したメトリクスと一貫性を保つよう推奨します。

MSBuild プロジェクトのアプリケーション カバレッジの収集

C/C++test には、カバレッジ解析を統合するよう MSBuild プロジェクトをすばやく再設定するスクリプトが付属しています。このスクリプトは、Visual Studio および CMake で生成された MSBuild プロジェクトの両方をサポートします。スクリプトはターゲットの .vcxproj ファイルのバックアップを作成し、要求された Parasoft 機能をすべてのビルド ターゲットで使用できるようにプロジェクトを変更します。

C/C++test には、インクルードされたツールを実行するための Python スクリプトが付属しています。スクリプトは次の場所にあります。

<CPPTEST_INSTALL_DIR>/engine/bin/cpptestpy.exe
MSBuild 統合スクリプトは次の場所にあります。

<CPPTEST_INSTALL_DIR>/integration/msbuild/msbuild_cpptest.py

MSBuild プロジェクトのカバレッジを取得するには、次の操作を行います。

  1. 環境変数をセットアップします。

= の後にダブル クオーテーションを使用しないようにしてください。使用すると、文字列が誤って解釈されます。 

    1. CPPTEST_INSTALL_DIR 変数をセットアップします。

      set CPPTEST_HOME=<CPPTEST_INSTALL_DIR>
    2. PATH 変数をセットアップします。

      set PATH=%PATH%;%CPPTEST_HOME\engine\coverage\runtime\bin

  1. (CMake のみ) CMake を使用して MSBuild ファイルを生成します。 

    cd <PROJECT_DIR>
    mkdir build
    cd build
    cmake ..
  2. 統合スクリプトを実行します。 

    <cpptestpy.exe> <msbuild_cpptest.py> -c -f project.vcxproj
  3. MSBuild を使用してプロジェクトをビルドします。

    msbuild -t:Rebuild project.sln
  4.  カバレッジを収集するには、ビルド ディレクトリに移動してプロジェクトを実行します。

    cd x64\Debug
    project.exe

    現在の作業ディレクトリにカバレッジ情報を含む .clog ファイルが作成されます。
    デフ ォルトのファイル名は cpptest_results.clog です。

  5. カバレッジ レポートを生成します。

    cpptestcli.exe \
    -solution Sensor.sln \
    -config "builtin://Load Application Coverage"

cpptestcc コマンド ライン リファレンス

(info) 次のコマンドを実行すると、利用可能なオプションがコンソールに表示されます: cpptestcc -help

以下のオプションがあります。

-compiler <name|path>

コード解析およびインストゥルメンテーションに使用するコンパイラ構成の名前を指定します。「コンパイラ」でサポート対象コンパイラの一覧を参照するか、-list-compilers コマンド ライン オプションを使用してサポート対象コンパイラの一覧をコンソールに表示します。

例:

cpptestcc -compiler gcc_9-64 

cpptestcc -compiler vc_11_0

設定ファイルの書式 (-psrc を参照): cpptestcc.compiler <name>

-list-compilers

サポート対象のすべてのコンパイラ コンフィギュレーション名を出力します。

設定ファイルの書式 (-psrc を参照): cpptestcc.listCompilers

-include <file|pattern> and -exclude <file|pattern>

指定されたパターンに一致するすべてのファイルをインストゥルメントのスコープに含めたり、スコープから除外します。

最終的なフィルタリングは、すべての include/exclude を指定された順序で適用した結果によって決まります。

次のワイルドカードがサポートされています。

  • ? - 任意の 1 文字
  • * - 任意の文字の連続

シェルが * ワイルドカードをファイルまたはディレクトリのリストに展開するのを防ぐには、regex: 接頭辞を使用して値を指定します。

(info) このオプションは複数回指定できます。

設定ファイルの書式 (-psrc を参照): cpptestcc.include <path|pattern>

例 1:

サンプル プロジェクト レイアウト:

<project root> + external_libs + src + include

プロジェクトのレイアウトが上記のとおりである場合、下記のコマンドは external_libs ディレクトリのすべてのファイルをインストゥルメント スコープから除外します。

cpptestcc -include regex:*/<project root>/* -exclude regex:*/<project root>/external_libs <other command line options>

例 2:

サンプル プロジェクト レイアウト:

<project root> <sourcefiles>.cpp <headerfiles>.hpp

プロジェクトのレイアウトが上記のとおりである場合、下記のコマンドはヘッダー ファイルだけをインストゥルメントします (ソース ファイルはインストゥルメントされません)。

cpptestcc -include regex:*-exclude regex:*.cpp <remaining part of cmd>

-ignore <pattern>

処理時に無視されるソース ファイルを指定します。指定されたパターンに一致するファイルは、コンパイルはされますが、パースもインストゥルメントもされません。

-ignore と -exclude の比較

-ignore オプションは、指定されたファイルを完全に処理から外すため、カバレッジ エンジンはファイルをパースしません。

-include/-exclude フィルターはソース コードがパースされた後に適用されるため、ヘッダーファイルを個別にインストルメントするかしないか選択できます。

-ignore オプションを使用すると、一部のコード セクション (たとえば外部ライブラリなど) のカバレッジ解析を無視することでカバレッジ解析ビルド時間のオーバーヘッドを短縮したり、処理中に問題 (パース エラーなど) の原因となる特定のファイルを無視できます。

次のワイルドカードがサポートされています。

  • ? - 任意の 1 文字
  • * - 任意の文字の連続

シェルが * ワイルドカードをファイルまたはディレクトリのリストに展開するのを防ぐには、regex: 接頭辞を使用して値を指定します。

(info) このオプションは複数回指定できます。

設定ファイルの書式 (-psrc を参照): cpptestcc.ignore <path|pattern>

例:

cpptestcc -ignore "*/Lib/*" <remaining part of cmd>
cpptestcc -ignore regex:*/file.c <remaining part of cmd>
cpptestcc -ignore c:/proj/file.c <remaining part of cmd>
cpptestcc -ignore "*/MyLib/*.cpp" -ignore file.cpp <remaining part of cmd>

-line-coverage

行カバレッジ メトリクスの収集を有効にします。

ランタイム カバレッジの結果は、コード実行と同時に結果ログに書き込まれます。これによってテスト対象コードの実行時間にオーバーヘッドが加わりますが、アプリケーションがクラッシュした場合でもカバレッジ データが収集されることを保証できます。

設定ファイルの書式 (-psrc を参照): cpptestcc.lineCoverage [true|false]

-optimized-line-coverage

最適化された行カバレッジの収集を有効にします。

ランタイム カバレッジの結果はメモリに格納され、アプリケーションの終了後またはユーザーが要求したときに結果ログに書き込まれます。これによってパフォーマンスが向上しますが、アプリケーションがクラッシュした場合は結果が失われます。

設定ファイルの書式 (-psrc を参照): cpptestcc.optimizedLineCoverage [true|false]

-function-coverage

関数カバレッジの収集を有効にします。

設定ファイルの書式 (-psrc を参照): cpptestcc.functionCoverage [true|false]

-optimized-function-coverage

最適化された関数カバレッジの収集を有効にします。設定ファイルの書式 (-psrc を参照):

cpptestcc.optimizedFunctionCoverage [true|false]

-statement-coverage

ステートメント カバレッジの収集を有効にします。設定ファイルの書式 (-psrc を参照):

cpptestcc.statementCoverage [true|false]

-optimized-statement-coverage

ステートメント カバレッジの収集を有効にします。

設定ファイルの書式 (-psrc を参照): cpptestcc.optimizedStatementCoverage [true|false]

-block-coverage

ブロック カバレッジの収集を有効にします。

設定ファイルの書式 (-psrc を参照): cpptestcc.blockCoverage [true|false]

-optimized-block-coverage

最適化されたブロック カバレッジの収集を有効にします。

設定ファイルの書式 (-psrc を参照): cpptestcc.optimizedBlockCoverage [true|false]

-path-coverage

パス カバレッジの収集を有効にします。

設定ファイルの書式 (-psrc を参照): cpptestcc.pathCoverage [true|false]

-decision-coverage

判断文 (Decision) カバレッジの収集を有効にします。

設定ファイルの書式 (-psrc を参照): cpptestcc.decisionCoverage [true|false]

-optimized-decision-coverage

最適化された判断文 (Decision) カバレッジの収集を有効にします。

設定ファイルの書式 (-psrc を参照): cpptestcc.optimizedDecisionCoverage [true|false]

-simple-condition-coverage

単純条件カバレッジの収集を有効にします。

設定ファイルの書式 (-psrc を参照): cpptestcc.simpleConditionCoverage [true|false]

-optimized-simple-condition-coverage

最適化された単純条件カバレッジの収集を有効にします。

設定ファイルの書式 (-psrc を参照): cpptestcc.optimizedSimpleConditionCoverage [true|false]

-mcdc-coverage

MC/DC カバレッジの収集を有効にします。

設定ファイルの書式 (-psrc を参照): cpptestcc.mcdcCoverage [true|false]

-call-coverage

コール カバレッジの収集を有効にします。

設定ファイルの書式 (-psrc を参照): cpptestcc.callCoverage [true|false]

-optimized-call-coverage

最適化されたコール カバレッジの収集を有効にします。

設定ファイルの書式 (-psrc を参照): cpptestcc.optimizedCallCoverage [true|false]

-coverage-early-init

アプリケーションのエントリ ポイント先頭でカバレッジ モジュールの初期化を有効にします。

設定ファイルの書式 (-psrc を参照): cpptestcc.coverageEarlyInit [true|false]

-coverage-auto-finalization

このオプションがオンの場合、アプリケーション終了時に自動的にカバレッジの収集を終了します。このオプションはデフォルトでオンです。

設定ファイルの書式 (-psrc を参照): cpptestcc.coverageAutoFinalization [true|false]

-optimized-coverage-corruption-detection

最適化されたカバレッジで破損検出アルゴリズムを有効にします。

設定ファイルの書式 (-psrc を参照): cpptestcc.optimizedCoverageCorruptionDetection [true|false]

-template-coverage

テンプレート クラスおよび関数のカバレッジ収集を有効にします。

設定ファイルの書式 (-psrc を参照): cpptestcc.templateCoverage [true|false]

-constexpr-coverage

constexpr 関数のカバレッジを有効にします。

注意: この機能は、一部のコンパイラでだけ利用できます。詳細については「C++ 定数式のサポート」 を参照してください。

設定ファイルの書式 (-psrc を参照): cpptestcc.lineCoverage [true|false]

-coverage-data-variants

同じソース ファイルの異なるコンパイルに対応する複数のカバレッジ データを保存できるようにします。

デフォルトでは、cpptestcc は各ソース ファイルのカバレッジ データをビルドごとに 1 つ収集します。まれに、1 回のビルドで 1 つのソース ファイルが複数回コンパイルされるケースでは、このオプションを使用し、同じソース ファイルに対してコンパイルごとに異なる複数のカバレッジ データを保存できます。

このオプションは、同じソース ファイルを複数回コンパイルすることで、コードの競合が発生するシナリオをサポートしていません。

-disable-auto-recovery-mode

カバレッジ インストゥルメントの自動リカバリー モードを無効にします。

デフォルトでは、ファイルを正常にインストゥルメントできない場合、ビルドでは元の (インストゥルメントされていない) ファイルが使用されます。このオプションを有効にすると、インストゥルメントの問題が起きた場合、ビルドはエラーで失敗します。

-workspace <path>

コード解析およびインストゥルメント時にコードの構造に関する情報が保存されるカスタム ディレクトリを指定します。cpptestcli ツールは、最終的なカバレッジ レポートを生成するためにこの情報を使用します。

デフォルトでは、情報は現在のコンパイルの作業ディレクトリに保存されます。コンパイルで複数の作業ディレクトリを使用する場合、すべてのカバレッジ データが同じ場所に保存されるよう、カスタム ディレクトリを指定することを推奨します。

設定ファイルの書式 (-psrc を参照): cpptestcc.workspace <path>

-techsupport

 ワークスペースから収集された診断データを含むアーカイブを作成します (「-workspace」を参照)。アーカイブは現在の作業ディレクトリに保存されます。

例:

cpptestcc -techsupport

cpptestcc -techsupport -workspace path/to/workspace-dir

-psrc <file>

その他の cpptestcc オプションを設定した設定ファイルへのパスを指定します。

デフォルトでは、cpptestcc ツールは現在の作業ディレクトリまたはユーザーの HOME ディレクトリにある .psrc ファイルを読み取ります。このオプションを使用すると、設定ファイルのカスタムの場所を指定できます。

(info) オプションがコマンド ラインと設定ファイルの両方で設定されている場合、cpptestcc はコマンド ラインで指定された値を使用します。

-status

-status-verbose

エラーおよび警告情報、ファイル数など、ワークスペース (「-workspace」を参照) から収集された診断情報を表示します。

より詳細な情報を表示するには、-status-verbose を使用します。

例:

cpptestcc -status

cpptestcc -status -workspace path/to/workspace-dir

cpptestcc -status-verbose

cpptestcc -status-verbose -workspace path/to/workspace-dir

-version

バージョン情報を出力します。

-help

ヘルプ メッセージを出力して終了します。

カバレッジ ランタイム ライブラリ

カバレッジ ランタイム ライブラリは、アプリケーション実行時にカバレッジ情報を出力するためにソース コード インストゥルメンテーションによって使用されるヘルパー関数およびサービスのコレクションです。インストゥルメントされたアプリケーションは、ライブラリなしではリンクできません。ランタイム ライブラリを最終的なテスト可能なバイナリにリンクする方法は、テスト対象プロジェクトのタイプに応じて複数あります。

インストゥルメントされたコードに基本的なサービスを提供するほか、ライブラリはコード カバレッジ ソリューションを特定の開発環境向けに調整するためにも使用されます。たとえば、テスト対象の組み込みデバイスと開発ホストの間でカバレッジ結果を送受信するために非標準的なトランスポートをサポートする場合などです。

ビルド済みのバージョンとカスタマイズされたビルド

C/C++test にはランタイム ライブラリのビルド済みのバージョンが付属しています。これらのバージョンは、C/C++test がインストールされているのと同じプラットフォームでの使用に適しています。多くの場合、ネイティブで開発されたアプリケーションは、ランタイム ライブラリのビルド済みのバージョンを使用してコード カバレッジを収集できます。

クロスプラットフォームのアプリケーションを開発するユーザーは、適切なクロス コンパイラおよび場合によってはリンカーを使用してカバレッジ ランタイム ライブラリのカスタム ビルドを用意する必要があります。C/C++test にはコード カバレッジ ランタイム ライブラリのソース コードが付属しています。

カバレッジ ランタイム ライブラリのカスタム ビルドの準備に必要なプロセスは、通常は、カバレッジ ランタイム ライブラリのソース コードをコンパイルすることだけです。状況によっては、一部のソース コードをインストールしてコード カバレッジを特定の開発プラットフォーム向けに変更する必要がある場合もあります。このプロセスについては、後のセクションで説明します。

ビルド済みランタイム ライブラリの使用

C/C++test には以下のバイナリ ファイルが含まれています。

Windows (x86 および x86-64) 

ファイル説明
<INSTALL_DIR>/engine/coverage/runtime/lib/cpptest.aCygwin GNU GCC で使用される 32 bit 版のインポート ライブラリです。リンク コマンド ラインに追加します。
<INSTALL_DIR>/engine/coverage/runtime/lib/cpptest64.aCygwin GNU GCC コンパイラで使用される 64 bit 版のインポート ライブラリです。リンク コマンド ラインに追加します。
<INSTALL_DIR>/engine/coverage/runtime/lib/cpptest.libMicrosoft Visual C++ コンパイラで使用される 32 bit 版のインポート ライブラリです。リンク コマンド ラインに追加します。
<INSTALL_DIR>/engine/coverage/runtime/lib/cpptest64.libMicrosoft Visual C++ コンパイラで使用される 64 bit 版のインポート ライブラリです。リンク コマンド ラインに追加します。
<INSTALL_DIR>/engine/coverage/runtime/bin/cpptest.dll32 bit 版の動的リンク ライブラリです。PATH 環境変数に <INSTALL_DIR>/engine/coverage/runtime/bin を追加します。
<INSTALL_DIR>/engine/coverage/runtime/bin/cpptest64.dll64 bit 版の動的リンク ライブラリです。PATH 環境変数に <INSTALL_DIR>/engine/coverage/runtime/bin を追加します。
Linux (x86 および x86-64)
ファイル説明
<INSTALL_DIR>/engine/coverage/runtime/lib/libcpptest.so32-bit 版の共有ライブラリです。リンク コマンド ラインに追加します。<INSTALL_DIR>/engine/coverage/runtime/lib should be added to LD_LIBRARY_PATH
<INSTALL_DIR>/engine/coverage/runtime/lib/libcpptest64.so64-bit 版の共有ライブラリです。リンク コマンド ラインに追加します。LD_LIBRARY_PATH<INSTALL_DIR>/engine/coverage/runtime/lib を追加します。

あらかじめ用意されていない形式のランタイム ライブラリを使用する必要がある場合、特定の開発環境の要件に合わせたカバレッジ ランタイム ライブラリのカスタム ビルドを用意します。詳細については、ランタイム ライブラリのカスタマイズ」を参照してください。

リンカー コマンド ラインとの統合

カバレッジ ランタイム ライブラリをテスト対象アプリケーションと統合するリンク プロセスでは、通常はリンカー コマンド ラインの変更が必要であり、場合によっては実行環境の変更も必要です。このセクションでは、C/C++test に付属しているビルド済みのバージョンを使用する場合にリンク プロセスを変更する方法を説明します。

Windows Cygwin GNU GCC コンパイラ用の静的ライブラリの場合

  1. ビルド スクリプト内のリンカー コマンド ラインを特定します。
  2. ビルド スクリプトを変更し、リンカー コマンド ラインの任意の場所にカバレッジ ランタイム ライブラリを指定します。できればすべてのオブジェクト ファイルの後に指定します。

Microsoft Visual C++ コンパイラ用の動的リンク ライブラリの場合

  1. ビルド スクリプト内のリンカー コマンド ラインを特定します。
  2. ビルド スクリプトを変更し、リンカー コマンド ラインの任意の場所にカバレッジ ランタイム ライブラリを指定します。できればすべてのオブジェクト ファイルの後に指定します。例:

    $(LXX) $(PRODUCT_OBJ) $(OFLAG_EXE)$(PROJ_EXECUTABLE) $(LXXFLAGS) $(SYSLIB) $(EXECUTABLE_LIB_LXX_OPTS) <INSTALL_DIR>/engine/coverage/runtime/lib/cpptest.lib

  3. PATH 環境変数に lib ディレクトリへのパスが追加され、テスト対象プログラム起動時にライブラリを発見できるようになっていることを確認します。cpptest.dll(またはcpptest64.dll) ファイルを実行モジュールと同じディレクトリ、またはテスト対象アプリケーションの起動時に動的リンク ライブラリを検索するその他の場所にコピーすることを検討するとよいでしょう。

GNU GCC コンパイラ用共有ライブラリの場合

  1. ビルド スクリプト内のリンカー コマンド ラインを特定します。
  2. ビルド スクリプトを変更し、リンカー コマンド ラインの任意の場所にカバレッジ ランタイム ライブラリを指定します。できればすべてのオブジェクト ファイルの後に指定します。例:

    $(LXX) $(PRODUCT_OBJ) $(OFLAG_EXE)$(PROJ_EXECUTABLE) $(LXXFLAGS) $(SYSLIB) $(EXECUTABLE_LIB_LXX_OPTS) -L <INSTALL_DIR>/engine/coverage/runtime/lib -lcpptest
    -L および -lcpptest オプションが追加されていることに注意してください。

  3. テスト対象実行モジュールが共有ライブラリへのパスを見つけられるよう、LD_LIBRARY_PATH 環境変数に lib ディレクトリへのパスが追加されていることを確認します。

ランタイム ライブラリのカスタマイズ

以下の条件に当てはまる場合、ランタイム ライブラリをカスタマイズする必要がある可能性があります。

  • 別の形式のバイナリ ファイルが必要である。
  • 結果を転送するためにデフォルト以外の通信チャネルを有効にする
  • 結果を転送するために通信チャネルのカスタム 実装をインストールする
  • デフォルトではサポートされないマルチスレッド アプリケーションのサポートを有効にする
  • マルチスレッド アプリケーションをサポートするためのカスタム実装をインストールする
  • 複数のインストルメントされたバイナリが 1 つのログ ファイルに書き込んでいる

ライブラリのソース コードの構造

C/C++test に付属しているランタイム ライブラリのソース コードは、[INSTALL_DIR]/engine/coverage/runtime ディレクトリにあります。次の表は、使用方法の説明です。 

コンポーネント説明
include

ライブラリのインクルード ファイルがあるディレクトリです。
include/cpptest.h - ライブラリの パブリック インターフェイス
include/cpptest/* - ライブラリの プライベート インターフェイス
include ディレクトリの内容は、環境に合わせて変更するものではありません。

src

ライブラリのソース コードがあるディレクトリです。
src/cpptest.c - ランタイム ライブラリのメインで唯一のソース ファイルです。
このファイルを変更し、カスタマイズします。

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_LOG_FILE_NAME: 結果ファイルの名前です。デフォルト値は cpptest_results.clog です。

CPPTEST_LOG_FILE_APPEND: 新しい結果ファイルを作成するか、既存のファイルに追加するかを指定します。デフォルト値は 1 -> append です。他の値は 0 -> create new です。

CPPTEST_SPLIT_FILE_COMMUNICATION

ファイルベースの実装です。ANSI C のファイル I/O インターフェイスが使用されます。このチャネルを有効にすると、結果はローカル ドライブのファイルに書き込まれます。

以下のマクロを使ってこのチャネルを設定できます。

CPPTEST_LOG_FILE_NAME: 一連の結果ファイルのうち最初のファイルの名前です。デフォルト値は cpptest_results.clog です。他のファイルには cpptest_results.clog.0001 のように連番が付けられます。

一連のすべてのファイルが同じディレクトリに置かれるようにします。

CPPTEST_MAX_ALLOWED_NUMBER_OF_BYTES_PER_FILE: 1 ファイルの最大サイズを指定します。デフォルトは 2000000000 byte (2 GB) です。

CPPTEST_UNIX_SOCKET_COMMUNICATION

TCP/IP ソケット ベースの実装です。POSIX API が使用されます。このチャネルを有効にすると、結果は指定された TCP/IP ポートに送信されます。次の詳細設定マクロがあります。

CPPTEST_LOG_SOCKET_HOST: ホストの IP アドレス文字列を指定します。

CPPTEST_LOG_SOCKET_PORT: ポート番号を指定します。

CPPTEST_GETHOSTBYNAME_ENABLED: 1 を設定した場合、ドメイン名でホストを指定できます (gethostbyname 関数が存在する必要があります)。

CPPTEST_WIN_SOCKET_COMMUNICATION上記と同じですが、MS Windows API が使用されます。
CPPTEST_UNIX_SOCKET_UDP_COMMUNICATIONCPPTEST_UNIX_SOCKET_COMMUNICATION と同じですが、UDP ベースの実装です。
CPPTEST_RS232_UNIX_COMMUNICATION

RS232 ベースの実装です。POSIX API が使用されます。このチャネルを有効にすると、結果は指定された RS232 システム デバイスを経由して送信されます。次の詳細設定マクロがあります。

CPPTEST_RS232_DEVICE_NAME: システム デバイス名

CPPTEST_RS232_BAUD_RATE: ボーレート

CPPTEST_RS232_BYTE_SIZE: バイト サイズ

CPPTEST_RS232_PARITY: パリティ制御

CPPTEST_RS232_STOP_BIT: ストップ ビットの使用

CPPTEST_RS232_TIMEOUT: 転送タイムアウト値

CPPTEST_RS232_WIN_COMMUNICATIONCPPTEST_RS232_UNIX_COMMUNICATIONと同じですが、MS Windows API が使用されます。
CPPTEST_RS232_STM32F103ZE_COMMUNICATIONSTM32F103x USART ベースの実装です。STM Cortex ライブラリ インターフェイスが使用されます (ST/STM32F10x/stm32f10x.h ヘッダーが必要です)。
CPPTEST_HEW_SIMIO_COMMUNICATIONRenesas HEW シミュレーター固有の実装です。
CPPTEST_LAUTERBACH_FDX_COMMUNICATIONLauterbach TRACE32 ベースの実装です (FDX が使用されます)。
CPPTEST_ITM_COMMUNICATIONARM CoreSight ITM ユニット ベースの通信です。CMSIS ヘッダー ファイルが必要です。
CPPTEST_CUSTOM_COMMUNICATIONカスタム実装のための空のテンプレートを有効にします。

提供されている Makefile でカバレッジ ランタイム ライブラリをビルドする場合、[INSTALL_DIR]/engine/coverage/runtime/channel ディレクトリにある make 設定ファイルを使用できます。

カスタム通信チャネルのサポートをインストール

お使いの開発環境に合う通信チャネルの実装がない場合、カスタム実装を使用できます。次の手順は、ランタイム ライブラリをカスタマイズして通信チャネルのカスタム実装を使用する方法を説明しています。 

  1. [INSTALL_DIR]/engine/coverage/runtime/src/cpptest.c をコピーし、編集用に開きます。

  2. セクション 1.13 "Custom Communication Implementation" の場所を探します。
    カスタム通信の実装セクションには、4 つの異なるメソッドのための空のテンプレートがあります。

    関数説明
    void cpptestInitializeStream(void)この関数は通信チャネルの初期化を行います。たとえば、ソケットの作成および接続や、UART デバイスの初期化などを行います。
    void cpptestFinalizeStream(void)この関数は、通信チャネルの後処理を行います。たとえば、TCP/IP ソケットのクローズなどを行います。

    int cpptestSendData(const char *data, unsigned size)

    この関数は、データ バッファーからのサイズ バイトを送信します。
    void cpptestFlushData(void)この関数は、データをフラッシュします。フラッシュの意味は、トランスポートタイプによって異なります。一部の実装では、あまり意味がない可能性もあります。その場合、関数は空のままにしておきます。
  3. お使いの環境の要件に合わせてこれらのメソッドを実装します。
  4. コンパイル コマンド ラインに次のマクロ定義を付加して cpptest.c をコンパイルします。
    "-DCPPTEST_CUSTOM_COMMUNICATION"
  5. 生成されたオブジェクトファイルでは不十分な場合、要求に合わせてさらにファイルを処理できます (共有ライブラリを作成するなど)。

マルチスレッド API サポートの切り替え

ランタイム ライブラリはマルチスレッド アプリケーションをサポートします。POSIX、Windows、および VxWorks API がサポートされます。cpptest.c をコンパイルする際にコマンド ラインに -D<MACRO> を追加することで特定のマルチスレッド API のサポートを有効化できます。次の表は、マルチスレッド API サポート制御マクロの一覧です。

マクロ説明
CPPTEST_NO_THREADS空の実装です。カバレッジ ランタイムはマルチスレッド アプリケーションと共に使用できません。
CPPTEST_WINDOWS_THREADSWindows のマルチスレッド API 実装です。
CPPTEST_UNIX_THREADSPOSIX のマルチスレッド API 実装です。
CPPTEST_VXWORKS_THREADSVxWorks のマルチスレッド API 実装です。

カスタム スレッド API サポートのインストール

サポート対象外のマルチスレッド API を使用するマルチスレッド アプリケーションと共に C/C++test のカバレッジ エンジンを使用する場合、お使いのマルチスレッド API と共に動作するようランタイム ライブラリをカスタマイズできます。それには、次の手順を行う必要があります。

  1. [INSTALL_DIR]/engine/coverage/runtime/src/cpptest.c をコピーし、編集用に開きます。

  2. セクション 2.5 "Custom Communication Implementation" の場所を探します。
    カスタム通信の実装セクションには、4 つの異なるメソッドのための空のテンプレートがあります。

    関数説明
    static int cpptestLock(void)この関数は、カバレッジ ツール ランタイム ライブラリ内の処理が同期されることを保証します。あるスレッドがランタイム ライブラリ サービスへのアクセスをロックした場合、その間はアトミックな処理が行われ、他のスレッドがランタイム ライブラリ サービスを使用できないことを意味します。ロックが解放されると、他のスレッドがランタイム ライブラリ サービスを使用できるようになります。
    static int cpptestUnlock(void)ランタイム ライブラリ サービスを解放します。
  3. お使いの環境の要件に合わせてこれらのメソッドを実装します。

  4. コンパイル コマンド ラインに次のマクロ定義を付加して cpptest.c をコンパイルします。
    "-DCPPTEST_CUSTOM_THREADS"

  5. 生成されたオブジェクト ファイルが十分ではない場合、ニーズに合わせてさらにファイルを編集できます (たとえば共有ライブラリを作成するなど)。

複数のインストルメントされたバイナリが 1 つのログ ファイルに書き込んでいる

1 つのカバレッジ ログ ファイル (.clof) が並行して実行される複数のインストゥルメントされたバイナリによって使用される場合、ランタイム ライブラリで複数プロセスのサポートを有効にする必要があります。

複数プロセスのサポートを有効にするには、コンパイル コマンド ラインに次のマクロを追加して cpptest.c をコンパイルします。
"-DCPPTEST_MULTI_PROCESSES_LOG=1"

ランタイム ライブラリのビルド

C/C++test にはランライム ライブラリのビルド プロセスを簡略化するシンプルな Makefile (「ライブラリのソース コードの構造」を参照) が付属しています。しかし、ソース コードがすでにビルド プロセス用に最適化されているため、多くの場合、付属の make ファイルは必要ありません。唯一の必須の手順は、メイン cpptest.c ソース ファイルをコンパイルすることです。生成されたオブジェクト ファイルをさらに処理する必要があるかどうかは、個々の開発環境や、ランタイム ライブラリを共有ライブラリとして提供するかなどの要件によります。

付属の Makefile を使用したランタイム ライブラリのビルド

  1. <INSTALL_DIR>/engine/coverage/runtime をローカル ディレクトリにコピーします。

  2. コンパイル フラグを変更する必要がある場合 (たとえばクロスコンパイラやランタイム ライブラリの再設定を強制する定義を追加するなど)、ターゲット サブディレクトリに新しく make 設定ファイルを用意します。作業を簡単にするため、既存のターゲット設定ファイルをコピーし、ニーズに合わせて内容を変更できます。
  3. 次のコマンド ラインを呼び出すと、単一のオブジェクト 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
  4. カバレッジ ランタイム ライブラリを共有ライブラリ、動的リンク ライブラリ、またはその他のバイナリ形式でリンクする必要がある場合、目的に合わせて Makefile をカスタマイズするか、カスタム ビルドをセットアップする必要があります。

ランタイム ライブラリのユーザー ビルド

カバレッジ ランタイム ライブラリのユーザー ビルドをセットアップするには、次の操作を行います。

  1. <INSTALL_DIR>/engine/coverage/runtime/src/cpptest.c から任意の場所に cpptest.c ファイルをコピーします。

  2. Customizing the Runtime Library」の説明に従って、任意のカスタマイズを行います。
  3. 任意のビルド システムをセットアップします (例: IAR Embedded Workbench プロジェクトまたはその他のソース コード ビルダー)。
  4. コンパイル フラグを変更し、コンパイラ インクルード フラグ (通常は -I) に次の値を含めます。-I <INSTALL_DIR>/engine/coverage/runtime/include

  5. 必要な設定があれば追加します (よくあるのは -D) 。例:
    -DCPPTEST_FILE_COMMUNICATION -DCPPTEST_NO_THREADS
  6. ビルダーを実行します (たとえば、IDE でビルド コマンドを選択します)。
  7. 結果として作成されたオブジェクト ファイルの場所を確認し、インストゥルメントされたアプリケーションとリンクします。

コード カバレッジのトラブルシューティング

エラーや警告の情報など、カバレッジ ワークスペースの診断情報を表示する方法

カバレッジ ワークスペースにはインストゥルメントされたコード、対応する静的カバレッジ データとともに、コードがインストゥルメントされたときに生成されたログや設定ファイルが保存されています。-status オプションを使用すると、エラーや警告の情報、ファイル数など、カバレッジ ワークスペースから収集された診断データを表示できます。より詳細な情報を表示するには、-status-verbose を使用します。

デフォルトでは、現在のディレクトリにあるカバレッジ ワークスペースにある診断データが検索されます。-workspace オプションを使用して別のワークスペースの場所を指定することもできます。

例:

cpptestcc -status
cpptestcc -status -workspace /path/to/workspace

cpptestcc -status-verbose
cpptestcc -status-verbose -workspace /path/to/workspace

カバレッジ ワークスペースの診断情報を Parasoft 製品サポートに送信する方法

-techsupport オプションを使用してテクニカル サポート パッケージを作成できます。ログ ファイル、正常にインストゥルメントされなかった可能性があるファイルのプリプロセス済みソースコードなど、すべての診断データを含む .zip ファイルが作成されます。

デフォルトでは、現在のディレクトリにあるカバレッジ ワークスペースにある診断データが検索されます。-workspace オプションを使用して別のワークスペースの場所を指定することもできます。

例:

cpptestcc -techsupport
cpptestcc -techsupport -workspace /path/to/workspace

アプリケーション カバレッジのレポートを生成したとき、見つからないソース ファイルがあった場合

カバレッジ レポートを生成するとき、C/C++test はコード カバレッジ収集のためにインストゥルメントされたすべてのファイルが元の場所にあることを必要とします。C/C++test が元の場所でファイルを見つけられなかった場合、カバレッジ レポートは不完全になります。そのような場合、C/C++test は警告メッセージとともに見つからないファイルのリストを表示します。

別の場所に移動されたファイルのカバレッジ データを含むカバレッジ レポートを生成するには、CPPTEST_COVERAGE_SRC_ROOT 環境変数を使用して元のパスをローカル (現在の) パスにマッピングします。

CPPTEST_COVERAGE_SRC_ROOT=/original/path1=/local/path1;/original/path2=/local/path2;...

元のパスの中で '*' をワイルドカードとして使用できます。例:

CPPTEST_COVERAGE_SRC_ROOT=/*/path=/local/path

リスト ファイル (*.lst) でパス マッピングのリストを指定し、ファイルの場所を値として設定することもできます。例:

CPPTEST_COVERAGE_SRC_ROOT=/path/mapping.lst

*.lst ファイルの各項目は個別のエントリとして扱われます。

次の例では、カバレッジ収集のために foo.cpp ファイルがインストゥルメントされた後、別の場所に移動されました。

  • インストゥルメントされたファイルの元の場所: /home/server/project-123/foo.cpp
  • インストゥルメントされたファイルの現在の場所 (レポート生成時の場所): /home/devel/project/foo.cpp

foo.cpp ファイルのカバレッジ データを含むカバレッジ レポートを生成するには、次の操作を行います。

  1. CPPTEST_COVERAGE_SRC_ROOT 環境変数を使用してパスのマッピングを定義します。例:
    > export CPPTEST_COVERAGE_SRC_ROOT=/home/server/project-123=/home/devel/project
  2. カバレッジ レポートを生成します。

コード カバレッジ収集のためにコードをインストゥルメントできなかった場合にビルドを失敗させる方法

デフォルトでは、ファイルを正常にインストゥルメントできない場合、ビルドでは元の (インストゥルメントされていない) ファイルが使用され、警告が表示されます。カバレッジ収集のためにインストゥルメントできないソース ファイルがあった場合にビルドを失敗させるには、-disable-auto-recovery-mode オプションを使用します。

cpptestcc -disable-auto-recovery-mode [...]

1 回のビルドで複数回コンパイルされるファイルのカバレッジを収集する方法

デフォルトでは、ビルドに含まれるソース ファイルごとに 1 つのコンパイルのカバレッジ データが保存されます。結果として、まれに 1 回のビルドでソース ファイルが複数回コンパイルされる場合、最後のコンパイルのカバレッジ データだけが保存されます。結果として、レポートを生成すると、次の警告とともに不完全なカバレッジ レポートが生成される場合があります。「コードの構造に関する一部の情報が現在のワークスペースに存在しないため、カバレッジ レポートは不完全です。」1 つのソース ファイルに対して複数のカバレッジ データ (コンパイルごとに 1 つのバリアント) を保存するには、-coverage-data-variants オプションを使用します。

1 つのソース ファイルの異なるコンパイルがコードの競合 (たとえば、1 つの関数の異なるバリアントなど) を発生させないよう注意してください - このようなケースはサポートされません。

cpptestcc -coverage-data-variants [...]
  • No labels