第4代白盒测试方法介绍--VcTester实践篇

本文介绍了第4代白盒测试方法4GWM的实践,结合VcTester工具阐述在线测试、灰盒调测和持续测试的特性。通过冒泡排序模块的测试案例,演示了如何利用脚本驱动和脚本桩进行测试,并讨论了测试设计的重要性。
摘要由CSDN通过智能技术生成

关键词: 白盒测试 4 测试方法 4GWM 在线测试 持续测试 灰盒 脚本驱动 脚本桩

  要: 本文是第4代白盒方法测试实践介绍,结合使用VcTester实施一次具体测试过程,描述在线测试、灰盒调测、持续测试等特性的实践特征。

缩略语:

4GWMThe 4th Generation White-box-testing Methodology,第4代白盒测试方法

XPExtreme Programming,极限编程

SARSelect And Run,选中执行

PCOPoints of Control and Observation,观察控制点

TDFTest Design First,测试设计先行

LICCLocation-Independent Call Coverage,位置无关调用覆盖

LDCCLocation-Dependent Call Coverage,位置相关调用覆盖

TCCTest Case Coverage,用例覆盖度

 

1从实践到理论,再到实践

1.1先实践后总结

本文的上篇从理论角度描述了4GWM的九项关键特征,本文再从实践角度诠释这些特征。

4GWM方法来源于长期工程实践,强调实践性是该方法论的显著特色,现实测试中某个问题难以解决,我们先尝试各种各样方法,最后形成最佳解决方案,归结升华就成为4GWM方法论体系。

比如,当年引入测试先行,并非要赶XP时髦,而是克服一个具体问题。在推行在线测试时,许多项目组反映测试工具好用但缺少意义,因为测试针对看得见的代码,比方计算“1+1”,设计用例测试它,其结果1+1肯定是等于2的。这个问题在一次测试模式下普遍存在,其根源在于测试设计方法,若只按代码(而非按规格)设计用例,肯定会漏掉不少设计问题。尽管如此,我们后来的实践表明,这个问题并不是向大家强调要改变测试习惯就能解决的,若从根本上去解决,还得引入测试设计先行的实践。

再如,引入测试设计程度评估,也是为了解决一个长期实践中难以回避的问题,即:覆盖指标可以评估大家有没做过测试,但无法推断是否用心的做测试了。统计问题缺陷密度不足以说明问题,因为发现问题数量直接与被测代码质量相关,测试发问题多了,一定程度上能说明问题,但发现问题少了就不好说,高手会宣称自己写的代码不必测,而假装高手的人会说,“嗯,我写的代码问题本来就少嘛!”,引入用例覆盖度尝试解决这个问题。

1.2已有的4GWM实践

目前第4代白盒方法主要实践集中在C语言与CSE语言,包括在线测试、持续测试等特性,已在许多产品得到充分验证。当然,4GWM体系经历长期发展才最后形成,少量近期发展的特性(如测试用例重构)经历市场验证尚不充分。

已有VcTester工具支持C语言的4GWM方法测试,该工具分共享版与商用版两个系列,共享版可从http://www.cse-soft.org/VcTester下载,支持脚本驱动、脚本桩、在线测试等功能,商用版本则完整支持4GWM,共享版的功能弱一些,但针对简单的个人应用已基本足够。

下文并不尝试把4GWM涉及的功能彻头彻尾介绍清楚,做到这一点实际很难,也不见得必要。我们仅列举该测试方法区别于常规方法的主要特征,更细节内容,请大家参考VcTester相关参考手册。4GWM是通用方法论,对具体被测语言没有限定,既然C语言能够支持,相信多数编程语言都能支持(开发一个类似VcTester的工具即可),下面我们拿VcTester商用版为例展开介绍。

1.3从一个例子开始

下面我们以开发“冒泡排序”模块为例展开叙述。我们的任务是:使用冒泡排序算法,开发一个原型为“void BubbleSort(OBJ_DATA_PTR ObjList, int iMax)”的函数,该函数对传入参数ObjList数据排序,BubbleSort调用ObjCompare(Obj1,Obj2)函数两两比较数据大小,比如ObjCompare(Obj1,Obj2)返回小于0的值表示Obj1小于Obj2,返回0表示两者相等,返回值大于0表示Obj1大于Obj2

源码请参见附1:被测代码BubbleSort

2在线测试

2.1在线驱动与在线桩

被测代码已定义待排序的数据结构:

typedef struct {
  int Level;
  double Data;
} OBJ_DATA;

该数据定义映射到CSE脚本就是vt.struct.OBJ_DATA,比较两个OBJ-DATA数据,先比较Level子成员,Level相同再比较Data成员,BubbleSort按此规则将数组从小到大排序。开发功能代码之前,我们先编写如下调测脚本:

vc = newVarContainer();
vc.buff = newArray(vt.struct.OBJ_DATA,3);
vc.buff[0].Level = 0;
vc.buff[0].Data = 4.0;
vc.buff[1].Level = 0;
vc.buff[1].Data = 3.0;
vc.buff[2].Level = 0;
vc.buff[2].Data = 1.0;

vd.SortAndPrint(vc.buff,2);
assert(vc.buff[0].Data() == 1.0);
assert(vc.buff[1].Data() == 3.0);
assert(vc.buff[2].Data() == 4.0);

接着设计功能代码:

int __stdcall ObjCompare(OBJ_DATA *Obj1, OBJ_DATA *Obj2)
{
    RaiseExpt("ENotImplement",NULL);
}

void BubbleSort(OBJ_DATA_PTR ObjList, int iMax)
{
  int i,j,exchanged;
 
  for (i = 0, i < iMax, i++) // maximum loop iMax times
  {
      exchanged = 0;
      for (j = iMax-1, j >= i, j--)
      {
          if ( ObjCompare(&ObjList[j+1],&ObjList[j]) < 0 )
          {    // exchange the record
              ObjList[j+1] = ObjList[j];
              ObjList[j] = ObjList[j+1];
              exchanged = 1;
          }
      }
      if ( !exchanged ) return;
  }
}

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值