单元测试的对象是软件设计的最小单位——模块。单元测试的依据是详细设描述,单元测试应对模块内所有重要的控制路径设计测试用例,以便发现模块内部的错误。单元测试多采用白盒测试技术,系统内多个模块可以并行地进行测试。
软件测试网 RO.g-@qQKE5M 单元测试任务 Z:]|nTYXfF+u#d0 U%c+Rq!p+Ph0
,r7hw0@5Y
S0 单元测试任务包括:1 模块接口测试;2 模块局部数据结构测试;3 模块边界条件测试;4 模块中所有独立执行通路测试;5 模块的各条错误处理通路测试。软件测试网"H6LK-n.MW
npEQ/_0
软件测试网/_V7s#e-p 模块接口测试是单元测试的基础。只有在数据能正确流入、流出模块的前提下,其他测试才有意义。测试接口正确与否应该考虑下列因素: 9r^9dcZ j+{Z`0 1 输入的实际参数与形式参数的个数是否相同; y#U;`xRp(IF.V0 2 输入的实际参数与形式参数的属性是否匹配;软件测试网V;rX3g+d:|Z 3 输入的实际参数与形式参数的量纲是否一致;软件测试网iJRMs"p!j%S 4 调用其他模块时所给实际参数的个数是否与被调模块的形参个数相同;软件测试网o(a0h}3A 5 调用其他模块时所给实际参数的属性是否与被调模块的形参属性匹配;软件测试网u;z#wR-\5BOSfKW 6调用其他模块时所给实际参数的量纲是否与被调模块的形参量纲一致;软件测试网cp$C*PR k 7 调用预定义函数时所用参数的个数、属性和次序是否正确;
O[UtN5Z]7{!to%d0 8 是否存在与当前入口点无关的参数引用; ;j3L$^.[KU$`l0 9 是否修改了只读型参数;软件测试网7R?R.N(hB-X 10 对全程变量的定义各模块是否一致;软件测试网"h$f5T x O)PM:m PK{ 11是否把某些约束作为参数传递。软件测试网9E
SZ8r%o"X6K 软件测试网:JN3C"fjA2Xi
8{3Z5}{;rO,gq[V0 如果模块内包括外部输入输出,还应该考虑下列因素: %C cr#lP+o0 1 文件属性是否正确; mo+H yr1@_}0 2 OPEN/CLOSE语句是否正确; &wPP%K3p:Zo0IST0 3 格式说明与输入输出语句是否匹配; (cZ7x q.m2lJ
g^Q0 4缓冲区大小与记录长度是否匹配; vL&_[%C.}|;a7[
TQ6Whi0 5文件使用前是否已经打开; -I-P:zs"A}(w0 6是否处理了文件尾;软件测试网*qm {KS$Qh#f-d 7是否处理了输入/输出错误;软件测试网efiP G0S 8输出信息中是否有文字性错误; p,bn(g]7x |0软件测试网QC]|2t4[[
"?"P4^ Yk7RQ:{2OO;]0 检查局部数据结构是为了保证临时存储在模块内的数据在程序执行过程中完整、正确。局部数据结构往往是错误的根源,应仔细设计测试用例,力求发现下面几类错误: PCHx&IR0 1 不合适或不相容的类型说明;软件测试网2Lk P"?!y 2变量无初值; u3c8V e.xS@'oR\H)P0 3变量初始化或省缺值有错;软件测试网*Y7xRft 4不正确的变量名(拼错或不正确地截断); 6J"\mLy0 5出现上溢、下溢和地址异常。 z?ghFT3c-oW0 5U-A%x D)wLi3fu0
软件测试网XO4EJc#ss-i?Pk 除了局部数据结构外,如果可能,单元测试时还应该查清全局数据(例如FORTRAN的公用区)对模块的影响。软件测试网/g8OOP+u-@.x?Ay
t 软件测试网8x8_X2l;IX
软件测试网P-bl t|Fe\v 在模块中应对每一条独立执行路径进行测试,单元测试的基本任务是保证模块中每条语句至少执行一次。此时设计测试用例是为了发现因错误计算、不正确的比较和不适当的控制流造成的错误。此时基本路径测试和循环测试是最常用且最有效的测试技术。计算中常见的错误包括: .bp,qE AS%AS xg0 1 误解或用错了算符优先级; !OmQnMY;s4q0 2混合类型运算;软件测试网eTmi[b%_ 3变量初值错;软件测试网n|YU}r^H:va 4精度不够;软件测试网H:@ @B\9HWlO 5表达式符号错。软件测试网j;]#l@7`1k 软件测试网
J8B8MEr{^
软件测试网w+x5wc#e9cCO#V 比较判断与控制流常常紧密相关,测试用例还应致力于发现下列错误:软件测试网1D4yz"z/FC/v 1不同数据类型的对象之间进行比较;软件测试网JH:WzL'f{ 2错误地使用逻辑运算符或优先级; ~X"nsZ?#k [$sy7G0 3因计算机表示的局限性,期望理论上相等而实际上不相等的两个量相等;软件测试网Tr\9oTh/We$X 4比较运算或变量出错; $k6B I-dqe+F0 5循环终止条件或不可能出现; V'i
rX)n dGi4oNJ0 6迭代发散时不能退出; {Nk+@8mB5S*B"^0 7错误地修改了循环变量。软件测试网
|},OB%Y!zTDk(kZv5[
:n~k%[Z]0
软件测试网6A|9G$_9U
~ 一个好的设计应能预见各种出错条件,并预设各种出错处理通路,出错处理通路同样需要认真测试,测试应着重检查下列问题: %wy+MOcR0 1输出的出错信息难以理解; )zNww#Ag/Nz![0 2记录的错误与实际遇到的错误不相符;软件测试网Y$?'~*r'd!])M 3在程序自定义的出错处理段运行之前,系统已介入; F xjq%ur0 4异常处理不当; Yl
U.EUha0 5错误陈述中未能提供足够的定位出错信息。软件测试网RQB OZh 软件测试网S'a:Y4R#JKY]
软件测试网 ]5SnVNF 边界条件测试是单元测试中最后,也是最重要的一项任务。众的周知,软件经常在边界上失效,采用边界值分析技术,针对边界值及其左、右设计测试用例,很有可能发现新的错误。软件测试网0j-Dc/GM%n Md 软件测试网'z"Mi.cT N am*k
Fv
m,T c#u
_h;WF0单元测试过程 (J\_N$g-I%GQ0软件测试网Y2q!a#cb,F1O
软件测试网 S GC1Ia1d0d@ 一般认为单元测试应紧接在编码之后,当源程序编制完成并通过复审和编译检查,便可开始单元测试。测试用例的设计应与复审工作相结合,根据设计信息选取测试数据,将增大发现上述各类错误的可能性。在确定测试用例的同时,应给出期望结果。软件测试网i2x)ZT[4s:F/q#}
'z\#H)e/J5G
v D0
软件测试网KU#L+Mu^ 应为测试模块开发一个驱动模块(driver)和(或)若干个桩模块(stub),下图显示了一般单元测试的环境。驱动模块在大多数场合称为“主程序”,它接收测试数据并将这些数据传递到被测试模块,被测试模块被调用后,“主程序”打印“进入-退出”消息。 !byDZ)Ar(ghE0 /~?)s/j VI ^oM^w0
软件测试网:Bx$Y|9a3^[ 驱动模块和桩模块是测试使用的软件,而不是软件产品的组成部分,但它需要一定的开发费用。若驱动和桩模块比较简单,实际开销相对低些。遗憾的是,仅用简单的驱动模块和桩模块不能完成某些模块的测试任务,这些模块的单元测试只能采用下面讨论的综合测试方法。
|