软件测试之控制结构测试

萌到你眼炸
699次浏览
2021年02月13日 08:01
最佳经验
本文由作者推荐

-

2021年2月13日发(作者:我爱男子汉张杰)



软件测试之控制结构测试


< br>尽管基本路径测试简单高效,但是,其本身并不充分。本节讨论控制结构测



试的其


他变种,这些测试覆盖并提高了白盒测试的质量。

< p>


1


条件测试



条件测试是检查程序模块中所包含逻辑条件的测试用例设计方法。一个




单条件是一个布尔变量或一个可能带有



NOT




「”


操作符的关系表达式。关系



表达式的形式如:



E1


V


关系操作符〉


E2



其中


E1



E2< /p>


是算术表达式,而


V


关系操作符>是下列 之一





“ v”



“W”






”,“工”(






,“〉”,或“》”。复杂条件由简单条件、布尔操作符




括弧组成。我们假定可用于复杂条件的布尔算子包括



OR


“|


”,


AND< /p>



&”禾口



NOT



“1” ,


不含关系表达式的条件称为布尔表达式。


< br>所以条件的成分类型包括布尔操作


符、布尔变量、布尔括弧




括住简单或复



杂条件





、关系操作符或算术表达式。



如果条 件不正确,则至少有一个条件成分不正确,这样,条件的错误类型




下:



•布尔操作符错误





遗漏布尔操作符,布尔操作符多余或布尔操作符不正







•布尔变量错误。



•布尔括弧错误。



•关系操作符错误。



•算术表达式错误。



条件测试方法注 重于测试程序中的条件。本节后面讨论的条件测试策略主



要有


两个优点,首先,测度条件测试的覆盖率是简单的,其次,程序的条件测



试覆盖率为


产生另外的程序测试提供了指导。





条件测试的目 的是测试程序条件的错误和程序的其他错误。如果程序



P




测试


集能够有效地检测



P


中的条件错误,则该测试集可能也会有效地检测



P




的其 他错


误,此外,如果测试策略对检测条件错误有效,则它也可能有效地检



测程序错误。



已经提出了 几个条件测试策略。分支测试可能是最简单的条件测试策略,



对于


复合条件



C



C


的真分支和假分支以及



C


中的每个简单条件都需要至少执行



一次




MYE97


]。



域测试


(Domain testing)

< br>[


WHI80


要求从有理表达式中导出三个或四个测



试,有


理表达式的形式如:



E1


V


关系操作符〉


E 2



需要三个测试分别用于计算



E1


的值是大于、等于或小于


E2


的值[


HOW82


如果


V


关系操作符〉错误,而



E1



E2


正确,则这三个测试能够发现关系算 子



的错误。


为了发现


E1



E2


的错误,计算


E1


小于或大于


E2


的测试应使两个值



间的差别尽可


能小。




n


个变量的布尔表达式需要


2n


个可能的测试


(n


>


0)


。这种策略可以发现


< p>
布尔


操作符、变量和括弧的错误,但是只有在



n


很小时实用。



也可以派生出敏感布尔表达式错误的测试[


FOS84 TAI 87


]。对于有


n


个布




变量


(n


>


0)


的单布尔表达式


(< /p>


每个布尔变量只出现一次


)


,可以很容易 地产生



测试数小




2n


的测试集,该测试集能够发现多个布尔操作符错误和其他错误。



Tai


:


TAI89


]建议在上述技术之上建立条件测试策略,



称为


BRO(branchand



relational


试集



operator)


的测试保证能发现布尔变量和关系操作符只出现一


< p>
次而且没


有公共变量的条件中的分支和条件操作符错误。

< br>


BRO



略利用条件


C


的条件约束。有


n


个 简单条件的条件


C


的条件约束定义






(D1


,


D2


…,


Dn)


,


其中

< br>Di(O


v


i


<

< p>
n)


表示条件


C


中第


i


个简单条件的输出约


< br>束。如果


C


的执行过程中


C


的每个简单条件的输出都满足



D


中对应的约束,则



称条件


C


的条件


约束


D



C


的执行所覆盖。



对于布尔变量


B, B


输出的约束说明


B


必须是真⑴ 或假⑴。类似地,对于



关系


表达式, 符号


V



=



>


用于指定表达式输出的约束。



作为简单的例子


,


考虑条件



C1: B1&B2


其中


B1



B2


是布尔变量。


C1


的条件约束式如


(


D1


,


D2)


,其中

D1



D2




t


”或“

< br>f


”,值


(t


,

< p>
f)



C1


的条件约束, 由使


B1


为真


B2

为假的测试所覆盖。



BRO


W< /p>


试策略要求约束集{



(t


,


t)


,


(f


,


t)


,


(t


,


f)


}由


C1


的执行所覆盖,女口




C1


由于布尔算子的错误而不正确,至少有一个约束强制



作为第二个例子,考虑



C2



B1


&


(E3=E4)


C1


失败。



其中


B1


是布尔表达式,而


E3



E4


是算术表达式。


C2


的条件约束形式如


(


D1


,


D2)


,


其中


D1


是“


t

”或“


f


”,


D2



V,


=


< br>>


。除了



C2


的第二个简单条件是关



系表


达式以外,


C2



C1


相同,所以可以修改


C1


的约束集{



(t


,


t)


,


(f


,


t)


,


(t


,


f)


,


得到


C2

的约束集,注意


(E3=E4)


的“


t


”意味着“


”,而


(E3=E4 )


的“


f


” 意味着


“〉”或


“V”


。分别用


(t


,


=)



(f


,


=)


替换


( t


,


t)



(f


,


t)


,


并 用


(t


, vv>


)



(t


, >


)


替换


(t


,


f)


,


就得到



C2


的约束集{



(t


,


=)


,


(f


,


=)


,


(t


, V


) (t


>


)


}。上述条件约束集的覆盖率 将保


证检测



C2


的布尔和关系算子的



错误。



-


-


-


-


-


-


-


-