このセクションの内容

概要

入力スコープは、C/C++test で解析する対象の C および C++ のソースファイルを定義します。入力スコープはコンパイラ オプションおよび環境に関する完全な情報のセットを提供し、C/C++test が元のビルド環境を再現して正確なテスト結果を出すことができるようにします。コンパイラの定義については「静的解析の実行」を参照してください。

単一のファイルの解析

手順については「静的解析の実行」を参照してください。

Makefile ベースのプロジェクトの解析

手順については静的解析の実行を参照してください。

既存のビルド データ ファイルを使用したコードの解析

ビルド データ ファイルに定義されたソース ファイルだけが解析されます。ソース ファイルにインクルードされたヘッダー ファイルは、解析から除外されます。詳細は以下のセクションを参照してください。

ソース ファイル構造 (モジュール) の定義

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.cppbelongs to MyApp as MyApp/src/foo.cpp; will be analyzed
/home/devel_1/project/includes/foo.hbelongs to MyApp as MyApp/includes/foo.h; will be analyzed
/home/devel_1/project/includes/other.hnot #included; will not be analyzed
/home/devel_1/common/common.hdoes 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ファイルの各アイテムが個別のエントリとして扱われます。

ソース管理データに基づくファイル フィルターの定義

追加のファイル フィルターをセットアップすることで、ローカルで変更されたファイルまたは現在の作業ブランチで変更されたファイルだけに解析範囲を制限できます。これにより、ソース管理システムにコードをチェックインしたり、メインの開発ストリームにコードをマージする前に、最近のコードの変更で入り込んだバグを検出し、修正する作業に集中できるようになります。

デフォルトのスコープを変更すると解析をスピードアップできるいっぽうで、プロジェクトに含まれる他のリソースの情報を必要とするルールのレポートする違反に影響を与える可能性があります。特に、実行パスを解析したり、メトリクスを計算したり、重複コードをチェックしたりするルールは、スコープから除外されたファイルにアクセスできない場合、違反を誤検出したり、違反を検出できない場合があります。

そのため、すべてのルール違反が検出されるよう、定期的に全体スコープでの解析を実行するよう推奨します。シナリオの例としては、デスクトップで C/C++test を実行するときは限定されたスコープで解析し、サーバーでの自動化されたビルド時に全体スコープの解析を行うことが考えられます。

前提条件

ローカルで変更されたファイルの解析

解析のスコープをローカルで変更されたファイルだけに限定するには、.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
.properties ファイルで設定されたスコープ フィルター設定は、すべてのテスト コンフィギュレーションに影響を与えます。

スコープと作成者の設定」を参照してください。

別の方法として、テスト コンフィギュレーションで追加のスコープ フィルターを定義することもできます。それには、カスタム テスト コンフィギュレーションを作成し、適用するフィルターを指定します。「カスタム テスト コンフィギュレーションの作成」を参照してください。GUI で設定されたスコープ フィルターは、特定のテスト コンフィギュレーションにだけ適用され、.properties ファイルで設定されたスコープ フィルターによって上書きされます。


  • No labels