抑制とは、特定の静的解析違反メッセージを C++test でレポートしないようにする機能です。抑制した違反メッセージは、[品質タスク] ビューではなく[抑制] ビューに表示されます。抑制は、GUI で設定することも、直接ソース コードで定義することもできます。

このセクションの内容 :

 

抑制とは

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

GUI での抑制の定義

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

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

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

ヒント

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

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

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

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

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

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

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

  1. parasoft-suppress <ruleid> [<ruleid> ...] ["<comment>"]
    現在の行 (parasoft-suppress ディレクティブがある行) についてだけ抑制を作成します。  
  2. parasoft off
    この行から開始してファイルの最後まで、すべての静的解析違反メッセージのレポートを抑制します。  
  3. parasoft on
    この行から開始してファイルの最後まで、すべての静的解析違反メッセージのレポートを抑制解除します。  
  4. 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 ベースの抑制の参照

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

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

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

  • メッセージ 抑制された C++test 違反メッセージ  
  • 理由 違反メッセージが抑制された理由  
  • リソース 抑制が適用されたファイル  
  •  フォルダー リソースがあるフォルダー  
  • ユーザー 違反メッセージを抑制したユーザーの名前  
  • 日付 初めて抑制が適用された日付  

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

ヒント

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

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

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

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

GUI ベースの抑制の解除

違反メッセージの抑制を解除するには、次の操作を行います。

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

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

  • No labels