このセクションでは、ソース コードまたは抑制ファイルで 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" } 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" 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>"
例:
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" 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" } // 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"
抑制ファイルでの抑制の定義
抑制する指摘事項の属性を指定した parasoft.suppress ファイルを作成することで、特定の指摘事項のレポートを抑制できます。抑制ファイルは、指摘事項を含むソース ファイルと同じディレクトリに置く必要があります。
抑制ファイルをソース管理システムにチェックインすることを推奨します。そうすると、抑制に関する情報を他のチーム メンバーと共有でき、master、trunk などのメインの開発ストリームにコードをマージする前に SCM リポジトリのブランチで容易に抑制をレビューできます。
次のフォーマットを使用して parasoft.suppress ファイルに抑制エントリを追加します。
suppression-begin file: Account.cs (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.cs suppression-end
suppression-begin file: Account.cs rule-id: PB.TYPO.TLS suppression-end
属性に関する注意点
- 抑制の理由を記述するのは良いプラクティスです。
line
属性の使用には注意が必要です。ソース ファイルが変更され、コードが別の行に移動すると、抑制が無効になる可能性があります。