全面介绍单元测试(转载)
上一篇 / 下一篇 2007-05-02 21:13:02 / 个人分类:测试技术
1。要进行充分的单元测试,应专门编写测试代码,并与产品代码隔离。比较简单的办法是为产品工程建立对应的测试工程,为每个类建立对应的测试类,为每个函数(很简单的除外)建立测试函数。
J5zc]d S$BKVq0;e~k(sI9sQQ!M nG02。测试用例、输入数据及预期输出。
%v v N(}@"?051Testing软件测试网5{vZ|/mE*^输入数据是测试用例的核心,它是被测试函数所读取的外部数据及这些数据的初始值。外部数据是对于被测试函数来说的,实际上就是除了局部变量以外的其他数据,共分为以下几类:参数、成员变量、全局变量、IO媒体。IO媒体是指文件、数据库或其他储存或传输数据的媒体,例如,被测试函数要从文件或数据库读取数据,那么,文件或数据库中的原始数据也属于输入数据。一个函数无论多复杂,都无非是对这几类数据的读取、计算和写入。51Testing软件测试网E+HH@1O| }
sO)p0H3tvp*vw X0我们应该用一定的规则选择有代表性的数据作为输入数据,主要有三种:正常输入,边界输入,非法输入,每种输入还可以分类,也就是平常说的等价类法,每类取一个数据作为输入数据,如果测试通过,可以肯定同类的其他输入也是可以通过的。下面举例说明:
$e/z1w&L aK|#xg0 正常输入51Testing软件测试网.F'D%Fh.e
例如字符串的Trim函数,功能是将字符串前后的空格去除,那么正常的输入可以有四类:前面有空格;后面有空格;前后均有空格;前后均无空格。51Testing软件测试网YUl%V"u1Rn f
边界输入51Testing软件测试网 Y,zI,|2~9i
上例中空字符串可以看作是边界输入。51Testing软件测试网5Z&F(m.C'p8MC"B
再如一个表示年龄的参数,它的有效范围是0-100,那么边界输入有两个:0和100。
;W@5nG VA0 非法输入51Testing软件测试网kH uA O
非法输入是正常取值范围以外的数据,或使代码不能完成正常功能的输入,如上例中表示年龄的参数,小于0或大于100都是非法输入,再如一个进行文件操作的函数,非法输入有这么几类:文件不存在;目录不存在;文件正在被其他程序打开;权限错误。51Testing软件测试网 ZJ
_#U*TOx
如果函数使用了外部数据,则正常输入是肯定会有的,而边界输入和非法输入不是所有函数都有。一般情况下,即使没有设计文档,考虑以上三种输入也可以找出函数的基本功能点。实际上,单元测试与代码编写是“一体两面”的关系,编码时对上述三种输入都是必须考虑的,否则代码的健壮性就会成问题。
h/H.p)^vfBp$UlG03。白盒测试针对程序的逻辑结构设计测试用例,用逻辑覆盖率来衡量测试的完整性。逻辑单位主要有:语句、分支、条件、条件值、条件值组合,路径。51Testing软件测试网i"h/TP%g;t
zZA/K S1F#SJ)j0经验:发现与条件直接有关的错误主要是逻辑操作符错误,例如:||写成&&,漏了写!什么的,采用分支覆盖与条件覆盖的组合,基本上可以发现这些错误,另一方面,条件值覆盖与条件值组合覆盖往往需要大量的测试用例,因此看来,条件值覆盖和条件值组合覆盖的效费比偏低。本人认为效费比较高且完整性也足够的测试要求是这样的:完成功能测试,完成语句覆盖、条件覆盖、分支覆盖、路径覆盖。实际就是通过使用工具实现,否则人工难以完成,工作量太在。
A.`L3y hyN+g051Testing软件测试网&\z7{;Hw白盒测试用例的设计,普通方法是画出程序的逻辑结构图如程序流程图或控制流图,根据逻辑结构图设计测试用例,这些是纯粹的白盒测试,推荐一类方法:先完成黑盒测试,然后统计白盒覆盖率,针对未覆盖的逻辑单位设计测试用例覆盖它,例如,先检查是否有语句未覆盖,有的话设计测试用例覆盖它,然后用同样方法完成条件覆盖、分支覆盖和路径覆盖,这样的话,既检验了黑盒测试的完整性,又避免了重复的工作,用较少的时间成本达到非常高的测试完整性。不过,这些工作可不是手工能完成的,必须借助于工具,后面会介绍可以完成这些工作的测试工具。51Testing软件测试网 Ep$}Si
@i&GFB
4。单元测试工具:针对c/c++51Testing软件测试网U.N,Spl|n1s;|[-V
_ B&W