白盒测试概述

简介

白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,即清楚盒子内部的东西以及里面是如何运作的。

java白盒测试用例怎么写 白盒测试用例方法_复杂度

特点

 

java白盒测试用例怎么写 白盒测试用例方法_复杂度_02

 

白盒测试方法分为静态测试和动态测试。

静态测试是在测试过程中没有执行程序,主要方法如下:

  1. 桌面检查:找资深的同事检查代码
  2. 代码审查:以会议的形式,召集相关人员=参与,由会议召集人讲解代码逻辑实现
  3. 代码走查:以会议的形式,与会人都需要事先了解代码实现,通过会议的形式,一起讨论代码逻辑实现
  4. 代码扫描工具:根据代码规范设计工具,检查代码中不符合规范的语句。

动态测试是在在代码执行过程中完成测试。

主要测试方法如下:

逻辑覆盖 

通过对程序的逻辑结构的遍历,实现代码覆盖的方法。

覆盖率:

java白盒测试用例怎么写 白盒测试用例方法_测试用例_03

1. 逻辑覆盖包含:

 

 

  • 语句覆盖
  • 判定覆盖
  • 条件覆盖
  • 判定条件覆盖
  • 条件组合覆盖
  • 路径覆盖

基本路径覆盖

java白盒测试用例怎么写 白盒测试用例方法_java白盒测试用例怎么写_04

语句覆盖

设计测试用例,使得程序中每条语句被覆盖。

语句覆盖率:

语句覆盖率=至少执行一次的语句的数量/可执行的语句总数

java白盒测试用例怎么写 白盒测试用例方法_条件覆盖_05

ITEM 指的是语句,条件,判定,判定条件,条件组合,路径等。

语句覆盖测试用例设计:看下面代码块和对应流程图如下:

java白盒测试用例怎么写 白盒测试用例方法_条件覆盖_06

java白盒测试用例怎么写 白盒测试用例方法_测试用例_07

测试用例设计如下:

输入

覆盖语句块

a=1 and b = 1 and c=-1

1,3,4

a=1 and b = -1 and c= 1

2,4

上面两个用例就可以覆盖所有代码块。

语句覆盖的局限性

当判定条件误写成 a>0 || b >0, 上述用例无法测试到该错误。

判定覆盖

使得程序中的每一个判断至少获得一次“真”和一次“假”,使得程序流程图中的每一个真假分支至少被执行一次。

判定覆盖率:

java白盒测试用例怎么写 白盒测试用例方法_条件覆盖_08

【优点】:分支(判定)覆盖具有比语句覆盖更强的测试能力。同样分支(判定)覆盖也具有和语句覆盖一样的简单性,无须细分每个判定就可以得到测试用例。

【缺点】:往往大部分的分支(判定)语句是由多个逻辑条件组合而成,若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。判定覆盖仍是弱的逻辑覆盖。

条件覆盖

条件覆盖的含义是:不仅程序中的每个语句至少被执行一次,而且使每个判定表达式中的每个条件都取到各种可能的结果。

条件覆盖率

java白盒测试用例怎么写 白盒测试用例方法_条件覆盖_09

例如,

  • 案例代码中,有判定2个,条件3个条件结果6个
  • 设计测试用例执行了5个条件结果,条件覆盖率是5/6.

判定条件定义如下:

  1. If(a>0 && b>0) 判定,记为P1,
  2. If(c>0)判定,记为P2
  3. a>0 记为 C1
  4. b>0 记为 C2
  5. c>0记为 C3

测试数据

C1

C2

C3

路径

a=1, b=1, c=1

T

T

T

 

a=-1, b=-1, c=0

F

F

F

 

判定条件覆盖

判定条件覆盖是设计测试用例,使得判断中每个条件的所有可能取值(真假)至少执行一次,同时每个判断本身所有可能结果(真假)也至少执行一次。即同时满足100%的判定覆盖率和100%的条件覆盖率。

缺点是忽略了条件的组合情况。

判定条件覆盖率

java白盒测试用例怎么写 白盒测试用例方法_复杂度_10

例如:

  • 案例代码中有判定2个,条件3个,判定结果4个,条件结果6个
  • 设计测试用例执行了3个判定结果,5个条件结果,判定条件覆盖率是(3+5)/(4+6)

 

条件组合覆盖

条件组合覆盖:设计测试用例使得被测程序中每个判定中条件结果的所有可能组合至少被执行一次。

条件组合覆盖率:

java白盒测试用例怎么写 白盒测试用例方法_测试用例_11

例如:

  • 案例代码中有判定2个,条件3个(判定1有2个条件,判定2有1个条件),判定1的条件组合为4个,判定2的条件组合为2个
  • 设计测试用例执行了5个条件组合,条件组合覆盖率为5/(4+2)

 

路径覆盖

路径覆盖:设计测试用例,覆盖程序中所有可能的路径

路径覆盖率:

java白盒测试用例怎么写 白盒测试用例方法_测试用例_12

例如:

  • 案例中共有4条路径
  • 测试用例执行了3条路径,路径覆盖率为3/4.

路径覆盖的特点:

  1. 路径覆盖可以对程序进行彻底的测试,比前面五种覆盖面广
  2. 满足路径覆盖,不一定能满足条件覆盖,也不能满足条件组合覆盖。
  3. 当程序复杂度增加,(判定条件多且可能存在循环)测试开销太大,很难完实施全路径覆盖。

 

基本路径覆盖

  • 基本路径测试法

在程序控制流图的基础上,通过分析程序的环路复杂性,导出基本可执行的路径集合,从而设计测试用例。

  • 步骤

java白盒测试用例怎么写 白盒测试用例方法_测试用例_13

  1. 根据代码画出程序控制流图

java白盒测试用例怎么写 白盒测试用例方法_复杂度_14

2. 计算程序环路的复杂度

方法有三种:

  1. 控制流图中区域的数量对应于环形的复杂度
  2. 定义控制流图中的复杂度为V(G), V(G), = E- N + 2, E是流图中边的数量,N是流图中节点的数量,
  3. 定义控制流图中的复杂度为V(G), V(G), = P + 1,P是控制流图中判定节点的数量。

住:程序环路的复杂度就是基本路径的数量,

3. 导出可执行路径

4. 设计测试用例

 

最后,实际应用中,对于白盒测试中,测试用例设计,主要是采用基本路径覆盖发,条件组合覆盖法和判定条件覆盖法来进行测试用例的设计。