白盒测试方法

辑覆盖测试是通过对程序逻辑结构的遍历实现程序的覆盖。从覆盖源代码的不同程度可以分为以下六个标准:语句覆盖、判定覆盖(又称为分支覆盖)、条件覆盖、判定-条件覆盖(又称为分支-条件覆盖)、条件组合覆盖和路径覆盖。

先看一下具体例子的源代码(C语言):    

1. /*
2. * 白盒测试逻辑覆盖测试范例
3.==================
4. */
5. int logicExample(int x, int y)
6. {
7.   int magic=0;
8.   if(x>0 && y>0)
9.     {
10.      magic = x+y+10; // 语句块1
11.    }
12.  else
13.    {
14.      magic = x+y-10; // 语句块2
15.    }
16. 
17.  if(magic < 0)
18.    {
19.      magic = 0; // 语句块3
20.    }
21.   return magic; // 语句块4
22. }

一般做白盒测试不会直接根据源代码,而是根据流程图来设计测试用例和编写测试代码,在没有设计文档时,要根据源代码画出流程图:

做好了上面的准备工作,接下来就开始讲解六个逻辑覆盖标准:

一、语句覆盖

1、概念:

设计足够多的测试用例,使得被测试程序中的每条可执行语句至少被执行一次。在本例中,可执行语句是指语句块1到语句块4中的语句。

2、测试用例:

{x=3, y=3}可以执行到语句块1和语句块4,所走的路径:a-b-e-f

{x=-3, y=0}可以执行到语句块2、语句块3和语句块4,所走的路径:a-c-d-f

这样,通过两个测试用例即达到了语句覆盖的标准,当然,测试用例(测试用例组)并不是唯一的。

3、测试的充分性:

假设第一个判断语句if(x>0 && y>0)中的“&&”被程序员错误地写成了“||”,即if(x>0 || y>0),使用上面设计出来的一组测试用例来进行测试,仍然可以达到100%的语句覆盖,所以语句覆盖无法发现上述的逻辑错误。

二、判断覆盖(分支覆盖)

1、概念:

设计足够多的测试用例,使得被测试程序中的每个判断的分支至少被执行一次。在本例中共有两个判断if(x>0 && y>0)(记为P1)和if(magic < 0)(记为P2)。

2、测试用例:

数据

P1

P2

路径

{x=3, y=3}

T

F

a-b-e-f

{x=-3, y=0}

F

T

a-c-d-f

两个判断的取真、假分支都已经被执行过,所以满足了判断覆盖的标准。

3、测试的充分性:

  假设第一个判断语句if(x>0 && y>0)中的“&&”被程序员错误地写成了“||”,即if(x>0 || y>0),使用上面设计出来的一组测试用例来进行测试,仍然可以达到100%的判定覆盖,所以判定覆盖也无法发现上述的逻辑错误。

  跟语句覆盖相比:由于可执行语句要不就在判定的真分支,要不就在假分支上,所以,只要满足了判定覆盖标准就一定满足语句覆盖标准,反之则不然。因此,判定覆盖比语句覆盖更强。

三、条件覆盖

1、概念:

设计足够多的测试用例,使得被测试程序中的每个判断语句中的每个逻辑条件的可能值至少被满足一次。

也可以描述成:

设计足够多的测试用例,使得被测试程序中的每个逻辑条件的可能值至少被满足一次。

在本例中有两个判断if(x>0 && y>0)(记为P1)和if(magic < 0)(记为P2),共计三个条件x>0(记为C1)、y>0(记为C2)和magic<0(记为C3)。

2、测试用例:

数据

C1

C2

C3

P1

P2

路径

{x=3, y=3}

T

T

T

T

F

a-b-e-f

{x=-3, y=0}

F

F

F

F

T

a-c-d-f

三个条件的各种可能取值都满足了一次,因此,达到了100%条件覆盖的标准。

3、测试的充分性:

上面的测试用例同时也到达了100%判定覆盖的标准,但并不能保证达到100%条件覆盖标准的测试用例(组)都能到达100%的判定覆盖标准,看下面的例子:

数据

C1

C2

C3

P1

P2

路径

{x=3, y=0}

T

F

T

F

F

a-c-e-f

{x=-3, y=5}

F

T

F

F

F

a-c-e-f

既然条件覆盖标准不能100%达到判定覆盖的标准,也就不一定能够达到100%的语句覆盖标准了。

