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