软件水平考试

阅读下列说明,回答问题。 【说明】 逻辑覆盖法是设计白盒测试用例的主要方法之一,通过对程序逻辑结构的遍历实现程序的覆盖。针对以下由C语言编写的程序,按要求回答问题。 int XOR(char * filename, unsigned long key){ FILE * input = NULL , *output = NULL; //1 char * outfilename = NULL; int len = strlen(filename); unsigned char

题目
阅读下列说明,回答问题。 【说明】 逻辑覆盖法是设计白盒测试用例的主要方法之一,通过对程序逻辑结构的遍历实现程序的覆盖。针对以下由C语言编写的程序,按要求回答问题。 int XOR(char * filename, unsigned long key){ FILE * input = NULL , *output = NULL; //1 char * outfilename = NULL; int len = strlen(filename); unsigned char buffer; if( (filename[len-2] == '.') && (filename[len-1] == 'c') ) { //2,3 outfilename = new char[len+1]; //4 strcpy(outfilename, filename); outfilename[len-2] = '\0'; } else{ //5 outfilename = new char[len+5]; strcpy(outfilename, filename); strncat(outfilename,".c",2); } input = fopen(filename,"rb"); if( input == NULL) { //6 cout << "Error opening file " << filename << endl; //7 delete [] outfilename; outfilename = NULL; return 1; } output = fopen(outfilename,"wb"); if( output == NULL ) { //8 cout << "Error creating output file " << outfilename << endl; //9 delete [] outfilename; outfilename = NULL; return 1; } while( ! feof(input) ) { //10 if( fread(&buffer,sizeof(unsigned char),1,input) != 1 ) { //11 if( ! feof(input) ) { //12 delete [] outfilename; //13 outfilename = NULL; fclose(input); fclose(output); return 1; } } else{ //14 buffer ^= key; fwrite(&buffer, sizeof(unsigned char),1,output); } } fclose(input); //15 fclose(output); delete [] outfilename; return 0; }4.1、请给出满足100%DC(判定覆盖)所需的逻辑条件。(3分)4.2、请画出上述程序的控制流图,并计算其控制流图的环路复杂度V(G)。(7分)4.3、请给出问题2中控制流图的线性无关路径。(5分)

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

第1题:

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

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


参考答案:×

第2题:

阅读下列说明和E-R图,回答问题1至问题3,将解答填入对应栏内。

[说明]

设有下列关于学生成绩管理系统的E-R图(见图2-1)。图中矩形表示实体,圆表示属性,双圆表示关键字属性,菱形表示实体间的联系。假定已通过下列SQL语言建立了基本表:

CREATE TABLE STUDENT(SNo CHAR(6)NOT NULL UNIQUE,

SName CHAR(20),

Sex CHAR(1),

Dept CHAR(20),

Age SMALLINT);

CREATE TABLE COURSE(CNo CHAR(6)NOT NULL UNIQUE,

CName CHAR(20),

Hour SMALLINT,

Credit SMALLINT);

CREATE TABLE SC (SNo CHAR(6),

CNo CHAR(6),

GRADE SMALLINT,

PRIMARY KEY (SNo,CNo));

为了答题的方便,图中的实体和属性同时给出了中英文两种名字,回答问题时只须写出英文名即可。

填充下列SQL程序5.1~5.4中的(1)~(6),使它们分别完成以下查询功能:

程序5.1:检索选修所有课程的学生姓名。

程序5.2:给出全体学生人数。

程序5.3:按学号给出每个学生的平均成绩。

程序5.4:按学号给出每个学生选修课程的门数。

[程序5.1]

SELECT SName FROM STUDENT WHERE (1)

(SELECT FROM COURSE WHERE (2)

(SELECT * FROM SC WHERE (3) ))

[程序5.2]

SELECT (4) FROM STUDENT

[程序5.3]

SELECT (5) FROM SC GROUP BY SNO

[程序5.4]

SELECT (6) FROM SC GROUP BY SNO

(1)


正确答案:NOT EXISTS
NOT EXISTS

第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题:

逻辑覆盖法是设计白盒测试用例的主要方法之一,它是通过对程序逻辑结构的遍历实现程序的覆盖。针对以下由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
基本路径覆盖用例:

第5题:

阅读下列说明,回答问题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....

第6题:

论述题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),便可以把该程序的所有四条路径都覆盖。路径覆盖是最强的覆盖准则。 解析:首先根据源程序画出程序流图比较容易,然后分析学过的所有的逻辑覆盖(如语句覆盖,分支覆盖,路径覆盖等),分析针对每种逻辑覆盖的标准来设计测试用例,最后通过设计测试用例来体现各种逻辑覆盖之间的关系。

第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题:

试题一(共20分)

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

【说明】

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

int XOR(char * filename, unsigned long key){

FILE* input = NULL,*output = NULL; //1

char *outfilename = NULL;

int len = strlen(filename);

unsigned charbuffer;

if( (filename[len-2] == ‘.’) && (filename[len-l]== ‘c’)){ //2,3

outfilename = new char[len+l]; //4

strcpy(outfilename,filename); outfilename[len-2] = ‘\0’;

}

else{ //5

outfilename = new char[len+5];

strcpy(outfilename , filename);

strncat(outfilename,”.c”,2);

}

input = fopen(filename,”rb”);

if( input = NULL){ //6

cout<<"Error opening file " << filename<<endl ; //7

delete [] outfilename;

outfilename = NULL;

return 1;

}

output = fopen(outfilename,”&39;wbf”);

if( utput =NULL) { //8

cout<<"Error creating output file ”<< outfilename <<endl; //9

delete []outfilename;

outfilename =NULL;

return 1;

}

while(! feof(input) ){ //10

if( fread(&buffer,sizeof(unsigned char), 1,input) != 1 ){ //11

if( ! feof(input)){ //12

delete [] outfilename; //13

outfllename = NULL;

fclose(input);

fclose(output);

return 1;

}

}

else{ //14

buffer A= key;

fwrite(&buffer,sizeof(unsigned char), 1,output);

}

}

fclose(input);

fclose(output);

delete []outfllename;

return 0;

}

【问题1】(6分)

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

【问题2】(10分)

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

【问题3】(4分)

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


正确答案:

试题分析

【问题1

判定覆盖:设计足够的测试用例,使得程序中的每个判定至少都获得一次“真值”或“假值”,或者说使得程序中的每一个取“真“分支和取”假“分支至少都经历一次

逻辑条件为:

filename[len-2] == .’) && filename[len-l] == c’)真,假

