本站文章除标题中注明“原”以外,其他均来自网络或书籍,如果我的引用侵犯了您的权力,请与我联系,我将及时处理;如果任何人想转载这些文章,则请保留原始的出处信息,或者直接与原作者联系。

单元测试的基本方法

上一篇 / 下一篇  2007-01-21 21:03:58 / 个人分类:测试理论

单元测试的对象是软件设计的最小单位——模块。单元测试的依据是详细设描述,单元测试应对模块内所有重要的控制路径设计测试用例,以便发现模块内部的错误。单元测试多采用白盒测试技术,系统内多个模块可以并行地进行测试。  51Testing软件测试网%d8`1hB{o_
单元测试任务
9Q-] i'Mw:X V%j9].~0
h-a?a/R+A K$E6B0
-q#o g QY8S#SI0  单元测试任务包括:1 模块接口测试;2 模块局部数据结构测试;3 模块边界条件测试;4 模块中所有独立执行通路测试;5 模块的各条错误处理通路测试。
~(H4^\'|~f0
SV+w&WVYZ051Testing软件测试网-Bc NK HR
  模块接口测试是单元测试的基础。只有在数据能正确流入、流出模块的前提下,其他测试才有意义。测试接口正确与否应该考虑下列因素:
:hWYFg J({ u9kKUA J0  1 输入的实际参数与形式参数的个数是否相同;51Testing软件测试网X;SOt*o{3~|
  2 输入的实际参数与形式参数的属性是否匹配;51Testing软件测试网`Y0lV%Uy n
  3 输入的实际参数与形式参数的量纲是否一致;
