【说明】逻辑覆盖法是设计白盒测试用例的主要方法之一,它是通过对程序逻辑结构的遍历实现程序的覆盖。针对以下由C 语言编写的程序,按要求回答问题。 main( ){int i,n; //1for(i=1;i

题目
【说明】逻辑覆盖法是设计白盒测试用例的主要方法之一,它是通过对程序逻辑结构的遍历实现程序的覆盖。针对以下由C 语言编写的程序,按要求回答问题。 main( ){int i,n; //1for(i=1;i<7;i++){ //2n=0;  if(i!=1) //3 n=n+1; //4  if(n==5){ //5printf("Hello!"); //6 }else{ printf("No!"); //7}  }printf("GAME OVER!"); //8 } 问题1:(3分)请给出满足100%DC(判定覆盖)所需的逻辑条件。问题2:(8分)请画出上述程序的控制流图,并计算其控制流图的环路复杂度V(G)。问题3:(4分)请给出【问题2】中控制流图的线性无关路径。

如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

论述题3:针对以下C语言程序,请按要求回答问题

下面是一个简单的C语言程序:

(1)画出该函数的程序流程图。

(2)设计测试用例,分别使函数的各种逻辑覆盖率尽量达到100%。如果认为该函数的某种逻辑覆盖率无法达到100%,需要说明原因。

(3)设计特殊的测试用例,说明各种逻辑覆盖之间的关系。


正确答案:问题1: 解答: 根据源程序易得流程图如图17-7所示。 问题2: 解答: 经过分析不难知上面这个程序包含: 1)五个语句:每行一个语句。 2)三个条件:a>0;b0;c>0 3)四个分支:有两个if语句每个if语句有两个分支。 4)六个条件组合:条件表达式(a>0)‖b0)共有两个条件a>0和b0故有四个条件组合;条件表达式(c>0)只有一个条件c>0故有两个条件组合。所以该程序共有六个条件组合。 5)四条路径:从程序的入口到出口的路径共有四条分别是: Path1: 1—2—3—5—6—8 Path2: 1—2—3—5—7—8 Path3: 1—2—4—5—6—8 Path4: 1—2—4—5—7—8 这个程序有三个输入:a、b、c其输入数据组合是非常大的。下面对该程序分别应用不同的逻辑覆盖准则设计测试用例。 1.语句覆盖 根据语句覆盖准则只需要采用两个输入数据组合:(abc)=(111)、(-111)便可以把该程序的所有五个语句执行一遍。 2.分支覆盖(判定覆盖) 根据分支覆盖准则只需要采用两个输入数据组合:(abc)=(11-1)、(-111)便可以把该程序的所有四个分支走遍。但未考虑b0的情况故不满足条件覆盖。说明满足分支覆盖的测试用例未必满足条件覆盖。 3.条件覆盖 根据条件覆盖准则只需要采用两个输入数据组合:(abc)=(11-1)、(-1-11)便可以把该程序的三个条件的真假情况都覆盖到。由于表达式(a>0)‖b0)的计算值都为真不会执行else语句即不满足分支覆盖和语句覆盖。说明满足条件覆盖的未必满足分支覆盖和语句覆盖。 4.条件组合覆盖 根据条件组合的覆盖准则只需要采用四个输入数据组合:(abc)=(1-11)、(111)、(-1 1-1)、(-1-1-1)便可以把该程序的六个条件组合情况覆盖到。但执行的路径数只有2个故不满足路径覆盖。说明满足条件组合的覆盖不一定满足路径覆盖。 5.路径覆盖 根据路径覆盖的准则由图17-7可见只需要采用四个输入数据组合:(abc)=(111)、(11 -1)、(-111)、(-11-1)便可以把该程序的所有四条路径都覆盖。路径覆盖是最强的覆盖准则。
问题1: 解答: 根据源程序易得流程图,如图17-7所示。 问题2: 解答: 经过分析不难知,上面这个程序包含: 1)五个语句:每行一个语句。 2)三个条件:a>0;b0;c>0 3)四个分支:有两个if语句,每个if语句有两个分支。 4)六个条件组合:条件表达式(a>0)‖b0)共有两个条件,a>0和b0,故有四个条件组合;条件表达式(c>0)只有一个条件c>0,故有两个条件组合。所以该程序共有六个条件组合。 5)四条路径:从程序的入口到出口的路径共有四条,分别是: Path1: 1—2—3—5—6—8 Path2: 1—2—3—5—7—8 Path3: 1—2—4—5—6—8 Path4: 1—2—4—5—7—8 这个程序有三个输入:a、b、c,其输入数据组合是非常大的。下面对该程序分别应用不同的逻辑覆盖准则,设计测试用例。 1.语句覆盖 根据语句覆盖准则,只需要采用两个输入数据组合:(a,b,c)=(1,1,1)、(-1,1,1),便可以把该程序的所有五个语句执行一遍。 2.分支覆盖(判定覆盖) 根据分支覆盖准则,只需要采用两个输入数据组合:(a,b,c)=(1,1,-1)、(-1,1,1),便可以把该程序的所有四个分支走遍。但未考虑b0的情况,故不满足条件覆盖。说明满足分支覆盖的测试用例未必满足条件覆盖。 3.条件覆盖 根据条件覆盖准则,只需要采用两个输入数据组合:(a,b,c)=(1,1,-1)、(-1,-1,1),便可以把该程序的三个条件的真假情况都覆盖到。由于表达式(a>0)‖b0)的计算值都为真,不会执行else语句,即不满足分支覆盖和语句覆盖。说明满足条件覆盖的未必满足分支覆盖和语句覆盖。 4.条件组合覆盖 根据条件组合的覆盖准则只需要采用四个输入数据组合:(a,b,c)=(1,-1,1)、(1,1,1)、(-1, 1,-1)、(-1,-1,-1),便可以把该程序的六个条件组合情况覆盖到。但执行的路径数只有2个,故不满足路径覆盖。说明满足条件组合的覆盖不一定满足路径覆盖。 5.路径覆盖 根据路径覆盖的准则,由图17-7可见,只需要采用四个输入数据组合:(a,b,c)=(1,1,1)、(1,1, -1)、(-1,1,1)、(-1,1,-1),便可以把该程序的所有四条路径都覆盖。路径覆盖是最强的覆盖准则。 解析:首先根据源程序画出程序流图比较容易,然后分析学过的所有的逻辑覆盖(如语句覆盖,分支覆盖,路径覆盖等),分析针对每种逻辑覆盖的标准来设计测试用例,最后通过设计测试用例来体现各种逻辑覆盖之间的关系。

