白盒测试之逻辑覆盖

2012年09月13日 测试技术, 测试综合, 软件测试 ⁄ 共 2107字 ⁄ 字号 暂无评论 ⁄ 阅读 3,752 次

白盒测试又称结构测试,透明盒测试、逻辑驱动测试或基于代码的测试。

白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、Z路径覆盖、程序变异。

白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。其中逻辑覆盖包括语句覆盖判定覆盖条件覆盖判定/条件覆盖条件组合覆盖路径覆盖

六种覆盖标准:语句覆盖判定覆盖条件覆盖判定/条件覆盖条件组合覆盖路径覆盖发现错误的能力呈由弱至强的变化。语句覆盖每条语句至少执行一次。判定覆盖每个判定的每个分支至少执行一次。条件覆盖每个判定的每个条件应取到各种可能的值。判定/条件覆盖同时满足判定覆盖条件覆盖。条件组合覆盖每个判定中各条件的每一种组合至少出现一次。路径覆盖使程序中每一条可能的路径至少执行一次。


public class Coverage

{

public void Main()

{

1 System.out.println("start main function:path a...");

2 int A,B,X;

3 if(A>1 and B==0){

4   X=X/A;

5   System.out.println("path c");

5 } else {

6  System.out.println("path b");

7 }

8 if(A==2 or X>1){

9    X=X+1;

10   System.out.println("path e");

11 } else {

12 System.out.println("path d");

13 }

14 System.out.println("end main function.");

}

}

1.   语句覆盖

语句覆盖(StatementCoverage) 又称行覆盖(LineCoverage),段覆盖(SegmentCoverage),基本块覆盖(BasicBlockCoverage),这是最常用也是最常见的一种覆盖方式,就是度量被测代码中每个可执行语句是否被执行到了。

就是设计若干个测试用例,运行被测程序,使得每一可执行语句至少执行一次。这里的“若干个”,意味着使用测试用例越少越好。

语句覆盖率=被评价到的语句数量/可执行的语句总数 x 100%

例如上边的Coverage类代码,从path a到path c再到path e的路径就是所有可执行的语句路径,所以选择path ace路径设计测试用例即可覆盖所有可执行语句。

语句覆盖缺点:对程序执行逻辑的覆盖很低。

2.   判定覆盖

有时也称分支覆盖,就是指设计若干测试用例,运行被测程序,使得每个判定的取真分支和取假分支至少经历一次。

例如上边的Coverage类代码,path ace,path abd,path abe,path acd 四条路径均是符合判定覆盖要求的路径。

判定覆盖缺点:判定覆盖虽然把程序所有分支均覆盖到了,但其主要对整个表达式最终取值进行度量,忽略了表达式内部取值。例如上边的Coverage类代码的第8行“if(A==2 or X>1)”,

当A==2或者X>1时都会执行第9行代码,判定覆盖只考虑整个“(A==2 or X>1)”表达式的取值,并没有考虑到表达式内部变量的取值(应该将A==2和X>1的情况均考虑)。

3.   条件覆盖

条件覆盖是指选择足够的测试用例,使得运行这些测试用例后,要使每个判断中每个条件的可能取值至少满足一次,但未必能覆盖全部分支。

例如上边的Coverage类代码,判定语句有两个,分别是第3行和第8行代码。根据条件覆盖的定义,则应考虑“(A>1 and B==0)”和“(A==2 or X>1)”两个表达式中的变量取值。

条件覆盖缺点:只考虑到每个判定语句中的每个表达式,没有考虑到各个条件分支(或者涉及不到全部分支),即不能够满足判定覆盖。

4.   判定条件覆盖

设计足够多的测试用例,使得判定中的每个条件的所有可能(真/假)至少出现一次,并且每个判定本身的判定结果也至少出现一次。

例如上边的Coverage类代码,不仅考虑到path ace,path abd,path abe,path acd 四条分支路径(判定覆盖),也考虑到了“(A>1 and B==0)”和“(A==2 or X>1)”两个条件中的每个表达式的取值(条件覆盖)。

判定条件覆盖的缺点:没有考虑单个判定对整体结果的影响,无法发现逻辑错误。

5.   条件组合覆盖

在白盒测试法中,选择足够的测试用例,使得每个判定中条件的各种可能组合都至少出现一次(以数轴形式划分区域,提取交集,建立最少的测试用例)。。显然,满足“条件组合覆盖”的测试用例是一定满足“判定覆盖”、“条件覆盖”和“判定/条件覆盖”的。

例如上边的Coverage类中第8行“if(A==2 or X>1)”代码,所有可能的条件组合为:

A==2,X>1”、“A==2,X<=1”和“A!=2,X>1”三种。在条件覆盖中仅需考虑到这三种的一种即可,而在条件组合覆盖中需要都考虑到。

条件组合覆盖的缺点:判定语句较多时,条件组合值比较多。

6.   路径覆盖

路径测试就是设计足够的测试用例,覆盖程序中所有可能的路径。路径覆盖是覆盖率最高的一种覆盖技术。