naotang的测试成长空间,记录工作中的问题,学习中的心得。 个人网站:www.naotang.com

测试用例设计—因果图法【烟三修正出品】

上一篇 / 下一篇  2008-05-20 23:05:41 / 个人分类:测试理论

51Testing软件测试网0zK{iWrE"\

1.引言51Testing软件测试网JogGlPor7xu

%M]/@:M M.Hy"D}YD0
  等价类划分方法和边界值分析方法,都是着重考虑输入条件,但未考虑输入条件之间的联系、相互组合等。考虑输入条件之间的相互组合,可能会产生一些新的情况。但要检查输入条件的组合不是一件容易的事情,即使把所有输入条件划分成等价类,他们之间的组合情况也相当多。因此必须考虑采用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来考虑设计测试用例。这就需要利用因果图(逻辑模型)。51Testing软件测试网7|a/U_]#{tx
  因果图(Cause-EffectGraphing)提供了一个把规格转化为判定表的系统化方法,从该图中可以产生测试数据。其中原因是表示输入条件,结果是对输入执行的一系列计算后得到的输出。51Testing软件测试网Y6l/l.k h pk
  因果图方法最终生成的就是判定表,它适合于检查程序输入条件的各种组合情况。51Testing软件测试网'W HS4tMO

s"n1x5@Rn#f02.因果图介绍
xr*o m,v}Q0
1iY1B(['~02.1图例说明
51Testing软件测试网hH&u| o;dY

J'f.a|f(pN#Ed01、
4种符号分别表示了规格说明中向4种因果关系。如图2-1所示。
c(uBu*j2S9}3qX%Gu0  
~^tzBJB051Testing软件测试网u;k%z gAQ
                          图2-1 因果图关系51Testing软件测试网3q/I'w @de[Tz.j)H
51Testing软件测试网$y OWDSd%wrv
2、
因果图中使用了简单的逻辑符号,以直线联接左右结点。左结点表示输入状态(或称原因),右结点表示输出状态(或称结果)。
y4G(s+e)O_MR03、ci表示原因,通常置于图的左部;ei表示结果,通常在图的右部。ci和ei均可取值0或1,0表示某状态不出现,1表示某状态出现。
cR%z5H"O"mUu0
Ib-u~ X h6i ae02.2因果图概念

IZ7k8n:u4h$yP-a0
^e3O;V`01、关系(图2-1 因果图关系)
#O(i8z`I0     ①恒等:若ci是1,则ei也是1;否则ei为0。51Testing软件测试网Kd Skj(Am
     ②非:若ci是1,则ei是0;否则ei是1。
o;_#S(Y3hYm0     ③或:若c1或c2或c3是1,则ei是1;否则ei为0。“或”可有任意个输入。
a!k+D8Z7Z8q&_0     ④与:若c1和c2都是1,则ei为1;否则ei为0。“与”也可有任意个输入。
ZP P8x_0h!k0
I!@F5w%h wRdR7\t02、约束

~J X(jBpvEM0   输入状态相互之间还可能存在某些依赖关系,称为约束。例如,某些输入条件本身不可能同时出现。输出状态之间也往往存在约束。在因果图中,用特定的符号标明这些约束。如图2-2所示。
qR&Rr,j|3wot9a0
b3\ \:BA051Testing软件测试网 w }#z8lT'S
                             
?X0d+vQ7f I0                           图2-2因果图约束51Testing软件测试网H*^&K,g'S.J h(|+G

{.W7q0i'oQ"GV0A.输入条件的约束有以下4类: 51Testing软件测试网]k"sF@9n7?
① E约束(异):a和b中至多有一个可能为1,即a和b不能同时为1。 51Testing软件测试网F/g"{~~E
② I约束(或):a、b和c中至少有一个必须是1,即 a、b 和c不能同时为0。 
/v6vD1_Q I0③ O约束(唯一);a和b必须有一个,且仅有1个为1。 
h;K.`@1PE0④R约束(要求):a是1时,b必须是1,即不可能a是1时b是0。
6jq@8GcJ)wDz0
oF8]SdB'f!]D%Q/@0B.输出条件约束类型
Xpn+`M\h)G7Jl5oY0输出条件的约束只有M约束(强制):若结果a是1,则结果b强制为0。
C]#r/c;y3`*LR6@0
7}N ? L;z-_5M5Y02.3因果图法设计测试用例步骤
?I)V b/_} z,P0

