当前位置: 首页 > news >正文

【软件工程】软件测试:白盒测试(逻辑覆盖 / 基本路径)

考点频率:★★★★★(选择题必考,下午案例题也常出现)
难度:⭐⭐⭐⭐
建议:重点掌握六种逻辑覆盖的强弱顺序与各自定义,以及基本路径测试中控制流图的绘制与环形复杂度计算

1️⃣ 什么是白盒测试?

白盒测试,又称结构测试透明盒测试,是把程序当成一个透明的盒子,基于程序内部的逻辑结构和代码路径来设计测试用例。与黑盒测试关注“做什么”不同,白盒测试关注“怎么做”——盯着代码本身,检查分支、循环、条件判断有没有被跑通。

核心思想:程序执行就像在由各种判断(if/elseswitch、循环)构成的迷宫中“走路”。白盒测试的目标就是系统地覆盖这些路径,尽可能多地发现代码中的缺陷。

适用阶段:白盒测试主要用于单元测试阶段,开发人员自己测自己写的代码。

软考中白盒测试的高频考点就两个:逻辑覆盖法基本路径测试法

2️⃣ 逻辑覆盖法:六种覆盖标准

逻辑覆盖是一组由弱到强的覆盖标准。覆盖强度越高,测试越充分,但成本也越高。

2.1 语句覆盖(Statement Coverage)

定义:让程序中每条可执行语句至少执行一次

特点:这是最弱的覆盖标准。它只关心语句是否被执行,不关心分支的真假。

弱点:无法发现分支中逻辑运算的错误。例如,将AND误写为OR,满足语句覆盖的测试用例可能依然无法发现这个Bug。

示例:对于代码if (A > 1 && B == 0) { x = x / A; },只需设计一个用例使x = x / A执行一次即可达到语句覆盖。

2.2 判定覆盖(Decision Coverage / 分支覆盖)

定义:使得程序中每个判定的“真”和“假”两种结果至少经历一次

特点:比语句覆盖更强。关注整个判定语句的两种输出,而非单个条件。

示例:针对if (A > 1 && B == 0),需要设计用例使该判定为真和为假各一次。

2.3 条件覆盖(Condition Coverage)

定义:使得判定中的每个条件的可能取值(真/假)至少满足一次

特点:拆分关注每个原子条件(如A > 1B == 0是两个独立条件),而非整个判定结果。

注意:满足了条件覆盖,不一定满足判定覆盖。例如,两个用例分别覆盖(A>1=true, B==0=false)(A>1=false, B==0=true),虽然每个条件都取过真和假,但整个判定可能从未取过真。

2.4 判定-条件覆盖(Decision-Condition Coverage)

定义同时满足判定覆盖和条件覆盖的要求。

目标:弥补前两者的不足——既让每个条件的真假至少一次,也让每个判定的真假至少一次。

局限:可能无法覆盖条件间的组合情况。例如,(T, T)(F, F)两种组合可能都没有被覆盖。

2.5 条件组合覆盖(Condition Combination Coverage)

定义:使得每个判定中所有条件的各种可能组合至少出现一次

特点:覆盖条件组合的“真值表”。这是最强的多条件覆盖标准

成本:组合数随条件数指数增长,测试用例数可能很多。例如3个条件就有8种组合。

2.6 路径覆盖(Path Coverage)

定义:设计足够用例,覆盖程序中所有可能的执行路径

特点:这是最强的覆盖标准

挑战:对于包含循环的程序,路径数量可能无限(例如循环次数不确定),通常需要设定最大循环次数。实际中,路径覆盖往往难以完全实现。

3️⃣ 六种逻辑覆盖的强弱关系(重点!)

从弱到强排列:

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

关键补充:判定覆盖与条件覆盖无绝对强弱之分——判定覆盖可能不满足条件覆盖,条件覆盖也可能不满足判定覆盖。但两者都比语句覆盖强,都比判定-条件覆盖弱。

记忆口诀“语判条,判条组,路径最强最辛苦”

4️⃣ 基本路径测试法

基本路径测试法是在路径覆盖的基础上,通过控制流图环形复杂度来导出基本的、可执行的独立路径集合,从而设计测试用例。

4.1 四个核心步骤

步骤内容
第1步根据详细设计或源代码,导出程序的控制流图
第2步计算控制流图的环路复杂性 V(G)
第3步确定线性无关的路径的基本集
第4步为每条基本路径设计测试用例

4.2 控制流图(Control Flow Graph)

控制流图用节点(圆圈)代表一个或多个顺序执行的语句,用边(箭头)代表控制流的转移。

常见结构的转换规则

  • 顺序结构:节点依次连接
  • if-else 分支:一个节点分出两条边,分别指向两个分支
  • while 循环:一个节点分出两条边——进入循环体和跳过循环体

4.3 环形复杂度(McCabe度量法)

环形复杂度 V(G)决定了至少需要多少条独立路径

三种计算方法(结果相同):

方法公式说明
区域法V(G) = 区域数流图中将平面划分成的区域数量
边-节点法V(G) = E - N + 2E=边数,N=节点数
判定节点法V(G) = P + 1P=判定节点的数量

