このセクションの内容
概要
入力スコープは、C/C++test で解析する対象の C および C++ のソースファイルを定義します。入力スコープはコンパイラ オプションおよび環境に関する完全な情報のセットを提供し、C/C++test が元のビルド環境を再現して正確なテスト結果を出すことができるようにします。コンパイラの定義については「静的解析の実行」を参照してください。
単一のファイルの解析
手順については「静的解析の実行」を参照してください。
Makefile ベースのプロジェクトの解析
手順については「静的解析の実行」を参照してください。
既存のビルド データ ファイルを使用したコードの解析
ビルド データ ファイルに定義されたソース ファイルだけが解析されます。ソース ファイルにインクルードされたヘッダー ファイルは、解析から除外されます。詳細は以下のセクションを参照してください。
- .bdf ファイルの概念および作成方法については「静的解析の実行」を参照してください。
- .bdf ファイルを使用して解析を行うための手順については「静的解析の実行」を参照してください。
- テスト対象ファイルのスコープを広げ、ヘッダー ファイルを含める方法については、「ソース ファイル構造 (モジュール) の定義」を参照してください。
ソース ファイル構造 (モジュール) の定義
C/C++test は、入力スコープを互いに関連のないソース ファイルのセットとして扱います。モジュールを定義すると、ソース ファイルの構造を取り入れ、ヘッダー ファイルなどの追加のファイルを入力スコープに含めることができます。
モジュールを定義するには、モジュールの名前とルート ディレクトリを指定します。ルート ディレクトリおよびそのサブディレクトリに存在するすべてのテスト対象ファイルがモジュールに含められます。ルート ディレクトリおよびそのサブディレクトリに存在し、テスト対象のソース ファイルによってインクルードされているすべてのヘッダー ファイルもモジュールに含められ、ソース ファイルとともに解析されます。
モジュールのすべてのファイルに対して「モジュール相対パス」が使用できます。プロジェクト相対パスは、モジュールのルートから実際のファイルの場所までの相対パスとして計算されます。多くの場合、モジュール相対パスはマシンに依存しないため、テスト結果を容易に別のマシンと共有できます。
モジュール構造のサンプル
1 つ目のブロックは、単純なディレクトリ/ファイル構造を表しています。2 つ目のブロックは、モジュールのルートとファイルの関係、およびどのファイルが解析の対象となるかを表しています。
/home/devel_1/project/src/foo. cpp | tested file defined in bdf will be analyzed |
/home/devel_1/project/includes/foo.h | #included by foo.cpp |
/home/devel_1/project/includes/other.h | not #included by foo.cpp |
/home/devel_1/common/common.h | #included by foo.cpp |
ルートの場所が /home/devel_1/project
であるモジュール MyApp が定義されている場合、次のファイルがモジュールの一部としてテストされます。
/home/devel_1/project/src/foo.cpp | belongs to MyApp as MyApp/src/foo.cpp; will be analyzed |
/home/devel_1/project/includes/foo.h | belongs to MyApp as MyApp/includes/foo.h; will be analyzed |
/home/devel_1/project/includes/other.h | not #included; will not be analyzed |
/home/devel_1/common/common.h | does not belong to MyApp; will not be analyzed |
基本的なモジュール構成の定義
モジュールを定義するには、-[<MODULE_NAME>=]<MODULE_ROOT_LOCATION> スイッチを使用します。モジュールの名前が指定されていない場合、ルート ディレクトリの名前が使用されます。
-module MyApp=/home/devel_1/project -module /home/devel_1/project -module MyModule=../projects/module1 -module .
別の方法として、カスタム構成ファイルで cpptest.scope.module.<MODULE_NAME>=<MODULE_ROOT_LOCATION>
プロパティを使用してモジュール構造を定義することもできます。
cpptest.scope.module.MyApp=/home/devel_1/project cpptest.scope.module.MyModule=../projects/module1
複数のルートを持つモジュールの定義
複数の互いに重ならない場所を定義するには、適切なルートの場所を指す論理名をモジュール名に追加します。
-module MyApp/module1=/home/devel_1/project -module MyApp/module2=/home/external/module2/src cpptest.scope.module.MyApp/module1=/home/devel_1/project cpptest.scope.module.MyApp/module2=/home/external/module2/src
入力スコープの細かい調整
単一のファイルまたはファイルのセットをテスト対象として指定するには、-resource
スイッチを使用します。
-resource /home/cpptest/examples/ATM/ATM.cxx -resource /home/cpptest/examples/ATM -resource ATM.cxx
パスでは以下のリソースを指定できます。
- ファイル パス (指定されたファイルだけがテストされます)
- ディレクトリ パス (指定されたディレクトリのファイルだけがテストされます)
- ファイル名 (指定された名前のファイルだけがテストされます)
スコープにその他のフィルターを適用するには、-include および -exclude スイッチを使用します。
-include
スイッチは、ファイル システムのパスに一致するファイルだけをテストするよう指定します。その他のファイルはスキップされます。-exclude
スイッチは、ファイル システムのパスに一致するファイル以外をテストするよう指定します。
-include
と -exclude
の両方のスイッチが指定されている場合、-include に一致するが、-exclude に一致しないパターンだけがテストされます。
-include pattern -exclude pattern
-include
および -exclude
スイッチには、ファイルへの絶対パスを指定できます。ワイルドカードとしてアスタリスク (*
) を使用できます。
-include /home/project/src/ATM.cxx -include /home/project/CustomIncludes.lst -exclude /home/project/src/*.cxx -exclude /home/project/CustomExcludes.lst
多数のファイルを -include/-exclude で指定する場合、リスト ファイル (*.lst
) を作成し、そのリスト ファイルのパスを指定することもできます。*.lst
ファイルの各アイテムが個別のエントリとして扱われます。
ソース管理データに基づくファイル フィルターの定義
追加のファイル フィルターをセットアップすることで、ローカルで変更されたファイルまたは現在の作業ブランチで変更されたファイルだけに解析範囲を制限できます。これにより、ソース管理システムにコードをチェックインしたり、メインの開発ストリームにコードをマージする前に、最近のコードの変更で入り込んだバグを検出し、修正する作業に集中できるようになります。
前提条件
- サポート対象のソース管理システムへの接続が適切に設定されていること (「ソース管理システムへの接続」および「ソース管理システムの設定」を参照)
scope.scontrol
=true
が設定され、ソース管理システムに基づいた作成者の算出が有効化されていること (「スコープと作成者の設定」を参照)
ローカルで変更されたファイルの解析
解析のスコープをローカルで変更されたファイルだけに限定するには、.properties 設定ファイルに次のオプションを追加します。
scope.scontrol.files.filter.mode=local
現在の作業ブランチで変更されたファイルの解析
"master" や "trunk" などのメインの統合ストリームと異なっている現在の作業ブランチのファイルだけに解析のスコープを限定するには、.properties 設定ファイルに次のオプションを追加します。
scope.scontrol.files.filter.mode=branch
作業ブランチとメインの統合ストリームではなく別のブランチを比較したい場合、または特定のリビジョンと比較したい場合は、参照として使用するブランチまたはリビジョンの名前または ID を指定する必要があります。次の設定は、カスタムブランチ/リビジョンと異なっている現在の作業ブランチのファイルに解析スコープを限定します。
scope.scontrol.files.filter.mode=branch scope.scontrol.ref.branch=[name/ID of the custom reference branch/revision]
テスト スコープにヘッダー ファイルを含める
C/C++test はヘッダー ファイルを直接には解析しません。つまり、ヘッダー ファイルは、テスト対象のソース ファイルにインクルードされている場合にだけ解析されます。ファイル フィルターの適用によってソース ファイルが解析から除外された場合、そのソース ファイルで使用されているヘッダー ファイルも、たとえヘッダー ファイルが変更されていてもすべて除外されます。
インクルードしているソース ファイルが変更されていなくても、変更されたヘッダー ファイルが解析されるようにするには、詳細スコープ オプションを含む .properties ファイルで cpptest.scope.adjuster.cu.enabled
を有効化します。そうすると、変更されたファイルと同じコンパイル ユニットに属するすべてのファイルが解析されます。
例
scope.scontrol.files.filter.mode=local cpptest.scope.adjuster.cu.enabled=true
scope.scontrol.files.filter.mode=branch scope.scontrol.ref.branch=[name/ID of the custom reference branch/revision] cpptest.scope.adjuster.cu.enabled=true
「スコープと作成者の設定」を参照してください。
別の方法として、テスト コンフィギュレーションで追加のスコープ フィルターを定義することもできます。それには、カスタム テスト コンフィギュレーションを作成し、適用するフィルターを指定します。「カスタム テスト コンフィギュレーションの作成」を参照してください。GUI で設定されたスコープ フィルターは、特定のテスト コンフィギュレーションにだけ適用され、.properties
ファイルで設定されたスコープ フィルターによって上書きされます。