语句覆盖、分支覆盖、谓词测试和路径覆盖

  • Post author:
  • Post category:其他




语句覆盖

“语句覆盖”是一个比较弱的测试标准,它的含义是:选择足够的测试用例,使得程序中

每个语句


至少

都能被

执行一次

程序中的每个语句指:

  1. 表达式语句:比如x=y+2;
  2. 控制语句: if 和switch
  3. 函数调用语句:比如c语言里面的printf() 或者java 里面的System.out.println()
  4. 以上三种语句的联合:

	if(true)
	{
		x+y=2;
		printf("yyds");
	}

假设有程序如下。

//两个顺序执行的判断
IF(A>1 && B==0)
{
	X=X/A;
}
IF(A==2||X>1)
{

	X=X+1; 
}

根据上面的知识,它是有四条语句的。画出它的流程图

在这里插入图片描述

要想达到语句覆盖,只需要每个语句至少执行一次即可,为了简单,就每条语句执行一次即可。

如果两个IF判断都能执行,最终这四个语句均可执行一次。

否则多设计几个样例,使得全部语句都能执行一次就行。



分支覆盖(判定覆盖)

分支覆盖,又称判定覆盖,是指使得程序中

每个判断



取真分支和取假

分支

至少经历一次

,即判断的真假均曾被满足。

if(a>0){
	.......
}

设计用例,只需两个即可:比如a=5和a=-1,使得这个判断的真假都能执行一次。


if(a>0){.......}
else if(b>0){.....}

测试用例需要3个:

如a=1(true),b未进入

a=-1(false),b=1(true)

a=-1(false),b=-1(false)



谓词测试

形如 a>0 , a>0&&b<0 这样的为谓词,也就是判定。

而a>0叫做原子谓词。原子谓词通过与或非构成复合谓词,如a<0&&b>0.

分支覆盖对于复合谓词不是有效的。所以提出了谓词测试。



原子谓词覆盖(条件覆盖)

每个复合谓词包含的每个原词谓词至少获得一次真和一次假。

if(i==j&&i==k&&j==k) ..;
else if(i==j||i==k||j==k) ....;

满足原子谓词覆盖的测试用例:

在这里插入图片描述



分支-谓词覆盖(判定条件覆盖或分支条件覆盖)

在原子谓词的基础上, 每个复合谓词也要获得至少一次真和一次假。

它包括了语句覆盖,分支覆盖和原子谓词覆盖。

还是上面的例子

if(i==j&&i==k&&j==k) ..;
else if(i==j||i==k||j==k) ....;

满足分支-谓词覆盖的测试用例:

在这里插入图片描述



复合谓词覆盖(条件组合覆盖)

每个谓词中条件的各种可能都至少出现一次。

如果是上面分支-谓词覆盖里面的例子,上述的5个测试用例满足。

再看一个。

if ((A > 1)&&( B == 0))
{
   X  = X / A;
}
if ((A == 2) || ( X > 1))
{
   X = X + 1;
}

需要设计8个测试用例,

如第一个if里面,两个原子谓词的排列是4个

(1)A>1, B=0

(2)A>1, B!=0

(3)A≤1, B=0

(4)A≤1, B≠0

文章部分参考:《软件测试教程 第二版》 宫云战



路径覆盖

包含了分支覆盖,但与谓词覆盖无关。要求走完所有的路径。如下图,设计测试用力时,有四条路径,需要走完这四条路径。

在这里插入图片描述



包含关系

分支覆盖包含语句覆盖。

路径覆盖包含分支覆盖,与谓词覆盖无关

分支-谓词覆盖包含语句覆盖,分支覆盖,原子谓词覆盖。

复合谓词覆盖包含语句覆盖,分支覆盖,原子谓词覆盖,分支-谓词覆盖



版权声明:本文为qq_43179428原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。