区别:语句覆盖、判定覆盖(分支覆盖)、条件覆盖、判定表测试

一、判定表测试和分支测试核心区别对比表

维度 判定表测试 (Decision Table Testing) 分支覆盖 (Branch Coverage)
归属类别 黑盒测试技术(FL-4.2.3) 白盒测试技术(FL-4.3.2)
测试依据 需求规格说明书(外部行为) 代码/程序结构图(内部逻辑)
关注焦点 条件组合(多条件交集的业务规则) 语句走向(判定节点的真/假路径)
覆盖目标 覆盖所有规则(有效+无效组合) 覆盖所有分支(判定结果的真/假)
典型缺陷 逻辑遗漏、规则冲突、条件互斥 判定逻辑错误、死代码、条件遗漏

二、深度拆解(以一个"登录场景"为例)

假设需求是:"用户输入用户名和密码,系统需验证有效性:用户名正确且密码正确,且验证码不为空。"

1. 判定表测试(验证"业务规则")
  • 视角:站在用户角度,验证这个业务规则是否正确。
  • 逻辑:把"用户名、密码、验证码"三个条件全部列出来,排列组合。
  • 覆盖要求:只要所有格子(规则)都被走过,就是100%覆盖。
  • 例子
    • 用例1:正确/正确/有 → 成功(覆盖规则1)
    • 用例2:错误/正确/有 → 失败(覆盖规则2)
    • 用例3:正确/错误/有 → 失败(覆盖规则3)
    • 用例4:任意/任意/空 → 失败(覆盖规则4)
  • 考点 :如果需求里漏掉了"验证码为空"的规则,判定表测试能立刻发现,因为表里有这个格子但没路径。
2. 分支覆盖(验证"代码走向")
  • 视角:站在开发角度,验证每一行代码是否都跑过了。
  • 逻辑 :拆解代码内部的 if-else 结构。
    • 判定1:用户名正确?(需覆盖真/假)
    • 判定2:密码正确?(需覆盖真/假)
    • 判定3:验证码不为空?(需覆盖真/假)
  • 覆盖要求 :每一个 if 的括号里的条件,都要取一次 TrueFalse
  • 例子
    • 用例1:用户名错(覆盖判定1的False)。
    • 用例2:用户名对,密码错(覆盖判定1的True,判定2的False)。
    • 用例3:用户名对,密码对,验证码空(覆盖判定1/2的True,判定3的False)。
    • 用例4:全正确(覆盖判定1/2/3的True)。
  • 考点 :如果代码里写了 if (验证码!= null) 但没写 else 分支,分支覆盖要求必须把这个 else 逻辑验证一下,否则覆盖率不到100%。

一、先明确判定节点的两种类型

流程图中的判定节点(菱形)分两类,是理解二者区别的基础:

  1. 单一条件判定 :如X > 10(仅1个条件);
  2. 多条件组合判定 :如(X > 10) AND (Y < 5)(2个条件,逻辑与)、(A = 2) OR (B ≠ 3)(2个条件,逻辑或)。

二、判定覆盖与条件覆盖的核心区别

以多条件判定节点(X > 10) AND (Y < 5)为例(判定结果为真时执行分支1,假时执行分支2),对比二者差异:

维度 判定覆盖(分支覆盖) 条件覆盖
核心目标 覆盖整个判定节点的真/假分支 覆盖判定内每个条件的真/假状态
覆盖要求 需让判定结果为 +各一次 需让每个条件的真/假状态都出现一次
用例设计(示例) 真:X=11、Y=4;假:X=9、Y=6 真1:X=11(X>10为真)、Y=6(Y<5为假);真2:X=9(X>10为假)、Y=4(Y<5为真)
覆盖程度 关注"判定的最终结果",粒度粗 关注"条件的独立状态",粒度细
检测能力 可发现判定分支的逻辑错误(如漏写else) 可发现单个条件的逻辑错误(如把X>10写成X≥10)
与语句覆盖的关系 100%判定覆盖→100%语句覆盖 100%条件覆盖≠100%判定覆盖(可能漏判定分支)

三、关键补充

  1. 单一条件判定的特殊情况
    若判定节点只有1个条件(如X > 10),判定覆盖和条件覆盖的要求完全一致(都需覆盖X>10为真、为假),此时二者无实际区别。
  2. 判定-条件覆盖
    为解决"条件覆盖可能漏判定分支"的问题,考纲中还提到判定-条件覆盖,要求同时满足判定覆盖和条件覆盖,是更严格的覆盖准则(示例用例:X=11、Y=4;X=9、Y=6;X=11、Y=6;X=9、Y=4)。

一、先明确单分支流程图的基础结构

假设单分支流程图包含:

  • 语句块S1判定节点D(条件:X>10) → 分支1(真:执行S2)/分支2(假:执行S3)→ 语句块S4
  • 总语句:S1、S2、S3、S4(4条)
  • 判定节点D:1个(对应2条分支:真分支/假分支)

二、语句覆盖和判定覆盖的核心区别

覆盖类型 核心目标 覆盖要求(单分支场景) 检测能力 覆盖程度
语句覆盖 执行所有可执行语句 只需让判定D为(执行S1→S2→S4),即可覆盖所有4条语句 最弱,无法检测判定逻辑错误(如把X>10写成X≥10) 最低
判定覆盖(分支覆盖) 执行所有判定的真/假分支 需让判定D为 (S1→S2→S4)+(S1→S3→S4),覆盖2条分支 比语句覆盖强,可检测判定的真假逻辑缺陷 更高

三、关键补充

  1. 判定覆盖=分支覆盖:ISTQB考纲中二者是同一概念,均要求覆盖判定节点的所有可能分支结果(真/假),无需额外区分。
  2. 覆盖充分性
    • 语句覆盖是最低要求,100%语句覆盖≠100%判定覆盖(比如单分支中若只执行真分支,语句全覆盖但判定假分支未覆盖);
    • 判定覆盖(分支覆盖)是比语句覆盖更严格的准则,100%判定覆盖一定能实现100%语句覆盖。
  3. 单分支场景的用例设计
    • 语句覆盖:1条用例(X=11);
    • 判定覆盖(分支覆盖):2条用例(X=11、X=9)。
相关推荐
June bug21 小时前
【AI赋能测试笔记】5基于文档用例生成系统及skills
笔记·功能测试·职场和发展·测试用例·学习方法
秦明月132 天前
伺服撞机、丢脉冲?FX3U控制松下伺服调试避坑指南
经验分享·其他·职场和发展·创业创新·学习方法
一只机电自动化菜鸟2 天前
一建机电备考笔记(38) 焊接技术—焊接质量检验(含考频+题型)
笔记·学习·职场和发展·生活·学习方法
fake_ss1982 天前
AI时代学习全栈项目开发的新范式
java·人工智能·学习·架构·个人开发·学习方法
脆皮炸鸡7553 天前
进程信号~信号的产生
linux·服务器·开发语言·经验分享·笔记·学习方法
139的世界真奇妙3 天前
生产问题排查记录
golang·bug·学习方法
Aurorar0rua3 天前
CS50 x 2024 Notes C -14
c语言·开发语言·学习方法
Aurorar0rua4 天前
CS50 x 2024 Notes C -12
c语言·开发语言·学习方法
加油20194 天前
方法论:进入新公司如何快速产出成果?
跳槽·学习方法·方法论
05候补工程师5 天前
【硬核干货】用“算法”思维袭英语新题型:集合逆清晰除与降维打击解题法
经验分享·笔记·考研·算法·学习方法