白盒测试方法【了解】

白盒测试也叫结构测试、透明盒测试,把程序看成一个打开的盒子,关注程序内部代码逻辑、执行路径,不关心软件功能输出,重点检查代码逻辑是否正确、路径是否覆盖、有无漏洞。
通俗点讲,也可叫 代码测试。

一、核心思想

已知程序内部结构,针对代码逻辑、分支、循环、条件设计测试用例,遍历程序的各种执行路径,发现代码逻辑错误、内存泄漏、死循环、判断错误等问题。

对比黑盒:黑盒看输入输出功能,不看代码;白盒看代码内部实现。白盒测试的方法

1. 逻辑覆盖法(最常用)

由弱到强分为 5 种覆盖标准,覆盖程度越高,测试越充分,用例数量越多。

  1. 语句覆盖
    所有可执行语句至少执行一次。

最弱覆盖,只保证语句跑一遍,无法检测条件判断错误。

  1. 判定覆盖(分支覆盖)
    每个判断的取真、取假分支至少执行一次。

保证 if 条件既走 true,也走 false,但不检查条件内部。

  1. 条件覆盖
    判断中每一个子条件分别取真、取假。

关注条件里每个表达式,不一定能做到判定覆盖。

  1. 判定‑条件覆盖
    同时满足判定覆盖 + 条件覆盖;每个判断真假,每个子条件真假都出现。

  2. 条件组合覆盖(最强)
    所有判断内部子条件的全部真假组合都覆盖。

用例最多,覆盖最全面,但依然不能覆盖所有程序路径。

2. 基本路径测试法

  • 步骤:画程序控制流图 → 计算环形复杂度 → 确定独立路径 → 根据独立路径写测试用例
  • 环形复杂度:衡量程序复杂度,也代表最少独立路径数量
    计算三种公式:
    1. 环形复杂度 = 区域数
    2. 环形复杂度 = 判定节点数 +1
    3. 环形复杂度 = E‑V +2(E 边数,V 节点数)

独立路径:每条路径至少包含一条新的边。

3. 其他白盒方法

  1. 循环测试:专门针对循环结构,测试 0 次、1 次、多次、最大次数、超过最大次数
  2. 静态代码分析:不运行程序,直接扫描源码,检查语法、规范、潜在 bug(工具:SonarQube)
  3. 插桩测试:在代码插入统计代码,统计运行时执行情况,统计覆盖率

二、代码覆盖率指标(白盒衡量指标)

  1. 语句覆盖率:执行到的语句 / 全部可执行语句
  2. 分支覆盖率(判定覆盖率):执行到的分支 / 全部分支
  3. 条件覆盖率:各个布尔子条件真假覆盖比例
  4. 路径覆盖率:执行过的路径 / 全部路径

注意:路径全覆盖几乎做不到,循环多的时候路径爆炸,实际项目一般追求分支覆盖。

三、白盒测试优缺点

✅优点

  1. 能够深入程序内部结构,测试粒度细,可以发现代码内部逻辑缺陷。
  2. 可作为黑盒测试的有力补充,提高测试充分度。
  3. 便于开展单元测试,利于自动化测试落地。

❌缺点

  1. 侧重代码逻辑,容易忽略软件实际业务需求。
  2. 要求测试人员掌握编程语言,技术门槛高,人力成本高。
  3. 程序路径数量庞大,无法实现完全路径覆盖(这个是高频考点,建议加上)。

四、使用场景

  1. 单元测试(最主要),开发人员自测,对函数、模块做白盒
  2. 核心模块、安全模块,高风险代码
  3. 静态代码检查,代码评审辅助

实际项目:白盒 + 黑盒结合,单元多用白盒;集成、系统测试多用黑盒。

五、简单示例

伪代码:

if(a>1 && b<10)
    c = c+1
else
    c = c-1
  • 语句覆盖:一组用例让 if 和 else 至少跑其一
  • 判定覆盖:需要两组:条件成立、条件不成立
  • 条件覆盖:a>1取真/假;b<10取真/假
  • 条件组合覆盖:4 种组合:(a>1 真,b<10 真)、(a>1 真,b<10 假)、(a>1 假,b<10 真)、(a>1 假,b<10 假)
posted @ 2026-09-02 15:53  一只鹿吖  阅读(48)  评论(0)    收藏  举报