このセクションの内容
入力スコープは、C/C++test で解析する対象の C および C++ のソースファイルを定義します。入力スコープはコンパイラ オプションおよび環境に関する完全な情報のセットを提供し、C/C++test が元のビルド環境を再現して正確なテスト結果を出すことができるようにします。コンパイラの定義については「静的解析の実行」を参照してください。
手順については「静的解析の実行」を参照してください。
手順については「静的解析の実行」を参照してください。
ビルド データ ファイルに定義されたソース ファイルだけが解析されます。ソース ファイルにインクルードされたヘッダー ファイルは、解析から除外されます。詳細は以下のセクションを参照してください。
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
ファイルの各アイテムが個別のエントリとして扱われます。
追加のファイル フィルターをセットアップすることで、ローカルで変更されたファイルまたは現在の作業ブランチで変更されたファイルだけに解析範囲を制限できます。これにより、ソース管理システムにコードをチェックインしたり、メインの開発ストリームにコードをマージする前に、最近のコードの変更で入り込んだバグを検出し、修正する作業に集中できるようになります。
デフォルトのスコープを変更すると解析をスピードアップできるいっぽうで、プロジェクトに含まれる他のリソースの情報を必要とするルールのレポートする違反に影響を与える可能性があります。特に、実行パスを解析したり、メトリクスを計算したり、重複コードをチェックしたりするルールは、スコープから除外されたファイルにアクセスできない場合、違反を誤検出したり、違反を検出できない場合があります。 そのため、すべてのルール違反が検出されるよう、定期的に全体スコープでの解析を実行するよう推奨します。シナリオの例としては、デスクトップで C/C++test を実行するときは限定されたスコープで解析し、サーバーでの自動化されたビルド時に全体スコープの解析を行うことが考えられます。 |
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
ファイルで設定されたスコープ フィルターによって上書きされます。