怎么做好白盒测试?


白盒测试

一、什么是白盒测试?

白盒测试,又称结构测试或逻辑驱动测试,是一种软件测试方法,它基于对程序内部结构的理解来进行。在这个测试过程中,测试人员就像是有源代码的"盒子"里的操作员一样,关注的是代码的各个组件、算法、数据结构以及控制流程测试者会检查每一个逻辑路径、循环条件、分支判断等,验证输入是否按预期处理并得出正确的输出结果。白盒测试通常用于单元测试,能提供更深入的覆盖度,但无法揭示用户界面或外部接口的问题。

二、白盒测试特点

优点:

  • 代码覆盖率高

缺点:

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

黑盒测试:每个项目都需要测试
白盒测试:业务逻辑很复杂的模块进行白盒测试,保证路径尽可能的覆盖全面。

三、白盒测试的设计方法

静态

  • 桌面检查:研发交叉检查
  • 代码审查:组织会议,由研发讲解自己的代码内容,为什么这么写。(开发、测试人员参加)
  • 代码走查:可以理解为showcases(功能实现)
  • 代码扫描工具:不能完全替代上面的方法,只能检查代码规范问题。SonarQube

动态

  • 逻辑覆盖法
    • 语句覆盖
    • 判定覆盖
    • 条件覆盖
    • 判定条件覆盖
    • 条件组合覆盖
    • 路径覆盖
  • 基本路径测试法

1、逻辑覆盖法

是通过对程序逻辑结构的遍历实现程序的覆盖。


对逻辑代码转化为代码执行流程图

代码案例:

1、测试设计方法---语句覆盖

设计测试用例,使得程序中每条语句至少被执行一次。

a、用例设计如下:
b、语句覆盖的局限性

在六种逻辑覆盖标准中,语句覆盖标准最弱。

2、测试设计方法---判定覆盖

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

a、测试用例如下:
b、判定覆盖的局限性

只要满足了判定覆盖标准就一定满足语句覆盖的标准

3、测试设计方法---条件覆盖

设计测试用例,使得判定中的每个条件至少有一次取真值,有一次取假值。

a、测试用例如下:
b、条件覆盖的局限性

条件覆盖并不能保证判定覆盖

4、测试设计方法---判定条件覆盖

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

a、测试用例如下:
b、判定条件覆盖的局限性

满足判定-条件覆盖标准一定能够满足条件覆盖、判定覆盖和语句覆盖。

5、测试设计方法---条件组合覆盖

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

a、测试用例如下:
b、条件组合覆盖的局限性

条件组合覆盖能满足判定覆盖、条件覆盖、判定条件覆盖、也就包括了语句覆盖。

条件组合覆盖不能保证覆盖所有的路径

6、路径覆盖

设计测试用例,覆盖程序中所有可能的路径(从头到尾)

a、用例设计

根据路径设计测试用例,从头到尾只要有1小段路径不同,则为不同的路径。

b、路径覆盖局限性

2、基本路径测试法

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

a、测试设计方法------基本路径测试法




四、总结

主要应用于单元测试阶段
先静态、后动态
设计用例一般使用基本路径测试,重点模块使用多种覆盖率标准

相关推荐
Dillon Dong3 小时前
【风电控制】TI TMS320F28379D 双CPU架构解析与任务分布设计
嵌入式硬件·算法·变流器·风电控制
ps酷教程8 小时前
Jackson 解决没有无参构造函数的反序列化问题
java
NiceCloud喜云8 小时前
Opus 4.8 的 Effort Control 怎么选:Low 到 Max 五档策略
android·java·大数据·前端·c++·python·spring
小羊在睡觉8 小时前
力扣84. 柱状图中最大的矩形
后端·算法·leetcode·golang·go
ccddsdsdfsdf8 小时前
DBeaver怎么链接mongoDB
数据库·mongodb
3DVisionary8 小时前
蓝光三维扫描:医疗制造的精度焦虑怎么解
人工智能·算法·制造·蓝光三维扫描·医疗制造·三维检测·义齿检测
好评笔记9 小时前
机器学习面试八股——常用损失函数
人工智能·深度学习·算法·机器学习·校招
weixin_468466859 小时前
全局与局部注意力机制新手实战指南
人工智能·python·深度学习·算法·自然语言处理·transformer·注意力机制
_日拱一卒9 小时前
LeetCode:994腐烂的橘子
java·数据结构·算法·leetcode·深度优先
隔窗听雨眠9 小时前
Nginx网关响应慢排查手记
java·服务器·nginx