C/C++白盒测试工具之codeviz安装使用(续)

来源:互联网 发布:powerdesigner有mac版 编辑:程序博客网 时间:2024/06/05 01:04

为什么说CodeViz是白盒测试工具?

可能有些人对博文的标题会提出些异议,没错,CodeViz这款软件的确是用来进行代码分析的一款利器,能够根据需要获取到整个程序中的所有的函数调用关系,为程序员阅读代码带来了极大的方便。从测试角度来讲,代码肯定是测试对象之一,我们要测试代码,即要进行白盒测试,作为一种测试方法,白盒测试最有可能是发生在单元测试和集成测试阶段,在这两个阶段,都不可避免的阅读代码,既然工具嘛,用来做测试了,所以我就可以称其为一款测试工具了,的确,在现实中它也为我的白盒测试带来了很大的帮助,接下来就谈下这款工具在进行测试时都能够有哪些益处。

CodeViz可以给白盒测试人员带来哪些帮助?

上边谈到了软件测试按照阶段可以划分为单元测试、集成测试、系统测试及验收测试。前两个阶段会比较多的使用到白盒测试技术,后两个阶段通常会采用黑盒测试技术。文中提到CodeViz为白盒测试工具,那么就要从单元测试和集成测试谈起。
  1. 单元测试阶段。首先在该阶段要确定测试对象,在一个稍微大些的项目中,单元的数量就数不胜数了,如果对于所有的单元都进行用例的设计和执行,显然是不现实的。通常做法是根据一些原则确定测试哪些单元,对于这些单元进行测试时如何确定优先顺序。这里就可以应用到CodeViz工具了,根据单元测试的原则,顶层模块和被频繁调用的模块都是重点测试模块,通过CodeViz生成的函数调用关系图,可以很快确定出这样的被测单元。确定测试单元是单元测试阶段的第一个应用,第二应用就是对于设计的验证了,良好的设计结构应该是顶层扇出比较大,中间扇出小,底层模块应该是有大的扇入。通过CodeViz加上公司自己定义的一些扇入扇出的规范,就可以对检查模块设计的合理性。
  2. 集成测试阶段。在测试策略上,首先可以通过CodeViz生成的函数调用图,确定集成测试的策略,采用自底向上还是自顶向下,是深度优先还是广度优先。接下来可以通过集成测试阶段的测试内容进行确定。该阶段的测试内容有适合性、准确性、互操作性、容错性、时间特性等方面。对于这些内容,大部分要确定是哪些模块间的指标需要重点测试,这些同样可以通过函数调用图进行进行确定。
  3. 以上是最近通过对于CodeViz结合一些测试思想进行的总结,当然这个主要适合一些中型的公司,前期文档没有那么健全,而又有白盒测试的需求的情况。对于大型软件公司,如果开发过程控制比较严格的话,可能前期在设计阶段就会有了UML的各种图,这样就可以使用这些图进行对应的白盒测试了。个人理解,欢迎拍砖。后面需要通过不断的实践进行丰富和补充。

CodeViz使用补充

前两天时间关系,只是将环境搭好,能够使用CodeViz对C语言项目进行函数调用图的生成。遗留了C++项目的生成情况,今天尝试了下C++项目的调用图生成。开始没有好好好看文档帮助,结果尝试了几次都不能生成函数调用图,每次都是只生成了-f参数指定的函数名一个函数名的图,在网上查了下,发现几乎所有的资料都是用c程序做的示例。没有捷径,所以只用耐心看了一下genfull和gengraph两个脚本文件。genfull的-h选项的帮助太简单了,跟据这个并不能够解决这个问题,后来没有办法才直接进入到genfull脚本中进行查看,也就是通过查看genfull脚本才发现了如何生成c++项目的函数调用关系图的,其实蛮简单,现在越来越习惯这些开源软件的README和帮助文件,下边简单的genfull脚本中的帮助说明做下翻译 (不一定到位,按照自己的理解):
  1. genfull — 从源码中的.cdepn文件生成一个关系调用图(开始的时候,就是给cdepn误导了,以为只有一个cdepn选项呢,所以花了点时间思考)
  2. genfull [选项]
    • 主要选项
      • -d --toplevel 顶层源码目录 (默认为当前目录)
      • -f  --file 扫描所有cdepn文件 (默认是扫描所有文件)
      • -s  --subdirs 扫描的子目录 (默认扫描所有目录)
      • -g --method 收集数据的方法(默认为 cdepn)
      • -o --output 输出的目标文件(默认为./full.graph)
      • -h --help 输出帮助信息(注意:这个选项输出的帮助信息并不全)
      • --version 输出版本号
    • Post-Processing选项
      • --skip 跳过数据收集,紧做post-process操作
      • --pp-stack 计算堆栈的使用情况
    • 收集方法选项列表(-g 后边的参数)
      • cdepn  从补丁后gcc编译输出后的.cdepn文件中收集信息
      • cobjdump  分析没有stripped的二进制文件,从而生成调用关系图(?)
      • cppdepn  同cdepn, 适用C++项目
      • cppobjdump 同cobjdump,适用于C++项目
      • cncc 从ncc编译后的文件中收集信息
  3. 几个应用实例
    1. genfull -g cdepn -s /usr/src/linux
    2. genfull -g cobjdump -s /usr/src/linux -f /usr/src/linux/vmlinux
    3. genfull -g cncc -s /usr/src/linux
    4. genfull -g cncc -f /usr/src/linux/code.map.nccout
    5. genfull -g cppdepn -s /usr/src/avifile-0.6
    6. genfull -g cppobjdump -s /usr/src/avifile-0.6 -f /usr/src/avifile-0.6/player/aviplay

0 0
原创粉丝点击