Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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

cpptestcc によるカバレッジの収集は、以下の 3 つのフェーズで行われます。


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

...


  1. <INSTALL_DIR>/bin へのパスを PATH システム変数に追加し、cpptestcc を実行できるようにします。

  2. コンパイル コマンドを変更し、-- を区切り文字としたコンパイラコマンドの接頭辞としてcpptestcc実行モジュールを含めます。 例:

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

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

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

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

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

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

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

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

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

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

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

    Code Block
    lxx -L app/lib app/source.o somelib.lib [INSTALL_DIR]/bin/engine/coverage/runtime/lib/cpptest.lib -o app.exe
    Info
    iconfalse
    title重要

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

    Info
    iconfalse

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

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

...

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

Code Block
<CPPTEST_INSTALL_DIR>/bin/engine/bin/cpptestpy.exe

MSBuild 統合スクリプトは次の場所にあります。

...

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

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

      Code Block
      set PATH=%PATH%;%CPPTEST_HOME\bin\engine\coverage\runtime\bin
  1. (CMake のみ) CMake を使用して MSBuild ファイルを生成します。 

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

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

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

    Code Block
    cd x64\Debug
    project.exe

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

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

    Code Block
    cpptestcli.exe \
    -data ../workspace \
    -bdf cpptestscan.bdf \
    -property bdf.import.location=BDF_LOC \
    -config "builtin://Load Application Coverage"

Anchor
Command Line Reference for cpptestcc
Command Line Reference for cpptestcc
cpptestcc コマンド ライン リファレンス

...

ファイル説明
<INSTALL_DIR>/bin/engine/coverage/runtime/lib/cpptest.aCygwin GNU GCC で使用される 32 bit 版のインポート ライブラリです。リンク コマンド ラインに追加します。
<INSTALL_DIR>/bin/engine/coverage/runtime/lib/cpptest64.aCygwin GNU GCC コンパイラで使用される 64 bit 版のインポート ライブラリです。リンク コマンド ラインに追加します。
<INSTALL_DIR>/bin/engine/coverage/runtime/lib/cpptest.libMicrosoft Visual C++ コンパイラで使用される 32 bit 版のインポート ライブラリです。リンク コマンド ラインに追加します。
<INSTALL_DIR>/bin/engine/coverage/runtime/lib/cpptest64.libMicrosoft Visual C++ コンパイラで使用される 64 bit 版のインポート ライブラリです。リンク コマンド ラインに追加します。
<INSTALL_DIR>/bin/engine/coverage/runtime/bin/cpptest.dll32 bit 版の動的リンク ライブラリです。PATH 環境変数に <INSTALL_DIR>/bin/engine/coverage/runtime/bin を追加します。
<INSTALL_DIR>/bin/engine/coverage/runtime/bin/cpptest64.dll64 bit 版の動的リンク ライブラリです。PATH 環境変数に <INSTALL_DIR>/bin/engine/coverage/runtime/bin を追加します。

Linux (x86 および x86-64)

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

...

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

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

...

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

    Code Block
    $(LXX) $(PRODUCT_OBJ) $(OFLAG_EXE)$(PROJ_EXECUTABLE) $(LXXFLAGS) $(SYSLIB) $(EXECUTABLE_LIB_LXX_OPTS) -L <INSTALL_DIR>/bin/engine/coverage/runtime/lib -lcpptest

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

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

...

Table of Content Zone
maxLevel2
minLevel2
locationtop

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

カバレッジ ワークスペースにはインストゥルメントされたコード、対応する静的カバレッジ データとともに、コードがインストゥルメントされたときに生成されたログや設定ファイルが保存されています。-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 オプションを使用します。

Info

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

cpptestcc -coverage-data-variants [...]