本主题介绍如何通过修改现有规则或创建自定义规则来检查自定义需求或根据您的独特需求定制现有规则。
章节目录:

前言

C/C++test 静态分析的基础是自定义静态分析测试配置(要检查的规则集)和特定规则的能力,包括创建新的自定义规则。

C/C++test 提供的规则集是一套全面的可选规则,但具体的编码指南可能略有不同,或者根据编码风格或应用程序的性质需要对规则界定例外情况。因此,了解如何自定义、部署和在整个团队中共享 C/C++test 规则至关重要。

C/C++test 包含以下类型的规则:

  • 基于模式的规则检查代码中是否存在符合规则中定义的特定模式,并在代码匹配这些模式时触发。这种类型的分析通常是针对一个编译单元进行的(一个源文件及其包含的所有头文件)。可以使用 RuleWizard 对许多基于模式的规则进行参数化(请参阅使用 RuleWizard 自定义规则)。
  • 基于流的(流分析)规则检查编码模式以及多个函数和源文件的数据流。许多基于流的规则可以通过直接在 C++test GUI 中更改它们的配置参数来进行参数化(请参阅自定义参数化规则)。RuleWizard 不用于配置基于流的规则。

自定义参数化规则

许多规则都可以通过修改可用的规则参数来自定义。在测试配置对话框静态> 规则树选项卡中的参数化规则用一个特殊的图标标记(带有单选按钮的巫师帽):

规则文档中描述了可用的规则参数。若要查看规则说明,可右键点击相应规则的节点,然后从快捷菜单选择查看规则文档

修改规则参数的步骤:

  1. 选择 Parasoft> 测试配置运行测试工具栏按钮下拉菜单中的测试配置,打开测试配置对话框。
  2. 为任务测试配置打开静态> 规则树选项卡。修改后的规则参数将应用于所有测试配置,因此在此步骤中选择哪个测试配置并不重要。
  3. 展开规则的分类分支。
  4. 右键点击要修改的参数化规则,然后从快捷菜单中选择查看/改变规则参数
  5. 在打开的对话框中修改规则参数。
  6. 点击确定保存更改。

创建多个版本的参数化规则

如果要创建多个版本的参数化规则(例如查找用户指定的泄漏定义的流分析规则),可创建该规则的“克隆”(如指定规则映射中所述),然后将每个规则实例参数化。

使用 RuleWizard 自定义和创建规则

本节介绍使用 RuleWizard 自定义现有规则和创建新规则的一般工作流程。有关 RuleWizard 功能和用法的详细信息,请参阅 RuleWizard 用户指南

使用 RuleWizard 自定义规则

C/C++test 的许多基于模式的规则均使用 RuleWizard 编辑。C/C++test 规则是物理文件,可以加载到 RuleWizard 中并根据需要进行更改。内建·C/C++test 规则包含在安装目录中。

可自定义的规则在测试配置面板的规则树中使用以下巫师帽 + 魔杖图标标记:

(info) 我们强烈建议您保持 C/C++test·内建规则不变。若要自定义规则,请复制内建规则,然后修改规则副本。

(info) 这些规则通过 GUI 自定义,不需要修改实际的规则。

使用 RuleWizard 自定义规则的步骤:

  1. 选择 Parasoft> 测试配置运行测试工具栏按钮下拉菜单中的测试配置,打开测试配置对话框。
  2. 打开任一测试配置的静态> 规则树选项卡。
  3. 右键点击要修改的规则,然后从快捷菜单中选择复制
  4. 一个复制的规则节点(带有文件图标)将被添加到规则树中。
    • 规则文件的副本将被添加到用户指定的磁盘位置。规则 ID 会因此操作更改,这样复制的规则就不会屏蔽内建规则(详细信息请参阅关于复制规则 ID 的注意事项
  5. 右键点击复制的规则,然后从快捷菜单中选择在 RuleWizard 中编辑规则,在 RuleWizard 中打开规则。
  6. 在 RuleWizard 中编辑规则并保存。关如何修改和保存自定义规则的信息,请参阅 RuleWizard 用户指南(可在 RuleWizard GUI 中选择帮助> 文档来访问)。
  7. 将规则上传到 DTP,以便其他团队成员访问该规则。请参阅 DTP 用户指南中的管理自定义规则部分。
  8. 在测试配置中启用已编辑的规则。

使用 RuleWizard 创建新规则

您可以使用 RuleWizard 模块轻松创建自己的规则,这是 C/C++test 提供的图形规则创建和自定义工具。使用 RuleWizard,可以图形化创建规则(通过创建类似于流程图的规则图),也可以自动创建规则(通过提供规则违反示例的代码)。

要打开 RuleWizard,从您的 IDE 菜单选择 Parasoft> 启动 RuleWizard

有关如何修改和保存自定义规则的信息,请参阅 RuleWizard 用户指南(RuleWizard GUI 中的帮助> 文档)。

部署自定义规则或完全自定义规则

您可以在 DTP 上部署自定义规则,也可以手动导入规则文件。

规则 ID 注意事项

导入到工具中的每个规则必须具有唯一的规则 ID。详细信息请参阅关于复制规则 ID 的注意事项。若要使用规则 ID 指定规则分类,应使用以下格式 <rule_category>-<rule_uid>。例如,“myrule-123”将被自动分配到“myrule”分类。

在 DTP 上部署自定义规则

有关如何在 DTP 上部署自定义规则的信息,请参阅 DTP用户指南中的管理自定义规则部分。

手动导入自定义规则

  1. 选择 Parasoft> 测试配置运行测试工具栏按钮下拉菜单中的测试配置,打开测试配置对话框。
  2. 选择任一测试配置分类。新规则将出现在所有可用的测试配置中。
  3. 打开静态> 规则树选项卡。
  4. 如果有新规则应归类到一个新分类中,则按以下方式创建新分类:
    1. 点击编辑 Rulemap 按钮。
    2. 打开分类选项卡。
    3. 点击新建。将添加一个新的条目到分类表中。
    4. 在新条目中输入分类 ID 和分类描述。例如,团队可能选择使用 ACME 作为分类 ID,使用 ACME INTERNAL RULES 作为描述。
    5. 点击确定,保存新分类
  5. 点击规则树右侧的导入按钮。将打开导入 RuleWizard 规则对话框。
  6. 使用导入 RuleWizard 规则对话框指定要导入哪个规则,以及是否要覆盖现有规则文件(如果导入的规则文件具有与现有规则文件相同的名称)。
  7. 点击确定。规则将显示在指定的分类下,默认禁用。
  8. 启用要检查的新规则。
  9. 点击应用关闭提交修改后的设置。

关于复制规则 ID 的注意事项

C/C++test 中根据规则 ID 识别规则。如果您的规则与内建或用户分类中已有的规则具有相同 ID,则规则使用的优先级为用户/内建。因此,如果您导入的规则与内建规则的 ID 匹配,则导入的规则将实际位于首选项面板中设置的默认规则目录中,并且规则配置将使用导入的规则,而不是同名的内建规则。

  • No labels