第2题:

论述题3:针对以下C语言程序,请按要求回答问题

下面是一个程序段(C语言),试设计基本路径测试的测试用例,设计出的测试用例要保证每一个基本独立路径至少要执行一次。

函数说明:当i flag=0;返回i count+100

当i flag=l;返回i count*10

否则 返回 i count*20

输入参数:int i count int i flag

输出参数:int i retum

程序代码如下:

(1)画出该函数的控制流程图。

(2)采用基本路径测试法设计一组测试用例,保证每个基本独立路径都至少执行一次。


正确答案:问题1: 解答: 根据程序的源代码容易画出对应的控制流图如图17-4所示。 (其中圈中的数字代表的是语句的行号) 问题2: 解答: 第一步根据上述控制流图计算该程序的环路复杂性。 由图可以看出判定节点数为3边数为10节点总数为8故 V(G)=10-8+2=4 或V(G)=3+1=4 第二步根据环路复杂度为4可确定4条基本独立路径。 Path1:4—24 Path2:4—6—8—24 Path3:4—6—13—15—22—4—24 Path4:4—6—13—19—22—4—24 第三步设计测试用例 根据上面4条基本独立路径可以设计测试用例如下: 测试用例1 输入数据:i_flag=0或者是i_flag0的某个值。 预期输出结果:i temp=0。 测试用例2 输入数据:i_count=1i_flag=0。 预期输出结果:i temp=101。 测试用例3 输入数据:i_count=1i_flag=1。 预期输出结果:i temp=10。 测试用例4 输入数据:i count=1i_flag=2。 预期输出结果;i temp=20。 但这些测试用例是可以简化的由于路径path1是path4的真子集所以path1是可以不要的。故针对该程序最少的测试用例数为3即上述测试用例2测试用例3测试用例4。
问题1: 解答: 根据程序的源代码,容易画出对应的控制流图,如图17-4所示。 (其中圈中的数字代表的是语句的行号) 问题2: 解答: 第一步,根据上述控制流图计算该程序的环路复杂性。 由图可以看出,判定节点数为3,边数为10,节点总数为8,故 V(G)=10-8+2=4 或V(G)=3+1=4 第二步,根据环路复杂度为4,可确定4条基本独立路径。 Path1:4—24 Path2:4—6—8—24 Path3:4—6—13—15—22—4—24 Path4:4—6—13—19—22—4—24 第三步,设计测试用例 根据上面4条基本独立路径,可以设计测试用例如下: 测试用例1 输入数据:i_flag=0,或者是i_flag0的某个值。 预期输出结果:i temp=0。 测试用例2 输入数据:i_count=1,i_flag=0。 预期输出结果:i temp=101。 测试用例3 输入数据:i_count=1,i_flag=1。 预期输出结果:i temp=10。 测试用例4 输入数据:i count=1,i_flag=2。 预期输出结果;i temp=20。 但这些测试用例是可以简化的,由于路径path1是path4的真子集,所以path1是可以不要的。故针对该程序最少的测试用例数为3,即上述测试用例2,测试用例3,测试用例4。 解析:首先根据程序的源代码,画出控制流图。然后通过控制流图可以计算出该程序的复杂度,找出所有的独立路径,根据基本路径测试法设计测试用例。

