このセクションでは、特定の静的解析違反メッセージを C/C++test でレポートしないようにする方法を説明します。
このセクションの内容
抑制は、特定の静的解析違反メッセージを C/C++test でレポートしないようにするために使用されます。全般的にコーディング規約に従いつつ、レポートされたタスクのうちの一部だけをあえて無視する場合、抑制機能を使用します。
抑制はソース コード内またはローカル抑制ファイルに保存できます。これらのファイルをソース管理システムにチェックインし、チーム全体で共有できます。Parasoft GUI を使用して抑制を作成するか、抑制に関する情報を手動でソース コードまたは抑制ファイルに追加します。また、設定ファイルでプログラム的に抑制を定義することもできます。
MISRA Compliance Pack for DTP を使用している場合、DTP の MISRA コンプライアンス レポートで抑制がどのように扱われるかについては、『Parasoft 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
属性の使用には注意が必要です。ソース ファイルが変更され、コードが別の行に移動すると、抑制が無効になる可能性があります。ソース コード中で抑制を定義することには、次のような利点があります。
ソース コード中で抑制を定義する方法は 2 種類あります。GUI で適切なオプションを選択するか ( 「GUI での抑制の定義」を参照)、次の抑制構文を使用して、手動でソース コードに抑制を記述します。
<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" |
以下の抑制ディレクティブは非推奨になりました。
|
正規表現パターンに一致する行で検出された静的ルール違反を自動的に抑制するよう設定できます。これは、Qt マクロなど、行内またはコード内抑制を使用して抑制するのが難しいタスクを抑制したい場合に便利です。
コード行を指定する正規表現パターンを定義するには、次の操作を行います。
詳細設定ファイルを作成し、以下の C/C++test 詳細設定を含めます。
cpptest.result.line.suppressions.enabled=true // Enables creating regex-based suppressions. cpptest.result.line.suppressions.pattern=[regex;regex] // Specifies a semicolon-separated list of regex patterns. |
指定された正規表現パターンに一致する行で発生した静的ルール違反が抑制されます。たとえば、次のように指定すると、任意の個所に "Q_" を含むコード行で検出されたすべての違反が抑制されます。
cpptest.result.line.suppressions.enabled=true cpptest.result.line.suppressions.pattern=.*Q_.* |
ローカルまたは Team Server への XML 形式フォーマットでの抑制の保存はで非推奨になりました。C/C++test 2020.2 から、抑制はコード内で直接、または新しい入力ファイル フォーマットで作成されます (「抑制ファイルでの抑制の定義」を参照)。プロジェクトに非推奨のフォーマットの抑制がある場合 (以前のバージョンの C/C++test で抑制を作成し、C/C++test のバージョンを 2020.2 にアップグレードした場合など)、引き続き抑制がコードに適用され、非推奨の抑制ビューで抑制を参照できます。
C/C++test の機能を使用してローカル抑制を新しいフォーマットに移行できます。Team Server に保存された抑制を移行する必要がある場合は、Parasoft 製品サポートまでお問い合わせください。
非推奨のローカル抑制を移行するには、次の操作を行います。
移行すると以下の影響があります。
バックアップ ファイルから非推奨の抑制を復元したい場合は、次の操作を行います。
バックアップファイルが保存されている場所 (コンソールに表示されます) に移動します。local_suppressions_backup.zip ファイルがあります。
local_suppressions_backup.zip の内容を同じ場所に展開します。
復元された抑制を次の IDE 起動時に再移行できます。
非推奨の抑制を有効化すると、非推奨のフォーマットで抑制を作成し、ローカルまたは Team Server に保存できるようになります。