白盒测试的基本介绍

什么是白盒测试

image-1667007032401
白盒测试又称为结构测试或逻辑驱动测试,它是把测试对象看成一个透明的盒子,它允许测试人员利用程序内部的逻辑结构设计测试用例,对程序所有逻辑路径进行测试。

白盒测试的测试对象

白盒测试的测试对象是基于被测试程序的源代码,而不是软件的需求规格说明书。

使用白盒测试方法时,测试人员必须全面了解程序内部逻辑结构,检查程序的内部结构,从检查程序的逻辑着手,对相关的逻辑路径进行测试,最后得出测试结果。

白盒测试的特点

优点:代码覆盖率高
缺点:

  • 覆盖所有代码路径难度大
  • 业务功能可能覆盖不全
  • 测试开销大

白盒测试的分类

白盒测试方法有两大类:静态测试方法和动态测试方法。

静态测试

不要求在计算机上实际执行所测试的程序,主要以一些人工的模拟技术对软件进行分析和测试,如代码检查法、静态结构分析法等

  • 桌面检查
    这是一种传统的检查方法,由程序员检查自己编写的程序。程序员在程序通过编译之后,对源程序代码进行分析、检查,并补充相关的文档,目的是发现程序中的错误。
  • 代码审查(审查小组通过读程序和对照错误检查表进行检查)
    代码审查是由若干程序员和测试员组成一个审查小组,通过阅读、讨论和争议,对程序进行静态分析的过程。
  • 代码走查(审查小组需要准备有代表性的测试用例沿程序逻辑运行)
    与代码审查不同的是,让审查小组成员“充当”计算机,即首先由测试组成员为所测程序准备一批有代表性的测试用例,提交给走查小组。走查小组开会,集体扮演计算机角色,让测试用例沿着程序的逻辑运行一遍,随时记录程序的踪迹,提供给最后阶段的分析和讨论使用。
  • 代码扫描工具

动态测试

是通过输入一组预先按照一定的测试准则构造实际数据来动态运行程序,达到发现程序错误的过程。白盒测试中的动态分析技术主要有逻辑覆盖法和基本路径测试法。

逻辑覆盖法

  1. 语句覆盖
  2. 判定覆盖
  3. 条件覆盖
  4. 判断条件覆盖
  5. 条件组合覆盖
  6. 路径覆盖

基本路径测试法

白盒测试用例设计方法

逻辑覆盖法

逻辑覆盖是以程序内部的逻辑结构为基础来设计测试用例的测试技术,通过对程序内部的逻辑结构的遍历来实现程序的覆盖。它属于白盒测试中动态测试技术之一。
覆盖率:是用来度量测试完整性的一个手段

语句覆盖

定义: 语句覆盖(Statement Coverage)的含义就是设计足够的测试用例,使得被测程序中每条语句至少执行一次。又称行覆盖、段覆盖、基本块覆盖,它是最常见的覆盖方式。

未命名绘图
例如:
案例代码中共有3条可执行语句

  • 测试用例1:x=90,y=90 ,T=1
  • 测试用例2:x=100,y=40 ,T=2
  • 测试用例3:x=50,y=20 ,T=3

语句覆盖虽然可以测试执行语句是否被执行到,但却无法测试程序中存在的逻辑错误。因此,语句覆盖是一种弱覆盖。

语句覆盖的目的:
语句覆盖的目的是测试程序中的代码是否被执行,它只测试代码中的执行语句,这里的执行语句不包括头文件、注释、空行等。
语句覆盖在多分支的程序中,只能覆盖某一条路径,使得该路径中的每一个语句至少被执行一次,但不会考虑各种分支组合情况。

判定覆盖

判定覆盖:也叫分支覆盖,设计测试用例,使得程序中的每个判断的”真“和”假“都至少被执行一次。即:程序中的每个分支至少执行一次。

x+y >=140 and(x>=90 or y >=90) true x+y >=140 and(x>=90 or y >=90) flase
x>=80 and y>=80 true x>=80 and y>=80 flase
  • 测试用例1 :x>=80 and y>=80 为ture
  • 测试用例2 :x>=80 and y>=80 为flase,x+y >=140 and(x>=90 or y >=90) 为ture
  • 测试用例2:x>=80 and y>=80 为flase,x+y >=140 and(x>=90 or y >=90) 为flase

上述三组测试用例不仅满足了判定覆盖,而且满足了语句覆盖,从这一点可以看出判定覆盖比语句覆盖更强一些。所以只要满足了判定覆盖就一定满足语句覆盖,反之则不然。

条件覆盖

条件覆盖(Condition Coverage)指的是设计足够的测试用例,使判定语句中的每个逻辑条件取真值与取假值至少出现一次。

要使程序中每个判断的每个条件都至少取真值、假值一次,我们可以构造以下测试用例:

  • 测试用例1 :x>=80 true,y>=80 false;x>=90 true,y>=90 false;x +y >=140 true;
  • 测试用例2 :x>=80 false,y>=80 true;x>=90 false,y>=90 true;x +y >=140 false;

相比于语句覆盖与判定覆盖,条件覆盖达到了逻辑条件的最大覆盖率,但却不能保证判定覆盖。

判定-条件覆盖(CDC)

要求设计足够的测试用例,使得判定语句中所有条件的可能取值至少出现一次,同时,所有判定语句的可能结果也至少出现一次。

  • 测试用例1 :x>=80 true,y>=80 false;x>=90 true,y>=90 false;x +y >=140 true;
  • 测试用例2 :x>=80 false,y>=80 true;x>=90 false,y>=90 true;x +y >=140 false;
  • 测试用例3::x>=80 true,y>=80 true

判定-条件覆盖满足了判定覆盖准则和条件覆盖准则,弥补了二者的不足。但是判定-条件覆盖不一定比条件覆盖的逻辑更强。

条件组合覆盖

条件组合(Multiple Condition Coverage)指的是设计足够的测试用例,使得每个判定中条件的各种可能组合都至少执行一次。满足了判定覆盖、条件覆盖、判定-条件覆盖准则。
案例:
if A and B then Action1
if C and D then Action1
设计测试用例如下

A=True A=Flase A=True A=Flase
A=Flase A=True A=Flase A=True
A=Flase A=Flase A=Flase A=Flase
A=True B=True C=True D=True

当一个程序中判定语句较多时,其条件取值的组合数目也较多。需要设计的测试用例也会增加,这样反而会使测试效率降低。

路径覆盖

路径覆盖指的是设计足够的测试用例,使得程序中的每一条可能组合的路径都至少执行一次。用例数量极多,可操作性不高
案例如上:
设计测试用例如下

A=True A=Flase A=True A=Flase
A=Flase A=True A=Flase A=True
A=Flase A=Flase A=Flase A=Flase
A=True B=True C=True D=True
A=True B=True C=Flase D=Flase

基本路径测试法

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