桩函数(stub)

今天师弟搞OpenCL时遇到了桩函数,结果运行出现错误。

不懂桩函数是什么,查了下。记录一下。

引用:

http://blog.csdn.net/u013467442/article/details/49887761

http://blog.csdn.net/vincetest/article/details/7387140

桩函数实际上是白盒测试中的概念,意思是使用一些自己定义的测试函数来替换当前需要测试的函数。被替换的函数可能是目前还没写完的,这样能够加速开发,或更好的找错误源。


以下为转载内容

首先我们得了解下什么是桩函数,如下有个定义,更具体可以查阅白盒测试相关文章了解。

测试桩:代替被测模块调用的子模块的实体,该实体一般为桩函数,这个测试桩就是我们所说的桩函数,

那么好好的一个函数,为啥我们非得要去整一个桩函数来替代呢,那不是没事找事么?说到点子上去了,这就是我要给各位看官讲的应用了。

比如有如下被测代码(C代码,为了便于看官阅读样例代码简单了点): 

[cpp]  view plain  copy
  1. //被测源码  
  2. //被调用函数  
  3. int Callfunc()  
  4. {  
  5.     return 88;  
  6. }  
  7.   
  8. int Myfunc()  
  9. {  
  10.     if(Callfunc()>10)  
  11.     {  
  12.         return 1;  
  13.     }  
  14.     else  
  15.     {  
  16.         return 0;  
  17.     }  
  18. }  

一、排除故障:在测试Myfunc()过程中发现问题,但不能确定是否因为Callfunc()引起时,我们使用桩函数来替代Callfunc(),桩函数的功能与Callfunc()的功能完全一致,必须得保证桩函数100%正确,这样我们就能排除是Callfunc()的问题还是Myfunc()的问题。

二、彻底替换:被测函数中所调用的函数因为进度等原因未实现,为了测试模拟一个函数来替代保证测试的正常运行,特别是在敏捷快速迭代的开发模式中应该比较经常出现。比如Callfunc()就是个空函数根本没实现什么功能,那么我们要测试Myfunc()就必须得模拟一个桩函数来达到测试目的。 

三、特定目的:为了达到特定的目的替代原始函数,比如强制改变测试分支,将复杂业务简单化,而不是真实的去构造设置很多业务环境来达到条件,为了节省开支使用简单实用的办法直接替代,比如Callfunc()中一般情况下都返回88,在极端苛刻的条件下才返回小于10的值,那我们想构造这种情况就很难了,但是Myfunc()中else分支要测试啊,那怎么办,只有打桩强制使得Callfunc()的返回值小于10即可。样例如下:

[cpp]  view plain  copy
  1. #测试代码  
  2. #定义一个桩函数  
  3. func stub_func(vc):  
  4.     print("in stub_func");  
  5.     return 8  
  6. end;  
  7.   
  8. #对Callfunc函数进行打桩  
  9. vd.Callfunc.stub(global.stub_func);  
  10.   
  11. #打桩时调用被测函数  
  12. vd.Myfunc();  
  13.   
  14. #删除桩  
  15. vd.Callfunc.stub(nil);  

白盒测试相关文章《白盒测试技术》
欢迎转载此文,转载时请注明文章来源:张元礼的博客 http://blog.csdn.net/vincetest



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值