このセクションでは、特定の静的解析違反メッセージを C++test でレポートしないようにする (基本的にはルールに従うが、少数の例外的な状況ではルールを無視すると決定した場合など) 方法を説明します。抑制は、GUI から入力することもコード中に記述することもできます。

このセクションの内容

抑制とは

抑制」を参照してください。

GUI での抑制の定義

[品質タスク] ビューに表示されている静的解析違反を抑制するには、次の操作を行います。

  1. [品質タスク] ビューで、抑制する違反メッセージ (タスク) を右クリックし、ショートカット メニューの [タスクの抑制] をクリックします。
    • ルール カテゴリ、特定のルール、パッケージなど、あるグループのすべての結果を抑制するには、そのグループのノードを右クリックして [すべてのタスクの抑制] をクリックします。
  2. 表示されたダイアログで、抑制する理由を入力します。
  3. 抑制をソース コードで定義するには、[ソース コード内での抑制] を選択します (詳細については下の 「ソース コードでの抑制の定義」を参照)。 [ソース コード内での抑制] を選択しない場合、抑制は DTP 上の Team Server のデータとして保存されるか、ローカルのディレクトリに保存されます。
    • 注意 [ソース コード内での抑制] によって追加されるコメントは、「違反があったルールのすべての違反」を抑制します。つまり、コードのある行が同一ルールの 2 つの違反を引き起こす場合、この 2 つの違反が抑制されるだけでなく、同一ルールの今後のすべての違反も抑制されます。

違反メッセージ (タスク) が抑制されて [品質タスク]ビューから削除されます。抑制エントリは、選択したモードに従って、[抑制] ビューに追加されるか、または直接ソース コードに追加されます。次回このプロジェクトをテストすると、この違反メッセージは [抑制] ビューにレポートされ、 [品質タスク]ビューにはレポートされません。


ヒント

ソース コード中での抑制とは逆に、チームでの抑制は、違反メッセージ ベースでありルール ベースではありません。抑制は、1 つの特定の静的解析タスク (たとえば 行 Y で発生した ルール X の違反の修正) のレポートを回避します。あるルールのすべての違反のレポートを回避するわけではありません。

ソース コードでの抑制の定義

ソース コード中で抑制を定義することには、次のような利点があります。

  • どのチーム メンバーがコードをテストしても、同じ抑制設定を確実に適用できます。
  • 抑制についての説明をコメントとして追加できるため、他のチーム メンバーがコードを参照したときに抑制の理由を明快に理解できます。
  • ファイル、クラス、行レベルでルールを細かく制御できます。

ソース コード中で抑制を定義する方法は 2 種類あります。

  • GUI で抑制を行う際、[ソース コード内での抑制] を選択します。 (上記の 「GUI での抑制の定義」を参照)
  • 直接ソース コードに抑制を記述します。この方法については下記で説明します。

C++test では、C/C++ のコメントに埋め込まれた次のディレクティブを使って、直接ソース コード中で抑制を定義できます。

行単位の抑制

<suppression keyword> [<rule category> | <rule category> . <rule id> | <rule category > - <rule severity> | ALL ] <suppression comment>


行単位の抑制の例

//parasoft-suppress CODSTA "suppress all rules in category CODSTA"

// parasoft-suppress CODSTA.NEA "suppress rule CODSTA.NEA"

// parasoft-suppress CODSTA-1 "suppress all rules in category CODSTA with severity level 1"

// parasoft-suppress ALL "suppress all rules"

// parasoft-suppress CODSTA FORMAT.MCH JAVADOC-3 "suppress all rules in category CODSTA and rule FORMAT.MCH and all rules in category JAVADOC with severity level 3"


ブロック単位の抑制

<begin suppression keyword> [<rule category> | <rule category> . <rule id> | <rule category > - <rule severity> | ALL ] <suppression comment>

 ..... source code block .....

<end suppression keyword> [<rule category> | <rule category> . <rule id> | <rule category > - <rule severity> | ALL ] <suppression comment>


ブロック単位の抑制の例

// parasoft-begin-suppress CODSTA "begin suppress all rules in category CODSTA"
.....
// parasoft-end-suppress CODSTA "end suppress all rules in category CODSTA"

// parasoft-begin-suppress CODSTA.NEA "begin suppress rule CODSTA.NEA"
.....
// parasoft-end-suppress CODSTA.NEA "end suppress rule CODSTA.NEA"
 
