最新的 C++test 7.2 的RuleWizard自定义规则创建教程
本文原载于软件测试人专业博客,任何转载请保留原址:http://www.mytestlife.com/post/15.html
网上找到C++test自定义规则创建的文档,文档内容蛮好,不过是针对C++test 6.5,目前C++test最新版为7.2。将其更新到针对C++test 7.2 RuleWizard自定义规则创建。
(注:若需完整的 C++test 7.2 的RuleWizard自定义规则创建.doc文档,请留下email,统一发送。)
以下是主要更新部分:
C++ Test内置了1400多个静态规则,一般的情况下其实也就够用了。但是如果有特殊的测试要求,动辄几十K的代码,用眼睛看,脑子想,太辛苦,也不“安全”。如果我们用C++Test图形化的RuleWizard,结合公司的编码规范来制定规则,一来方便,高效,二来可以节约人工检查所带来的不必要的成本。Rule的创建有2种方式,一种是手工写规则,让RuleWizard去帮你生成规则。我这里主要重点放在自己写规则方面,下面介绍基本步骤:
2.1 C++Test的基本设置
首先使用C++Test静态规则集检查,可以直接使用C++test内建的测试配置或者自定义测试配置

新建工程:选择导入VC6.0或者新建一个工程
自定义测试配置,可根据项目和团队自身需求启用相应的规则,选择C++test -> Test Configurations。
2.2 内建测试配置
C++Test内置了1400多条规则包括Effective C++,Security,以及一些行业性规范,如MISRA C, MISRA 2004, MISRA 2008等各个方面的C\C++规则,应该能够满足大多数公司编码规范,启用某某规则只要勾选checkbox即可。另外,如果不会写规则的话,也可以参看默认的规则和C++Test的manual在\Parasoft\C++Test7.2\manuals\rulewizard文件夹下。
2.3 制作规则
首先介绍一下基本规则的制作方法
在出现的对话框中Dictionary选择C,C++,还有一个选项是C++Test一般用于C++文本规则的制作,Rule Creation选择By Node,Auto-Create用于手动书写代码而自动生成规则,但是自动生成的规则往往不尽人意,所以一般不用。Node Selections选择if,因为此次书写的规则跟if有关,完成了点击ok.
以上制作的规则是在逻辑表达式中常量应该放==号的左边,这样可以避免漏写一个“=”号后造成分支判断出现永真或者永假式即:
| void foo() |
以上条件判断永远只会走 return (ERROR)这个分支。
2.4 Rulewizard定义的基本组成部分
Node:规则的基本组成部分,通过Node你可以很清楚的知道它的功能。比如表达式a=b、变量的类型测试分为:
parentNode:规则中的主分支Node或者次分支的主Node.内容可以是表达式、变量、函数等
childNode:规则的组成单元。
Commands:用来在Node和Nodes之间建立关联关系。形象一点就是点中一个Node然后右键显示出的快捷菜单的上半部分。如下图:
介绍一下主要的Command
Collector:集合。这个概念更像数学中的集合而不是Java中的广义集合。满足一定条件的数据或者方法或者变量的全体。比如,所有被声明过的变量,如下图
isDecl是用来返回前边的node是不是一个声明。那么body的membervariable返回了所有的包涵指定类型变量得语句(包括 变量付值、声明、判断等)那么这个图被理解为,所有不是声明得语句内使用的变量的集合。
没有被声明的变量,如下图。
这里的意思是所有作为声明语句的变量的集合。
那么通常情况下,A集合和B集合应该是相等的,也就是说所有被声明过的变量(B集合内容)应该都被使用/赋值/判断(A集合的内容)。
Node Set:Node对Node集合的处理。分为Union(合并)、Intersection(交叉)、Difference(差值,左差/右差)、Xor(异或)。如下图:
如果 满足这个规则,那么输出相应得警告信息。
Output:如果满足check的条件,向用户返回一个消息(箭头表示)
2.5 导入已制作的规则
点击Import,如图:
弹出如下窗口:
点击Browse,导入之前创建的规则,如图:
选择已制作规则的文件夹,添加完毕后启用。
2.6 修改规则Category
规则导入后,在Rule Tree里显示为”UNKNOWN[Nick]”类别,如下图:
我们需要编辑Rulemap,点击旁边的“Edit Rulemap”,弹出如下窗口,选择“Categories”面板:
在该窗口我们可以修改新添加的规则类别。填写如下:
填写之后,点击”OK”。(注:Nick,是原本UNKOWN[Nick]里的默认类别ID,该ID一般与所导入规则的Rule ID一致)可以看到原本的规则类别发生变化,如图:
2.7 运行已制作的规则
当导入制作好的规则后,点击toolbar上的运行button(三角形的按钮)即可对工程进行静态测试。
运行完毕后,出现出错信息,并且出错的行号和出错的文件也被指明出来了

sngmd@yeah.net,需要一份。
wujignlucky@163.com ,需要,谢谢!
急需!!!感谢分享!!!
我的邮箱是:1073057383@qq.com
请给我一份,谢谢了
您好!请问您有可以使用bugDetective的c++test版本吗?能给我一份吗?我的邮箱:jiangboy123@gmail.com 非常感谢!
您好!请问您有可以使用bugDetective, rule wizard的c++test版本吗?能给我一份吗?我的邮箱:jiangboy123@gmail.com 非常感谢!
请给我一份,谢谢,我邮箱是332485730@qq.com
请给我一份 ,谢谢 ~ 邮箱地址:mola_zhang@126.com
能麻烦再加个好友么? 有写地方不懂 qq:49442315
oo496324502@sina.com 谢谢!!!!!!!!!!!!!!!
没有收到啊,能不能再发次。。。
您好,可以发一份吗?
liyan.leo@gmail.com
liyan.leo@gmail.com
谢谢
能不能发我一份 谢谢
1227gezi@163.com
最近正在研究,希望能得到完整的 C++test 7.2 的RuleWizard自定义规则创建文档,万分感谢!
谢谢~~~急需 170368715@qq.com