逻辑覆盖法
逻辑覆盖是以程序内部的逻辑结构为基础的设计测试用例的技术。
根据覆盖目标的不同和覆盖源程序语句的详尽程度,逻辑覆盖又可分为:
- 语句覆盖
- 判定覆盖
- 条件覆盖
- 判定/条件覆盖
- 条件组合覆盖
- 修正判定条件覆盖
- 点覆盖
- 边覆盖
- 路径覆盖
几种逻辑覆盖标准发现错误的能力呈由弱至强的变化。
语句覆盖
语句覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每一个语句至少执行一次,其覆盖标准无法发现判定中逻辑运算的错误。
被测试代码:
int foo(int a, int b){
return a / b;
}
假如测试人员编写如下测试案例:
TeseCase: a = 10, b = 5
测试人员的测试结果会告诉你,他的代码覆盖率达到了100%,并且所有测试案例都通过了。
然而遗憾的是,我们的语句覆盖率达到了所谓的100%,但是却没有发现最简单的 Bug,
比如,当b=0时,会抛出一个除零异常。
简言之,语句覆盖,就是设计若干个测试用例,运行被测程序,使得每一可执行语句至少执行一次。这里的“若干个”,意味着使用测试用例越少越好。
语句覆盖率的公式可以表示如下:
语句覆盖率=可执行的语句总数/被评价到的语句数量 x 100%
判定覆盖
判定覆盖是设计足够多的测试用例,使得程序中的每一个判断至少获得一次“真”和一次“假”,即使得程序流程图中的每一个真假分支至少被执行一次。
但若程序中的判定是有几个条件联合构成时,它未必能发现每个条件的错误。
例:
int a,b;
if