yanglan2410 发表于 2008-10-21 10:18:28

没有输入参数的接口函数如何设计测试用例?

我是测试新手:) ,刚来公司,现在让写一个解码器的dll接口(VC 2008开发)的测试用例,现在只给了设计规格说明书,让写测试用例和测试程序。目前看了一些理论知识,知道对于导出的接口函数进行调用测试即可,对函数输入值(参数)进行等价类划分,边界值分析等方法。
现在想请问对于如果没有输入参数的接口函数,如何设计测试用例呢?比如DWORD GetInterfaceVersion ()获取解码器版本号(以4字节正整数表示),又或者GUID GetDecoderId () 读取解码器实现的唯一标识,GUID格式。

yanglan2410 发表于 2008-10-21 11:10:27

希望有大侠可以指点一二,十分感谢!

VisualUnit 发表于 2008-10-21 12:01:06

输入除了参数,还有其他

对于函数测试来说,一个用例,就是设定输入,执行程序,判断输出是否符合预期。
可能输入包括:参数、需读的成员变量、需读的全局变量、内部输入(调用子函数获得的输入);
可能输出包括:返回值、输出参数、被写的成员变量、被写的全局变量,内部输出(在程序执行过程中判断的中间输出)、动作(例如需判断程序在某种输入下是否调用了某个函数)。
简单来说,输入就是程序执行前或执行过程中读取的外部数据,输出就是程序所改写的数据。
了解了这些,就不会对没有参数、没有返回值如何测试产生疑问了。

现在说到你要测试的程序,有两种情形:一是你只有DLL文件,没有源代码,这通常没什么好测试的,应该是由开发DLL的项目组测试。二是你有DLL的源代码,要对源代码进行单元测试,从问题中看不出属于哪种情形,假设是第二种。

测试没有参数的函数,它可能还有别的输入,例如全局变量,成员变量,或调用子函数获得的输入(这个要使用工具才能做到),只要函数需读取的,都应该设定初始化,如果完全没有,没有输入也是一种输入,照样测试就是了。 同样道理,输出也不仅仅是返回值,没有返回值还可能修改了全局变量什么的,这些也是要判断的输出。

但是,单元测试应该测试哪些比较复杂的程序,而不是只测试接口。对于只是读写一两个数据的接口,没什么好测试的,例如“DWORD GetInterfaceVersion ()获取解码器版本号”,应该只是读取一个全局变量并返回,没有什么测试意义,要测的话,先设定那个全局变量的值,也一样测试,例如:
输入:SetInterfaceVersion (1234); //调用其他函数完成初始化,这个是外部输入,不是内部输入。
输出:ASSERT(GetInterfaceVersion () == 1234);
不过这样做没什么意义。

yanglan2410 发表于 2008-10-21 13:19:20

十分感谢这么细致的讲解,有种豁然开朗的感觉哦,呵呵:lol

lchappy 发表于 2008-10-23 11:17:20

我也遇到这样的情况,要求测试DLL,问题是我属于VisualUnit 所说的第一种,只有DLL文件,没有源代码。为什么这种情况“没什么好测试的”?现在任务分配到我这里,源代码我是拿不到了,那我是该自己测试,还是说服项目组来测试呢?我又能拿什么理由来说服他们?

VisualUnit 发表于 2008-10-23 12:20:15

DLL就象是中间的成品

说“没什么好测试的”,过于武断,是不对的,应该说“不合算”吧。
测试DLL的接口,实际上就是测试函数(最多是测试导出类的函数),是单元测试,单元测试应该是灰盒比较合算,既测试它的功能,也要考虑白盒覆盖,没有代码就谈不上白盒覆盖。另外单元测试应该测试稍复杂的代码,大量接口都只是最简单的数据读写,不需要测试(但是没有源代码就分不清哪些是复杂的),而有很多不是接口的复杂函数又测不到。直接测试DLL,做很多无用功,有很多该做的又做不到,所以不合算。另外,单元测试应该由开发者为主来做,否则很吃力的。当然,这些只是从投入产出的角度来说的,不一定适合所有的项目,如果没有办法,只能测DLL,测了也总比不测好吧。

[ 本帖最后由 VisualUnit 于 2008-10-23 12:36 编辑 ]

goal1860 发表于 2008-10-23 13:59:21

拿这个例子来说,其实不是没有输入,而是有隐含输入,就是当前解码器对象。这种测试比较麻烦,因为你很难获取该解码器句柄,不好控制。通常这样的测试需要用Mock Up的技术,产生一组解码器对象来进行测试,比较麻烦。这有点像在web测试时获取当前上下文一样。如果代码透明度比较低的话做这样的接口测试比较困难。
建议可以把当前解码器作为环境的一部分来看待,这样输入就成了恒定的常量,输出也应该是固定值。
页: [1]
查看完整版本: 没有输入参数的接口函数如何设计测试用例?