四、判定-条件覆盖(分支-条件覆盖)

1、概念:

  设计足够多的测试用例,使得被测试程序中的每个判断本身的判定结果(真假)至少满足一次,同时,每个逻辑条件的可能值也至少被满足一次。即同时满足100%判定覆盖和100%条件覆盖的标准。

2、测试用例:

数据

C1

C2

C3

P1

P2

路径

{x=3, y=3}

T

T

T

T

F

a-b-e-f

{x=-3, y=0}

F

F

F

F

T

a-c-d-f

所有条件的可能取值都满足了一次,而且所有的判断本身的判定结果也都满足了一次。

3、测试的充分性:

达到100%判定-条件覆盖标准一定能够达到100%条件覆盖、100%判定覆盖和100%语句覆盖。

五、条件组合覆盖

1、概念:

  设计足够多的测试用例,使得被测试程序中的每个判断的所有可能条件取值的组合至少被满足一次。

注意:

a、条件组合只针对同一个判断语句内存在多个条件的情况,让这些条件的取值进行笛卡尔乘积组合。

b、不同的判断语句内的条件取值之间无需组合。

c、对于单条件的判断语句,只需要满足自己的所有取值即可。

2、测试用例:

数据

C1

C2

C3

P1

P2

路径

{x=-3, y=0}

F

F

F

F

F

a-c-e-f

{x=-3, y=2}

F

T

F

F

F

a-c-e-f

{x=-3, y=0}

T

F

F

F

F

a-c-e-f

{x=3, y=3}

T

T

T

T

T

a-b-d-f

C1C2处于同一判断语句中,它们的所有取值的组合都被满足了一次。v

3、测试的充分性:

  100%满足条件组合标准一定满足100%条件覆盖标准和100%判定覆盖标准。

  但上面的例子中,只走了两条路径a-c-e-fa-b-d-f,而本例的程序存在三条路径。

六、路径覆盖

1、概念:

        设计足够多的测试用例,使得被测试程序中的每条路径至少被覆盖一次。

2、测试用例:

数据

C1

C2

C3

P1

P2

路径

{x=3, y=5}

T

T

T

T

T

a-b-d-f

{x=0, y=2}

F

T

T

F

T

a-c-d-f

这条路径不可能

a-b-e-f

{x=-8, y=3}

F

T

F

F

F

a-c-e-f

所有可能的路径都满足过一次。

3、测试的充分性:

由上表可见,100%满足路径覆盖,但并不一定能100%满足条件覆盖(C2只取到了真),但一定能100%满足判定覆盖标准(因为路径就是从判断的某条分支走的) 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
白盒测试方法是基于代码内部结构的测试方法,设计测试用例需要考虑代码的逻辑结构、数据结构和代码执行路径等因素。以下是一些常用的白盒测试方法和设计测试用例的步骤: 1. 代码覆盖测试:通过测试用例来检查代码是否覆盖了所有的执行路径和条件分支。设计测试用例的步骤包括: - 识别代码中的条件分支和循环结构。 - 设计测试用例满足每个分支和循环结构的所有可能情况。 - 确保测试用例能够覆盖所有的执行路径,包括正常情况、异常情况和边界情况。 2. 数据流测试:通过测试用例来检查代码中的数据流是否正确。设计测试用例的步骤包括: - 识别代码中的变量和数据结构。 - 设计测试用例,测试数据在代码中的传递和转换过程中是否正确。 - 确保测试用例能够覆盖所有的数据流路径,包括正常情况、异常情况和边界情况。 3. 边界值测试:通过测试用例来检查代码在处理边界值时是否正确。设计测试用例的步骤包括: - 识别代码中的边界值,例如最大值、最小值等。 - 设计测试用例,测试边界值时代码是否能够正确处理。 - 确保测试用例能够覆盖所有的边界值情况,包括正常情况、异常情况和非法情况。 4. 异常处理测试:通过测试用例来检查代码在处理异常时是否正确。设计测试用例的步骤包括: - 识别代码中可能出现的异常情况。 - 设计测试用例,测试代码在处理异常情况时是否能够正确处理。 - 确保测试用例能够覆盖所有可能出现的异常情况。 以上是一些常用的白盒测试方法和设计测试用例的步骤,测试人员可以根据具体的项目和代码结构选择合适的测试方法和设计测试用例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值