实际意义

  • V(G)的值 =独立路径的最少条数
  • V(G) ≤ 10:代码简单,易于维护
  • 10 < V(G) ≤ 20:需考虑重构优化
  • V(G) > 20:高风险代码,可测试性差

5️⃣ 经典例题

例题1:以下关于白盒测试的叙述中,正确的是( )。

A. 白盒测试只关注程序的输入输出,不关注内部结构
B. 语句覆盖是最强的逻辑覆盖标准
C. 白盒测试基于程序内部逻辑结构设计测试用例
D. 白盒测试和黑盒测试的测试依据相同

解析:A是黑盒测试的描述;B说反了——语句覆盖是最弱的;D错误,白盒测试依据程序代码,黑盒测试依据需求规格说明书。C正确,白盒测试正是基于程序内部逻辑结构来设计测试用例的。选C


例题2:在六种逻辑覆盖标准中,覆盖强度从低到高排列正确的是( )。

A. 语句覆盖 → 判定覆盖 → 条件覆盖 → 判定-条件覆盖 → 条件组合覆盖 → 路径覆盖
B. 语句覆盖 → 条件覆盖 → 判定覆盖 → 判定-条件覆盖 → 路径覆盖 → 条件组合覆盖
C. 判定覆盖 → 语句覆盖 → 条件覆盖 → 判定-条件覆盖 → 条件组合覆盖 → 路径覆盖
D. 语句覆盖 → 判定覆盖 → 判定-条件覆盖 → 条件覆盖 → 条件组合覆盖 → 路径覆盖

解析:正确的强弱顺序是:语句覆盖 < 判定覆盖 < 条件覆盖 < 判定-条件覆盖 < 条件组合覆盖 < 路径覆盖。选A


例题3:某程序的控制流图有8个节点和10条边,则该程序的环形复杂度为( )。

A. 2
B. 3
C. 4
D. 5

解析V(G) = E - N + 2 = 10 - 8 + 2 = 4。选C

6️⃣ 记忆口诀

白盒测试看代码,逻辑覆盖分六层。
语判条判条组路,由弱到强记分明。
基本路径四步走:画图算环定路径,最后设计测试例。
环形复杂度三公式:区域、E-N+2、判定节点+1。

7️⃣ 小测验(评论区对答案)

某程序的控制流图包含6个节点和8条边,则该程序的环形复杂度为( )。根据该复杂度,至少需要设计多少条独立路径的测试用例?
A. 2;2
B. 3;3
C. 4;4
D. 5;5

🔔本专栏日更,点击头像 → 专栏《软考中级高频考点》订阅,第一时间接收新内容

#软考中级 #软件设计师 #白盒测试 #逻辑覆盖 #基本路径测试 #软件工程

http://www.jsqmd.com/news/1215034/

相关文章:

  • 半导体封装革命:Die Top System技术解析与应用
  • WarcraftHelper:3步解决魔兽争霸3在现代电脑上的兼容性问题
  • CVD工艺详解:原理、分类与应用
  • Nebula 1.7.0:分享与效率双线更新,公开直链 + Cmd/Ctrl+K 命令面板
  • 功率芯片散热过孔设计优化与热阻计算
  • RT-Thread USB Host功能解析与嵌入式开发实践
  • 鸽了?传谷歌Gemini 3.5 Pro推迟发布,股价大跌超4%
  • 达州旧首饰变现是上门服务好还是到店?铂金钻戒回收折价吗 - 小城生活闲谈
  • AI 代码的版权真空:当 vibe-coding 的产物既无人能护,又暗中负债
  • 半导体晶圆制造工艺与关键参数详解
  • 离线把文字转化成语音的软件!
  • 网友推荐的黄山导游小新靠谱吗?服务怎么样?怎么预约?真实评价一文说清 - 实用旅游攻略分享
  • 嵌入式硬件安全:STC与CCC原理、配置与工程实践
  • W25QXX SPI Flash芯片详解与应用指南
  • 搜索ROI暴跌预警:某电商实测显示传统搜索导致22.3%高价值用户流失,切换AI搜索后72小时转化回升——窗口期仅剩47天
  • 为什么你的多线程应用需要Wayca-scheduler:解决Linux内核调度器的局限性
  • 基于Qt与STM32的串口固件烧录工具开发实践
  • 工业智能相机选型指南:从参数到实战
  • LVS验证在芯片设计中的关键作用与实践
  • FPGA驱动DS18B20温度传感器的设计与实现
  • SerDes技术解析:高速通信的核心架构与实现
  • 【HeyGen数字人制作终极指南】:20年AI视频专家亲授5大避坑法则与3天速成工作流
  • openEuler测试工具安全测试指南:确保测试环境安全的10个最佳实践
  • 2026无锡钻石回收全面测评|新手避坑指南,实测本地5家 全文约 1480 字,结合无 - 一日一测评
  • 芯片封装技术解析:从基础工艺到先进应用
  • 魔兽争霸3兼容性修复指南:如何让20年老游戏在Win10/11完美运行?
  • 工厂库存占仓超三个月:电子元器件占仓成本公式与PMC五指标表
  • 射频电源与等离子体技术:原理、应用与优化策略
  • 从功能实现到商业 SDK:Android 外设连接项目真正难在哪里?
  • 终极指南:用AlienFX Tools轻松掌控你的Alienware灯光与风扇控制