第3题:

试题二(共15分)

阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。

【说明】

逻辑覆盖法是设计白盒测试用例的主要方法之一,它是通过对程序逻辑结构的遍历实现程序的覆盖。针对以下由C语言编写的程序,按要求回答问题。

struct _ProtobufCIntRange{

int start_value;

unsigned orig_index;

};

typedef struct _ProtobufCIntRange ProtobufCIntRange;

int int_range_lookup (unsigned n_ranges, const ProtobufCIntRange *ranges, int value){

unsigned start,n; ∥1

start=0;

n=n_ranges;

while(n>1){ //2

unsigned mid= start+ n/2;

if(value< ranges[mid].start_value){ //3

n=mid-start; //4

}

else if(value>=ranges[mid].start value+

(int)(ranges[mid+1].orig_index-ranges[mid].orig_index){ //5

unsigned new_start= mid+1; //6

n=start+n-new_start,

start = new_start;

}

else //7

return (value - ranges[mid].start_value)+ ranges[mid],orig_index;

}

if(n>0){ //8

unsigned start_orig_index= ranges[start].orig_index;

unsigned range_size=ranges[start+1].orig_index - start_orig_index;

if (ranges[start].start_value<=value

&& value< (int)(ranges[start].start_value+ range_size》 //9, 10

return (value - ranges[start].start_value)+start_orig_index; //11

}

retum -1, //12

} //13

【问题1】(5分)

请给出满足100%DC(判定覆盖)所需的逻辑条件。

【问题2】 (7分)

请画出上述程序的控制流图,并计算其控制流图的环路复杂度V(G)。

【问题3】(3分)

请给出【问题2】中控制流图的线性无关路径。

第4题:

白盒测试主要进行______的覆盖测试。

A.程序设计结构

B.程序物理结构

C.程序逻辑结构

D.程序实现功能


正确答案:C

第5题:

● 针对以下C语言程序段,假设sta[10]= -1,对于x的取值,需要__个测试用例能够满足分支覆盖的要求。 int MathMine( int x ) { int m = 0; int i; for( i = x-1; i <= x + 1; i++ ) { if ( i < 0 ) continue; if ( i >31 ) break; if ( sta[i] == -1 ) m++; } return m; }

A.3

B.4

C.5

D.6


正确答案:A
分支覆盖要使得程序中的每一个分支都至少执行一次。本题比较特殊,在循环体中用到了continue与break,其中执行continue语句,则结束本次循环,也就是说执行continue后,其后面的循环体语句在本次循环中将不执行;而break语句结束的是本层循环,在本题中就结束了整个循环。在本题中要设计的用例如下:(1)使i<0成立,(2)使i<0不成立,而i>31成立(3)使i<0不成立,且i>31也不成立,而使sta[i]==-1成立。这样就实现了分支覆盖。参考答案A

第6题:

针对以下C语言程序段,假设sta[10]=-1,对于x的取值,需要______个测试用例能够满足分支覆盖的要求。

int MathMine(int x)

{

int m=0;

int i;

for(i=x-1; i<=x+1; i++)

{

if (i<0) continue;

if (i>31) break;

if (sta[i]=-1) m++;

}

return m;

}

A.3

B.4

C.5

D.6

A.

B.

C.

D.


正确答案:A

第7题:

阅读下列说明,回答问题1至问题3,将解答填入的对应栏内。

[说明]

逻辑覆盖是通过对程序逻辑结构的遍历实现程序的覆盖,是设计白盒测试用例的主要方法之。以下代码由C浯言书写,请按要求回答问题。

void cal (int n)

{

int g, s, b, q;

if( (n>1000) && (n<2000) )

{

g=n % 10;

s=n % 100 / 10;

b=n / 100 % 10;

q= n / 1000;

if( (q+g) =={ s + b ) )

{

printf("%-5d",n);

}

}

printf("\n");

return;

}

请找出程序中所有的逻辑判断语句。

请分析并给出分别满足100%DC(判定覆盖)和100%CC(条件覆盖)时所需的逻辑条件。

假设n的取值范围是0<n<3000,请用逻辑覆盖法为n的取值设计测试用例,使用例集满足基本路径覆盖标准。

请帮忙给出每个问题的正确答案和分析,谢谢!


问题 1 答案解析:逻辑判断语句: 1.n>1000 2.n2000 3.(q + g)=(s + b)
逻辑判断语句: 1.n>1000 2.n2000 3.(q + g)=(s + b)

问题 2 答案解析:按照DC和CC的定义分析逻辑条件。
按照DC和CC的定义分析逻辑条件。

问题 3 答案解析:可按以下步骤完成: 1.画控制流图。 2.计算V(G)=3。 3.找出线性独立路径。 4.按路径执行过程中的逻辑条件设计相应数据。
可按以下步骤完成: 1.画控制流图。 2.计算V(G)=3。 3.找出线性独立路径。 4.按路径执行过程中的逻辑条件设计相应数据。

第8题:

逻辑覆盖是黑盒测试中的主要方法之一,是以程序内部的逻辑结构为基础的测试技术,是通过对程序逻辑结构的遍历实现程序设计的覆盖。()

此题为判断题(对,错)。


参考答案:×

第9题:

阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。

【说明】

逻辑覆盖法是设计白盒测试用例的主要方法之一,通过对程序逻辑结构的遍历实现

程序的覆盖。针对以下由C语言编写的程序,按要求回答问题。

【问题1] (6分)

请给出满足100%DC(判定覆盖)所需的逻辑条件。

【问题2] (10分)

请画出上述程序的控制流图,并计算其控制流图的环路复杂度V(G)。

【问题3](4分)

