日历
| |||||||||
| 日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
| 1 | 2 | 3 | 4 | 5 | 6 | ||||
| 7 | 8 | 9 | 10 | 11 | 12 | 13 | |||
| 14 | 15 | 16 | 17 | 18 | 19 | 20 | |||
| 21 | 22 | 23 | 24 | 25 | 26 | 27 | |||
| 28 | 29 | 30 | 31 | ||||||
存档
搜索标题
我的好友
统计信息
- 访问量: 169
- 日志数: 3
- 建立时间: 2007-04-30
- 更新时间: 2007-04-30
我的最新日志
-
常用的功能测试方法
2007-4-30
黑盒测试(Black-box Testing,又称为功能测试或数据驱动测试)是把测试对象看作一个黑盒子。利用黑盒测试法进行动态测试时,需要测试软件产品的功能,不需测试软件产品的内部结构和处理过程。51Testing软件测试网9N.y7]{A:W
5e&@ bz f$}55274 采用黑盒技术设计测试用例的方法有:等价类划分、边界值分析、错误推测、因果图和综合策略。51Testing软件测试网7Cl)[ ouR{u
51Testing软件测试网s2Yq7ur
黑盒测试注重于测试软件的功能性需求,也即黑盒测试使软件工程师派生出执行程序所有功能需求的输入条件。黑盒测试并不是白盒测试的替代品,而是用于辅助白盒测试发现其他类型的错误。
u/d3WTa*H5527451Testing软件测试网| n v!`!x K2@u
黑盒测试试图发现以下类型的错误:51Testing软件测试网aA4p2hSmv N
1q$q.Mf!cVwZ G55274 1)功能错误或遗漏;51Testing软件测试网i,YH9Zb%hg
2)界面错误;
|J5sx.y;hRB#y7y55274 3)数据结构或外部数据库访问错误;51Testing软件测试网4|8b-_L,M D-a
4)性能错误;
lX([0f;k)YTh55274 5)初始化和终止错误。
(F'eIn,Nu[55274
/I"D$~`3o9g;ej'T55274一、黑盒测试的测试用例设计方法
9J}/Da'o D&M^55274
KZ8N| QL)WQ55274·等价类划分方法51Testing软件测试网C|BY-Se5V \;jJ
·边界值分析方法
/^o#szn8y55274·错误推测方法
@\6HCf+\Xr55274·因果图方法
d _vR6[,{j)s55274·判定表驱动分析方法51Testing软件测试网hz,]BD2V6Z |
·正交实验设计方法
~1x@hr~55274·功能图分析方法
n I%U^q(C5527451Testing软件测试网!c-d9h[G9x.M}
等价类划分:
1TC2J/`1p-J55274
A JB8h-q*x55274 是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例.该方法是一种重要的,常用的黑盒测试用例设计方法.
s{X#v9X/C!|N55274
v4eE${`55274 1) 划分等价类: 等价类是指某个输入域的子集合.在该子集合中,各个输入数据对于揭露程序中的错误都是等效的.并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试.因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据.取得较好的测试结果.等价类划分可有两种不同的情况:有效等价类和无效等价类.
@JLpe~o$Z55274
"v^.w r5o!B3y!O55274 有效等价类:是指对于程序的规格说明来说是合理的,有意义的输入数据构成的集合.利用有效等价类可检验程序是否实现了规格说明中所规定的功能和性能.
A(tl"kMt*wY p55274
W3e P"uqt4B%yJ$g55274 无效等价类:与有效等价类的定义恰巧相反.51Testing软件测试网v7@KY1M|aM| e
51Testing软件测试网S[7d)W h_I E
设计测试用例时,要同时考虑这两种等价类.因为,软件不仅要能接收合理的数据,也要能经受意外的考验.这样的测试才能确保软件具有更高的可靠性.
4L(P^R-y55274
dp:xMM-cJ g'C552742)划分等价类的方法:下面给出六条确定等价类的原则.
t)Q'L#sv;L5@$}/cmb5527451Testing软件测试网ze$v(J.KoNaD h
①在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类.51Testing软件测试网H'U:T`-U
Y g5f7q$o7T D"t)v55274 ②在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可确立一个有效等价类和一个无效等价类.
&Z cme~'jb3G55274
3T*lu@ Vk;|55274 ③在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类.51Testing软件测试网1qT/wJ)~2Q,p
;\Mhfd0Y U P55274 ④在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类.
UIG F g b55274
3k/_J0YB/O$@9doT55274 ⑤在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则).
f:pSUU7x8Ti^f5527451Testing软件测试网:Z[C4Z?^6B&rq
⑥在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类.51Testing软件测试网w5SA5t y;QD%k2C
.x&i(r"Vq*u L552743)设计测试用例:在确立了等价类后,可建立等价类表,列出所有划分出的等价类:51Testing软件测试网/Ex6lYb/^8_ HQ ^
6z}.tdw iW55274 输入条件 有效等价类 无效等价类51Testing软件测试网D!b;Jqa:fpc g
)Pb8M {6{ t&PY'I bfak9O55274 ... ... ...
p1XT6c;D3v[1^+G55274
+iWk.{di55274 ... ... ...
cBh7T:^M?55274
!F@1d4gS/MCs55274 然后从划分出的等价类中按以下三个原则设计测试用例:
j+S*b1y;T k55274
8A \ UpD;NRV55274 ①为每一个等价类规定一个唯一的编号.
@G9N2cw55274
jusi4S55274 ②设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖地有效等价类,重复这一步.直到所有的有效等价类都被覆盖为止.
QR7rl/|7P}P55274
dP N IT-lLw55274 ③设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步.直到所有的无效等价类都被覆盖为止.
3[d m+zo0af-D55274
W/E~1GDh^ yY55274边界值分析法51Testing软件测试网;ARJwu
}4J8i9i"m h55274 边界值分析方法是对等价类划分方法的补充.51Testing软件测试网,H1ie"m(E,ev2r2z
${Q4f+ug.o55274(1)边界值分析方法的考虑:
l*?r Lv5527451Testing软件测试网Ahjl7Tf!w/q
长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部.因此针对各种边界情况设计测试用例,可以查出更多的错误.51Testing软件测试网l!w1L:e9_d(f9O[~
51Testing软件测试网i%b0g i"{@7G{,l,M
使用边界值分析方法设计测试用例,首先应确定边界情况.通常输入和输出等价类的边界,就是应着重测试的边界情况.应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据.
atENz+N@5527451Testing软件测试网+P&eo5d%r
(2)基于边界值分析方法选择测试用例的原则:
[}*jw%?S5527451Testing软件测试网!NU%BS/I
1)如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据.
3v|Yn4VjC55274
l"l A ^Z'r!s8~Nx55274 2)如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少一,比最大个数多一的数作为测试数据.
!v P.RL M,`5527451Testing软件测试网Ih:T-p;m/^
3)根据规格说明的每个输出条件,使用前面的原则1).
(Q'b)\i.p]W*L!bSl5527451Testing软件测试网]*h ]O)t
4)根据规格说明的每个输出条件,应用前面的原则2).51Testing软件测试网:^,~l%c3p9iMK4U
h R e$U/v4G~ t55274 5)如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例.51Testing软件测试网F]#r9[$K
51Testing软件测试网a8xu5^^qt
6)如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例.
$f x:?!E,P&K:j])L`A55274
4]_oT9EF(@ i55274 7)分析规格说明,找出其它可能的边界条件.
!R d;y1W7W[,_55274
xB0YR-s.?zo:a(_55274错误推测法
\.Z.[.X'QY9n4{B(u55274
,E$d;Q0g$u4tc|8uz55274 错误推测法: 基于经验和直觉推测程序中所有可能存在的各种错误, 从而有针对性的设计测试用例的方法.
cP[y-s5527451Testing软件测试网V \ sX#?-d9d:h$k
错误推测方法的基本思想: 列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例. 例如, 在单元测试时曾列出的许多在模块中常见的错误. 以前产品测试中曾经发现的错误等, 这些就是经验的总结. 还有, 输入数据和输出数据为0的情况. 输入表格为空格或输入表格只有一行. 这些都是容易发生错误的情况. 可选择这些情况下的例子作为测试用例.51Testing软件测试网:hJ"}\\ ihD/sG&d*F:c
`%et'R~^ k3zW55274因果图方法51Testing软件测试网5u ?[7@G
51Testing软件测试网Fm^v_$r ^ap.k
前面介绍的等价类划分方法和边界值分析方法,都是着重考虑输入条件,但未考虑输入条件之间的联系, 相互组合等. 考虑输入条件之间的相互组合,可能会产生一些新的情况. 但要检查输入条件的组合不是一件容易的事情, 即使把所有输入条件划分成等价类,他们之间的组合情况也相当多. 因此必须考虑采用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来考虑设计测试用例. 这就需要利用因果图(逻辑模型).
'x^oY C9fI Db5527451Testing软件测试网N0sO}k
因果图方法最终生成的就是判定表. 它适合于检查程序输入条件的各种组合情况.
-zGn,G?5527451Testing软件测试网!|s\V'S.~6{&\3BX
利用因果图生成测试用例的基本步骤:
?3HEx ~U qurq5527451Testing软件测试网9_Tb3Vx
(1) 分析软件规格说明描述中, 那些是原因(即输入条件或输入条件的等价类),那些是结果(即输出条件), 并给每个原因和结果赋予一个标识符.
O rYAbL.n55274
Z;`5D$rAv55274 (2) 分析软件规格说明描述中的语义.找出原因与结果之间, 原因与原因之间对应的关系. 根据这些关系,画出因果图.
Ze$^9e k U'r/A5527451Testing软件测试网'EwU#S7\ m"_/s&SL
(3) 由于语法或环境限制, 有些原因与原因之间,原因与结果之间的组合情况不不可能出现. 为表明这些特殊情况, 在因果图上用一些记号表明约束或限制条件.
_8r$\ M ^55274
g"r7xE{U@h55274 (4) 把因果图转换为判定表.51Testing软件测试网Jc(Z A:N7vZ
51Testing软件测试网1t,B6vB%GqV4Bv
(5) 把判定表的每一列拿出来作为依据,设计测试用例.51Testing软件测试网 H3l DP7[+m_
%i*rzq5X!W J7KA'G55274 从因果图生成的测试用例(局部,组合关系下的)包括了所有输入数据的取TRUE与取FALSE的情况,构成的测试用例数目达到最少,且测试用例数目随输入数据数目的增加而线性地增加.
hU*Or`l^5KIT5527451Testing软件测试网Hh ~D-}x
前面因果图方法中已经用到了判定表.判定表(Decision Table)是分析和表达多逻辑条件下执行不同操作的情况下的工具.在程序设计发展的初期,判定表就已被当作编写程序的辅助工具了.由于它可以把复杂的逻辑关系和多种条件组合的情况表达得既具体又明确.
f*P-G HbT5527451Testing软件测试网)V#? dM^?;IB
判定表通常由四个部分组成.51Testing软件测试网!g#C tC#e rbb AR
51Testing软件测试网.I;MMj0c(fq,UV
条件桩(Condition Stub):列出了问题得所有条件.通常认为列出得条件的次序无关紧要.51Testing软件测试网*d!w8^0|Qu
E6N wHQ5O#CVw\55274 动作桩(Action Stub):列出了问题规定可能采取的操作.这些操作的排列顺序没有约束.51Testing软件测试网w$W3OMh'L3o
UMn U ~6w55274 条件项(Condition Entry):列出针对它左列条件的取值.在所有可能情况下的真假值.
)N.{!X$O#fS1@s5527451Testing软件测试网h bjv!V(TV)|/gZD
动作项(Action Entry):列出在条件项的各种取值情况下应该采取的动作.
V9E MweCj5527451Testing软件测试网~!R^'Cw/B'S7H
规则:任何一个条件组合的特定取值及其相应要执行的操作.在判定表中贯穿条件项和动作项的一列就是一条规则.显然,判定表中列出多少组条件取值,也就有多少条规则,既条件项和动作项有多少列.
UEV8Ut$C ^55274
D3Mhg(vn55274 判定表的建立步骤:(根据软件规格说明)51Testing软件测试网cr;i/]&V|.H:VwL
51Testing软件测试网/u5y2rT*oj,oo
①确定规则的个数.假如有n个条件.每个条件有两个取值(0,1),故有 种规则.51Testing软件测试网.x J,s-u`HC u
HB)RG ms#k-N55274 ②列出所有的条件桩和动作桩.
q3]Oa"z,_:YB)e5527451Testing软件测试网)B|8f1EO5Y1B6S
③填入条件项.51Testing软件测试网8Q&jDn2r1|K
;g0bBav*c55274 ④填入动作项.等到初始判定表.
S8A!ZdXF,N5527451Testing软件测试网p.L]1i1B7a|1V
⑤简化.合并相似规则(相同动作).
;qh Y7vlh55274
1hD`_)lW#]55274 B. Beizer 指出了适合使用判定表设计测试用例的条件:51Testing软件测试网iL/|Z8pP#~$XV
ik)G%p Q]55274 ①规格说明以判定表形式给出,或很容易转换成判定表.51Testing软件测试网y] ~;kWA?
51Testing软件测试网V @(R9~Z+H%R:b
②条件的排列顺序不会也不影响执行哪些操作.
Y!U A|1JM55274
$Ey1_0r#if `5v55274 ③规则的排列顺序不会也不影响执行哪些操作.51Testing软件测试网 H Q-E]4A#B E4{'~
51Testing软件测试网!o"o#o_Z [-]
④每当某一规则的条件已经满足,并确定要执行的操作后,不必检验别的规则.51Testing软件测试网 ]1]x[.l a
)Iy r `afI55274 ⑤如果某一规则得到满足要执行多个操作,这些操作的执行顺序无关紧要.
q'H&h8{8^5527451Testing软件测试网#|Q_:?W(?
黑盒测试的优点
W"z ]|U Q5527451Testing软件测试网(Yc1`'U5xP [a-f0V)Y
1. 基本上不用人管着,如果程序停止运行了一般就是被测试程序crash了51Testing软件测试网7vH7wL"M
2. 设计完测试例之后,下来的工作就是爽了,当然更苦闷的是确定crash原因51Testing软件测试网V7{H!pB"VKNk
I_(e#D Jb8i7z55274黑盒测试的缺点51Testing软件测试网hz#Lvf/D+| `%uw
51Testing软件测试网)^ K~4qO)W&iK
1. 结果取决于测试例的设计,测试例的设计部分来势来源于经验,OUSPG的东西很值得借鉴51Testing软件测试网 l"XNk1jv
2. 没有状态转换的概念,目前一些成功的例子基本上都是针对PDU来做的,还做不到针对被测试程序的状态转换来作51Testing软件测试网7V [F1iPi2r
3. 就没有状态概念的测试来说,寻找和确定造成程序crash的测试例是个麻烦事情,必须把周围可能的测试例单独确认一遍。而就有状态的测试来说,就更麻烦了,尤其不是一个单独的testcase造成的问题。这些在堆的问题中表现的更为突出。 -
常用的功能测试方法
2007-4-30
功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能。常用的测试方法如下:
%j3g(e(eQ F552741. 页面链接检查:每一个链接是否都有对应的页面,并且页面之间切换正确。51Testing软件测试网 a X XC"` v @
2. 相关性检查:删除/增加一项会不会对其他项产生影响,如果产生影响,这些影响是否都正确。
O9ok I]h552743. 检查按钮的功能是否正确:如update, cancel, delete, save等功能是否正确。
1@k@(?e552744. 字符串长度检查: 输入超出需求所说明的字符串长度的内容, 看系统是否检查字符串长度,会不会出错.
G/b-Y4l8M&S552745. 字符类型检查: 在应该输入指定类型的内容的地方输入其他类型的内容(如在应该输入整型的地方输入其他字符类型),看系统是否检查字符类型,会否报错.
D r c~-[,h.f552746. 标点符号检查: 输入内容包括各种标点符号,特别是空格,各种引号,回车键.看系统处理是否正确.
}p s.~OL552747. 中文字符处理: 在可以输入中文的系统输入中文,看会否出现乱码或出错.
A;Z{j5F552748. 检查带出信息的完整性: 在查看信息和update信息时,查看所填写的信息是不是全部带出.,带出信息和添加的是否一致
O jQ` L _hnu552749. 信息重复: 在一些需要命名,且名字应该唯一的信息输入重复的名字或ID,看系统有没有处理,会否报错,重名包括是否区分大小写,以及在输入内容的前后输入空格,系统是否作出正确处理.51Testing软件测试网z\M"Vuv5nV'|
10. 检查删除功能:在一些可以一次删除多个信息的地方,不选择任何信息,按”delete”,看系统如何处理,会否出错;然后选择一个和多个信息,进行删除,看是否正确处理.51Testing软件测试网 ?AkYKO!o
11. 检查添加和修改是否一致: 检查添加和修改信息的要求是否一致,例如添加要求必填的项,修改也应该必填;添加规定为整型的项,修改也必须为整型.
-Z6~@4FMi l4L5527412. 检查修改重名:修改时把不能重名的项改为已存在的内容,看会否处理,报错.同时,也要注意,会不会报和自己重名的错.51Testing软件测试网p G:e7O*^
13. 重复提交表单:一条已经成功提交的纪录,back后再提交,看看系统是否做了处理。51Testing软件测试网'jEas$e5}6|
14. 检查多次使用back键的情况: 在有back的地方,back,回到原来页面,再back,重复多次,看会否出错.51Testing软件测试网M:^(Ko.BA%H e
15. search检查: 在有search功能的地方输入系统存在和不存在的内容,看search结果是否正确.如果可以输入多个search条件,可以同时添加合理和不合理的条件,看系统处理是否正确.
6Bb_M N5527416. 输入信息位置: 注意在光标停留的地方输入信息时,光标和所输入的信息会否跳到别的地方.
PK,U [6WF5527417. 上传下载文件检查:上传下载文件的功能是否实现,上传文件是否能打开。对上传文件的格式有何规定,系统是否有解释信息,并检查系统是否能够做到。
O$FW2]Gf5527418. 必填项检查:应该填写的项没有填写时系统是否都做了处理,对必填项是否有提示信息,如在必填项前加*
#c.a.@&?;of5527419. 快捷键检查:是否支持常用快捷键,如Ctrl+C Ctrl+V Backspace等,对一些不允许输入信息的字段,如选人,选日期对快捷方式是否也做了限制。51Testing软件测试网)|o KN xvJ0H
20. 回车键检查: 在输入结束后直接按回车键,看系统处理如何,会否报错. -
单元测试思想之功能测试
2007-4-30
对于一个代码单元,首先要测试它的基本功能。功能就是在某种输入时应该产生某种确定的输出。对于一个代码单元,它的可能输入通常是无穷的,显然,把输入的所有可能取值都进行测试,是不可能也是无意义的,我们应该用一定的规则选择有代表性的数据来建立测试用例。要考虑的输入主要有三种:正常输入,边界输入,非法输入,每种输入还可以分类,也就是平常说的等价类法,每类取一个数据作为输入数据建立测试用例,如果测试通过,可以肯定同类的其他输入也是可以通过的。如果等价类的划分是准确且完整的,并且每一个等价类都进行了测试,那么,可以说这个代码单元经过了充分的测试。下面举例说明:
正常输入
例如字符串的Trim函数,功能是将字符串前后的空格去除,那么正常的输入可以有四类:前面有空格;后面有空格;前后均有空格;前后均无空格。
边界输入
上例中空字符串可以看作是边界输入。
再如一个表示年龄的参数,它的有效范围是0-100,那么边界输入有两个:0和100。
非法输入
非法输入是正常取值范围以外的数据,或使代码不能完成正常功能的输入,如上例中表示年龄的参数,小于0或大于100都是非法输入,再如一个进行文件操作的函数,非法输入有这么几类:文件不存在;目录不存在;权限错误。
如果输入有多个数据,还要考虑这些数据之间的关系,即等价类还要包括数据的组合。
要人工找出所有的等价类通常是很困难的,但使用VU,通常不需要这样做,只要为容易想到的、比较典型的等价类建立测试用例就行了,后文会有进一步的论述。
VU自动生成测试代码,用户只需要在测试用例编辑器中填写输入输出的数值即可:
参数:系统已生成参数的声明,并且,不管是对象、引用、还是指针,甚至指针的指针,都生成对象,VU在调用这些参数时,对于引用、指针或指针的指针,会自动作出适当的处理。对于基本数据类型或定义了赋值操作符的高级数据类型,用户只需将参数的值直接填在"="后面;对于高级数据类型,则可以像普通代码一样,给结构的各个域赋值,或者调用对象的构造函数或其他初始化函数进行初始化。
成员变量:可以用点操作符直接为成员变量赋值,当然,如果成员变量本身也是高级数据类型,则可以像普通代码一样,调用该成员变量的初始化函数。
全局变量:如果全局变量在测试代码中是可见的,则直接引用就行了。
外部数据:外部数据通常需要手工准备,例如文件中的数据或数据库中的数据。
前置操作:可以用点操作符直接调用成员函数。如果前置操作是众多测试用例公用的,可以写在测试类的BeginCase()函数中,如果有多种不同的前置操作,还可以通过传递不同的参数来控制BeginCase()的行为。
预期输出部分的语法与输入部分完全相同,输出可以是0项,1项或多项,每项输出的计算结果,都必须是布尔表达式。如果输出难于预先确定,或者比较复杂,可以在运行测试后再确认。
从上述可以看出,测试用例编辑器可以适应很复杂的测试用例的编辑。只要一个测试用例已编辑完毕,第二个及更多的测试用例就很简单了:选定一个现有的测试用例,由系统自动拷贝,用户再对部分数值进行修改就行了。由于各个测试用例之间的差别通常很小,这种方式可以很快建立测试用例集。
测试用例编辑器还具有代码模式,很特殊的情况下,可以切换到代码模式下直接编辑代码。




