这里没有软件测试的泛泛理论,只有博主的最佳实践。 博主的研究方向为静态分析和性能测试,致力于各种测试工具的引入、评估和开发。 本博的测试文章均为作者原创,转载请务必注明出处。

c++test v7.1初级试用——1

上一篇 / 下一篇  2008-05-07 17:30:32 / 个人分类:C++test

c++test是Parasoft针对c/c++语言单元测试提供的一个经典的工具。下面我拿一个简单的例子来看看具体的效果如何。

准备工作

1 c++test v7.1安装成功

2 在visual c++ 6.0中编译通过的一段简单C代码,如下

 

希望c++test能发现的问题请看代码中的注释。

废话不多说,开始动手。

1 静态分析

  在启动静态分析之前,首先选规则,为了尽可能多的发现代码规则方面的问题,我在Test configurations中定制了我自己的静态分析配置文件,其中包含了MISRA的57条规则、MISRA-2004的192条规则,以及所有的BugDetective。因为我不用担心时间,所以把BugDetective options的Deep of Analysis设为deep(slower)。

  一切准备就绪,开始静态分析。

 

从上图可以看出,发现了6例违反规则的地方,打开看看是不是包含我的期望吧。

从上图的结果看出:c++test的静态分析完全满足预期。

根据静态分析的建议,修改后的代码如下:

2 单元测试

  c++test的单元测试步骤如下

   在Generate Unit Tests之前,同样先定制我自己的“生成单元测试”配置文件,修改标准模板中的Max. number of generated test cases(per function)参数为25(默认是10),即针对每个函数生成25个测试用例。

  开始生成测试用例,c++test针对以上代码,用时几秒钟,自动生成的测试用例如下

 

  使用自动生成的用例,直接run unit test

 

  Run这些用例仅仅用了2秒钟,看看有什么结果。

 

第一个除数为零的错误已经被发现,然后Review Unit Test Outcomes

在Review第7个用例的时候,n1=MIN(即-2147483648) n2=4 flag=2,expected result shoule be MIN-4,即-2147483652,但显然MIN-4已经 underflow了。观察实际的unit test result=2147483644,和expected result明显不符。

类似的还有第6个用例,MaxInt和MinInt相乘,肯定不是-2147483648(Line 506),都是由于overflow/underflow的原因导致的。

刚刚提到的溢出错误,虽然在大多数情况下都不会出现,但对于高安全的关键软件来说,这毕竟也是一个隐患,在编码时的单元测试就应该在代码的可靠性方面多做考虑。

3 回归测试

  在代码做过修改后,c++test还支持自动化的回归测试,它可以自动化的运行第一次的测试用例,自动检测输出是否和第一次运行时的正确输出一致,从而避免由于代码的修改影响原来的功能,同时也可以根据修改的情况增加新的test case。

4 结论

  经过以上简单的试用,c++test完全达到了预期的目标。在c/c++代码的单元测试中,c++test可以帮助程序员在编码的同时,以最低的时间成本预防一些常见的错误,从而提高代码的可靠性。

  接下来的几天,我还会继续试用,有新的进展和体会,随时会更新在本站,谢谢关注。


TAG:

引用 删除 kongkong2013   /   2013-10-30 16:57:21
老师你好,我执行c++test v7.1初级试用——1
中的单元测试,没有测出结果,需要什么设置吗?如何才能测出溢出和除数为0?
cncnily的个人空间 引用 删除 cncnily   /   2010-09-29 11:18:18
没钱买 用的6.7
cncnily的个人空间 引用 删除 cncnily   /   2010-09-29 11:18:05
5
引用 删除 954423389   /   2010-07-05 08:48:11
5
huior的测试烩 引用 删除 huior   /   2008-05-16 16:39:33
刚才有网友在MSN上提到c++test安装程序的问题,这里提醒一下:
1 c++test v7.1运行需要license,这个license和你的机器码绑定;
2 如果你的公司有意购买c++test,parasoft可以给你一个试用的license
3 还有其他疑问,可以给我留言
 

评分:0

我来说两句

Open Toolbar