このセクションの内容

はじめに

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 を実行できるよう、PATH システム変数に [INSTALL_DIR] へのパスを追加します。
  2. コンパイル コマンドを変更し、-- を区切り文字としたコンパイラコマンドの接頭辞としてcpptestcc実行モジュールを含めます。 例:

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

    cc -I app/includes -D defines -c source.cpp

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

    cpptestcc -compiler gcc_7 -line-coverage -- cc -I app/includes -D defines -c source.cpp
    cpptestcc ツールを利用するには、少なくとも以下のパラメーターがコマンドラインに設定されている必要があります。

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

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

    その他のオプションについては、「Command Line Reference for cpptestcc」を参照してください。

  3. リンカー コマンドを変更し、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/binPATH 環境変数に追加するか (Windows の場合)、[INSTALL_DIR]/engine/coverage/runtime/lib を  LD_LIBRARY_PATH 環境変数に追加します (Linux の場合)。

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

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

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++ コード カバレッジ メトリクス] に移動し、レポートしたいメトリクスを選択します。

(info) コンパイル コマンドラインで cpptestcc ツールに対して有効に指定したメトリクスと一貫性を保つよう推奨します。

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

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

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

-compiler <name|path>

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

:

  • cpptestcc -compiler gcc_3_4 
  • 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]

-workspace <path>

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

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

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

-psrc <file>

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

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

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

-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 版の共有ライブラリです。リンク コマンド ラインに追加します。LD_LIBRARY_PATH[INSTALL_DIR]/engine/coverage/runtime/lib を追加します。
[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 環境変数に [INSTALL_DIR]/engine/coverage/runtime/bin ディレクトリが追加されており、テスト対象プログラムを開始したときにライブラリをロードできることを確認します。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 [INSTALL_DIR]/engine/coverage/runtime/lib and -lcpptest オプションが追加されていることに注意してください。

  3. テスト対象実行モジュールが共有ライブラリを確実に見つけられるよう、LD_LIBRARY_PATH 環境変数に [INSTALL_DIR]/engine/coverage/runtime/lib を追加します。

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

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

  • 別の形式のバイナリ ファイルが必要である。
  • 結果を転送するためにデフォルト以外の通信チャネルを有効にする
  • 結果を転送するために通信チャネルのカスタム 実装をインストールする
  • 標準サポート以外のマルチスレッド アプリケーションを有効にする
  • マルチスレッド アプリケーションをサポートするためのカスタム実装をインストールする

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

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

コンポーネント説明
include

ライブラリのインクルード ファイルがあるディレクトリです。
include/cpptest.h - ライブラリの public インターフェイスです。
include/cpptest/* - ライブラリの private インターフェイスです。
このディレクトリの内容は環境固有の変更の対象ではありません。

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 がサポートされます。特定のマルチスレッド API のサポートを有効にするには、cpptest.c をコンパイルするときにコンパイル コマンド ラインに -D<MACRO> を追加します。次の表は、マルチスレッド 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. 生成されたオブジェクトファイルでは不十分な場合、要求に合わせてさらにファイルを処理できます (共有ライブラリを作成するなど)。

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

ランタイムのビルド プロセスを簡略化するため、C/C++test には簡単な Makefile が付属しています (「Library Source Code Structure」を参照)。しかし、ソース コードがすでにビルド プロセス用に最適化されているため、多くの場合、付属の 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. ランタイム ライブラリのカスタマイズ」の説明に従って任意のカスタマイズを行います。
  3. 任意のビルド システムをセットアップします (例: IAR Embedded Workbench プロジェクトまたはその他のソース コード ビルダー)。
  4. コンパイル フラグを変更し、コンパイラ インクルード フラグ (通常は -I) に次の値を含めます。
    -I[INSTALL_DIR]/engine/coverage/runtime/include
  5. 5.必要な設定の定義 (通常は -D) を追加します。 例:
    -DCPPTEST_FILE_COMMUNICATION -DCPPTEST_NO_THREADS
  6. ビルダーを実行します (たとえば、IDE でビルド コマンドを選択します)。
  7. 結果として作成されたオブジェクト ファイルの場所を確認し、インストゥルメントされたアプリケーションとリンクします。


  • No labels