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

发布时间:2026/7/18 19:25:40
【软件工程】软件测试:白盒测试(逻辑覆盖 / 基本路径) 考点频率★★★★★选择题必考下午案例题也常出现难度⭐⭐⭐⭐建议重点掌握六种逻辑覆盖的强弱顺序与各自定义以及基本路径测试中控制流图的绘制与环形复杂度计算1️⃣ 什么是白盒测试白盒测试又称结构测试或透明盒测试是把程序当成一个透明的盒子基于程序内部的逻辑结构和代码路径来设计测试用例。与黑盒测试关注“做什么”不同白盒测试关注“怎么做”——盯着代码本身检查分支、循环、条件判断有没有被跑通。核心思想程序执行就像在由各种判断if/else、switch、循环构成的迷宫中“走路”。白盒测试的目标就是系统地覆盖这些路径尽可能多地发现代码中的缺陷。适用阶段白盒测试主要用于单元测试阶段开发人员自己测自己写的代码。软考中白盒测试的高频考点就两个逻辑覆盖法和基本路径测试法。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 1和B 0是两个独立条件而非整个判定结果。注意满足了条件覆盖不一定满足判定覆盖。例如两个用例分别覆盖(A1true, B0false)和(A1false, B0true)虽然每个条件都取过真和假但整个判定可能从未取过真。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. 2B. 3C. 4D. 5解析V(G) E - N 2 10 - 8 2 4。选C。6️⃣ 记忆口诀白盒测试看代码逻辑覆盖分六层。语判条判条组路由弱到强记分明。基本路径四步走画图算环定路径最后设计测试例。环形复杂度三公式区域、E-N2、判定节点1。7️⃣ 小测验评论区对答案某程序的控制流图包含6个节点和8条边则该程序的环形复杂度为 。根据该复杂度至少需要设计多少条独立路径的测试用例A. 22B. 33C. 44D. 55本专栏日更点击头像 → 专栏《软考中级高频考点》订阅第一时间接收新内容#软考中级 #软件设计师 #白盒测试 #逻辑覆盖 #基本路径测试 #软件工程