// parasoft-begin-suppress CODSTA-1 "begin suppress all rules in category CODSTA with severity level 1"
......
// parasoft-end-suppress CODSTA-1 "end suppress all rules in category CODSTA with severity level 1"

//parasoft-begin-suppress ALL "begin suppress all rules"
.....
// parasoft-end-suppress ALL "end suppress all rules"

// parasoft-begin-suppress CODSTA FORMAT.MCH "begin suppress all rules in category CODSTA and rule FORMAT.MCH"
.....
// parasoft-end-suppress CODSTA FORMAT.MCH "end suppress all rules in category CODSTA and rule FORMAT.MCH"

// parasoft-begin-suppress CODSTA "begin suppress all rules in category CODSTA"
.....
// parasoft-end-suppress CODSTA-1 "end suppress all rules in category CODSTA with severity level 1; however rules with severity level 2-5 in category CODSTA are still suppressed."
.....
// parasoft-end-suppress CODSTA "end suppress all rules in category CODSTA"
 
// parasoft-begin-suppress ALL "begin suppress all rules"
.....
// parasoft-end-suppress CODSTA FORMAT-1 "end suppress all rules in category CODSTA and all rules in category FORMAT with severity level 1; however, others rules in CODSTA and FORMAT-1 are still suppressed."
.....
// parasoft-end-suppress ALL "end suppress all rules"
 
//parasoft-begin-suppress ALL "begin suppress all rules, since no end suppression comment, all rules will be suppressed starting from this line"

以下の抑制ディレクティブは非推奨になりました。

  • parasoft off: この行から開始してファイルの最後まで、すべての静的解析違反メッセージのレポートを抑制します。
  • parasoft on: この行から開始してファイルの最後まで、すべての静的解析違反メッセージのレポートを抑制解除します。
  • parasoft suppress/unsuppress [line <linewildcard>][class <classnamewildcard>][file <filenamewildcard>] [item <ruleid>][type <severity>] [reason <comment>]: パラメーターを指定して抑制を作成します。

GUI ベースの抑制の参照

抑制後のテストで発生した「抑制された違反メッセージ」を参照するには、次の操作を行います。

  1. [抑制] ビューを開きます。このビューが表示されていない場合は [Parasoft] メニューの [ビューの表示] > [抑制] をクリックして表示します。
  2. 抑制されたメッセージを参照するリソースを選択します。

[抑制] ビューには次の情報が表示されます。

  • 抑制された静的解析違反
  • タスクが抑制された理由
  • 抑制が適用されたリソース (ファイル)
  • リソースがあるフォルダー
  • タスクを抑制したユーザーの名前
  • 初めて抑制が適用された日付

[抑制] ビューの内容を特定の列でソートするには、該当する列ヘッダーをクリックします。


ヒント

[抑制] ビューで抑制項目を右クリックし、ショートカット メニューの [メッセージの編集] または [理由の編集] をクリックすると、表示されたダイアログでメッセージまたは理由を編集できます。

抑制フィルターを使って表示する抑制を制限する

抑制フィルターを使って、[抑制] ビューに表示する抑制を制限できます。

次の操作を行います。

  1. [抑制] ビューのツール バーで [フィルター] ボタンをクリックします。[フィルター] ダイアログが表示されます。
  2. [有効] チェックボックスをオンにします。
  3. ダイアログでフィルター条件を指定します。次のオプションがあります。
    • 表示アイテムの制限: 表示するアイテム数の上限を指定します。
    • すべてのリソース:  すべてのプロジェクトのすべての抑制を表示します。
    • 同じプロジェクトのすべてのリソース: 現在選択しているプロジェクトのすべての抑制を表示します。
    • 選択されたリソースのみ: 現在選択しているリソースで指定された抑制だけを表示します。
    • 選択されたリソースおよびその子: 現在選択しているリソースで指定された抑制とそのチャイルドだけを表示します。

GUI ベースの抑制の解除

タスクの抑制を解除するには、次の操作を行います。

  • [抑制] ビューで、抑制を解除する違反メッセージを選択し、[抑制] ビューのツールバーの [選択された抑制の削除] ボタン (赤い×印のボタン) をクリックします。

今後、このプロジェクトのテストでこの違反が検出された場合、その違反メッセージは [品質タスク]ビューに表示されます。

  • No labels