很多人说的“规则集导入”,在C/C++test里其实常常混着两层意思。一层是把自定义规则文件真正导进工具里,另一层是把这些规则放进会被执行的Test Configuration里。Parasoft官方对Test Configuration的定义很明确,它才是每次分析时真正决定检查哪些规则、用什么参数、跑什么范围的载体;用户自定义配置保存在本机,团队配置则来自共享位置或DTP相关链路。也就是说,规则文件进来了,不等于分析时已经会查到它。
一、C/C++test规则集怎么导入
导入规则集时,最稳的思路不是只把文件放进去,而是把“导入规则”“启用规则”“用正确配置去跑”三步连续做完。Parasoft当前文档给出的入口很清楚,自定义规则的手工导入是在【Parasoft】里的【Test Configurations】完成,而不是在普通项目属性里随便丢一个文件就算结束。
1、先打开【Parasoft】里的【Test Configurations】
进入测试配置窗口后,先随便选一个Test Configurations分类,再切到【Static】里的【Rules Tree】。官方说明里写得很明确,新导入的规则会出现在所有可用的测试配置里,所以这一步不必先纠结到底选哪一个配置节点。
2、如果要单独分类,先改【Rulemap】
如果你的规则希望落到新的组织分类里,先点【Edit Rulemap】,在【Categories】页签里新建分类,再回到规则树继续导入。官方同时说明,规则ID如果按“分类加唯一编号”的格式来写,工具也会自动把它归到对应分类下面,这对后面团队维护很有帮助。
3、再点【Import】把规则文件导进来
在【Rules Tree】右侧点【Import】后,工具会打开导入对话框,让你指定要导入的RuleWizard规则文件,以及遇到同名文件时是否覆盖。导入完成以后,规则会显示在对应分类下,但这里有一个最容易漏掉的点,官方明确写了,导入后的新规则默认是禁用状态。
4、导入后一定要手动启用并保存
规则进来以后,还要把要检查的那几条显式启用,然后点【Apply】或【Close】提交。只做导入不做启用,是最常见的“看上去导进来了,但运行时没有结果”的原因之一。
5、团队共享时再把目录指到统一位置
如果你们不是单机使用,而是把自定义配置和规则放在代码库或共享目录里,Parasoft官方建议在【Parasoft】里的【Preferences】再到【Configuration】里配置【User configurations】和【User rules】目录;命令行也可以直接用`cpptest.custom.configs.dir`和`cpptest.custom.rules.dir`指到共享位置。DTP 2023.1之后Team Server已移除,旧的团队配置和规则如果还在Team Server里,需要先迁到共享位置再由各机器指过去。
二、C/C++test规则集导入后不生效怎么排查
导入后没生效,不要一上来就怀疑规则文件坏了。C/C++test这类情况更常见的是分析时跑错了配置、规则没启用、命令行没有指到正确配置,或者分析范围本身就没覆盖到你期待的文件。顺着执行链往回查,通常比反复重导一次更快。
1、先查这次运行到底用了哪个Test Configuration
Parasoft官方把话说得很直接,每次测试运行时真正起作用的是指定的Test Configuration。命令行里如果你用`cpptestcli`,要靠`-config`指向built-in、user或dtp配置,还可以用`-listconfigs`先把当前可用配置列出来;如果跑的是别的配置,规则导得再对也不会生效。
2、再查导入规则是不是还停在禁用状态
这一点最容易被忽略。官方手册明确写明,手工导入后的规则会默认禁用,必须在【Static】里的【Rules Tree】手动启用后再保存。很多时候不是“没生效”,而是规则只是静静躺在树里,没有被勾进分析集合。
3、如果是共享规则,核对自定义目录有没有指对
C/C++test会从配置好的自定义目录里查找用户配置和用户规则。要是共享目录路径没配对,或者换机器后仍指向旧位置,界面里可能还能看到旧缓存,但真正运行时未必能拿到最新规则。Parasoft在配置文档里专门把Custom directories和`cpptest.custom.configs.dir`、`cpptest.custom.rules.dir`列出来,就是为了解决这类问题。
4、如果接了DTP,留意本地设置有没有被团队设置覆盖
官方配置文档说明,只要相关偏好页启用了【Use DTP settings】,本机设置就可能被DTP里的团队设置覆盖;需要保留本机特定设置时,要先关闭这一项。实际排查时,如果你本地明明改了目录或偏好,但重启后又像没改过一样,这条线就要优先怀疑。
5、最后查这次分析的文件范围是不是本来就跑不到
Parasoft当前文档明确写了,C/C++test不会直接分析头文件,只有当头文件被本次分析中的源文件包含时,相关问题才会被报出来。也就是说,如果你只选了一个头文件,或者本次资源范围没有把对应源文件带上,规则即使已经启用,也会表现成“没结果”。
三、C/C++test规则为什么看着导入了却还是不对
有些情况不是完全“不生效”,而是结果和你预期不一样。这时更该查的是规则标识、参数和版本来源,而不是继续重复导入。Parasoft官方在自定义规则说明里,对这几类问题都给了比较明确的边界。
1、规则ID冲突会让结果看起来像乱套
官方说明里写到,C/C++test通过rule ID识别规则。如果你导入的规则ID和内置规则或用户规则重复,工具会按既定优先级处理,甚至让导入规则替代同ID的内置规则。这样一来,表面看像是“导入没效果”,实际可能是旧规则被覆盖,或者你看到的根本不是原来那条规则。
2、参数改了但没在对的规则版本上检查
Parasoft还特别提到,很多参数化规则可以直接在GUI里改参数,而且这些参数修改会应用到所有Test Configurations。要是你复制了一条规则、又改了一条原始规则,最后很容易把“哪一条在生效”看混。排查时要先分清你当前启用的是内置规则、复制规则,还是导入规则。
3、命令行和界面看到的不是同一套配置
GUI下能看到用户自定义配置,不代表命令行一定在跑它。官方命令行文档要求显式用`-config`指向`builtin://`、`user://`或`dtp://`,必要时还可以用`-showsettings`看当前实际加载的设置。很多团队之所以在桌面端能复现、批处理里不复现,问题就卡在这里。
4、旧团队资产没有迁完也会造成“半生效”
如果团队之前还在用Team Server存配置和规则,而DTP已经升级到2023.1及以后,官方要求把旧的test configurations、rules和rulemap.xml迁到共享位置,再让每台机器重新指向这些目录。没有迁干净时,最常见的现象就是有的人能看到规则,有的人跑出来却不一致。
总结
C/C++test规则集怎么导入,关键不只是把规则文件导入,而是要在【Test Configurations】里的【Static】【Rules Tree】完成导入、启用和保存,再把共享目录或命令行配置一并对齐。C/C++test规则集导入后不生效怎么排查,顺序上更适合先看运行时到底用了哪个Test Configuration,再看规则是否仍是默认禁用状态,接着检查共享目录、DTP覆盖和分析范围,最后再回到rule ID冲突与命令行配置这类更深一层的问题。按这个顺序查,大多数“导入了却没生效”的情况都能更快定位。