51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4184|回复: 10
打印 上一主题 下一主题

[讨论] 请教一个简单的测试函数的设计方法

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-6-6 11:22:57 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
被测函数:int anum(x,y)
{   
    int ret;
    switch(x与y的表达式)
       {  case 0:
                     ret=a0();break;
          case 1:                      ret=a1();break;
          case 2:                      ret=a2();break;
          case 3:                      ret=a3();break;



          default:
                     ret=a4();break;      
        }  
    return ret;
}
   其中a0,a1,a2,a3,a4这五个函数处理的内容虽各不相同,但返回值却都为0,那该如何设计测试函数anum的测试用例呢?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

11#
发表于 2007-8-11 20:02:44 | 只看该作者
sdlkfj2
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2007-6-28 21:59:38 | 只看该作者
这种测试我们称为控制测试,在电信软件及与硬件关系紧密的软件项目的单元测试中有广泛的应用。实际上,这种测试只需要判断各种输入时程序是否调用了应该调用的函数,至于返回值,在这种测试中意义不大,只要判断是否调用就行了,复杂一些的情形下,还要判断调用次数。

说来简单,做起来可不容易。Visual Unit 1.0也无法简单地完成这种测试,这里说一下2.0对这种测试的解决方法。如果使用2.0,可以在“用例助手”中,双击当前用例预期会调用的函数如a3,在弹出的对话框中,桩目标选择“仅设定预期执行次数”,“预期执行次数”使用默认值即至少一次(也可以设定大于小于或等于某个次数,还可以设为不执行),点击确定就OK了。执行测试时,如果用例没有调用预期的子函数,就会报告错误。

用上述方法为每个用例设定预期调用的子函数,就可以完成完整的测试。

Visual Unit 2.0尚未发布。

[ 本帖最后由 VisualUnit 于 2007-6-28 22:55 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2007-6-28 16:46:03 | 只看该作者
受益匪浅
回复 支持 反对

使用道具 举报

该用户从未签到

8#
 楼主| 发表于 2007-6-11 09:59:58 | 只看该作者

回复 #7 quwulin 的帖子

???
根绝?
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2007-6-9 20:53:41 | 只看该作者
我觉得要根绝x和y的函数来了.
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2007-6-8 17:04:26 | 只看该作者

回复 #4 dxhwj 的帖子

非常感激dxhwj
sdlkfj3 sdlkfj3
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2007-6-8 12:24:35 | 只看该作者
想想还是觉得不对哎,看来只有关于什么是桩函数可以看看了sdlkfj3
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2007-6-8 11:44:27 | 只看该作者

我是这样理解的。。。不能保证一定对哦,可以参考一下

anum(x,y)需要调用a1()、a2()这些函数,因为被测函数是anum(x,y),它在执行过程中调用了其他函数才能运行,就设计几个桩函数来替代a1()、a2()这些函数实现的功能。如果要测a1()函数,没有调用其他函数的话就不需要写桩函数。
如果采用孤立测试的话,搭建测试环境时就需要对anum(x,y)函数写一个驱动函数来驱动它执行,再写五个桩函数来代替它调用的函数,然后测它调用的函数,每个函数要写一个驱动函数驱动它执行。
在这里只有anum(x,y)函数的实现过程,写测anum(x,y)函数的用例时,没有考虑a()函数如何实现
假如是z=x-y,
定义输入参数:    int x;int y;
定义期望输出(c为期望的中间输出,Result为期望的最终输出) :    int c;int Result;   
定义测试实际输出(z为期望的中间输出,Ret为期望的最终输出):    int z;int  ret;
用例输入:   x=2;y=1;
期望输出:   c=1; Result=0

z=x-y;中间变量结果
ret= anum(x,y);驱动anum()函数去执行,最终输出

结果比较:
if ((Ret != Result) || (z != c))  {输出失败;}
else {输出成功;}
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2007-6-7 08:40:27 | 只看该作者

回复 #2 dxhwj 的帖子

恩,有点明白了,我是个新手,
还想问一下,什么是桩函数?中间结果和最终结果该如何设计?
这些概念还未成接触到。
回复 支持 反对

使用道具 举报

该用户从未签到

2#
发表于 2007-6-6 13:02:12 | 只看该作者
返回值都一样挺郁闷的。。
让我设计的话我就这样设计一下:
anum(x,y)是被测函数,a1()、a2()这些是桩函数
为被测函数每个分支设计测试用例,在每个测试用例中把“x与y的表达式的值“作为中间输出,“a()的结果“做为最终输出,把实际的中间输出结果、最终输出结果和预期的中间输出结果、最终输出结果做比较。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-16 04:32 , Processed in 0.067861 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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