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

はじめに

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

MISRA コンプライアンス ワークフローでの誤検出の抑制

MISRA 標準へのコンプライアンスを達成するためにワークフローを構築している場合、DTP で作成される MISRA コンプライアンス レポートから誤検出された違反を除くことができます。違反を抑制し、抑制の理由として「false positive」で始まる文字列を指定すると、違反は MISRA コンプライアンス レポートに載りません。Parasoft コンプライアンス ソリューションの詳細については、DTP ユーザー ガイドを参照してください。

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

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

行単位の抑制

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

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

例:

int proc1(int i)    // parasoft-suppress AUTOSAR-A7_1_1-a "suppress AUTOSAR-A7_1_1-a violation"
{
  char * m = "msg"; // parasoft-suppress AUTOSAR-A27_0_4 "suppress all AUTOSAR-A27_0_4 violations (AUTOSAR-A27_0_4-a, -b, ...)"
  int j = 0;        // parasoft-suppress AUTOSAR "suppress all AUTOSAR violations"
  return i + (++j); // parasoft-suppress ALL "suppress all violations"
}

ブロック単位の抑制

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

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

例:

int proc2(int i)
{
  // parasoft-begin-suppress ALL "suppress all violations"
  char * m = "msg";
  int j = 0;
  return i + (++j);
  // parasoft-end-suppress   ALL "suppress all violations"
}

int proc3(int i)
{
  // parasoft-begin-suppress AUTOSAR "suppress all AUTOSAR violations"
  char * m = "msg";
  int j = 0;
  // parasoft-end-suppress   AUTOSAR "suppress all AUTOSAR violations"
  return i + (++j);
}

// parasoft-begin-suppress   AUTOSAR-A8_5_2-a AUTOSAR-A0_1_1-a "suppress all AUTOSAR-A8_5_2-a and AUTOSAR-A0_1_1-a violations"
int proc4(int i)
{
  char * m = "msg";
  int j = 0;
  return i + (++j);
}
// parasoft-end-suppress     AUTOSAR-A8_5_2-a AUTOSAR-A0_1_1-a "suppress all AUTOSAR-A8_5_2-a and AUTOSAR-A0_1_1-a violations"

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

抑制する指摘事項の属性を指定した parasoft.suppress ファイルを作成することで、特定の指摘事項のレポートを抑制できます。抑制ファイルは、指摘事項を含むソース ファイルと同じディレクトリに置く必要があります。

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

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

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

例:

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

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

属性に関する注意点

  • 抑制の理由を記述するのは良いプラクティスです。
  • line 属性の使用には注意が必要です。ソース ファイルが変更され、コードが別の行に移動すると、抑制が無効になる可能性があります。

正規表現パターンに基づく行抑制の定義

正規表現パターンに一致する行で検出された静的ルール違反を自動的に抑制するよう設定できます。これは、Qt マクロなど、行内またはコード内抑制を使用して抑制するのが難しい指摘を抑制したい場合に便利です。

.properties ファイルまたはコマンド ラインで次のオプションを設定し、正規表現パターンを指定します (「設定の概要」を参照)。

cpptest.result.line.suppressions.enabled=true          // Enables creating regex-based suppressions.
cpptest.result.line.suppressions.pattern=[regex<rule-id|rule-category|ALL>;regex<rule-id|rule-category|ALL>] // Specifies a semicolon-separated list of regex patterns.

注意: <> 括弧は、ルールを指定する場合にだけ必要です。ルールの指定は、カンマ区切りのリストでもかまいません。

指定された正規表現パターンに一致する行で発生した静的ルール違反が抑制されます。たとえば、次のように指定すると、任意の個所に "Q_" を含むコード行で検出されたすべての違反が抑制されます。

cpptest.result.line.suppressions.enabled=true
cpptest.result.line.suppressions.pattern=.*Q_.*<OPT>

  • No labels