本主题说明如何在源代码或抑制文件中手动抑制 Parasoft·任务。有关使用 IDE 的 UI 抑制任务的信息,请参阅在 GUI 中抑制任务。

简介
通过抑制定义,可以阻止 Jtest 报告特定的静态分析任务。如果希望大体上遵循某个规则,但需要忽略特定的任务,就可以使用抑制。如果不希望收到某个特定规则的违规任务,则可以在测试配置中禁用该规则。
在源代码中定义抑制
可以使用以下指定语法在源代码中定义抑制。
行抑制
行抑制允许抑制单行中的违规。必须在出现违规的代码行末尾添加抑制注释,使用以下语法:
// parasoft-suppress <rule-id>|<rule-category>|ALL "<suppression comment>" |
示例:
int proc1(boolean a, boolean b, int i)
{
if (a | b) // parasoft-suppress CWE "suppress all rules in category CWE"
if (b = a) // parasoft-suppress PB.TYPO.ASI "suppress rule PB.TYPO.ASI"
{
String emptyString1 = ""; // parasoft-suppress CWE-3 "suppress all rules in category CWE with severity level 3 // and lower"
}
else
{
String emptyString2 = ""; // parasoft-suppress SECURITY.WSC.SL 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(boolean a, boolean b, int i)
{
// parasoft-suppress-next-line CWE "suppress all rules in category CWE"
if (a | b)
// parasoft-suppress-next-line PB.TYPO.ASI "suppress rule PB.TYPO.ASI"
if (b = a)
{
// parasoft-suppress-next-line CWE-3 "suppress all rules in category CWE with severity level 3 and lower"
String emptyString1 = "";
}
// parasoft-suppress-next-line 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(boolean a, boolean b, int i)
{
// parasoft-begin-suppress CWE "begin suppress all rules in category CWE"
if (a | b)
if(b = a)
// parasoft-end-suppress CWE "end suppress all rules in category CWE"
{
String emptyString = "";
}
return i++;
}
int proc3(boolean a, boolean b, int i)
{
if (a | b)
// parasoft-begin-suppress PB.TYPO.ASI "begin suppress rule PB.TYPO.ASI"
if(b = a)
// parasoft-end-suppress PB.TYPO.ASI "end suppress rule PB.TYPO.ASI"
{
String emptyString = "";
}
return i++;
}
int proc4(boolean a, boolean b, int i)
{
// parasoft-begin-suppress CWE-3 "begin suppress all rules in category CWE with severity level 3 and lower"
if (a | b)
if(b = a)
{
String emptyString = "";
}
return i++;
// parasoft-end-suppress CWE-3 "end suppress all rules in category CWE with severity level 3 and lower"
}
// parasoft-begin-suppress ALL "begin suppress all rules"
int proc5(boolean a, boolean b, int i)
{
if (a | b)
if(b = a)
{
String emptyString = "";
}
return i++;
}
// parasoft-end-suppress ALL "end suppress all rules" |
要在文件中抑制多个规则,应在文件的开头/结尾包含以下内容:
// parasoft-begin-suppress SECURITY.WSC.SL BD.PB.VOVR CWE.563.VOVR "begin suppress multiple rules"
.....
// parasoft-end-suppress SECURITY.WSC.SL 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 SECURITY.WSC.SL BD.PB.VOVR CWE.563.VOVR |
- 抑制所有规则:
在抑制文件中定义抑制
要抑制报告特定的任务,可以创建 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.java (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.java
suppression-end |
您可以使用以下通配符和其他参数来指定文件路径(这种方式适用于在“其他设定”窗口中配置非默认的 parasoft.suppress 文件位置):参数 | 说明 |
---|
? | 匹配一个字符的通配符(路径分隔符以外的任何字符) |
* | 匹配零个或多个字符的通配符(不包括路径分隔符) |
** | 匹配零个或多个路径段的通配符。 |
/ | 所有操作系统的分隔符 |
"[非字母数字字符]" | 当路径包含空格或其他非字母数字字符时,使用引号。 |
其他属性是可选的,可以帮助您调整抑制。在下面的示例中,PB.TYPO.TLS 规则在 Account 文件中检测到的所有任务都被抑制,无论这些任务出现在哪个代码行:
suppression-begin
file: Account.java
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
属性中,支持以下通配符:
