白盒测试之基本路径测试法(转)

上一篇 / 下一篇  2009-03-02 13:22:56

白盒测试之基本路径测试法

白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、Z路径覆盖、程序变异。51Testing软件测试网5OAw)L W P o"Y

4F]mJJc)H85282  其中运用最为广泛的是基本路径测试法。

$V?jw-xw`*Jj Jb85282

7k~"i,[Q!U Q85282  基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。51Testing软件测试网)r lZ!h:|;~| eG

j3^3k)y$p:N%b85282  设计出的测试用例要保证在测试中程序的每个可执行语句至少执行一次。

g uq*Gt?$@s85282

wSQr\"O A)l2[y%n85282  在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例。包括以下4个步骤和一个工具方法:51Testing软件测试网 Epk5g&_Yl

51Testing软件测试网3k$O`.Z:J'}4d B

  1. 程序的控制流图:描述程序控制流的一种图示方法。51Testing软件测试网6Q kHEd+w:mS

51Testing软件测试网ORx9K(l

  2. 程序圈复杂度:McCabe复杂性度量。从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。

"g)c0A5B&ETx)@/m85282

},K4A"]-Z5o85282  3. 导出测试用例:根据圈复杂度和程序结构设计用例数据输入和预期结果

1?4Ta&D$U85282

t8oBZ1rxJ\du85282  4. 准备测试用例:确保基本路径集中的每一条路径的执行。

#_1y,s } W`VF85282

z-z3PqfE+c85282  工具方法:51Testing软件测试网'eU"Yx`&eW!kU

.^_7u{y*R$|%b/\N6Y85282  图形矩阵:是在基本路径测试中起辅助作用的软件工具,利用它可以实现自动地确定一个基本路径集。51Testing软件测试网&WbA'Ft&T-YI

O} U i,u85282  程序的控制流图:描述程序控制流的一种图示方法。

3^,v3B(jJ1Bh85282

P9I+|1Z-K#M,Swom R!~85282  圆圈称为控制流图的一个结点,表示一个或多个无分支的语句或源程序语句

K|)SUi @_*|85282

iK@XHWi8528251Testing软件测试网fP[vD Np

  流图只有二种图形符号:51Testing软件测试网:_$?&P^/z7\e

51Testing软件测试网%g fmXvVC.C^w

  图中的每一个圆称为流图的结点,代表一条或多条语句。

y {5m"x8WX'h85282

q$hv G R2\85282  流图中的箭头称为边或连接,代表控制流

[K{s1P/J[8A85282

.G!ffB#^85282  任何过程设计都要被翻译成控制流图。

*y4Fgfpj8528251Testing软件测试网s2KU6m5}~~f

  如何根据程序流程图画出控制流程图?

|N~v| AE2t2p8528251Testing软件测试网Cd2Ju fb*C-l2f(K

  在将程序流程图简化成控制流图时,应注意:

Br7x7ya8528251Testing软件测试网wzV9f*E2j@5M+^

  n 在选择或多分支结构中,分支的汇聚处应有一个汇聚结点。

6ehZ-s;EE8528251Testing软件测试网0y Hun1}q{5Ku

  n 边和结点圈定的区域叫做区域,当对区域计数时,图形外的区域也应记为一个区域。51Testing软件测试网7N2O s1R[&Y%l{*r

4I0K/p&A!{-Ci85282  如下页图所示

+g `1u0az*E.w:p85282

'M6KCd;UObT+r%f |85282

n 如果判断中的条件表达式是由一个或多个逻辑运算符 (OR, AND, NAND, NOR) 连接的复合条件表达式,则需要改为一系列只有单条件的嵌套的判断。51Testing软件测试网s%u1aB_cBE

51Testing软件测试网 _K)f2Be,[{

  例如:51Testing软件测试网 y[~/q8^#Aw;\j0n

t)F-XZUO |wXZkD"r85282  1 if a or b

g`6t\1of85282

3_F7tN|)wh+[}85282  2 x51Testing软件测试网/U#H2^"Ea6B+V.h

51Testing软件测试网H{Jg l}X$W6^

  3 else51Testing软件测试网9a3ToW%N5N

hat T ty;[_-~85282  4 y51Testing软件测试网4Dk)g@)V2wIF$D

5yWfE&JkC85282  对应的逻辑为:51Testing软件测试网/p6CO&Ei2B&s

51Testing软件测试网M"h&CgP Ee#jZ

l#r(B1c`\ Z)e85282  独立路径:至少沿一条新的边移动的路径51Testing软件测试网@&c*PA9nCk x"Ns+is

eGC K*}-}I.\,oq85282

o 第一步:画出控制流图51Testing软件测试网:Q1Vdu\C`

51Testing软件测试网!g"F8sU v

  流程图用来描述程序控制结构。可将流程图映射到一个相应的流图(假设流程图的菱形决定框中不包含复合条件)。在流图中,每一个圆,称为流图的结点,代表一个或多个语句。一个处理方框序列和一个菱形决测框可被映射为一个结点,流图中的箭头,称为边或连接,代表控制流,类似于流程图中的箭头。一条边必须终止于一个结点,即使该结点并不代表任何语句(例如:if-else-then结构)。由边和结点限定的范围称为区域。计算区域时应包括图外部的范围。

\6H KI9V:d$D'a85282

51Testing软件测试网 D;D|z Hh? h

51Testing软件测试网Nu {aU1K9t1W

  画出其程序流程图和对应的控制流图如下51Testing软件测试网JV2m{0X;X/h U Z(W

51Testing软件测试网,hD][/{v^3FiCb/Kt,D

)n$B'GK n:v85282  o 第二步:计算圈复杂度51Testing软件测试网8{.P%{0c'd

.{2HxL4{W;J85282  圈复杂度是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于计算程序的基本的独立路径数目,为确保所有语句至少执行一次的测试数量的上界。独立路径必须包含一条在定义之前不曾用到的边。

];UG6TD8EVr)r+c85282

{6T,CI4K]4z:R3x85282  有以下三种方法计算圈复杂度:

j U&n s5Az+_v8528251Testing软件测试网d L \\7Ek

  流图中区域的数量对应于环型的复杂性;

h%dW6g,u4dI8528251Testing软件测试网!J.t#w6UJ:xyz

  给定流图G的圈复杂度V(G),定义为V(G)=E-N+2,E是流图中边的数量,N是流图中结点的数量;

O,A4u$V(J*rd85282

ZW/rB,B)f lO85282  给定流图G的圈复杂度V(G),定义为V(G)=P+1,P是流图G中判定结点的数量。

_ Yt&}P2x C85282

51Testing软件测试网5kH h#{@l pd @2y

o 第三步:导出测试用例51Testing软件测试网)NkIyuV z

QVAfwq^i\N85282  根据上面的计算方法,可得出四个独立的路径。(一条独立路径是指,和其他的独立路径相比,至少引入一个新处理语句或一个新判断的程序通路。V(G)值正好等于该程序的独立路径的条数。)51Testing软件测试网V ^ Q,\7i#A+_

51Testing软件测试网 z m[jy+J#o

  ü 路径1:4-14

c,_bL|:Uy~8528251Testing软件测试网-DDkM/@ o*Z)|Rn

  ü 路径2:4-6-7-14

hMH*p$g5w8528251Testing软件测试网,d:VTV#s

  ü 路径3:4-6-8-10-13-4-1451Testing软件测试网.u,HhD-h|\y

%KEF.I.? E4HR2^85282  ü 路径4:4-6-8-11-13-4-14

YW8d6n6Ag4B85282

XQ(e9^ Ix{s85282  根据上面的独立路径,去设计输入数据,使程序分别执行到上面四条路径。51Testing软件测试网d,AnM,DGC/r3p

5|&R!l]:? ok85282  o 第四步:准备测试用例

Y ABI%_8528251Testing软件测试网^I:\@:c#`

  为了确保基本路径集中的每一条路径的执行,根据判断结点给出的条件,选择适当的数据以保证某一条路径可以被测试到,满足上面例子基本路径集的测试用例是:51Testing软件测试网Z!e;f d RKm d

51Testing软件测试网@_4B/IE4G9E"o

举例说明:51Testing软件测试网_7v E}Q~V;M N*vi

;@9Tf*{.u]z85282  例:下例程序流程图描述了最多输入50个值(以–1作为输入结束标志),计算其中有效的学生分数的个数、总分数和平均值。

i.EQg Zb85282

`J(r"]8y8E(Y"y85282

9H||-J u]85282  步骤1:导出过程的流图。

:dNk4chxqt85282

kTK3A%Jc2[8528251Testing软件测试网"{ {)h(M C@8x

  步骤2:确定环形复杂性度量V(G):51Testing软件测试网 }l |&U"Q T)k

l{p8KiL,I85282  1)V(G)= 6 (个区域)

A8CQ ?%Pn4r8528251Testing软件测试网i6BL ?1cb r v|

  2)V(G)=E–N+2=16–12+2=6

;ix#O-TI@2gp85282

{f&i'}A85282  其中E为流图中的边数,N为结点数;

@"M;q/Vvx85282

1h3MILS(I4X!P85282  3)V(G)=P+1=5+1=651Testing软件测试网Vm/D8~"r/Z+rn8V/X

51Testing软件测试网f i7o6D j!Xc"F*\

  其中P为谓词结点的个数。在流图中,结点2、3、5、6、9是谓词结点。51Testing软件测试网q,WL T D

51Testing软件测试网AK Y)V @N$}g

  步骤3:确定基本路径集合(即独立路径集合)。于是可确定6条独立的路径:

;s k-F/tFt6ai8528251Testing软件测试网r:`7j/V^T&C1IA1D

  路径1:1-2-9-10-1251Testing软件测试网ie*sTw#g5goG

"y7Za}}1m5n0s85282  路径2:1-2-9-11-12

QF0\:F[5Q2j.J5Il8528251Testing软件测试网7XJq0Hws

  路径3:1-2-3-9-10-12

Flg1Jl4f{#P7s85282

Hz I qD#hw2y8j'?85282  路径4:1-2-3-4-5-8-2…

-?u? T0V| jr$Y85282

-]5vh3z,_1k!S#g85282  路径5:1-2-3-4-5-6-8-2…51Testing软件测试网XU0c5C1|5e

'f SM|v%fx85282  路径6:1-2-3-4-5-6-7-8-2…

5K\O SIIx uF8528251Testing软件测试网]'mTt%?/\"^

  步骤4:为每一条独立路径各设计一组测试用例,以便强迫程序沿着该路径至少执行一次。51Testing软件测试网p;U`9v M

l1v%^&cT8zs)^9@C$m85282  1)路径1(1-2-9-10-12)的测试用例:51Testing软件测试网 b3y#Qe"H4Z8h

51Testing软件测试网8H^&N@0OS(E

  score[k]=有效分数值,当k < i ;

X {5Mf*[;j'g7f"K8528251Testing软件测试网 vs)UL.s#l#y

  score[i]=–1, 2≤i≤50;51Testing软件测试网|a-HG l:lm

51Testing软件测试网t(r:uv}8|do

  期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。

!hV0`SF4^85282

;c.jay4Lch85282  2)路径2(1-2-9-11-12)的测试用例:51Testing软件测试网B\ }0H3`$W4n

51Testing软件测试网 WKY!]bc1ao

  score[ 1 ]= – 1 ;

'L7U1fX.c5o3wO*N"\s8528251Testing软件测试网(V ot}c.yb:[

  期望的结果:average = – 1 ,其他量保持初值。

r_{k-YV0sb85282

.w_w6pW Z+VS85282  3)路径3(1-2-3-9-10-12)的测试用例:

'G8Jf@P^85282

J{4`-P;B5Nz Z)`B{85282  输入多于50个有效分数,即试图处理51个分数,要求前51个为有效分数;51Testing软件测试网%} T p9jW5Z r

0L8Jh v j6y85282  期望结果:n1=50、且算出正确的总分和平均分。

E:Z;jnY"FP5i85282

4`(dN0P/E _)x85282  4)路径4(1-2-3-4-5-8-2…)的测试用例:51Testing软件测试网F.kk&Y7d0DSi#l

