软件测试之控制结构测试
-
软件测试之控制结构测试
< br>尽管基本路径测试简单高效,但是,其本身并不充分。本节讨论控制结构测
p>
试的其
他变种,这些测试覆盖并提高了白盒测试的质量。
1
条件测试
条件测试是检查程序模块中所包含逻辑条件的测试用例设计方法。一个
简
单条件是一个布尔变量或一个可能带有
NOT
(
“
「”
)
操作符的关系表达式。关系
表达式的形式如:
E1
V
关系操作符〉
E2
p>
其中
E1
和
E2<
/p>
是算术表达式,而
V
关系操作符>是下列
之一
:
“
v”
,
“W”
,
“
二
”,“工”(
二
”
)
,“〉”,或“》”。复杂条件由简单条件、布尔操作符
和
括弧组成。我们假定可用于复杂条件的布尔算子包括
OR
“|
”,
AND<
/p>
“
&”禾口
NOT
“1”
,
不含关系表达式的条件称为布尔表达式。
< br>所以条件的成分类型包括布尔操作
符、布尔变量、布尔括弧
(
括住简单或复
杂条件
)
、关系操作符或算术表达式。
如果条
件不正确,则至少有一个条件成分不正确,这样,条件的错误类型
如
下:
•布尔操作符错误
(
遗漏布尔操作符,布尔操作符多余或布尔操作符不正
确
)
。
•布尔变量错误。
•布尔括弧错误。
•关系操作符错误。
•算术表达式错误。
条件测试方法注
重于测试程序中的条件。本节后面讨论的条件测试策略主
要有
两个优点,首先,测度条件测试的覆盖率是简单的,其次,程序的条件测
试覆盖率为
产生另外的程序测试提供了指导。
条件测试的目
的是测试程序条件的错误和程序的其他错误。如果程序
P
的
测试
集能够有效地检测
P
中的条件错误,则该测试集可能也会有效地检测
P
中
的其
他错
误,此外,如果测试策略对检测条件错误有效,则它也可能有效地检
测程序错误。
已经提出了
几个条件测试策略。分支测试可能是最简单的条件测试策略,
对于
复合条件
C
,
C
的真分支和假分支以及
C
中的每个简单条件都需要至少执行
一次
[
MYE97
]。
域测试
(Domain testing)
< br>[
WHI80
要求从有理表达式中导出三个或四个测
p>
试,有
理表达式的形式如:
E1
V
关系操作符〉
E
2
需要三个测试分别用于计算
p>
E1
的值是大于、等于或小于
E2
的值[
HOW82
如果
V
关系操作符〉错误,而
E1
p>
和
E2
正确,则这三个测试能够发现关系算
子
的错误。
为了发现
E1
和
E2
的错误,计算
p>
E1
小于或大于
E2
的测试应使两个值
间的差别尽可
能小。
有
n
个变量的布尔表达式需要
2n
个可能的测试
(n
>
0)
。这种策略可以发现
布尔
操作符、变量和括弧的错误,但是只有在
n
很小时实用。
也可以派生出敏感布尔表达式错误的测试[
FOS84 TAI
87
]。对于有
n
个布
尔
变量
(n
>
0)
的单布尔表达式
(<
/p>
每个布尔变量只出现一次
)
,可以很容易
地产生
测试数小
于
2n
的测试集,该测试集能够发现多个布尔操作符错误和其他错误。
Tai
:
TAI89
]建议在上述技术之上建立条件测试策略,
称为
BRO(branchand
relational
试集
operator)
的测试保证能发现布尔变量和关系操作符只出现一
次而且没
有公共变量的条件中的分支和条件操作符错误。
< br>
BRO
策
略利用条件
C
的条件约束。有
n
个
简单条件的条件
C
的条件约束定义
为
(D1
,
D2
…,
Dn)
,
其中
< br>Di(O
v
i
<
n)
表示条件
C
中第
p>
i
个简单条件的输出约
< br>束。如果
C
的执行过程中
C
p>
的每个简单条件的输出都满足
D
中对应的约束,则
称条件
C
的条件
约束
D
由
C
的执行所覆盖。
对于布尔变量
B,
B
输出的约束说明
B
必须是真⑴
或假⑴。类似地,对于
关系
表达式,
符号
V
、
=
、
>
用于指定表达式输出的约束。
p>
作为简单的例子
,
考虑条件
C1: B1&B2
其中
B1
和
B2
是布尔变量。
C1
的条件约束式如
(
D1
,
D2)
,其中
D1
和
D2
是
“
t
”或“
< br>f
”,值
(t
,
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
的布尔和关系算子的
错误。