このセクションでは、特定の静的解析違反メッセージを C/C++test でレポートしないようにする方法を説明します。
このセクションの内容
抑制は、特定の静的解析違反メッセージを C/C++test でレポートしないようにするために使用されます。全般的にコーディング規約に従いつつ、レポートされたタスクのうちの一部だけをあえて無視する場合、抑制機能を使用します。
抑制はソース コード内またはローカル抑制ファイルに保存できます。これらのファイルをソース管理システムにチェックインし、チーム全体で共有できます。Parasoft GUI を使用して抑制を作成するか、抑制に関する情報を手動でソース コードまたは抑制ファイルに追加します。また、設定ファイルでプログラム的に抑制を定義することもできます。
MISRA 標準への適合を達成するためのワークフローを実装する場合、DTP で作成される MISRA コンプライアンスレポートから誤検出された違反を除外することができます。違反を抑制し、"false positive" で始まる抑制の理由を指定した場合、違反は MISRA コンプライアンス レポートに記載されません。Paraoft のコンプライアンス ソリューションの詳細については DTP ユーザー ガイドを参照してください。 |
[品質タスク] ビューに表示されている静的解析違反を抑制するには、次の操作を行います。
ファイルに抑制を保存することを選択した場合、抑制はルール違反を含むソース ファイルと同じディレクトリにある parasoft.suppress ファイルに保存されます。ファイル内抑制は以下のいずれかの方法で定義できます。
GUI で [抑制ファイル内で抑制] オプションを選択する (「GUI での抑制の定義」を参照)新しく作成された抑制ファイルは自動的にプロジェクトに追加され、他のプロジェクト ファイルとともに IDE のファイル ツリーに表示されます。
抑制ファイルをソース管理システムにチェックインすることを推奨します。そうすると、抑制に関する情報を他のチーム メンバーと共有でき、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 suppression-end |
他の属性は任意であり、抑制を細かく制御するのに利用できます。次のサンプルでは、Account ファイルで検出された PB.TYPO.TLS ルールの指摘事項が、行にかかわらずすべて抑制されます。
suppression-begin file: Account.cpp rule-id: PB.TYPO.TLS reason: false positive suppression-end |
line
属性の使用には注意が必要です。ソース ファイルが変更され、コードが別の行に移動すると、抑制が無効になる可能性があります。message
属性では、以下のワイルドカードがサポートされています。ソース コード中で抑制を定義することには、次のような利点があります。
ソース コード中で抑制を定義する方法は 2 種類あります。 GUI で適切なオプションを選択するか ( 「GUI での抑制の定義」を参照) 、次の抑制構文を使用して、手動でソース コードに抑制を記述します。
行単位の抑制を使用すると、単一行の違反を抑制できます。次の構文を使用して、違反がある行の行末に抑制コメントを指定します。
// 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" |
以下の抑制ディレクティブは非推奨になりました。
|
正規表現パターンに一致する行で検出された静的ルール違反を自動的に抑制するよう設定できます。これは、Qt マクロなど、行内またはコード内抑制を使用して抑制するのが難しいタスクを抑制したい場合に便利です。
コード行を指定する正規表現パターンを定義するには、次の操作を行います。
詳細設定ファイルを作成し、以下の C/C++test 詳細設定を含めます。
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> |
ローカルまたは Team Server への XML 形式フォーマットでの抑制の保存はで非推奨になりました。C/C++test 2020.2 から、抑制はコード内で直接、またはファイル内抑制フォーマットで作成されます (「抑制ファイルでの抑制の定義」を参照)。プロジェクトに新しいフォーマットに移行したい非推奨のフォーマットの抑制がある場合、Parasoft Support にお問い合わせください。