nwj 发表于 2004-7-16 12:35:55

编写驱动模块及桩模块程序

初涉及测试,听说测试还需要编写驱动模块及桩模块程序等测试程序,有不知道难不难,公司是作通迅产品的,那位可告诉我大体上驱动模块是怎样写的,用什么语言写?基于公司的产品测试,学习语言更应测重那一方面?

天网 发表于 2004-7-16 13:40:54

驱动模块主要完成以下事情:
1、接受测试输入;
2、对输入进行判断;
3、将输入传给被测单元,驱动被测单元执行;
4、接受被测单元执行结果,并对结果进行判断;
5、将判断结果作为用例执行结果输出测试报告。

被测单元用什么语言,驱动就用什么语言写。

总而言之,写驱动和桩不需要太高深编程知识。如果有模板或框架作为参考的话,差不多就成了一个体力活。

nwj 发表于 2004-7-16 14:18:08

谢谢天网

谢谢天网

nwj 发表于 2004-7-16 14:20:50

天网能不能给予我一个驱动的例子

天网 发表于 2004-7-16 15:04:35

一个简单例子:

/*被测程序*/
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,&i))
   {
            return TCL_ERROR;            
   }

   if (TCL_OK != Tcl_GetInt(interp,argv,&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:41

天网真是好人啊。

我是新手,我也问你一个问题吧,如果要一个被测程序是一个void Fun(int in)
,函数没有return value,那么该怎么测出它的bug呢?能不能用例子说明一下。

多谢了。

archonwang 发表于 2004-7-18 22:06:14

函数没有返回值?
不明白。。。

lhtia 发表于 2004-7-19 05:04:13

比如说,该如何测试下面一个函数:

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:46

建议函数一般增加返回值,除非是功能比较简单,代码量很小的函数,并且函数于外面没有接口的情况下,可以采用VOID返回类型。

另外,少于30代码行的函数不需要做单元测试,只要代码走读即可。此外,这两个函数也有问题,函数的参数在函数体内没有使用过,如果参数在函数体内被使用了,那么在使用之前应该对参数的合法性检查,如果不合法返回失败,如果检查合法,继续执行,最后返回成功。

天网 发表于 2004-7-19 09:58:18

呵呵,这是一个好问题。
单元测试是测试在单元内走不同路径时其功能是否实现,那么单元的功能是否实现是我们需要关注的。前面解释的是验证返回值是否和期望一致,对于被测单元的调用函数来讲,也许关注该返回值就行了。
但在lhtia的问题中,没有返回值,那么这里关注的功能实现结果肯定不是返回值了,具体关注什么需要根据具体单元功能而定,例如单元实现是为了改变某些全局变量,从而影响软件其他部分,那么验证期望结果时是需要验证该全局变量是否和期望值一致;又例如单元实现的功能是向其他单元发送消息,那么单元测试时需要在驱动模块创建接受消息函数,用来接受被测单元发送的消息,从而验证是否实现了预期功能。

希望上面解释能回答这个问题。

[ Last edited by 天网 on 2004-7-20 at 10:25 ]

lhtia 发表于 2004-7-19 19:26:13

谢谢站长和天网的解答。

天网的解决方案太棒了! 我明白你说得第一种办法,就是“验证该全局变量是否和期望值一致”;你说得第二种“单元实现的功能是向其他单元发送消息”,返回值是void的函数应该不能传送消息的吧,这种方案是不是用于“验证返回值是否和期望一致”,如果我理解错了,请多多指点。

wgfxman 发表于 2004-7-20 09:38:59

很好的贴子,学到了不少具体操作的思路,谢谢搂主,天网,站长:)

iamxiaobao 发表于 2004-8-12 09:40:09

我也谢一下

celine 发表于 2004-8-13 10:27:39

诚谢,关注Ing

lovelyruo 发表于 2004-8-13 10:56:49

请教TCL的全称是什么?谢。
是tool command language的缩写么?

[ Last edited by lovelyruo on 2004-8-13 at 11:00 ]

lesley 发表于 2004-8-17 12:45:35

好厉害!但基本看不懂啊!测的是纯软件的东西吗?好像是白盒测试吧

katefan 发表于 2004-8-17 13:46:41

行外话

我也不太明白,感觉反正就是验证单元的功能和预期结果是否一至吧,如果这段代码要实现的功能是:改变某个全局变量,那就看它是否实现了这个功能,实现了就对了,那如果他可以实现这个功能,是不是通过开发一个驱动程序,就可以对被测试单元进行控制了呀?需不需要对驱动程序进行测试呢,哪果驱动程序开发的有问题,那怎么办呢?

zhushi_002 发表于 2004-9-8 10:56:57

读过受益菲浅啊,小弟初次接触测试,还有那位大哥能给介绍一下 桩模块程序 啊

if-else 发表于 2004-9-14 16:21:07

不错.!

chatboy008 发表于 2004-9-16 12:55:43

页: [1] 2 3 4 5 6 7
查看完整版本: 编写驱动模块及桩模块程序