请给出问题2中控制流图的线性无关路径。


正确答案:
本题考查白盒测试技术的应用。
【问题1】
本问题考查白盒测试用例设计方法:判定覆盖法。
判定覆盖指设计足够的测试用例,使得被测程序中每个判定表达式至少获得一次
“真”值和“假”值,从而使程序的每一个分支至少都通过一次。本题中程序有6个判定,
所以满足判定覆盖一共需要12个逻辑条件。
【问题2】
本问题考查白盒测试用例设计方法:基本路径法。涉及的知识点包括:根据代码绘
制控制流图、计算环路复杂度。
控制流图是描述程序控制流的一种图示方式,它由节点和定向边构成。控制流图的
节点代表一个基本块,定向边代表控制流的方向。其中要特别注意的是,如果判断中的
条件表达式是复合条件,即条件表达式是由一个或多个逻辑运算符连接的逻辑表达式,
则需要改变复合条件的判断为一系列之单个条件的嵌套的判断。本题程序中,
if((filename[len-2]==’.’)&&(filename[len.1]=’c’))这条判断语句中的判定由两个条件
组成,因此在画控制流图的时候需要拆开成两条判断语句。程序的环路复杂度等于控制
流图中判定节点的个数加1,本题控制流图I中判定节点个数为7,所以V(G)=8。
【问题3】
本问题考查白盒测试用例设计方法:基本路径法。涉及的知识点包括:根据控制流
图和环路复杂度给出线性无关路径。
线性无关路径是指包含一组以前没有处理的语句或条件的路径。从控制流图上来
看,一条线性无关路径是至少包含一条在其他线性无关路径中从未有过的边的路径。程
序的环路复杂度等于线性无关路径的条数,所以本题中应该有8条线性无关路径。
参考答案