input = NULL真,假

output = NULL真,假

! feofinput)真,假

fread&buffer,sizeofunsigned char, 1,input != 1真,假

! feofinput)真,假

【问题2

控制流图是描述程序控制流的一种图示方法。其基本符号有圆圈和箭线:圆圈为控制流图中的一个结点,表示一个或多个无分支的语句;带箭头的线段称为边或连接,表示控制流。基本结构如下所示:

控制流程图的环路复杂性 V(G)等于:

1)控制流程图中的区域个数。

2)边数-结点数+2

3)判定数+1

VG=8

【问题3

线性无关路径是指包括一组以前没有处理的语句或条件的一条路径。从控制流图来看,一条线性无关路径是至少包含有一条在其他线性无关路径中从未有过的边的路径:

1234678910

1235678910

125678910

12568910

1256810

12568101114

12568101112

12568101113

试题答案

【问题1

filename[len-2] == .’) && filename[len-l] == c’)真,假

input = NULL真,假

output = NULL真,假

! feofinput)真,假

fread&buffer,sizeofunsigned char, 1,input != 1真,假

! feofinput)真,假

【问题2

VG=8

【问题3

1234678910

1235678910

125678910

12568910

1256810

12568101114

12568101112

12568101113

或者其它符合要求的等价的路径组合


第9题:

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

A.程序设计结构

B.程序物理结构

C.程序逻辑结构

D.程序实现功能


正确答案:C

第10题:

阅读下列C程序,回答问题1至问题3,将解答填入答题纸的对应栏内。【说明】逻辑覆盖法是设计白盒测试用例的主要方法之一,它是通过对程序逻辑结构的遍历实现程序的覆盖。针对以下由C 语言编写的程序,按要求回答问题。



问题1:(6分) 请针对上述C程序,给出满足100%DC(判定覆盖)所需的逻辑条件。
问题2:(7分)请画出上述程序的控制流图,并计算其控制流图的环路复杂度V(G)。
问题3:(3分)请给出【问题2】中控制流图的线性无关路径。


答案:
解析:
问题1答案:

问题2:答案:(1)控制流图如下图所示:



(2)V(G)=10+1=11
问题3:答案:(1)1-2-19 (2) 1-2-3-19 (3) 1-2-3-4-12-13-17-19(4) 1-2-3-4-12-13-14-17-19 (5) 1-2-3-4-12-13-14-15-17-19(6) 1-2-3-4-12-13-14-15-16-17-19 (7) 1-2-3-4-12-13-14-15-16-18-19(8) 1-2-3-4-5-11-19 (9)1-2-3-4-5-6-10-19(10) 1-2-3-4-5-6-7-9-19 (11) 1-2-3-4-5-6-7-8-19
【解析】
问题1本小题考查白盒测试中的判定覆盖法。判定覆盖指设计足够的测试用例,使得被测程序中每个判定表达式至少获得-次 “真”值和“假”值,从而使程序的每一个分支至少都通过一次。本题中程序一共有6个判定,所以满足判定覆盖一共就需要12个逻辑条件,这些条件详见上述答案。问题2:本题考查白盒测试方法中的基本路径法。涉及到的知识点包括:根据代码绘制控制流图、计算环路复杂度。控制流图是描述程序控制流的一种图示方法。其基本符号有圆圈和箭线:圆圈为控制流图中的一个结点,表示一个或多个无分支的语句;带箭头的线段称为边或连接,表示控制流。基本结构如下所示:



其中要特别注意的是,如果判断中的条件表达式是复合条件,即条件表达式是由一个或多个逻辑运算符连接的逻辑表达式,则需要改变复合条件的判断为一系列之单个条件的嵌套的判断。环路复杂度用来衡量一个程序模块所包含的判定结构的复杂程度。环路复杂度等于右图中的判定的节点个数加1。图中判定节点个数为10,所以V(G)=10+1=11。控制流程图的环路复杂性 V(G)一共有以下三种方法,但是最后一种最好用,不易出错。(1)控制流程图中的区域个数。(2)边数-结点数+2。(3)判定数+1。
问题3:本小题考查白盒测试用例设计方法之基本路径法。涉及到根据控制流图和环路复杂度给出线性无关路径。线性无关路径:指包含一组以前没有处理的语句或条件的路径。从控制流图上来看,一条线性无关路径是至少包含一条在其他线性无关路径中从未有过的边的路径。程序的环路复杂度等于线性无关路径的条数,所以本题中有11条线性无关路径。这11条路径组成了问题2中控制流图的一个基本路径集。只要设计出的测试用例能确保这些基本路径的执行,就可以使程序中的每个可执行语句至少执行一次,每个条件的取真和取假分支也能得到测试。需要注意的是,基本路径集不是唯一的,对于给定的控制流图,可以得到不同的基本路径集。

更多相关问题