四、判定条件覆盖(Decision/Condition Coverage)
  判定条件覆盖,说白了是我们设计的测试用例可以使得判断中每个条件所有的可能取值至少执行一次(条件覆盖),同时每个判断本身所有的结果也要至少执行一次(判定覆盖)。不难发现判定条件覆盖同时满足判定覆盖和条件覆盖,弥补了两者各自的不足,但是判定条件覆盖并未考虑条件的组合情况。
  五、组合覆盖(Branch Condition Combination Coverage)
  组合覆盖也叫做条件组合覆盖。意思是说我们设计的测试用例应该使得每个判定中的各个条件的各种可能组合都至少出现一次。显然,满足条件组合覆盖的测试用例一定是满足判定覆盖、条件覆盖和判定条件覆盖的。
  针对前文提到的流程图,做条件组合覆盖时我们可以设计如下用例:
  TestCase1: a=1, b=1    (路径:ab)
  TestCase1: a=-1, b=-1    (路径:acd)
  TestCase1: a=-1, b=0    (路径:ace)
  TestCase1: a=1, b=-1    (路径:ace)
  条件组合覆盖能够同时满足判定、条件和判定条件覆盖,覆盖度较高,但是组合覆盖的测试用例数量相对来说也是比较多的。
  六、路径覆盖
  路径覆盖,意思是说我们设计的测试用例可以覆盖程序中所有可能的执行路径。这种覆盖方法可以对程序进行彻底的测试用例覆盖,比前面讲的五种方法覆盖度都要高。那么这种方法是不是一定好呢?当然不能讲得这么,它的缺点也是显而易见的:由于需要对所有可能的路径全部进行覆盖,那么我们需要设计数量非常巨大的而且较为复杂的测试用例,用例数量将呈现指数级的增长。所以理论上来讲路径覆盖是彻底的测试用例覆盖,但实际上很多时候路径覆盖的可操作性不强。
  总结
  以上简单描述了几种不用的逻辑覆盖方法的原则和优劣。在实际的操作中,要正确使用白盒测试的代码覆盖方法,要从代码分析和代码调研入手,根据调研的结果,可以选择上述方法中的某一种,或者好几种方法的结合,设计出高效的测试用例,尽可能全面地覆盖到代码中的每一个逻辑路径。