一,逻辑覆盖
1,语句覆盖
(1)基本思路:设计测试用例,运行被测程序,使程序中每个可执行语句至少被执行一次。
(2)只需要一个测试用例就可以测试所有语句
(3)优点:可以直观的从源代码得到测试用例,无须细分每条判定表达式
(4)缺点:这种测试方法仅仅针对程序逻辑中显式存在的语句,但对于隐藏的条件式无法测试的,如在多分支的逻辑运算中无法 全面的考虑
(5)语句覆盖是最弱的覆盖
2,判定覆盖(分支覆盖)
(1)基本思路:设计测试用例,运行被测程序,使得程序中每一个判断的取真分支和取假分支至少执行一次。即判断真假值均曾被 满足。
(2)需要2条测试用例
(3)判定覆盖同时也实现了语句覆盖,看似判定覆盖比语句覆盖更强一些,但仍然无法确定判定内部条件的错误
(4)优点:比语句覆盖更强的测试能力,同样判定覆盖也具有和语句覆盖能力一样的简单性,无须细分每一个判定就可以得到测试用例。
(5)缺点:往往大部分的判定语句是由多个逻辑条件组合而成,若仅仅判断其整个最终结果,而忽略每一个条件的取值情况,必然会遗漏部分测试路径。判定覆盖仍是弱的逻辑覆盖。
3,条件覆盖
(1)基本思想:设计测试用例,执行被测程序以后要使每个判断中每一个条件的可能取值至少满足一次。
(2)优点:增加了对条件判定情况的测试,增加了测试路径
(3)缺点:条件覆盖不一定包含判定覆盖,条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。
4,判定-条件覆盖
(1)基本思路:设计足够的测试用例,使得判断条件中的所有条件可能至少执行一次取值,同时,所有判断的可能结果至少执行一次。
(2)判定-条件覆盖测试了各个判定中的所有条件的取值,但实际上,编译器在检测含有多个条件的逻辑表达式时,某些情况下的某些条件将会被其他条件覆盖,所以判定-条件也不一定能完全检查出逻辑表达式中的错误
(3)优点:能同时满足判定、条件两种覆盖标准
(4)缺点:判定/条件覆盖准则的缺点时未考虑条件的组合情况。
5,条件组合覆盖
(1)基本思想:设计足够的测试用例,使得每一个判定之中所有可能的条件取值组合至少执行一次
6,路径覆盖
(1)基本思想:设计所有的测试用例,来覆盖程序中所有可能的执行路径
(2)如果程序中出现较多判断和较多循环,可能的路径数目将会急剧增长,要在测试中覆盖所有路径时无法实现的
(3)优点:可以对程序进行彻底的测试,比前面五种的覆盖面都广
(4)缺点:需要设计大量、复杂的测试用例,使得工作量呈指数级增长,不见得把所有都覆盖。