このセクションの内容

はじめに

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

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

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

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

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

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

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

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

Windows (x86 および x86-64) 

ファイル説明
<INSTALL_DIR>/runtime/lib/cpptest.aCygwin GNU GCC で使用される 32 bit 版の静的アーカイブです。リンク コマンド ラインに追加します。
<INSTALL_DIR>/runtime/lib/cpptest.libMicrosoft CL コンパイラで使用される 32 bit 版の静的アーカイブです。リンク コマンド ラインに追加します。
<INSTALL_DIR>/runtime/lib/cpptes64.libMicrosoft CL で使用される 64 bit 版の静的アーカイブです。リンク コマンド ラインに追加します。
<INSTALL_DIR>/bin/cpptest.dllMicrosoft CL コンパイラで使用される 32 bit 版の動的リンク ライブラリです。PATH 環境変数に [INSTALL_DIR]/bin を追加します。
<INSTALL_DIR>/bin/cpptest64.dllMicrosoft CL コンパイラで使用される 64 bit 版の動的リンク ライブラリです。PATH 環境変数に [INSTALL_DIR]/bin を追加します。

Linux (x86 および x86-64)

ファイル説明
<INSTALL_DIR>/runtime/lib/libcpptest.so32 bit 版の共有ライブラリです。リンク コマンド ラインに追加します。LD_LIBRARY_PATH に [INSTALL_DIR]/runtime/lib を追加します。
<INSTALL_DIR>/runtime/lib/libcpptest64.so64 bit 版の共有ライブラリです。リンク コマンド ラインに追加します。LD_LIBRARY_PATH に [INSTALL_DIR]/runtime/lib を追加します。

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

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

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

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

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

MS CL コンパイラ用の動的リンク ライブラリの場合

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

    $(LXX) $(PRODUCT_OBJ) $(OFLAG_EXE)$(PROJ_EXECUTABLE) $(LXXFLAGS) $(SYSLIB) $(EXECUTABLE_LIB_LXX_OPTS) <INSTALL>/runtime/lib/cpptest.lib
  3. PATH 環境変数に [INSTALL_DIR]/bin ディレクトリが追加されており、テスト対象プログラムを開始したときにライブラリをロードできることを確認します。cpptest.dll (またはcpptest64.dll) ファイルを実行モジュールと同じディレクトリ、またはテスト対象アプリケーションの起動時に動的リンク ライブラリを検索するその他の場所にコピーすることを検討するとよいでしょう。

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

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

    $(LXX) $(PRODUCT_OBJ) $(OFLAG_EXE)$(PROJ_EXECUTABLE) $(LXXFLAGS) $(SYSLIB) $(EXECUTABLE_LIB_LXX_OPTS) -L <INSTALL>/runtime/lib -lcpptest

    -L [INSTALL_DIR]/runtime/lib および -lcpptest オプションが追加されていることに注意してください。

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

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

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

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

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

C/C++test に付属しているランタイム ライブラリのソース コードは、[INSTALL_DIR]/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

複数のファイルを cpptestcli に渡すには、必ずそれらのファイルを同じディレクトリに置き、入力として 1 番目のファイルの名前だけを指定してください。cpptestcli を実行すると、他のファイルが 1 番目のファイルとマージされ、ディレクトリから削除されます。

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_COMMUNICATIONCPPTEST_UNIX_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]/runtime/channel ディレクトリにある make 設定ファイルを使用できます。詳細は「Make ベースのビルド システムとの統合」を参照してください。

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

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

  1. <INSTALL_DIR>/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、MS Windows、および VxWorks API がサポートされます。特定のマルチスレッド API のサポートを有効にするには、cpptest.c をコンパイルするときにコンパイル コマンド ラインに -D<MACRO> を追加します。次の表は、マルチスレッド API サポート制御マクロの一覧です。

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

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

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

  1. [INSTALL_DIR]/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 が付属しています (「Library Source Code Structure」を参照)。しかし、ソース コードがすでにビルド プロセス用に最適化されているため、多くの場合、付属の make ファイルは必要ありません。常に必要なステップは、cpptest.c ソース ファイルのコンパイルだけです。生成されたオブジェクト ファイルをさらに処理する必要があるかどうかは、個々の開発環境や、ランタイム ライブラリを共有ライブラリとして提供するかなどの要件によります。

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

  1. <INSTALL_DIR>/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>/runtime/src/cpptest.c から任意の場所に cpptest.c ファイルをコピーします。
  2. ランタイム ライブラリのカスタマイズ」の説明に従って任意のカスタマイズを行います。
  3. 任意のビルド システムをセットアップします (例: IAR Embedded Workbench プロジェクトまたはその他のソース コード ビルダー)。
  4. コンパイル フラグを変更し、コンパイラ インクルード フラグ (通常は -I) に次の値を含めます。
    -I<INSTALL_DIR>runtime/include
  5. 5.必要な設定の定義 (通常は -D) を追加します。 例:
    -DCPPTEST_FILE_COMMUNICATION -DCPPTEST_NO_THREADS
  6. ビルダーを実行します (たとえば、IDE でビルド コマンドを選択します)。
  7. 結果として作成されたオブジェクト ファイルの場所を確認し、インストゥルメントされたアプリケーションとリンクします。


  • No labels