51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1946|回复: 26
打印 上一主题 下一主题

单元测试的桩函数问题

[复制链接]
  • TA的每日心情
    开心
    2014-11-11 09:38
  • 签到天数: 2 天

    连续签到: 2 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2007-5-20 21:23:34 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
    在我们课本第一册单元测试后有个课后习题:

    函数A判断X和Y的大小来运行函数B或函数C
    函数B返回X加Y的值
    函数C返回X减Y的值


    例如:我们对函数A和函数B进行测试时,要写一个桩函数。

    问题1:我们要写的这个桩函数是不是就是函数C?

    问题2:如果不是,那么我们是不是还要先对这个桩函数进行测试呢?
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    该用户从未签到

    27#
    发表于 2007-8-1 16:58:08 | 只看该作者
    问题1:我们要写的这个桩函数是不是就是函数C?

    问题2:如果不是,那么我们是不是还要先对这个桩函数进行测试呢?


    不是
    桩函数是:在主函数未测试前,为了保证正确,模拟子函数

    如果孤立测试的话,就单独测试3个函数A,B,C

    自底向上测试,设置驱动函数分别测试函数B,C  再使用A,B,C一起测试

    自顶想下测试,设立两个桩函数模拟B,C函数的功能
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    26#
    发表于 2007-6-10 15:07:22 | 只看该作者

    456

    我要好好学习学习~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    25#
    发表于 2007-6-2 10:57:17 | 只看该作者
    seifer1754~讲的太好了~sdlkfj2 ~明白的很~DDD
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    24#
    发表于 2007-6-1 22:42:46 | 只看该作者
    讲的很好啊
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    23#
    发表于 2007-6-1 21:20:35 | 只看该作者
    如果采用自顶向下的方法来测试,开发桩函数确实需要根据用例的设计来开发,
    由此可见,开发桩函数是非常耗费工时的;所以一般企业都习惯采用自底向上的
    方法来进行测试,这样可以避免桩函数的开发,而对于驱动的开发相对来说要轻松
    一些,毕竟一个驱动可以采用循环来包含所有的测试用例。

    至于这个桩函数B的例子,让它返回9999,是为了能够返回一个与正确输出数值3 有很大
    差别的数字 而设计的。
    如果根据用例设计了两个桩函数

    int stub_add_B(int x, int y)
    {
    if((2 == x)&&(1 == y))
    return 3;
    else
    return -1;
    }

    int stub_sub_C(int x, int y)
    {
    if((1== x)&&(2 == y))
    return -1;
    else
    return 3;
    }

    那么在执行用例的时候,如果调用了错误的桩函数,
    对于驱动 void drive_A() 就无法正常的打印信息。

    所以,在设计桩函数的时候,返回的错误值最好选择一个不可能出现的数字,
    这样进行错误判断的时候才能够更明显。

    另外,需要指出的是,我们对函数A设计驱动和桩,其目的是为了测试函数A,
    是为了能够测试A的条件判断是否正确,所以针对 x >=y 这个判定条件,我们
    设计3个用例,(也就是说,设计3个桩函数)就能够覆盖了。
    我们不是要测试B和C的功能,对于B,C 我们会单独测试。
    一定要清楚我们测试的是哪一个函数,不要认为是将A,B,C三个函数一起测试。

    不知道我将的是否清楚,见笑见笑。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    22#
    发表于 2007-6-1 12:17:43 | 只看该作者
    请教~~!


    举个B的桩函数的例子.

    int stub_add_B(int x, int y)
    {
       if ( (2 == x) &&(1 == y) ) //


    写桩函数时,需要用具体数值代入,如果用例为多个时,是否需要每次在此处将x,y的值手动做更改.
         return 3;
       else //
    在此处为何需要用else,因为A的驱动已做到返回异常情况。如果程序在此处会出现异常情况,有可能会在哪里出现问题?请举个例子
         return 9999; //返回 9999 是为了能够明显的看出程序的输出结果异常
    }
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    21#
    发表于 2007-5-30 21:30:11 | 只看该作者
    看完次帖,对驱动和桩的概念越发明白了,多谢楼上的各位师兄们,谢谢!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    20#
    发表于 2007-5-30 19:44:37 | 只看该作者
    原帖由 jiangyuetian 于 2007-5-30 09:20 发表
    函数B和函数C进行孤立测试,是不是只要写驱动呢?



    如果函数B和C,只是被其他函数调用,那么B和C就是最底层的函数,所以我们在
    测试B和C的时候,就只需要针对B,C的输入条件进行用例设计,针对B,C的输出
    条件进行结果判断。
    当然,这个例子只是一个最理想情况下的,最简单的例子了,在实际的工作中,软
    件函数的调用关系要复杂的多。
    根据开发平台的不同,单元测试的框架也有很大的差别。所以在51testing,需要重
    点掌握测试的基本理论和方法,这样在进行用例设计的时候才能够尽可能多的覆盖
    所有条件。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    19#
    发表于 2007-5-30 17:51:08 | 只看该作者
    好东西啊
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    18#
    发表于 2007-5-30 09:20:05 | 只看该作者
    函数B和函数C进行孤立测试,是不是只要写驱动呢?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    17#
    发表于 2007-5-25 13:45:47 | 只看该作者
    不错
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16#
    发表于 2007-5-24 21:11:05 | 只看该作者
    sdlkfj3
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    15#
    发表于 2007-5-23 12:30:13 | 只看该作者
    设计桩和驱动还有从测试策略方面来考虑。
    我是采用由顶至下的策略来测试的,因为 A 调用了 B和C ,所以要为 B,C 设计桩,
    如果要采用由底至上的策略来测试,那么首先要对 B,C 分别进行孤立测试,
    然后用函数A 作为驱动来测试,在测试A的时候,就可以直接调用B,C了,这样可以减少桩的开发。
    基本理论就是这些,具体情况还有根据自己工作中的一些规定和需要灵活进行。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14#
    发表于 2007-5-23 12:24:53 | 只看该作者
    这道题我做了,也问了老师,现把我做的传上来,以便大家交流与沟通!

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2007-5-22 21:24:41 | 只看该作者
    这个还是偶们的作业呢,只是交上去也没评点...期待老师的指教.sdlkfj3
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12#
    发表于 2007-5-22 19:48:06 | 只看该作者
    sdlkfj3
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-11-11 09:38
  • 签到天数: 2 天

    连续签到: 2 天

    [LV.1]测试小兵

    11#
     楼主| 发表于 2007-5-22 12:49:36 | 只看该作者

    明白了

    谢谢各位的指教
    我明白了桩函数和驱动函数都是根据我们设计的测试用例,
    把具体的数值代入程序中,
    然后查看运行结果是否准确
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
    发表于 2007-5-22 08:14:18 | 只看该作者
    如果采用自顶向下的单元测试策略,那么要先测A函数,由于A没有被任何函数调用,并且如果A可以自己驱动的话(我这里都是基于这一假设,如果不能驱动,那么也要写驱动,请参考8楼),那么就不需要写驱动函数,但A要调用B和C,所以必须要写分别用来代替B和C的桩函数,具体内容参见8楼,8楼写的很详细;然后接着测B,此时A已被测试通过,所以直接可以用A作为驱动,但C必须要改为桩;最后测C,由于此时A和B均已测试通过,所以仍然用A作为驱动,而B也可以直接使用,不需要桩

    如果采用孤立的单元测试策略,那么测这三个函数没有先后顺序,测A时不要驱动,但要两个桩,测B和C时都是只要写驱动即可,不需要桩,因为它们没有调用别的函数

    如果采用自底向上的单元测试策略,那么要先测B或C,此时的方法与孤立策略相同,测A时,由于B和C均已测试通过,所以不需要桩,直接使用即可

    [ 本帖最后由 gzj_06 于 2007-5-22 08:31 编辑 ]
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
    发表于 2007-5-21 22:07:01 | 只看该作者
    同意8楼,b和c应该是属于被a调用,而不是桩~
    最直接的做桩就是直接输入数值进行判断~楼上讲的很明白~
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-16 10:11 , Processed in 0.081437 second(s), 25 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表