1GQ*CVn.@w01、分析待测得系统规格,找出原因与结果
*S ^J"o%X$S\WD%N@0   分析软件规格说明描述中,那些是原因(即输入条件或输入条件的等价类),那些是结果(即输出条件), 并给每个原因和结果赋予一个标识符。
Ys2C"Z?*ti02、画出因果图51Testing软件测试网b4ed3K;c:i
   分析软件规格说明描述中的语义。找出原因与结果之间,原因与原因之间对应的关系。根据这些关系,画出因果图。51Testing软件测试网0Z~ X VVa C
3、标记约束或限制条件51Testing软件测试网 ]5g j,hl0NJ
   由于语法或环境限制,有些原因与原因之间,原因与结果之间的组合情况下不可能出现。 为表明这些特殊情况,在因果图上用一些记号表明约束或限制条件。51Testing软件测试网"A+w"iLq g#h
4、把因果图转换为判定表。51Testing软件测试网Cq2N:m1Q~PC
5、用判定表中的每一项生成测试用例。
:bD1K#n6MB051Testing软件测试网,E.[ T)esu'N
3.因果图实例
V6M1HD(Q[~051Testing软件测试网1A-iw4m ~ Z
3.1实例一51Testing软件测试网 wj\R$g hjR
51Testing软件测试网^ T+{9v&l P/d6C
某软件规格说明书包含这样的要求:第一列字符必须是A或B,第二列字符必须是一个数字,在此情况下进行文件的修改,但如果第一列字符不正确,则给出信息L;如果第二列字符不是数字,则给出信息M。
`9wFF*D'~Ed;r W~051Testing软件测试网7F8xa Z g-k%yZh
1、对说明进行分析,得到原因和结果:51Testing软件测试网 ?aH k6haY

/LjZ kh uN&B4F}0原因:  
*u Wp:o9t6O01:第一列字符是A;
k6iX ^8nY"Gt02:第一列字符是B;51Testing软件测试网NawN8_6v
3:第二列字符是一数字。
6l#^:B*|k'@-b3W d0
QrW W9bS0结果:51Testing软件测试网{"c?&gYI-m0S G
21:修改文件;51Testing软件测试网+RhaBS/k3?D9S
22:给出信息L;51Testing软件测试网_Y3MAB#K
23:给出信息M。
5N/eXE|iB3K051Testing软件测试网HI)d8m{g4B
2、其对应的因果图如下:11为中间节点;考虑到原因1和原因2不可能同时为1,因此在因果图上施加E约束,如图3-1所示。51Testing软件测试网V1O(Q$^ SO!o(k5b

!_Z7H KZ0P0  
\bd5Q"E$G Y0  
K\.c"U)YHFo)w`0                        图3-1实例一的因果图
l"^4sY C#Q~2pW1| QT051Testing软件测试网"GKB(?7\^8Y
3、根据因果图建立判定表。51Testing软件测试网Gj*G"[Zsy

+eV"kU6xj0   51Testing软件测试网 \yk']p7DV

1O6k ~6Ze6O B0cC2A[0   表中8种情况的左面两列情况中,原因①和原因②同时为1,这是不可能出现的,故应排除这两种情况。51Testing软件测试网&x.O"]&R7^
51Testing软件测试网l's+A6@+`r0n(\}v\
4、把判定表的每一列拿出来作为依据,设计测试用例51Testing软件测试网Jn cm/b$}{
   我们把表的最下一栏给出了6种情况的测试用例,这是我们所需要的数据。
H.eB-w I8h[(^0
4vy7@M d'QK'z03.2实例二51Testing软件测试网o!WQ?'f*I6q'ZkGn
51Testing软件测试网v/l/{X a*DL1q
有一个处理单价为5角钱的饮料的自动售货机软件测试用例的设计。
"Wz*cA v9dVE0其规格说明如下:
H(^1T1O5av0若投入5角钱或1元钱的硬币,押下〖橙汁〗或〖啤酒〗的按钮,则相应的饮料就送出来。
3Q-\&y bX b0若售货机没有零钱找,则一个显示〖零钱找完〗的红灯亮,这时在投入1元硬币并押下按钮后,饮料不送出来而且1元硬币也退出来;51Testing软件测试网(UgQGp} TUH5Z
若有零钱找,则显示〖零钱找完〗的红灯灭,在送出饮料的同时退还5角硬币。
PO3z7s|D0
j n `M}P5`6z5O8{01、分析这一段说明,列出原因和结果:
RR i4L-\0JCtm9?0这本身只是一个实例,只是用来学习,其实其设计说明还是存在好多漏洞的,例如:如果售货机里没有饮料了怎么办?51Testing软件测试网 i?ML/M(Z t8y4_;B^Q,X
51Testing软件测试网W.?.^V%v!F@r2h\9R
原因:
5kN#UU4L?4F0O2RI01、售货机有零钱找
f&o%T\ Z0v"]9F02、投入1元硬币
qMo n;{|*e03、投入5角硬币
x1|X O.xp-Y-q04、押下橙汁按钮51Testing软件测试网]7_(DGVSK.P3K
5、押下啤酒按钮
D`Z,K%b8PsZ*j0
y$D Jd0_ v/C0结果:
fv8J*p%{.[021、售货机〖零钱找完〗灯亮51Testing软件测试网b1h3jR2Dl jd
22、退还1元硬币
:Te.R!_ br.l+G023、退还5角硬币             
yx E%[5YLT024、送出橙汁饮料51Testing软件测试网{?L H'Q S Q q
25、送出啤酒饮料51Testing软件测试网Q!vF4DHH'BI
51Testing软件测试网jK%|2`MIr&Z
2、画出因果图,如图3-2所示。
k4F6k ? Lk;z \;OZ,xp0所有原因结点列在左边,所有结果结点列在右边。建立中间结点,表示处理的中间状态。中间结点:51Testing软件测试网MG!A\+d|;`3u_
11、投入1元硬币且押下饮料按钮51Testing软件测试网 _Rc-kW
12、押下〖橙汁〗或〖啤酒〗的按钮
F)M2e E1S0CN3X`(l2O8s013、应当找5角零钱并且售货机有零钱找
9`7oi m'f7{ s014、钱已付清
1`HRp"R/]OR'P0
p4sLV Z9POd$U}0  51Testing软件测试网^|*Q h tL\ V1P
    
il"WoW9BW0                          图3-2 售货机因果图

o;aDs+s+r9x051Testing软件测试网 a6O|:oZ lGu#Y y

3、转换成判定表:
E7I O~S bDze&r0
9x)Lj{!s0
(Jo Ac/` qz04、在判定表中,阴影部分表示因违反约束条件的不可能出现的情况,删去。第16列与第32列因什么动作也没做,也删去。最后可根据剩下的16列作为确定测试用例的依据。51Testing软件测试网[j*n|Lo"W
51Testing软件测试网(jB9EH*c G6f
3.3实例三
9K NYH/{*Nyg051Testing软件测试网AJQdO7v
NextData函数的精简决策表51Testing软件测试网$A|sCj5tn
M1={月份: 每月有30天}
d;Ivt+M;d;C2ORB0M2={月份: 每月有31天, 12月除外}
:g&O+oBIg)t)~'wt"c0M3={月份: 2月}51Testing软件测试网t.@ @pW2w y#q
M4={月份:12月}
#SC,Q T,r?.p? [&c0D1={日期:1<=日期<=27}
pLtQHQr0D2={日期:28}51Testing软件测试网u\$MB,?
D3={日期:29}
Te W0^A0D4={日期:30}
1zMx$ApDaGE/q0D5={日期:31}51Testing软件测试网|.[%{&_T
Y1 ={年:年是闰年}51Testing软件测试网 q*~8V!Q#|%I2M
Y2 ={年:年不是闰年}51Testing软件测试网R5W5mMv8H'E
输入变量间存在大量逻辑关系的NextData决策表。51Testing软件测试网7t4{\'vTv y6rK
51Testing软件测试网s*\!t/cYt-q
分析这一段说明,列出原因(条件)和结果:
Y S)u-t Fp0
O'?1o._R;p;t0原因(条件):
f,k Ec?/wD ]8W0M1={月份: 每月有30天}
`T0G1p&?0M2={月份: 每月有31天, 12月除外}
3vi bNe0M3={月份: 2月}51Testing软件测试网 NBx u:h-U8^9l2[ l
M4={月份:12月}
D"ab(Y El0D1={日期:1<=日期<=27}51Testing软件测试网l`N4C*]
D2={日期:28}51Testing软件测试网+DG-k?&p*WI7Q
D3={日期:29}51Testing软件测试网-z'u\%L)B~x"n7s
D4={日期:30}51Testing软件测试网1a&V h z|uS H.n
D5={日期:31}
7Q*p8s5t Y a)o M0Y1 ={年:年是闰年}51Testing软件测试网!yacM1I T#w"~ f
Y2 ={年:年不是闰年}51Testing软件测试网!q-Jtwf(E$s#D7B

T$yA[Rn4I qp w0结果:
Ko ~DyeX5x0输入的日期无效,例如:2008-4-30;2007-2-29;2008-2-30;2008-2-31;
EaY!J x,sPP2@O-Z0日前为1;51Testing软件测试网K+PFD1Ym(s5E'i
月份为1;51Testing软件测试网zQY9@O S)p#D\bG
日期+1;51Testing软件测试网8_us7Or
月份+1;51Testing软件测试网[)V c V ?X%F F
年份+1;51Testing软件测试网{X:wc ^lkp
51Testing软件测试网"e,{lk}MG
   51Testing软件测试网%WE\h/Yql

Kx*[$Q5zd0   该图没有考虑无效日期的情况。51Testing软件测试网.o"D&~.Qh2h+v

5p`Q4xV.Q'V7|v-U0输入条件过于庞大,个人觉得将其分成4部分利于编写判定表,每个Mi对应一张表。这里就不过多描述了。51Testing软件测试网H+rg&}X%gLE
这里大家可以尝试用正交试验法解决。51Testing软件测试网$eQ d{{ H

b@(H&SuKNL.Y03.4实例四

6Mg$r:b3`/p^051Testing软件测试网,B_RC{z:Sr
以中国象棋中马的走法为例子,具体说明:51Testing软件测试网#x/|sE-GV
1、如果落点在棋盘外,则不移动棋子;51Testing软件测试网$H{^5_N+Z6Mt
2、如果落点与起点不构成日字型,则不移动棋子;51Testing软件测试网Wv5RC^E|[.a(E
3、如果落点处有自己方棋子,则不移动棋子;51Testing软件测试网J!xSaKY4_ OB
4、如果在落点方向的邻近交叉点有棋子(绊马腿),则不移动棋子;
#Yr yj g05、如果不属于1-4条,且落点处无棋子,则移动棋子;
:Q#y#F?x+egy.w6j06、如果不属于1-4条,且落点处为对方棋子 (非老将) ,则移动棋子并除去对方棋子;
.NQ'w6Y7db07、如果不属于1-4条,且落点处为对方老将,则移动棋子,并提示战胜对方,游戏结束。51Testing软件测试网yk.zbaK@%T4I_.@

51Testing软件测试网r CL0nD wu E(e

1、对说明进行分析,得到原因和结果:51Testing软件测试网!O0R R/X0@)I$x
51Testing软件测试网o7Q6b%WsR.i1ea
原因:
K}(eOC01、落点在棋盘外;
^6j%N"X[02、不构成日字;
MC Kz5^D$u03、落点有自方棋子;51Testing软件测试网 g\&o@)Yl t
4、绊马腿;51Testing软件测试网nQ6JG u:S0pij4B
5、落点无棋子;51Testing软件测试网}*uj-F+wdg
6、落点为对方棋子;51Testing软件测试网$fw/d`R.s
7、落点为对方老将。
*T3L'?,F;m"q4@}$z+m[ Q051Testing软件测试网9O/z+zc\l+s;B r
结果:51Testing软件测试网M N9u4k|L]:^
21、不移动;51Testing软件测试网NyctZ
22、移动;51Testing软件测试网NV{P#\6^{a8ufO
23、移动己方棋子消除对方棋子;51Testing软件测试网2B'|u?[a*s5} \
24、移动并战胜对方。
,Cf dZ&T5t2r5}0
PXq!Nk9xG02、根据分析出来的原因和结果,我们可以画出因果图,如下:51Testing软件测试网4d/T4Jnw#R
51Testing软件测试网jk.V`2j x

EIru WEtFq0
P x!{)z5d!NG S0   11这个结点称做中间结点,是为了让因果图的结构更加明了,简化因果图导出的判定表。
:^G+v2k#l3a0组合过于庞大(2的7次方)通过中间结点11,将判定表分成两部分,简化判定表如下:51Testing软件测试网&ma}d8nv_
51Testing软件测试网UUB3Am(pB
 51Testing软件测试网"Z1Q+QyGY4D9d
  51Testing软件测试网oH.r6z;[.t

将无用的组合去掉。

'Pg%u!yJV G9X)} Nf0

将上面两张表根据潜在的约束条件,再次修整,得到如下图:51Testing软件测试网jE8HF.eJ ~

j&L4c_XB!fi\%M0

[I6j:[;J.M%u051Testing软件测试网/@4?h3Eq7[$O'rrM2O*n#I

4.因果图法优缺点
3G/B1X@X6Vf&~5m0
VRz!\*wu z#nb04.1优点51Testing软件测试网)B:D'j3ke
1、因果图法能够帮助我们按照一定步骤,高效的选择测试用例,设计多个输入条件组合用例51Testing软件测试网m ]8NG#o8J3KLK
2、因果图分析还能为我们指出,软件规格说明描述中存在的问题51Testing软件测试网 c:O-sT K#nlS
51Testing软件测试网aJ KBip*l4v c*w
4.2缺点

k$~ aqg5jpd01、输入条件与输出结果的因果关系,有时难以从软件需求规格说明书得到。
0L@ ic8P-`;j$C3Z02、即时得到了这些因果关系,也会因为因果关系复杂导致因果图非常庞大,测试用例数目及其庞大。51Testing软件测试网9[${y\9dJ"u2uE


TAG: 实例 因果图法 测试理论 测试用例设计

lery的个人空间 引用 删除 lery   /   2014-08-06 11:07:37
good enough
lery的个人空间 引用 删除 lery   /   2014-08-06 11:07:01
5
引用 删除 greatzhang   /   2014-01-28 14:26:29
跳马问题中最后的判定表第一个测试用例是构造不出来的。3,5,6,7是不能同时为0的,因为就没有落点了。只有3为1时,5,6,7才能同时为0.是不是呢?
zhonghs的个人空间 引用 删除 zhonghs   /   2009-09-09 15:26:16
讲得很好
LinkstecTT 引用 删除 Linkstec   /   2009-04-21 21:09:16
引用 删除 hanguizhong   /   2009-04-17 21:22:53
教科书般经典
备忘录 引用 删除 naotang   /   2009-03-03 13:21:32
保存图片的网站被关站了,等我再弄一下
橙色海洋 引用 删除 ladyjanice   /   2009-03-03 10:00:46

只是图片都看不到~~~~~~~~
yxftest 引用 删除 yxf   /   2008-06-19 19:35:10
这篇对我很有用,谢了!
卖烧烤的鱼测试博客 引用 删除 卖烧烤的鱼   /   2008-06-18 15:08:00
烟三修正出品,哈哈,你的别名搞这么多搞什么
 

评分:0

我来说两句

Open Toolbar