`"I$m+_w-{.R'_9T H.o85282  score[i]=有效分数,当i<50;

3`7}atB w85282

1]MEN0?u&`85282  score[k]<0, k< i ;

iy js#@85282

8z4wM(ho.T85282  期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average

,`6I}/a{ V85282

:p"d,t$p!j-G{85282  score[i]=有效分数, 当i<50;51Testing软件测试网"Qr2n6s z-UF i_Yg

51Testing软件测试网Z$A } |0g7c7JZ,Q

  score[k]>100, k< i ;

Lfo-S#HbS85282

W+] Q5z f$?85282  期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。51Testing软件测试网){+`~H)| r$np

51Testing软件测试网V Sd;R%?`

  6)路径6(1-2-3-4-5-6-7-8-2…)的测试用例:51Testing软件测试网x g5L'dJ \'_3~

51Testing软件测试网x(\})n-d RY

  score[i]=有效分数, 当i<50;

@f}+t7V9@85282

L:O6Zd F*\85282  期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。51Testing软件测试网J$pNSKCL\

Hm I`2B85282  注意事项:

{X'Fgccv85282

!j&U5N;q;a85282  必须注意,一些独立的路径,往往不是完全孤立的,有时它是程序正常的控制流的一部分,这时,这些路径的测试可以是另一条路径测试的一部分。51Testing软件测试网 LpX(N!P Pn

^&g ET7fXoV85282  方法工具:图形矩阵51Testing软件测试网%_\`2O5M3e H8S

q-sI V6{'m'n&x85282  o 导出控制流图和决定基本测试路径的过程均需要机械化,为了开发辅助基本路径测试的软件工具,称为图形矩阵(graph matrix)的数据结构很有用。51Testing软件测试网ntN4L#~9t$vB

J"`)Af SIS85282  利用图形矩阵可以实现自动地确定一个基本路径集。一个图形矩阵是一个方阵,其行/列数控制流图中的结点数,每行和每列依次对应到一个被标识的结点,矩阵元素对应到结点间的连接(即边)。在图中,控制流图的每一个结点都用数字加以标识,每一条边都用字母加以标识。如果在控制流图中第i个结点到第j个结点有一个名为x的边相连接,则在对应的图形矩阵中第i行/第j列有一个非空的元素x。

