nwj 2004-7-16 12:35
编写驱动模块及桩模块程序
初涉及测试,听说测试还需要编写驱动模块及桩模块程序等测试程序,有不知道难不难,公司是作通迅产品的,那位可告诉我大体上驱动模块是怎样写的,用什么语言写?基于公司的产品测试,学习语言更应测重那一方面?
天网 2004-7-16 13:40
驱动模块主要完成以下事情:
1、接受测试输入;
2、对输入进行判断;
3、将输入传给被测单元,驱动被测单元执行;
4、接受被测单元执行结果,并对结果进行判断;
5、将判断结果作为用例执行结果输出测试报告。
被测单元用什么语言,驱动就用什么语言写。
总而言之,写驱动和桩不需要太高深编程知识。如果有模板或框架作为参考的话,差不多就成了一个体力活。
nwj 2004-7-16 14:18
谢谢天网
谢谢天网
nwj 2004-7-16 14:20
天网能不能给予我一个驱动的例子
天网 2004-7-16 15:04
一个简单例子:
/*被测程序*/
int Fun(int in)
{
if (in >= 0)
{
return 1;
}
else
{
return -1;
}
}
那么通过TCL进行扩展指令编写时,针对该被测函数,驱动如下:
/*用户自己扩展的用户指令,用来驱动被测函数*/
int Ex_TestFun(ClientData clientData,Tcl_Interp * interp,int argc, char* argv[])
{
int i;
int ret,iExceptedRet;
//打开测试结果记录文件
FILE * out;
out = fopen("D:\\result.txt","a");
//第一步:检查用户输入参数个数是否正确
if (3 != argc)
{
fputs("Parameters error",out);
fflush(out);
return TCL_ERROR;
}
//第二步:取出用户输入参数
if (TCL_OK != Tcl_GetInt(interp,argv[1],&i))
{
return TCL_ERROR;
}
if (TCL_OK != Tcl_GetInt(interp,argv[2],&iExceptedRet))
{
return TCL_ERROR;
}
//第三步:将参数传递给被测函数
ret = Fun(i);
//第四步:将被测函数执行结果和输入的期望结果进行比较,根据比较结果作为用例执行结果输出到测试报告中
if (ret != iExceptedRet)
{
fputs("test fail",out);
fflush(out);
}
else
{
fputs("test success",out);
fflush(out);
}
return TCL_OK;
}
lhtia 2004-7-18 05:17
天网真是好人啊。
我是新手,我也问你一个问题吧,如果要一个被测程序是一个void Fun(int in)
,函数没有return value,那么该怎么测出它的bug呢?能不能用例子说明一下。
多谢了。
archonwang 2004-7-18 22:06
函数没有返回值?
不明白。。。
lhtia 2004-7-19 05:04
比如说,该如何测试下面一个函数:
public void Fun(int in){
System.out.println("This is fun() method.");
}
或者
public void Fun(int in){
throw new Exception("Exception occured");
}
我最近一直在想类似于这种返回值是void的method该如何测,但是毫无办法。因为函数本身没有返回值,就无法确定期望值,这样给测试带来了一定的难度。
我是测试新手,不知道用什么方法可以解决,希望高手能帮一把。
testing 2004-7-19 09:38
建议函数一般增加返回值,除非是功能比较简单,代码量很小的函数,并且函数于外面没有接口的情况下,可以采用VOID返回类型。
另外,少于30代码行的函数不需要做单元测试,只要代码走读即可。此外,这两个函数也有问题,函数的参数在函数体内没有使用过,如果参数在函数体内被使用了,那么在使用之前应该对参数的合法性检查,如果不合法返回失败,如果检查合法,继续执行,最后返回成功。
天网 2004-7-19 09:58
呵呵,这是一个好问题。
单元测试是测试在单元内走不同路径时其功能是否实现,那么单元的功能是否实现是我们需要关注的。前面解释的是验证返回值是否和期望一致,对于被测单元的调用函数来讲,也许关注该返回值就行了。
但在lhtia的问题中,没有返回值,那么这里关注的功能实现结果肯定不是返回值了,具体关注什么需要根据具体单元功能而定,例如单元实现是为了改变某些全局变量,从而影响软件其他部分,那么验证期望结果时是需要验证该全局变量是否和期望值一致;又例如单元实现的功能是向其他单元发送消息,那么单元测试时需要在驱动模块创建接受消息函数,用来接受被测单元发送的消息,从而验证是否实现了预期功能。
希望上面解释能回答这个问题。
[ Last edited by 天网 on 2004-7-20 at 10:25 ]
lhtia 2004-7-19 19:26
谢谢站长和天网的解答。
天网的解决方案太棒了! 我明白你说得第一种办法,就是“验证该全局变量是否和期望值一致”;你说得第二种“单元实现的功能是向其他单元发送消息”,返回值是void的函数应该不能传送消息的吧,这种方案是不是用于“验证返回值是否和期望一致”,如果我理解错了,请多多指点。
wgfxman 2004-7-20 09:38
很好的贴子,学到了不少具体操作的思路,谢谢搂主,天网,站长:)
iamxiaobao 2004-8-12 09:40
我也谢一下
celine 2004-8-13 10:27
诚谢,关注Ing
lovelyruo 2004-8-13 10:56
请教TCL的全称是什么?谢。
是tool command language的缩写么?
[[i] Last edited by lovelyruo on 2004-8-13 at 11:00 [/i]]
lesley 2004-8-17 12:45
好厉害!但基本看不懂啊!测的是纯软件的东西吗?好像是白盒测试吧
katefan 2004-8-17 13:46
行外话
我也不太明白,感觉反正就是验证单元的功能和预期结果是否一至吧,如果这段代码要实现的功能是:改变某个全局变量,那就看它是否实现了这个功能,实现了就对了,那如果他可以实现这个功能,是不是通过开发一个驱动程序,就可以对被测试单元进行控制了呀?需不需要对驱动程序进行测试呢,哪果驱动程序开发的有问题,那怎么办呢?
zhushi_002 2004-9-8 10:56
读过受益菲浅啊,小弟初次接触测试,还有那位大哥能给介绍一下 桩模块程序 啊
if-else 2004-9-14 16:21
不错.!
chatboy008 2004-9-16 12:55
好
easterner 2004-9-21 14:57
good
easterner 2004-9-21 15:04
tcl
tcl是工具吗???“return TCL_ERROR“ 变量值怎样指定的亚
houqingshan 2004-9-21 15:57
大家好
我也是新手。不过我们公司测试用的最多的是黑盒测试。哪位高手能告诉我一些好的黑盒测试方法。谢谢。
houqingshan 2004-9-21 15:59
大家好
我也是新手。不过我们公司测试用的最多的是黑盒测试。哪位高手能告诉我一些好的黑盒测试方法。谢谢。
hxf 2004-9-21 17:31
很好,我也学到了很多东西。谢谢了。
黑盒测试方法:等价类划分的方法、错误推测法、边界值分析的方法、因果图法。
Fuli 2004-9-23 14:41
狂顶!!!!!!!!!!!!!!!!!!!!!!
ayong401 2004-9-23 15:38
顶一下.......
panqiang 2004-11-2 15:53
我是一个刚刚才结触测试的小弟,我现在要学怎么样去写用例,怎么样去用性能测试,还有要看在测试过程中遇到关于数据库报表的问题,我真的给胡涂了,都不知道以后该干些什么了。希望各位师父们就能教教我该怎么办。
neusdc 2004-11-5 10:57
good
98312226 2004-11-9 15:47
狂顶!!!!!!!!!!!!!!!!!!!!!!
金毅 2004-11-18 10:13
非常棒,顶
tempuser 2004-11-18 16:04
好贴
plqueen 2004-11-22 09:10
good!
xinwuhan2006 2004-11-27 12:49
下载了!
虽未来得及看,但还是非常感谢!
meizi 2004-12-7 17:29
好帖子。不过能否举个例子。谢谢
meizi 2004-12-7 17:30
单元测试是测试每一个函数吗?
好像不能理解,我觉的应该是测一个独立的模块吧
lcy-1220 2004-12-8 16:47
好,我顶
shuzhongbo 2004-12-20 13:34
单元测试中的返回值与期望返回值进行比较,如在函数中有写数据库的操作,如何检查
如:Bool CreateUser()
{
insert into user(name,age)
values ("test",25);
return true;
}
例子比较简单,说明意思
如果返回的结果是True,则如何验证数据真的写入到数据库中?
lazy_monkey 2004-12-28 17:44
是不是再从数据库中读数据,进行比较?
AllenTing 2005-1-18 22:15
Mark...