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

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

维度 判定表测试 (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)。
相关推荐
Rabitebla16 小时前
【C++】string 类:原理、踩坑与对象语义
linux·c语言·数据结构·c++·算法·github·学习方法
liulian09161 天前
Flutter for OpenHarmony 混合开发实践:用户反馈功能的实现与适配
flutter·华为·学习方法·harmonyos
liulian09162 天前
【Flutter for OpenHarmony第三方库】Flutter for OpenHarmony 离线模式实现:让你的应用无网也能萌萌哒~
开发语言·flutter·华为·php·学习方法·harmonyos
ADHD多动联盟3 天前
专注力障碍是什么?主要有哪几点影响孩子的学习与社交能力?
学习·学习方法·玩游戏
AKA__Zas3 天前
初识多线程(初初识)
java·服务器·开发语言·学习方法
liulian09163 天前
【Flutter for OpenHarmony第三方库】Flutter for OpenHarmony 底部导航栏交互设计与性能优化实践
flutter·华为·交互·学习方法·harmonyos
liulian09163 天前
【Flutter for OpenHarmony 第三方库】Flutter for OpenHarmony 第三方社交登录功能适配与实现指南
flutter·华为·学习方法·harmonyos
liulian09163 天前
【Flutter for OpenHarmony第三方库】Flutter for OpenHarmony 骨架屏实现与用户加载体验优化指南
flutter·华为·学习方法·harmonyos
脆皮炸鸡7553 天前
Linux~~基础IO
linux·运维·服务器·经验分享·算法·学习方法
liulian09164 天前
【Flutter for OpenHarmony 第三方库】Flutter for OpenHarmony 引导页设计与新用户体验优化实现指南
flutter·华为·学习方法·harmonyos·ux