H$V6h!TL0  4 调用其他模块时所给实际参数的个数是否与被调模块的形参个数相同;51Testing软件测试网6W!RgR%z
  5 调用其他模块时所给实际参数的属性是否与被调模块的形参属性匹配;51Testing软件测试网 ]g?E(p8w3F
  6调用其他模块时所给实际参数的量纲是否与被调模块的形参量纲一致;51Testing软件测试网7C{mcna1IJC
  7 调用预定义函数时所用参数的个数、属性和次序是否正确;
E@8x*O \pX7t0  8 是否存在与当前入口点无关的参数引用;
nK6{1?\qK0  9 是否修改了只读型参数;51Testing软件测试网HO ^:P(I6qC
  10 对全程变量的定义各模块是否一致;51Testing软件测试网'H!R&~$J-O(}
  11是否把某些约束作为参数传递。
| B ffh$h0
l'sXBA o#K0
{'J9Cq$w,fmL0  如果模块内包括外部输入输出,还应该考虑下列因素:
5]#B2N#w"S0  1 文件属性是否正确;
$`4YyvX]m1m0  2 OPEN/CLOSE语句是否正确;
7X3~ t1`Y1I*PJ0  3 格式说明与输入输出语句是否匹配;
9i9k0F{;BG2l,A9f0n0  4缓冲区大小与记录长度是否匹配;
@!vssM d|m%M0  5文件使用前是否已经打开;51Testing软件测试网&K'Uo Y$P
  6是否处理了文件尾;
$i8J'f*Nr0pkV^UtQ0  7是否处理了输入/输出错误;
(U4[V8M|@)K"i5y&u0  8输出信息中是否有文字性错误;
4h/iU#p nM!R6N"u0
4^&}l&M4O"~0
-ff.D6C'QP0  检查局部数据结构是为了保证临时存储在模块内的数据在程序执行过程中完整、正确。局部数据结构往往是错误的根源,应仔细设计测试用例,力求发现下面几类错误:
%r'C2K mqE/[a3I0  1 不合适或不相容的类型说明;51Testing软件测试网 W:w+E{4uTr9@ w7O
  2变量无初值;51Testing软件测试网#UWcs4K(C'H-o _
  3变量初始化或省缺值有错;51Testing软件测试网0h$a^ p,I;q8s
  4不正确的变量名(拼错或不正确地截断);  51Testing软件测试网m6S;Ls]
  5出现上溢、下溢和地址异常。51Testing软件测试网!\:E4v$G k.s8i

#A5e8\H1V J}0U6E051Testing软件测试网;B-{dO ` GH
  除了局部数据结构外,如果可能,单元测试时还应该查清全局数据(例如FORTRAN的公用区)对模块的影响。
3t |%Z.T%Np[8o051Testing软件测试网N8eE9MV

T9AtZp6]DH0  在模块中应对每一条独立执行路径进行测试,单元测试的基本任务是保证模块中每条语句至少执行一次。此时设计测试用例是为了发现因错误计算、不正确的比较和不适当的控制流造成的错误。此时基本路径测试和循环测试是最常用且最有效的测试技术。计算中常见的错误包括:51Testing软件测试网6^G1Q1|m?)Jw&C
  1 误解或用错了算符优先级;51Testing软件测试网"C0M6h4w*ka
  2混合类型运算;51Testing软件测试网I u\*DY-?;o
  3变量初值错;51Testing软件测试网3PT8[:A9R
  4精度不够;
dq X k+Hh0  5表达式符号错。
;K(~Kmd0
^ kIK"d L s051Testing软件测试网vZ%Pm%w
  比较判断与控制流常常紧密相关,测试用例还应致力于发现下列错误:  
(Z,s/Bs+_-VG0  1不同数据类型的对象之间进行比较;51Testing软件测试网` w(Z {F2uV&r$IA
  2错误地使用逻辑运算符或优先级;51Testing软件测试网5Sz9pb\
  3因计算机表示的局限性,期望理论上相等而实际上不相等的两个量相等;
YM k9Q4_JC!N"siL0  4比较运算或变量出错;
\]1a;rq!OxZ;_4G0  5循环终止条件或不可能出现;
m5D)n%f(l)Hkv0w^0  6迭代发散时不能退出;51Testing软件测试网-\:ivE5yCW_ R
  7错误地修改了循环变量。51Testing软件测试网Y a V Ts'f4ChkW u
51Testing软件测试网s;e,GSC
51Testing软件测试网X2[0]/p.P[D1U
  一个好的设计应能预见各种出错条件,并预设各种出错处理通路,出错处理通路同样需要认真测试,测试应着重检查下列问题:51Testing软件测试网y)`y [ Sa1~O9K
  1输出的出错信息难以理解;51Testing软件测试网h!U8?] N#O~ ]+z HkV
  2记录的错误与实际遇到的错误不相符;51Testing软件测试网/Di4L4??m/e0z\
  3在程序自定义的出错处理段运行之前,系统已介入;
b+t ]5`f4S.r0  4异常处理不当;51Testing软件测试网2aKJxyYZ%n$R2~7}
  5错误陈述中未能提供足够的定位出错信息。51Testing软件测试网N8Ci {^;OM9_1e

mUc7T-j051Testing软件测试网+Zl2gQv(k5N3Z
  边界条件测试是单元测试中最后,也是最重要的一项任务。众的周知,软件经常在边界上失效,采用边界值分析技术,针对边界值及其左、右设计测试用例,很有可能发现新的错误。
u.kFlc051Testing软件测试网M/ix-K2R#j+D

!c Q,q Z9Q0单元测试过程
7L+l;b6^ C"y6D5Yf0
)?"N6Z-Q"K3^0
)VD z^5{q1]K0  一般认为单元测试应紧接在编码之后,当源程序编制完成并通过复审和编译检查,便可开始单元测试。测试用例的设计应与复审工作相结合,根据设计信息选取测试数据,将增大发现上述各类错误的可能性。在确定测试用例的同时,应给出期望结果。51Testing软件测试网V7gA,{2jVkIi

:O@&u;LIJa&J#D3N0
2sbfi2b5D:X9s0  应为测试模块开发一个驱动模块(driver)和(或)若干个桩模块(stub),下图显示了一般单元测试的环境。驱动模块在大多数场合称为“主程序”,它接收测试数据并将这些数据传递到被测试模块,被测试模块被调用后,“主程序”打印“进入-退出”消息。
T~,j'P2[.}],QTk0
6L&lL5hT {8~d051Testing软件测试网l:t `s*O,@3UA"@
  驱动模块和桩模块是测试使用的软件,而不是软件产品的组成部分,但它需要一定的开发费用。若驱动和桩模块比较简单,实际开销相对低些。遗憾的是,仅用简单的驱动模块和桩模块不能完成某些模块的测试任务,这些模块的单元测试只能采用下面讨论的综合测试方法。51Testing软件测试网7UEM&W*]GY

E bgc1`p M051Testing软件测试网 @@#O\W:\5wH_
  提高模块的内聚度可简化单元测试,如果每个模块只能完成一个,所需测试用例数目将显著减少,模块中的错误也更容易发现。  51Testing软件测试网4yp3yL,gGnm q1r

TAG: 测试理论

引用 删除 xinyiruirui   /   2012-03-08 10:21:41
5
 

评分:0

我来说两句

日历

« 2024-02-25  
    123
45678910
11121314151617
18192021222324
2526272829  

数据统计

  • 访问量: 40077
  • 日志数: 50
  • 建立时间: 2006-12-25
  • 更新时间: 2007-02-06

RSS订阅

Open Toolbar