C/C++ test中文网站 > 使用教程 > C/C++test规则集怎么导出 C/C++test规则配置如何版本化管理
教程中心分类
C/C++test规则集怎么导出 C/C++test规则配置如何版本化管理
发布时间:2026/04/24 14:48:06

  做C/C++test规则治理,真正容易乱的地方通常不是规则本身,而是同一套项目里有人在界面里改,有人在命令行里跑,还有人把规则映射单独放在本机上,最后每台机器看见的结果都不一样。Parasoft官方资料把这件事拆成了几层:一层是Test Configuration,也就是决定跑哪些规则和参数的.properties配置;一层是rulemap.xml,用来改规则分类、编号、名称和严重级别;再往上还有localsettings、DTP和Team Server,分别负责设置分发和团队共享。把这几层分清,后面的导出和版本化才不会越做越散。

  一、C/C++test规则集怎么导出

 

  规则集导出这一步,先要分清你导出的到底是哪一类文件。对大多数团队来说,最常导出的其实不是“单条规则”,而是Test Configuration。官方文档给出了很明确的路径:进入【Parasoft】>【Test Configurations】>【Builtin】,在目标配置上点右键,选择【Export...】,就可以把配置导成.properties文件;改完以后,再到【User-defined】上点右键,用【Import...】把文件重新导回工具。这个流程本身就是官方推荐的自定义配置方式。

 

  1、先从内置配置导出,不要直接凭空新建

 

  更稳的做法通常是先选一个接近你目标的内置配置,比如Recommended Rules、MISRA或CERT这一类,然后从【Builtin】导出。这样你拿到的不是一张空白配置,而是一份已经带有规则选择和参数的.properties文件,后续只需要删改,不需要从零拼规则。Parasoft也明确说明,C/C++test的内置Test Configuration本来就是最常见测试场景的预配置基础。

 

  2、导出后优先改.properties,不要反复手工点界面

 

  导出的规则集文件本质上就是.properties。官方示例里连度量阈值都是先把配置导出成.properties,再手改,再导回工具。落到团队使用上,更适合把“界面试出来的结果”尽快落到文件里,因为文件更容易审阅、比较和回滚。

 

  3、规则映射要单独导,不和规则集混在一起

 

  如果你改的是规则编号、规则名称、分类或者严重级别,这一层不是普通Test Configuration,而是Rule Map。官方说明很直接,进入【Parasoft】>【Test Configurations】后,在【Static】>【Rules Tree】页签里点【Edit Rulemap】,然后可以在弹出的Rulemap对话框里单独【Export】和【Import】rulemap文件。也就是说,规则选择和规则映射是两份文件,不建议混成一套“只有我自己看得懂”的口头约定。

 

  4、导完以后先导回【User-defined】验证一轮

 

  导出不是结束,最好马上把文件重新导入【User-defined】目录,跑一遍固定样本,确认规则集名称、规则启停、参数和阈值都生效。官方命令行也区分了builtin、user和dtp三类配置来源,其中user配置就是为这种本地可控、可重复调用的场景准备的。

 

  5、命令行项目要把配置名一并固定下来

 

  如果你后面准备接CI,就不要只停留在GUI导出这一步。官方命令行支持用【-config】指定builtin、user和DTP托管的配置,也支持用【-listconfigs】先把可用配置列出来。因此比较稳的做法是,在导入【User-defined】后,把最终用的配置名一并固定进构建脚本,避免某次分析还在跑旧配置。

 

  二、C/C++test规则配置如何版本化管理

 

  规则配置一旦要做版本化,核心就不是“存不存文件”,而是“哪些文件进版本库,哪些文件只做环境层覆盖”。Parasoft官方其实已经给了足够清楚的分层信号:Test Configuration可以导出成.properties,Rule Map会落成rulemap.xml,工具总设置可以放进cpptestcli.properties或自定义settings文件,而且命令行支持多次使用【-settings】叠加配置,后传入的同名键会覆盖前面的值。这个覆盖机制非常适合做版本化分层。

 

  1、把测试规则集文件纳入版本库主干

 

  最应该进Git、SVN这类版本库的,首先就是导出的.properties规则集文件。因为它直接决定分析时启用了哪些规则、阈值怎么取、静态分析范围怎么收。官方也明确把“通过source control分享偏好和配置”列为localsettings导出的用途之一,所以把规则集文件当成项目资产去管理,本来就是符合官方思路的。

 

  2、把rulemap.xml和规则集同级管理

 

  如果你的项目改过规则编号、规则名、严重级别或者类别,rulemap.xml也必须和.properties一起纳管。官方写得很清楚,Rule Map保存在你配置的User Rule目录下,文件名就叫rulemap.xml;没有它,很多“看起来像同一套规则”的配置其实只是启停一致,分类口径和严重级别并不一致。

  3、把环境设置和规则设置拆成两层

 

  Parasoft命令行允许多次传入【-settings】文件,而且后传入的键会覆盖前面的键。比较稳的做法通常是把team.properties或rules.properties这类团队统一规则设置放进版本库,再把license、邮箱、用户目录、代理这类机器差异项放进不入库的user.properties。这样规则策略能跟着代码分支走,机器差异又不会把仓库弄脏。这个分层方式是基于官方覆盖顺序做的工程化落地。

 

  4、每次发版前用【-showsettings】核对实际生效值

 

  规则配置做了分层以后,最怕的就是大家以为跑的是同一套,实际却被本机文件覆盖掉。官方提供了【-showsettings】选项,可以打印当前生效的配置以及每一项来自哪个源文件。这个功能很适合接到CI或发版前检查里,用来确认本次分析到底是哪个规则包在生效。

 

  5、分支版本不要共用同一套团队状态

 

  如果你们还在用Team Server,官方建议当项目在源码库里分出新版本时,也同步为新版本建立新的Team Server用户区域,再把当前版本的数据复制过去。官方给出的理由很直接,这样后续某个版本里的配置、规则和抑制修改,就不会反向影响另一个版本。放到版本化管理里,这一点尤其重要。

 

  三、C/C++test规则文件怎么收口才不容易乱

 

  真正把规则配置管稳,关键不只是“会导出”,而是让GUI、CLI、DTP和Team Server各自承担清楚的角色。官方资料里已经把这些角色划开了:User-defined配置存在本机;Team配置存在Team Server;DTP可以集中下发工具设置;命令行既能调用user配置,也能调用dtp配置。换句话说,团队要先决定“谁是事实来源”,否则同一个项目很容易同时存在本地版、团队版和DTP版三套口径。

 

  1、单项目优先收口到文件加版本库

 

  如果团队规模不大,最稳的做法通常是把.properties规则集、rulemap.xml和少量团队级settings文件直接放进代码仓库,然后让CI用【-settings】和【-config】显式调用。这样每次规则变化都会和代码变更一起留下记录,回溯成本最低。这个做法不是官方逐句写出的流程,但它和官方提供的导出、导入、source control分享以及多层settings机制是吻合的。

 

  2、多人团队再考虑DTP或Team Server做统一分发

 

  如果团队要集中下发配置,官方给了两条路。DTP适合做team-wide settings的集中配置与自动刷新;Team Server适合共享Test Configurations、rules、rule mappings、suppressions等团队资产。前者更像“统一设置中心”,后者更像“团队测试资产仓库”。这两者可以配合,但最好不要谁都能随手改。

 

  3、规则集和规则映射不要只放在某个人的User Rule目录

 

  官方说明rulemap.xml默认保存在配置页指定的User Rule目录,而User-defined Test Configuration也是本机范围可见。也就是说,如果你只是让架构师在自己机器上改完,然后大家口头约定“都按这个来”,实际上别的机器并不会天然拿到同一套配置。要么进版本库,要么进Team Server,不要长期停留在个人目录。

 

  4、合规模型项目要把rulemap.xml一起打包看待

 

  官方在CERT C++合规文档里明确写到,合规展示依赖两样东西同时成立,一样是只执行相关规则的test configuration,另一样是把Parasoft规则重新映射到标准条款的rulemap.xml。也就是说,一旦项目涉及MISRA、CERT、AUTOSAR这类合规治理,规则集文件和rulemap.xml就不是“可选搭配”,而是一套要同步版本化的组合。

  总结

 

  C/C++test规则集怎么导出,最直接的路径就是从【Parasoft】>【Test Configurations】>【Builtin】右键【Export...】导出.properties,再导回【User-defined】验证;如果改的是规则编号、名称、分类或严重级别,就要去【Edit Rulemap】里单独导出rulemap.xml。C/C++test规则配置如何版本化管理,最稳的思路则是把.properties和rulemap.xml当成项目配置资产进版本库,把机器差异项拆到单独settings文件,再利用【-settings】叠加和【-showsettings】核对实际生效值;团队规模再大一些时,再用DTP或Team Server做统一分发。这样做,规则配置才会真正跟着项目版本走,而不是跟着某一台机器走。

135 2431 0251