"H$I GzS8k7h85282

O"J5t2GB L+XjK85282  对每个矩阵项加入连接权值(link weight),图矩阵就可以用于在测试中评估程序的控制结构,连接权值为控制流提供了另外的信息。最简单情况下,连接权值是 1(存在连接)或0(不存在连接),但是,连接权值可以赋予更有趣的属性:51Testing软件测试网O$Hy-q1@

51Testing软件测试网Y;|(l*p:{%s

  执行连接(边)的概率。51Testing软件测试网3Y6T&Ol9r"U8A#f

51Testing软件测试网#JG_Gn;D$e

  穿越连接的处理时间。

/RZX-j!UP6Q\8528251Testing软件测试网&N)Hz.KD2Q+l

  穿越连接时所需的内存

Z:gN1n[ R8528251Testing软件测试网bA8Xrg9l#p~c

  穿越连接时所需的资源51Testing软件测试网MN2C*oN2r!e

FiFRTa$Y85282  根据上面的方法对例4画出图形矩阵如下:

S U*}DnU%^P#Dq,B85282

51Testing软件测试网!l_0e g:Ixne-I

51Testing软件测试网 ~'Ju&w\!K

  连接权为“1”表示存在一个连接,在图中如果一行有两个或更多的元素“1”,则这行所代表的结点一定是一个判定结点,通过连接矩阵中有两个以上(包括两个)元素为“1”的个数,就可以得到确定该图圈复杂度的另一种算法。

^Spc \85282

TAG:

tatalovely的个人空间 引用 删除 tatalovely   /   2012-05-16 11:40:21
很好,收藏啦
xiao_chongqing的个人空间 引用 删除 xiao_chongqing   /   2012-03-06 16:56:07
1
 

评分:0

我来说两句

日历

« 2024-04-28  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 10917
  • 日志数: 20
  • 建立时间: 2009-02-11
  • 更新时间: 2009-03-24

RSS订阅

Open Toolbar