C++ Test是Parasoft公司出品的一个针对C/C++源代码进行代码风格测试,自动化单元测试的工具。
C++ Test能给我们带来什么?
1. 可以帮助我们检查程序的编码情况,判断是否严格按编码规范进行开发。
2. 对C/C++源代码进行分析,自动生成相应的测试用例,对函数进行初步的测试。
C++ Test的使用比较简单。可以自己新建一个工程,也可以根据一个VC工程生成一个工程。可以对整个工程进行全面的测试,也可以一次只对一个C/C++源文件进行测试。
图1
1. Command1:静态分析当前的文件。主要是对代码的风格进行检查。
2. Command2:动态分析当前的文件。主要是自动生成测试用例,对函数进行测试。
3. Command3:静态分析和动态分析。
4. Tab1: 显示源代码。
5. Tab2: 显示静态分析结果。
6. Tab3: 显示动态分析结果。
7. Tab4: 显示测试进度。
8. Message Area: 显示一些具体的信息。
C++ Test的使用
让我们先来看看一段很简单的程序。
#include "windows.h"
int Sum(int *pNum1, int *pNum2)
{
return *pNum1 + *pNum2;
}
int main()
{
int nSum;
int Num1,Num2;
Num1 = 1;
Num2 = 2;
nSum = Sum(&Num1,&Num2);
return 0;
}
够简单了吧?并且也许你也写过这些代码。但这些代码书写的风格如何?存在隐患吗?那就用C++ Test分析一下。
先来看看代码风格如何。在上图中就显示出很多,大致可归纳为如下几种:
1. 如果不允许改变参数的内容,声明参数为const。
2. 不要使用tab作为空格。
3. 全局函数或变量前使用::操作符。
4. 所有int型的变量都要以“i”开头。
5. 变量声明,但没有初始化。
6. Return的值要使用括号。
有六条?不太相信自己的眼睛吧?我想要有好的风格,这些建议是比较好的,但在实际工作中可能规定的太细了。要想把一匹野马驯服,还是要慢慢来的。
C++ Test可以设置、编辑、创建静态编译的规则。就让我们来设置一下。
图2
打勾的就是选择的规则,在静态分析时就会使用这些规则。在图1的Message Area中第一行显示表示所有int型的变量都要以“i”开头属于User-110规则。如果你想取消这条规则,那你在图2中找到这条规则,把勾去掉就行了,重新静态分析一下,这条提示就没有了。
那么动态分析能做什么呢?我们先来看看结果。
图3
先看第一行,这就是分析结果的总结。它表明的意思是总共产生了51条测试用例,37条测试成功,14条测试失败。
先分析第一条失败的测试用例(AUTO_14_A0),以pNum1 = NULL, pNum2=NULL为参数输入,测试失败,这就表明在函数中没有对参数的有效性进行判定,这就是程序的一个隐患。当然用户可以对测试用例进行删除和更改,还可以添加自己的测试用例,以弥补自动生成的用例。
上面提到可以创建用户自己的代码规则,我这里也就不多说了,因为C++ Test自带的帮助已经说的很详细了。
总结
使用了一下C++ Test,初步的个人感受有以下三点:
1. 对项目的代码统一还是很有帮助的,同时也能让编程者慢慢养成好的编码习惯。因为通过静态分析,能强制你书写规范的代码。
2. 对项目的一些简单函数进行测试,特别是边界的测试,排除一些基本的错误或代码的隐患。
最好在项目的一开始就使用C++ Test,边编写代码边检查,这样就不会欠下太多的债。在试用中发现,如果项目比较大时,最好不要直接对一个工程进行自动测试,而应按文件一个一个地测试,否则可能会导致程序死掉。