このセクションでは、ソース コードまたは抑制ファイルで Parasoft 製品の指摘事項を手動で抑制する方法を説明します。IDE の UI を使って指摘事項を抑制する方法については「GUI での指摘事項の抑制」を参照してください。

はじめに

違反を抑制すると、 dotTEST は特定の静的解析タスクをそれ以降レポートしなくなります。全般的にコーディング規約に従いつつ、レポートされた指摘のうちの一部だけをあえて無視する場合、抑制機能が便利です。特定のルールのすべての違反メッセージを受け取りたくない場合は、テスト コンフィギュレーションでルールを無効にします。

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

次の構文を使用してソース コード内に抑制を定義します。

行単位の抑制

行単位の抑制を使用すると、単一行の違反を抑制できます。次の構文を使用して、違反がある行の行末に抑制コメントを指定します。

// parasoft-suppress <rule-id>|<rule-category>|ALL "<suppression comment>"

例:

int proc1(bool a, bool b, int i)
{
    if (a | b)                          // parasoft-suppress CS "suppress all rules in category CS"
        if (b = a)                       // parasoft-suppress CS.PB "suppress rule CS.PB"
        {
            string emptyString1 = "";    // parasoft-suppress CS-1 "suppress all rules in category CS with severity level 1
										 // and lower"
        }
        else
        {
            string emptyString2 = "";    // parasoft-suppress CS.BRM.ES BD.PB.VOVR CWE.563.VOVR "suppress multiple rules"
        }
    return i++;                         // parasoft-suppress ALL "suppress all rules"
}

次行の抑制

次行の抑制を使用すると、単一行の違反を抑制できます。次の構文を使用して、違反がある行の直前に抑制コメントを指定します。

// parasoft-suppress-next-line <rule-id>|<rule-category>|ALL "<suppression comment>"

抑制コメントと抑制対象の指摘事項を含む行の間に他のコメントまたは空の行があってはいけません。唯一の例外は、次行の抑制が複数指定されている場合です。

// parasoft-suppress-next-line CODSTA.NEA "reason for suppression CODSTA.NEA"
// parasoft-suppress-next-line FORMAT.MCH "reason for suppression FORMAT.MCH"
// parasoft-suppress-next-line JAVADOC "reason for suppression JAVADOC "
... code line ...
この場合、最後の抑制コメントの次の行にすべての抑制が適用されます。

例:

int proc1(bool a, bool b, int i)
{
	// parasoft-suppress-next-line CS "suppress all rules in category CS"
    if (a | b)       
		// parasoft-suppress-next-line CS.PB "suppress rule CS.PB"
        if (b = a)                       
        {
			// parasoft-suppress-next-line CS-1 "suppress all rules in category CS with severity level 1 and lower"
            string emptyString1 = "";    
        }
	// parasoft-suppress ALL "suppress all rules"
    return i++;                         
}

ブロック単位の抑制

ブロック単位の抑制を使用すると、コード ブロックの違反を抑制できます。次の構文を使用して、違反があるコード ブロックの前後に開始/終了コメントを指定します。

// parasoft-begin-suppress <rule-id>|<rule-category>|ALL "<suppression comment>"
... code block ...
// parasoft-end-suppress   <rule-id>|<rule-category>|ALL "<suppression comment>"

'parasoft-begin-suppress' および 'parasoft-end-suppress' コメントは別個の行になければなりません。

例:

int proc2(bool a, bool b, int i)
{   
    // parasoft-begin-suppress CS "begin suppress all rules in category CS"
    if (a | b)                          
        if(b = a)
    // parasoft-end-suppress CS "end suppress all rules in category CS"
        {
            string emptyString = "";    
        }
    return i++;                         
}

int proc3(bool a, bool b, int i)
{   
    if (a | b)
        // parasoft-begin-suppress CS.PB "begin suppress rule CS.PB"
        if(b = a)
        // parasoft-end-suppress CS.PB "end suppress rule CS.PB"
        {
            string emptyString = "";    
        }
    return i++;                         
}

int proc4(bool a, bool b, int i)
{   
    // parasoft-begin-suppress CS-1 "begin suppress all rules in category CS with severity level 1 and lower"
    if (a | b)
        if(b = a)
        {
            string emptyString = "";    
        }
    return i++;
    // parasoft-end-suppress CS-1 "end suppress all rules in category CS with severity level 1 and lower"
}

// parasoft-begin-suppress ALL "begin suppress all rules"
int proc5(bool a, bool b, int i)
{
    if (a | b)
        if(b = a)
        {
            string emptyString = "";    
        }
    return i++;
}
// parasoft-end-suppress ALL "end suppress all rules"

ファイルで複数のルールを抑制するには、ファイルの先頭/末尾に次を含めます。 