【问题2]
环路复杂度V(G)=8。

线性无关路径:
1.1-2-3-4-6-7-8-9-10-11-12-13-10......
2.1-2-5-6-7-8-9-10-11-12-13-10.....
3.1-2-3-5-6-7-8-9-10-11-12-13-10...
4.1-2-3-4-6-8-9-10-11-12-13-10...
5.1-2-3-4-6-7-8-10-11-12-13-10....
6.1-2-3-4-6-7-8-9-10-15
7.1-2-3-4-6-7-8-9-10-11-14-10.....
8.1-2-3-4-6-7-8-9-10-11-12-10....

第10题:

逻辑覆盖法是设计白盒测试用例的主要方法之一,它是通过对程序逻辑结构的遍历实现程序的覆盖。针对以下由C语言编写的程序,按要求回答问题。
getit( int m)
{
int i, k;
k=sqrt(m);
for ( i=2; i<=k; i++)
if (m % i=0) break;
if ( i>=k+1 )
printf( "%d is a selected number\n", m);
else
printf( "%d is not a selected number\n", m );
}
7、请找出程序中所有的逻辑判断子语句。(5分)
8、请将满足100%DC(判定覆盖)所需的逻辑条件填入下表。(8分)



9、请画出上述程序的控制流图,并计算其控制流图的环路复杂度VG.。假设函数getit的参数m取值范围是150<m<160,请使用基本路径测试法设计测试用例,将参数m的取值填入下表,使之满足基本路径覆盖要求。(4分)



答案:
解析:
7、
本题考查对编程语言的理解,着重考查判断语句。
程序中的逻辑判断子语句如下:
i<=k
m%i==0
i>=k+1
8、
本题考查白盒测试用例设计方法:判定覆盖法。判定覆盖法又称为逻辑覆盖,是通过对程序逻辑结构的遍历实现程序的覆盖。



9、
本题考查白盒测试用例设计方法:基本路径法。涉及的知识点包括:根据代码绘制程序流图、计算环路复杂度以及设计测试用例。注意测试用例的数目本应和环路复杂度是一致的,但存在特殊情况。
控制流图:



环路复杂度:
V(G)=4
基本路径覆盖用例:

更多相关问题