当前位置: 首页 > 工具软件 > xTests > 使用案例 >

代码静态分析工具c类:prefast ,c++ test,xtests

公良鸿畅
2023-12-01
项目初始阶段,程序员写的代码刚刚进入单元测试,未算法调优,未集成测试。此阶段可以引用代码静态分析工具。

          由于目前的项目是非开源的c#项目,所以搜索了一些现有的比较主流的代码静态分析工具比拼一下。

           其中首当其冲的是prefast,这个是微软做的嵌入在测试套件中的工具,比较好用。在vs2005 Team Suite中,使用Prefast非常简单。修改你的工程属性,设置Enable Code Analysis For C/C++为Yes就可以,但是我尝试着找我们正在做的项目中,并未找到该配置项,后来多方查证,才知道,原来只有vs2005和08版本的team版中才有此配置项。
           其主要检查内容如下:初始化,空指针,内存泄漏,=与==的误用,安全问题,字符串错误,死循环等等等等,会将自动检查的错误在编辑器中显示成浅灰色。
           用其调优过的程序,其规范性与安全性提高很多,和c++ test相比,我所知有限,少了测试庄与边界值的检查与数据流的检查。
           那么说说c++test,有点类似于傻瓜照相机,属于白盒测试中的傻瓜工具,。
           C++Test速度慢,耗系统资源,测试执行效率低。

我觉得,如果你要马上看到测试结果,最好一个文件一个文件的测试,因为你还要仔细分析测试用例和测试结果。如果你想大规模的对很多文件进行单元测试,最好下班前做好准备,第二天早上来看结果。我对一个VC的工程,856K大小的源程序,46个C文件,用了两个小时。不过也是应该的,因为要生成很多的测试程序、桩程序和测试用例,很麻烦的。
基于消息驱动的,函数之间传递的参数多为消息结构或消息的指针,对于这种类型的函数测试,C++Test的自动生成的测试用例和测试结果都没有实际意义,必须人工编辑测试用例。
C++Test主要是对指针的保护、越界,数组的越界,变量的越界等很有用,对于数学运算等函数,可以明确知道返回值的,可以设置预期的返回值,来检查算法是否正确。对于可以通过以下的7 种类型的值的设置可以判断函数算法的正确也很有用。对于象数据库,可以用对函数来互相测试,例如测试建立一个数据库的函数,可以用写库函数或读库函数来判断是否建立正确。对于象消息的建立、释放等也可以用对函数来互相测试。本来单元测试的目的就是查找一些保护、越界错误,简单的可以通过以下7种来判断的函数的算法正确,代码走读是必不可少的。对于复杂的函数还要靠自己建立驱动程序和桩函数。
C++Test最优于其他工具的就是自定义桩函数的语法规则,但是parasoft技术支持没有相关的的详细文档提供,仍旧没有研究出其解决办法。基于消息驱动的,函数之间传递的参数多为消息结构或消息的指针,对于这种类型的函数测试,C++Test的自动生成的测试用例和测试结果都没有实际意义,必须人工编辑测试用例。
      xtests是开源的灵活的代码静态分析工具,其小巧灵活可配置高,目前正在研究,只会在c++6.0中应用,vs.net中如何应用,还没有研究明白,该部分待续
 类似资料: