抑制とは、特定の静的解析違反メッセージを C++test でレポートしないようにする機能です。抑制した違反メッセージは、[品質タスク] ビューではなく[抑制] ビューに表示されます。抑制は、GUI で設定することも、直接ソース コードで定義することもできます。
このセクションの内容 :
抑制とは
「抑制」を参照してください。
GUI での抑制の定義
[品質タスク]ビューに表示されている静的解析違反を抑制するには、次の操作を行います。
- [品質タスク]ビューで、抑制する違反メッセージ (タスク) を右クリックし、ショートカット メニューの [タスクの抑制] をクリックします。
- ルール カテゴリ、特定のルール、パッケージなど、あるグループのすべての結果を抑制するには、そのグループのノードを右クリックして [すべてのタスクの抑制] をクリックします。
- 表示されたダイアログで、抑制する理由を入力します。
- 抑制をソース コードで定義するには、[ソース コード内での抑制] を選択します (詳細については 「ソース コードでの抑制の定義」を参照)。 [ソース コード内での抑制] を選択しない場合、抑制は Team Server 上のデータとして保存されるか、ローカルのディレクトリに保存されます。
- 注意 [ソース コード内での抑制] によって追加されるコメントは、「違反があったルールのすべての違反」を抑制します。つまり、コードのある行が同一ルールの 2 つの違反を引き起こす場合、この 2 つの違反が抑制されるだけでなく、同一ルールの今後のすべての違反も抑制されます。
違反メッセージ (タスク) が抑制されて [品質タスク]ビューから削除されます。抑制エントリは、選択したモードに従って、[抑制] ビューに追加されるか、または直接ソース コードに追加されます。次回このプロジェクトをテストすると、この違反メッセージは [抑制] ビューにレポートされ、 [品質タスク]ビューにはレポートされません。
ヒント
ソース コード中での抑制とは逆に、チームでの抑制は、違反メッセージ ベースでありルール ベースではありません。抑制は、1 つの特定の静的解析タスク (たとえば 行 Y で発生した ルール X の違反の修正) のレポートを回避します。あるルールのすべての違反のレポートを回避するわけではありません。
ソース コードでの抑制の定義
ソース コード中で抑制を定義することには、次のような利点があります。
- どのチーム メンバーがコードをテストしても、同じ抑制設定を確実に適用できます。
- 抑制についての説明をコメントとして追加できるため、他のチーム メンバーがコードを参照したときに抑制の理由を明快に理解できます。
- ファイル、クラス、行レベルでルールを細かく制御できます。
ソース コード中で抑制を定義する方法は 2 種類あります。
- GUI で抑制を行う際、[ソース コード内での抑制] を選択します。 (上記の 「GUI での抑制の定義」を参照)
- 直接ソース コードに抑制を記述します。この方法については下記で説明します。
C++test では、C/C++ のコメントに埋め込まれた次のディレクティブを使って、直接ソース コード中で抑制を定義できます。
parasoft-suppress <ruleid> [<ruleid> ...] ["<comment>"]
現在の行 (parasoft-suppress ディレクティブがある行) についてだけ抑制を作成します。parasoft off
この行から開始してファイルの最後まで、すべての静的解析違反メッセージのレポートを抑制します。parasoft on
この行から開始してファイルの最後まで、すべての静的解析違反メッセージのレポートを抑制解除します。parasoft suppress/unsuppress [line <linewildcard>][class <classnamewildcard>] [file <filenamewildcard>] [item <ruleid>][type <severity>] [reason <comment>]
パラメーターを指定して抑制を作成します。- 例
line *, line 10, line 50-*
class MyClass, class *
file *example.cpp, file *ex*.cpp
item sec-20
type SV
reason "Not relevant to my code."
- 上記の要素 (
line、class、file
など) は、各エントリをスペースで区切って指定できます。たとえば:item * class MyClass line 10-*
<filenamewildcard>
には、ファイルへの絶対パスを指定する必要があります。
- 例
例 A:
/* parasoft suppress item SECURITY-02 */
現行ファイルについて、この抑制コマンドがある行からルール mecpp-02 を抑制します。
例 B:
/* parasoft unsuppress item * class MyClass line 10-* */
クラス MyClass について、10 行目からすべてのルールの抑制を解除します。
例 C:
/* parasoft unsuppress item SECURITY-02 file *example.cpp */
現行コンパイル単位中にあり、*example.cpp に一致するあらゆるファイルでルール sec-20 を抑制解除します。
例 D:
/* parasoft suppress all */
現行ファイルについて、このコマンドがある行からすべてのルールを抑制します。
例 E:
void foo(); /* parasoft-suppress SECURITY-02 */
void bar(); // parasoft-suppress SECURITY-03 "Not relevant to my code."
foo の宣言がある行で SECURITY-02 を抑制します。bar の宣言がある行で「Not relevant to my code (自分のコードには関係ない)」という理由で SECURITY-03 を抑制します。
例 F:
/* parasoft off */
/* parasoft unsuppress line 30-45 */
あらゆる物を抑制した後、30 行目から 45 行目の抑制を解除します。
その他の注意事項
item
を指定しない場合、抑制/抑制解除はすべてのルールに対して適用されます。つまりitem *
と同じ動作になります。file
を指定しない場合、抑制/抑制解除は現行ファイルにだけ適用されます。line
を指定しない場合、抑制/抑制解除はディレクティブがある行を開始点として適用されます。- ファイル名がスペースを含む場合、ファイル名をダブル クオートで囲みます。たとえば:
parasoft suppress file "*file with
whitespace.cpp"
ヘッダー ファイルでfile *
を指定すると、そのヘッダー ファイルをインクルードするすべてのファイルに抑制が適用されます。file
を指定しない場合、そのヘッダー ファイルに対してだけ抑制が適用されます。 parasoft-suppress
ディレクティブは、parasoft on、 parasoft off
、およびparasoft suppress/unsuppress
ディレクティブとはまったく異なります。parasoft-suppress
は、現在の行 (parasoft-suppress
ディレクティブがある行) だけを抑制します。また、他のディレクティブとは異なる構文を使用します。
GUI ベースの抑制の参照
抑制後のテストで発生した「抑制された違反メッセージ」を参照するには、次の操作を行います。
- ワークベンチの下部の [抑制] ビューを表示します。このビューが表示されていない場合は [Parasoft] メニューの [ビューの表示] > [抑制] をクリックして表示します。
- 抑制されたメッセージを参照するリソースを選択します。
[抑制] ビューには次の情報が表示されます。
- メッセージ 抑制された C++test 違反メッセージ
- 理由 違反メッセージが抑制された理由
- リソース 抑制が適用されたファイル
- フォルダー リソースがあるフォルダー
- ユーザー 違反メッセージを抑制したユーザーの名前
- 日付 初めて抑制が適用された日付
[抑制] ビューの内容を特定の列でソートするには、該当する列ヘッダーをクリックします。
ヒント
抑制フィルターを使って表示する抑制を制限する
抑制フィルターを使って、[抑制] ビューに表示する抑制を制限できます。次の操作を行います。
- [抑制] ビューのツール バーで [フィルター] ボタンをクリックします。[フィルター] ダイアログが表示されます。
- [有効] チェックボックスをオンにします。
- 次のオプションを設定します。
- 表示アイテムの制限 表示するアイテム数の上限を指定します。
- すべてのリソース すべてのプロジェクトのすべての抑制を表示します。
- 同じプロジェクトのすべてのリソース 現在 [C/C++ プロジェクト] ビューで選択しているプロジェクトのすべての抑制を表示します。
- 選択されたリソースのみ 現在 [C/C++ プロジェクト] ビューで選択しているリソースで指定された抑制だけを表示します。
- 選択されたリソースおよびその子 現在 [C/C++ プロジェクト] ビューで選択しているリソースで指定された抑制とそのチャイルドだけを表示します。
GUI ベースの抑制の解除
違反メッセージの抑制を解除するには、次の操作を行います。
- [抑制] ビューで、抑制を解除する違反メッセージを選択し、[抑制] ビューのツールバーの [選択された抑制の削除] ボタン (赤い×印のボタン) をクリックします。
今後、このプロジェクトのテストでこの違反が検出された場合、その違反メッセージは [品質タスク]ビューに表示されます。