白盒测试方法

2020-11-11
halley.fang

白盒测试定义:白盒测试又称结构测试,透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法,白盒指的是程序的内部结构和运作机制是可见的。

白盒测试的目的

通过检查软件内部的逻辑结构,对软件中的逻辑路径进行覆盖测试;在程序不同地方设置检查点,检查程序的状态,以确定实际运行状态与预期状态是否一致。

白盒测试的方法

  • 静态分析
    是一种不执行程序而进行测试的技术。静态分析的主要目的是检查软件的表示和描述是否一致,没有冲突或者没有歧义

  • 动态分析
    当软件系统在模拟或真实的环境中执行前、过程中和执行后,对其行为分析。它显示了一个系统在检查状态下是否正确。在动态分析技术中,最重要的技术是路径和分支测试。下面要介绍的六种覆盖测试方法属于动态分析方法。

例题:

st=>start: 开始--A
cond1=>condition: x>=80 && y>=80 --B
op1=>operation: 处理框1 --C
cond2=>condition: x+y>=140 && (x>=90 or y>=90) --D
op2=>operation: 处理框2 --E
op3=>operation: 处理框3 --F
e=>end: 结束 --G
st->cond1
cond1(yes)->op1->e
cond1(no)->cond2
cond2(yes)->op2->e
cond2(no)->op3->e

语句覆盖

使程序中的每个可执行语句都能执行一次的测试用例,其覆盖标准无法发现判定中逻辑运算的错误;

序号 x y 路径

1

90

90

ABCG

2

60

60

ABDFG

3

70

70

ABDEG

优点:可以很直观地从源代码得到测试用例,无须细分每条判定表达式。

缺点:由于这种测试方法仅仅针对程序逻辑中显式存在的语句,但对于隐藏的条件和可能到达的隐式逻辑分支,是无法测试的。在本例中去掉了语句1—〉T去掉,那么就少了一条测试路径。在if结构中若源代码没有给出else后面的执行分支,那么语句覆盖测试就不会考虑这种情况。但是我们不能排除这种以外的分支不会被执行,而往往这种错误会经常出现。再如,在Do-While结构中,语句覆盖执行其中某一个条件分支。那么显然,语句覆盖对于多分支的逻辑运算是无法全面反映的,它只在乎运行一次,而不考虑其他情况。

判定覆盖(分支覆盖)

判定覆盖<又叫分支覆盖率>是指对于判断语句,在设计用例的时候,要设计判断语句结果为True和False的两种情况,但若程序中的判定是有几个条件联合构成时,它未必能发现每个条件的错误;

序号 x y 路径

1

90

90

ABCG

2

60

60

ABDFG

3

70

70

ABDEG

优点:判定覆盖比语句覆盖要多几乎一倍的测试路径,当然也就具有比语句覆盖更强的测试能力。同样判定覆盖也具有和语句覆盖一样的简单性,无须细分每个判定就可以得到测试用例。

缺点:往往大部分的判定语句是由多个逻辑条件组合而成(如,判定语句中包含AND、OR、CASE),若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。

ps:与语句覆盖的区别,假设if条件没有else分支,则语句覆盖只有一个分支,而分支覆盖依然是需要设计else分支

条件覆盖

设计用例时针对判断语句里面每个条件表达式true 和 false各取值一次,不考判断语句的计算结果

序号 x y 路径

1

90

90

ABCG

2

60

60

ABDFG

优点:显然条件覆盖比判定覆盖,增加了对符合判定情况的测试,增加了测试路径。

缺点:要达到条件覆盖,需要足够多的测试用例,但条件覆盖并不能保证判定覆盖。条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。

判定条件覆盖(分支条件覆盖)

判定/条件覆盖是使判定中每个条件的所有可能结果至少出现一次,并且每个判定本身的所有可能结果也至少出现一次;

序号 x y 路径

1

90

90

ABCG

2

60

60

ABDFG

3

60

80

ABDEG

优点:判定/条件覆盖满足判定覆盖准则和条件覆盖准则,弥补了二者的不足。

缺点:判定/条件覆盖准则的缺点是未考虑条件的组合情况。

修正条件判定覆盖

修正条件判定覆盖满足条件与判定覆盖,并且需要确定每个条件能够影响到包含的判定的结果。

序号 x y 路径

1

90

90

ABCG

2

60

60

ABDFG

3

60

80

ABDEG

4

90

30

ABDEG

5

30

90

ABDEG

条件组合覆盖

条件组合覆盖是使每个判定中条件结果的所有可能组合至少出现一次,因此判定本身的所有可能解说也至少出现一次,同时也是每个条件的所有可能结果至少出现一次;

序号 x y 路径

1

90

90

ABCG

2

60

60

ABDFG

3

70

70

ABDEG

路径覆盖

路径覆盖是每条可能执行到的路径至少执行一次;

序号 x y 路径

1

90

90

ABCG

2

60

60

ABDFG

3

70

70

ABDEG

优点:这种覆盖方法可以对程序进行彻底的测试用例覆盖,比前面讲的五种方法覆盖度都要高。

缺点:于路径覆盖需要对所有可能的路径进行测试(包括循环、条件组合、分支选择等),那么需要设计大量、复杂的测试用例,使得工作量呈指数级增长。路径覆盖虽然是一种比较强的覆盖,但未必考虑判断语句中条件表达式结果的组合,并不能代替条件覆盖和条件组合覆盖。


Similar Posts

Comments

Table of contents