| 单元测试的对象是软件设计的最小单位——模块。单元测试的依据是详细设描述,单元测试应对模块内所有重要的控制路径设计测试用例,以便发现模块内部的错误。单元测试多采用白盒测试技术,系统内多个模块可以并行地进行测试。软件测试技术第一门户qLgL'q9nQ\ 单元测试任务
R3w&sm0tm5Q0 V9go
JW!vJG0软件测试技术第一门户];Sq#JC8D ?:~4u 单元测试任务包括:1 模块接口测试;2 模块局部数据结构测试;3 模块边界条件测试;4 模块中所有独立执行通路测试;5 模块的各条错误处理通路测试。 4s5p3_ ]0Z9d0 h+S]1UR7~@0s/a)t^$Md6~0 模块接口测试是单元测试的基础。只有在数据能正确流入、流出模块的前提下,其他测试才有意义。测试接口正确与否应该考虑下列因素:软件测试技术第一门户k-t!EDz&FE 1 输入的实际参数与形式参数的个数是否相同; %W9l-gBs1}F;W!_V0 2 输入的实际参数与形式参数的属性是否匹配; .v
`O?Q
o[W,f0 3 输入的实际参数与形式参数的量纲是否一致; o$W:h9kc-eQ.B0 4 调用其他模块时所给实际参数的个数是否与被调模块的形参个数相同; `u5aaa!b,r0 5 调用其他模块时所给实际参数的属性是否与被调模块的形参属性匹配;软件测试技术第一门户$r1E,]#q9S#~$R'O 6调用其他模块时所给实际参数的量纲是否与被调模块的形参量纲一致;软件测试技术第一门户D-Y1A$X"~C7A d 7 调用预定义函数时所用参数的个数、属性和次序是否正确; ;f;j)_%H [0 8 是否存在与当前入口点无关的参数引用; VeP$rr,D"fNL x0 9 是否修改了只读型参数; P6`xH'l0@J0 10 对全程变量的定义各模块是否一致; -p.GT&IR fH.r0 11是否把某些约束作为参数传递。软件测试技术第一门户;xz;g3A5O
2O"hz8X+k#An y]0_+^J|3LY!F#wQ?}0 如果模块内包括外部输入输出,还应该考虑下列因素: T Rf_%?9xU"^&^l0 1 文件属性是否正确;软件测试技术第一门户9R
f+K,D9W$MX {8y 2 OPEN/CLOSE语句是否正确; ,P;z#i^5e*i?4ZJo0 3 格式说明与输入输出语句是否匹配; m}+iO]YDD0 4缓冲区大小与记录长度是否匹配; E$Q0}d4h!Sy#Q!^
x:iU0 5文件使用前是否已经打开; X_uZ X;@*P)r+[0 6是否处理了文件尾; v;J'y{R8Av0 7是否处理了输入/输出错误; x6V+S4H~Fb6B3vI0 8输出信息中是否有文字性错误;软件测试技术第一门户4L,Q*GwAO
X
oh/P'A2Q0软件测试技术第一门户/^d
F(f\/MFSY 检查局部数据结构是为了保证临时存储在模块内的数据在程序执行过程中完整、正确。局部数据结构往往是错误的根源,应仔细设计测试用例,力求发现下面几类错误: /Wnf;I_0 1 不合适或不相容的类型说明; E/M$|s5m
L:b!F0 2变量无初值;软件测试技术第一门户)wJwA&fR1B 3变量初始化或省缺值有错;软件测试技术第一门户!P-|dAg'w nhd a&H 4不正确的变量名(拼错或不正确地截断); *qko.tx%]9k0 5出现上溢、下溢和地址异常。软件测试技术第一门户urB
YQ}r 软件测试技术第一门户D+BP}V r+i3]vL(h {4h0 除了局部数据结构外,如果可能,单元测试时还应该查清全局数据(例如FORTRAN的公用区)对模块的影响。软件测试技术第一门户;_]gA(QbXGyJw 软件测试技术第一门户$M5^]3|K4zZ 软件测试技术第一门户~x:Ly}%|7N!OcL 在模块中应对每一条独立执行路径进行测试,单元测试的基本任务是保证模块中每条语句至少执行一次。此时设计测试用例是为了发现因错误计算、不正确的比较和不适当的控制流造成的错误。此时基本路径测试和循环测试是最常用且最有效的测试技术。计算中常见的错误包括: ;c1oS`XE/qO0 1 误解或用错了算符优先级; 6Q%C&j7`X0 2混合类型运算;软件测试技术第一门户L\mzS*Y
F4YLA 3变量初值错; y2y&FW%wT9A#@0 4精度不够;软件测试技术第一门户NEL3^Q` 5表达式符号错。 +B
n)wS,K(N0软件测试技术第一门户pIV!m5D1L:L4t4S 软件测试技术第一门户7ly |DO{O 比较判断与控制流常常紧密相关,测试用例还应致力于发现下列错误: 'Q$xv3O$p9f0 1不同数据类型的对象之间进行比较;软件测试技术第一门户2u*J Y)_5aKt 2错误地使用逻辑运算符或优先级;软件测试技术第一门户qW
sc^pGt7p
Ix 3因计算机表示的局限性,期望理论上相等而实际上不相等的两个量相等;软件测试技术第一门户k9{}]O#Z'}+CaO 4比较运算或变量出错;软件测试技术第一门户5lZ,fW&y6P[E5]c?%X 5循环终止条件或不可能出现; Y&u5T#Pm/}0 6迭代发散时不能退出; 6[;eGxs)v'd0 7错误地修改了循环变量。软件测试技术第一门户,?0a&R8K.d4N
V5L#O;Yv 软件测试技术第一门户UD1pe'X 软件测试技术第一门户}J3?2z#[Kp7G
R 一个好的设计应能预见各种出错条件,并预设各种出错处理通路,出错处理通路同样需要认真测试,测试应着重检查下列问题: !R],|aM#z0 1输出的出错信息难以理解;软件测试技术第一门户,H9ICf.T:O/r\ 2记录的错误与实际遇到的错误不相符;软件测试技术第一门户jy3\8k4}4T y 3在程序自定义的出错处理段运行之前,系统已介入; 9^8QA+H mV.v }/k C0 4异常处理不当;软件测试技术第一门户lEZo,E"j:M`"k,P6l 5错误陈述中未能提供足够的定位出错信息。软件测试技术第一门户 M1D7R3l
cD
r\
z3cf8X q0软件测试技术第一门户D0S+o-S5W?F8{0{9] 边界条件测试是单元测试中最后,也是最重要的一项任务。众的周知,软件经常在边界上失效,采用边界值分析技术,针对边界值及其左、右设计测试用例,很有可能发现新的错误。 C8l7A;o@%dP/b`yi.s}0软件测试技术第一门户1v-tJxZ2r
B)m rt.F.i&p@O[e0单元测试过程软件测试技术第一门户@Ql'C4C 软件测试技术第一门户 rC9`Vc&U(i 软件测试技术第一门户+b!Kb#L*hnb5Oj 一般认为单元测试应紧接在编码之后,当源程序编制完成并通过复审和编译检查,便可开始单元测试。测试用例的设计应与复审工作相结合,根据设计信息选取测试数据,将增大发现上述各类错误的可能性。在确定测试用例的同时,应给出期望结果。 -P)l-\8a/a!fO0 w E.`j)u0}x%x%|0fm z7zA~R!]0 应为测试模块开发一个驱动模块(driver)和(或)若干个桩模块(stub),下图显示了一般单元测试的环境。驱动模块在大多数场合称为“主程序”,它接收测试数据并将这些数据传递到被测试模块,被测试模块被调用后,“主程序”打印“进入-退出”消息。软件测试技术第一门户7B7da/Rb(f(Yhp
TC5V
FW4`0q8I$]-Ng?;F'B0 驱动模块和桩模块是测试使用的软件,而不是软件产品的组成部分,但它需要一定的开发费用。若驱动和桩模块比较简单,实际开销相对低些。遗憾的是,仅用简单的驱动模块和桩模块不能完成某些模块的测试任务,这些模块的单元测试只能采用下面讨论的综合测试方法。软件测试技术第一门户(]-?!B%F0~H
8X+j9uf
x0软件测试技术第一门户&x'j"[&W zZU 提高模块的内聚度可简化单元测试,如果每个模块只能完成一个,所需测试用例数目将显著减少,模块中的错误也更容易发现。 c4B.HIf'i0 |