// parasoft-begin-suppress CS.BRM.ES BD.PB.VOVR CWE.563.VOVR "begin suppress multiple rules"
..... 
// parasoft-end-suppress CS.BRM.ES BD.PB.VOVR CWE.563.VOVR "end suppress multiple rules"

注意点

  • 抑制の理由を記述するのは良いプラクティスです。
  • 次のルール パターンがサポートされています。
    <rule-id>|<rule-category>|ALL
    例 (次の例は、単一行の違反を抑制するものです)。
    • PB.TYPO.TLS ルールの抑制:

      // parasoft-suppress PB.TYPO.TLS
    • CODSTA カテゴリのすべてのルールを抑制:
      // parasoft-suppress CODSTA
    • CODSTA カテゴリの重要度レベルが 4 以下のすべてのルールを抑制:
      // parasoft-suppress CODSTA-4
    • 複数のルールの抑制:

      // parasoft-suppress CS.BRM.ES BD.PB.VOVR CWE.563.VOVR


    • すべてのルールの抑制:
      // parasoft-suppress ALL

抑制ファイルでの抑制の定義

抑制する指摘事項の属性を指定した parasoft.suppress ファイルを作成することで、特定の指摘事項のレポートを抑制できます。抑制ファイルは、指摘事項を含むソース ファイルと同じディレクトリに置くか、[その他の設定] ウィンドウ (「高度な設定のカスタマイズ」を参照) で suppression.infile.location オプションを使用して指定する必要があります。このオプションは、CLI および IDE の両方で違反の抑制に使用される抑制ファイルの場所を指定します。場所は次のように指定できます。

  • ファイルへの絶対パス
  • 次の属性を使用: ${file_name}${file_loc} および ${project_loc}。例:  ${file_loc}/parasoft.suppress

例: suppression.infile.location=C:/parasoft/suppression/storage/parasoft.suppress

抑制ファイルをソース管理システムにチェックインすることを推奨します。そうすると、抑制に関する情報を他のチーム メンバーと共有でき、master、trunk などのメインの開発ストリームにコードをマージする前に SCM リポジトリのブランチで容易に抑制をレビューできます。

次のフォーマットを使用して parasoft.suppress ファイルに抑制エントリを追加します。

suppression-begin
file: Account.cs                  (required)
line: 12                          (optional)
rule-id: CODSTA-4                 (optional)
message: Exact violation message  (optional)
reason: Approved                  (optional)
author: devel                     (optional)
date: 2020-09-21                  (optional)
suppression-end

例:

最低でも、問題が検出されたソース ファイルを指定する必要があります。ソース ファイルだけを指定すると、指定されたファイルに対してレポートされたすべての指摘事項が抑制されます。次のサンプルでは、Account ファイルで検出されたすべての違反が抑制されます。

suppression-begin
file: Account.cs
suppression-end
次のワイルドカードおよびその他のパラメーターを使用してファイル パスを指定できます (この機能は、[その他の設定] ウィンドウで parasoft.suppress ファイルの場所がデフォルトの場所以外に設定されている場合に特に便利です)。

パラメーター説明
?パス区切り文字以外の任意の 1 文字に一致するワイルドカード
*パス区切り文字以外の任意の 0 文字以上に一致するワイルドカード
**0 個以上のパス セグメントに一致するワイルドカード
/すべてのオペレーティング システムの区切り文字
"[non-alphanumeric characters]"パスに空白またはその他の非英数文字が含まれる場合、引用符を使用します。

他の属性は任意であり、抑制を細かく制御するのに利用できます。次のサンプルでは、Account ファイルで検出された PB.TYPO.TLS ルールのすべての違反が、違反が発生した行にかかわらず抑制されます。

suppression-begin
file: Account.cs
rule-id: PB.TYPO.TLS
suppression-end

注意点

  • 抑制の理由を記述するのは良いプラクティスです。
  • line 属性の使用には注意が必要です。ソース ファイルが変更され、コードが別の行に移動すると、抑制が無効になる可能性があります。
  • rule-id 属性では、次の値がサポートされます。
    <rule-id>|<rule-category>|ALL
    例:
    • PB.TYPO.TLS ルールの抑制:

      suppression-begin
      file: **/autogenerated/*
      rule-id: PB.TYPO.TLS
      suppression-end
    • CODSTA カテゴリのすべてのルールを抑制:
      suppression-begin
      file: **/autogenerated/*
      rule-id: CODSTA
      suppression-end
    • CODSTA カテゴリの重要度レベルが 4 以下のすべてのルールを抑制:
      suppression-begin
      file: **/autogenerated/*
      rule-id: CODSTA-4
      suppression-end
    • すべてのルールの抑制:
      suppression-begin
      file: **/autogenerated/*
      rule-id: ALL
      suppression-end
  • message 属性では、次のワイルドカードがサポートされます。
    • ? - 任意の 1 文字
    • * - 任意の文字の連続

  • No labels