不可行测试需求测试:边对覆盖最大可行覆盖率及不可行情况(附流程图)
代码边对覆盖分析:不可行路径与最大覆盖率
让我们一步步拆解这段代码的边对覆盖情况,先把代码贴出来方便讨论:
BEGIN input (a) if (a<0) then a=(-a) end if if(a>0) then a++ end if print (a) END
先明确边对覆盖的核心逻辑
边对覆盖(也叫相邻分支覆盖)要求覆盖所有可能的连续条件判断的分支组合,或者更细粒度的连续执行边的组合。这里我们重点聚焦分支组合的边对,因为这是这段代码的核心测试关注点。
代码分支与所有可能的边对组合
这段代码有两个连续的if判断,我们把每个if的分支简化标记:
- 第一个
if分支:T(a<0为真,执行a=-a)、F(a<0为假,跳过第一个if块) - 第二个
if分支:T(a>0为真,执行a++)、F(a>0为假,跳过第二个if块)
理论上的分支边对组合共有4种:
- T→T
- T→F
- F→T
- F→F
可行与不可行的边对分析
我们逐个验证这些组合是否能被实际输入触发:
- T→T(可行):输入
a<0(比如a=-3)。第一个if触发后,a变为3;第二个if判断3>0为真,执行a++,最终输出4。这条路径完全可覆盖。 - T→F(不可行):没有任何输入能触发这个组合。因为如果第一个
if触发(a<0),执行a=-a后a必然是正数,此时第二个if的判断a>0不可能为假,永远走不了F分支。这个边对是完全不可行的。 - F→T(可行):输入
a>0(比如a=5)。第一个if不触发,a保持5;第二个if判断5>0为真,执行a++,最终输出6。路径可行。 - F→F(可行):输入
a=0。第一个if不触发(0不小于0),第二个if也不触发(0不大于0),直接输出0。路径可行。
最大可能覆盖率
总共有4种分支边对组合,其中3种可行、1种不可行,所以最大边对覆盖率为 75%(3/4)。
如果从更细的节点连续边对来看(比如输入→第一个if判断、第一个if真→赋值等),所有连续边对都是可行的,但分支组合层面的不可行情况是测试中需要重点关注的——你永远找不到输入来覆盖这个边对,不需要浪费时间设计无效用例。
文本流程图说明
开始 | v 输入a | v [判断a<0?] → 是 → a=-a → [判断a>0?] → 是 → a++ → 打印a → 结束 → 否 → [判断a>0?] → 是 → a++ → 打印a → 结束 → 否 → 打印a → 结束
注:从a=-a后的判断a>0?永远只会走“是”分支,所以a=-a→“判断a>0?否”这条路径是断裂的,对应不可行的边对组合。
内容的提问来源于stack exchange,提问作者BatmanForLife
相关产品推荐
相关产品推荐

