一、判定表测试和分支测试核心区别对比表
| 维度 | 判定表测试 (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的括号里的条件,都要取一次 True 和 False。 - 例子 :
- 用例1:用户名错(覆盖判定1的False)。
- 用例2:用户名对,密码错(覆盖判定1的True,判定2的False)。
- 用例3:用户名对,密码对,验证码空(覆盖判定1/2的True,判定3的False)。
- 用例4:全正确(覆盖判定1/2/3的True)。
- 考点 :如果代码里写了
if (验证码!= null)但没写else分支,分支覆盖要求必须把这个else逻辑验证一下,否则覆盖率不到100%。
一、先明确判定节点的两种类型
流程图中的判定节点(菱形)分两类,是理解二者区别的基础:
- 单一条件判定 :如
X > 10(仅1个条件); - 多条件组合判定 :如
(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个条件(如X > 10),判定覆盖和条件覆盖的要求完全一致(都需覆盖X>10为真、为假),此时二者无实际区别。 - 判定-条件覆盖 :
为解决"条件覆盖可能漏判定分支"的问题,考纲中还提到判定-条件覆盖,要求同时满足判定覆盖和条件覆盖,是更严格的覆盖准则(示例用例: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条分支 | 比语句覆盖强,可检测判定的真假逻辑缺陷 | 更高 |
三、关键补充
- 判定覆盖=分支覆盖:ISTQB考纲中二者是同一概念,均要求覆盖判定节点的所有可能分支结果(真/假),无需额外区分。
- 覆盖充分性 :
- 语句覆盖是最低要求,100%语句覆盖≠100%判定覆盖(比如单分支中若只执行真分支,语句全覆盖但判定假分支未覆盖);
- 判定覆盖(分支覆盖)是比语句覆盖更严格的准则,100%判定覆盖一定能实现100%语句覆盖。
- 单分支场景的用例设计 :
- 语句覆盖:1条用例(X=11);
- 判定覆盖(分支覆盖):2条用例(X=11、X=9)。