查看完整版本: 编写驱动模块及桩模块程序

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...
页: [1] 2 3
查看完整版本: 编写驱动模块及桩模块程序