我是荔园微风,作为一名在IT界整整25年的老兵,今天总结一下Windows编程开发中的语句覆盖、条件覆盖、判定覆盖、条件-判定覆盖、组合覆盖、路径覆盖。
首先你要明白一点:
逻辑覆盖率:语句覆盖<条件覆盖<判定覆盖<条件-判定覆盖<组合覆盖<路径覆盖
最差的是语句覆盖,最好的是路路径覆盖,先把这个记下。
语句覆盖
基本思想:设计用例,使程序中的每个可执行语句至少执行一次。
每个可执行语句:每个语句,那么下图中执行为:1->2->3->4
优点:可以很直观的从源代码获得用例,无需细分每条判定表达式
缺点:由于这种测试方法仅仅针对程序逻辑中显式存在的语句,但对于隐藏的条件是无法测试的,如在多分支的逻辑运算中无法全面考虑。语句覆盖是最弱的逻辑覆盖
条件覆盖
定义
基本思想:设计用例,使每个判断中的每个条件的可能取值至少满足一次
重点是判断语句的条件(针对条件语句)
判断表达式1:
设条件 a>0 为真 记T1
假 记F1
条件 b>0 为真 记T2
假 记F2
判断表达式3:
设条件 a>1 为真 记T3
假 记F3
条件 c>1 为真 记T4
假 记F4
覆盖条件:
T1,F2,T3,F4
F1,T2,F3,T4
我们用条件覆盖的思想就是覆盖T1,T2,T3,T4,F1,F2,F3,F4
优点:增加了对条件判断情况的测试,增加了测试路径
缺点:条件覆盖不一定包含判定覆盖,例如,上面的测试用例中就不包含判断1的T分支,判断3的F分支。条件覆盖只能保证每个条件语句取值至少有一次为真,而不考虑所有的判定结果
判定覆盖
定义
基本思想:设计用例,使得程序中的每一个判断的取真分支和取假分支至少经历一次,即判断真假值均曾被满足
重点是判定(针对于真假判断),覆盖条件:
条件1:T,条件3:F
条件1:F,条件3:T
或者
条件1:T,条件3:T
条件1:F,条件3:F
优点:判定覆盖比语句覆盖具有更强的测试能力。同时判定覆盖与具有和语句覆盖一样的简单性,无需细分每个判定就可以得到测试用例
缺点:往往大部分的测试用例是由多个逻辑条件组合的,若仅仅判断其整个的最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径,判定覆盖仍是很弱的逻辑覆盖
条件–判定覆盖
定义
基本思想:设计用例,使判定条件中的所有可能(条件成立、不成立)至少执行一次取值,同时,所有判断的可能结果(取真,取假),至少执行一次
覆盖条件用例:
T1,T2,T3,T4
F1,F2,F3,F4
要满足:T1,T2,T3,T4,F1,F2,F3,F4
- 优点:能同时考虑到判定,条件两种覆盖
- 缺点:未考虑条件的组合情况
组合覆盖
定义
基本思路:设计用例,使所有可能的条件取值组合至少执行一次
重点:所有条件取值的组合
编号 | 覆盖条件取值 |
---|---|
1 | T1,T2 |
2 | T1,F2 |
3 | F1,T2 |
4 | F1,F2 |
5 | T3,T4 |
6 | T3,F4 |
7 | F3,T4 |
8 | F3,F4 |
覆盖条件 | 覆盖组合 |
---|---|
T1,T2 , T3 , T4 | 1,5 |
T1,F2 , T3 , F4 | 2,6 |
F1,T2 , F3 , T4 | 3,7 |
F1,F2 , F3 , F4 | 4,8 |
优点:组合覆盖满足了判定覆盖、条件覆盖、和判定、条件覆盖准则。
缺点:线性的增加了测试用例的数量
路径覆盖
定义
基本思想:设计测试用例,来覆盖程序中的所有可能执行的路径
继上面的的条件取值表格
覆盖路径 | 覆盖组合 |
---|---|
1-2-4 | 1,5 |
1-2-5 | 1,8 |
1-3-4 | 4,7 |
1-3-5 | 4,8 |
优点:这种测试方法可以对程序进行彻底的测试,比前面五种的测试要广
缺点:需要设计大量的,复杂的测试用例,使得工作量呈指数增长,不见得能把所有的条件组合都覆盖
作者简介:荔园微风,1981年生,高级工程师,浙大工学硕士,软件工程项目主管,做过程序员、软件设计师、系统架构师,早期的Windows程序员,Visual Studio忠实用户,C/C++使用者,是一位在计算机界学习、拼搏、奋斗了25年的老将,经历了UNIX时代、桌面WIN32时代、Web应用时代、云计算时代、手机安卓时代、大数据时代、ICT时代、AI深度学习时代、智能机器时代,我不知道未来还会有什么时代,只记得这一路走来,充满着艰辛与收获,愿同大家一起走下去,充满希望的走下去。