浅谈白盒测试中桩函数的灵活应用

原创 2012年03月23日 14:58:19

浅谈白盒测试中桩函数的灵活应用

作者:张元礼

http://blog.csdn.net/vincetest

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

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

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

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

//被测源码
//被调用函数
int Callfunc()
{
    return 88;
}

int Myfunc()
{
    if(Callfunc()>10)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

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

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

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

#测试代码
#定义一个桩函数
func stub_func(vc):
    print("in stub_func");
    return 8
end;

#对Callfunc函数进行打桩
vd.Callfunc.stub(global.stub_func);

#打桩时调用被测函数
vd.Myfunc();

#删除桩
vd.Callfunc.stub(nil);

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

函数的打桩和hook

刚参加工作,总是听到PM分配任务的时候提到打桩的概念。查看项目代码的时候又碰到打桩函数中的HOOK技术。对于这两种技术我以前都没有接触过,在网上查了下资料,备份如下,希望对自己和他人都能有所帮助。 ...
  • mr_gongcheng
  • mr_gongcheng
  • 2012年03月27日 23:59
  • 2493

stub函数

stub 函数,叫它桩函数,存根函数都可以,用一个桩函数替换一些接口函数,用于测试当前函数的特性。譬如说,要测试一个函数 f()void f(){var = g(...);}f()函数中调用了函数 g...
  • u013467442
  • u013467442
  • 2015年11月17日 15:06
  • 1801

C 语言打桩问题(interpositioning)

《c专家编程》第五章p102写到:c语言中可以通过编写与库函数同名的函数来取代该库函数的行为。而且不仅自己所进行的所有对该库函数的调用将被自己版本的函数调用所取代,而且所有调用该函数的系统调用也将用你...
  • whuantlee1992
  • whuantlee1992
  • 2016年05月23日 21:37
  • 1257

认识单元测试中的打桩

什么是桩        桩,或称桩代码,是指用来代替关联代码或者未实现代码的代码。如果函数B用B1来代替,那么,B称为原函数,B1称为桩函数。打桩就是编写或生成桩代码。        打桩的目的 ...
  • wangwencong
  • wangwencong
  • 2012年11月16日 10:27
  • 15735

一种C语言打桩函数的源码实现

实际工作中,在我们写好源代码后,通常需要对代码进行UT、FT测试,这个时候我们经常需要“打桩”。...
  • guoyajie1990
  • guoyajie1990
  • 2017年08月10日 07:18
  • 688

软件测试中测试桩和测试驱动的含义

所谓的测试桩,就是你负责测试的模块/方法所调用的,所以你需要模仿他们做一个返回值(假的,但符合设计)。 桩的英文是stub;是指一个软件模块的框架或特殊目标实现,主要用于开发和测试一个组件,该组件调...
  • pfm685757
  • pfm685757
  • 2017年02月08日 19:24
  • 2051

软件测试中桩模块与驱动模块的概念与区别(转载)

什么是测试桩和驱动?
  • snlying
  • snlying
  • 2011年04月28日 16:50
  • 14557

Java测试中建桩-Method Stubs

桩,或称桩代码,是指用来代替关联代码或者未实现代码的代码。打桩就是编写或生成桩代码。 打桩的目的主要有:隔离、补齐、控制。 隔离是指将测试任务从产品项目中分离出来,使之能够...
  • qiangweihu
  • qiangweihu
  • 2014年11月24日 11:16
  • 1100

Java单元测试进阶之如何打桩(用easymock轻松打桩)

打桩(mock)是单元测试的重要内容和难点,学好打桩的技术,做单元测试基本就没什么困难了。         mock有两种,一种是静态的,一种是动态的。静态的就是在写测试代码之前根据需要打桩的类生成...
  • lykangjia
  • lykangjia
  • 2015年05月02日 14:39
  • 3300

浅谈白盒测试中桩函数的灵活应用

浅谈白盒测试中桩函数的灵活应用作者:张元礼http://blog.csdn.net/vincetest首先我们得了解下什么是桩函数,如下有个定义,更具体可以查阅白盒测试相关文章了解。测试桩:代替被测模...
  • vincetest
  • vincetest
  • 2012年03月23日 14:58
  • 5908
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浅谈白盒测试中桩函数的灵活应用
举报原因:
原因补充:

(最多只允许输入30个字)