试题一(15 分)
阅读下列说明,回答问题1 至问题3,将解答填入答题纸的对应栏内。
[说明]
基本路径法设计出的测试用例能够保证在测试中程序的每一条可执行语句至少执
行一次。以下代码由C++语言书写,请按要求回答问题。
void ReadPara( CString temp )
{
if ( temp == ">=" )
m_oper.SetCurSel( 0 );
else
{
if ( temp == ">" )
m_oper.SetCurSel( 1 );
else
{
if ( temp == "==" )
m_oper.SetCurSel( 2 );
else
{
if ( temp == "<=" )
m_oper.SetCurSel( 3 );
else
{
if ( temp == "<" )
m_oper.SetCurSel( 4 );
else
m_oper.SetCurSel( 5 );
}
}
}
}
return;
}
[问题1](6 分)
请画出以上代码的控制流图。
[问题2](3 分)
请计算上述控制流图的环路复杂度 V(G)。
[问题3](6 分)
请使用基本路径测试法为变量 temp 设计测试用例,使之满足基本路径覆盖要求。
第1题:
论述题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)采用基本路径测试法设计一组测试用例,保证每个基本独立路径都至少执行一次。
问题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。
问题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。 解析:首先根据程序的源代码,画出控制流图。然后通过控制流图可以计算出该程序的复杂度,找出所有的独立路径,根据基本路径测试法设计测试用例。
第2题:
阅读下面的说明,回答问题1~问题4,将解答填入答题纸对应的解答栏内。
[说明]
阅读以下说明,回答问题1~问题4,将解答填入答题纸对应的解答栏内。
windows Server 2003是一个多任务多用户的操作系统,能够以集中或分布的方式实现各种应用服务器角色,是目前应用比较广的操作系统之一。
Windows内置许多应用服务功能,将下表中(1)~(5)处空缺的服务器名称填写在答题纸对应的解答栏内。

(1)
第3题:
阅读下列说明,回答问题1至问题3。
【说明】
使用基本路径法设计出的测试用例能够保证程序的每一条可执行语句在测试过程中至少执行一次。以下代码由C语言书写,请按要求回答问题。
int IsLeap(int year)
{
if(year% 4==0)
{
if((year % 100==0)
{
if( year % 400==0'
leap=1;
eIse
leap=0;
}
else
leap=1;
else
leap=0;
return leap;
}
请画出以上代码的控制流图。
请计算上述控制流图的V(G)。
假设的取值范围是1000<year<2001,请使用基本路径测试法为变量year设计测试用例,使之满足基本路径覆盖的要求。
请帮忙给出每个问题的正确答案和分析,谢谢!

解析:绘制模块控制流图。第4题:
阅读下列说明,回答问题 1 至问题 4 ,将解答写在答题纸的对应栏内。 【说明】 基于 Windows32 位系统分析下列代码,回答相关问题 。 void Challenge(char *str) { char temp[9]={0}; strncpy(temp,str,8); printf("temp=%s\n",temp); if(strcmp(temp"Please!@")==0){ printf("KEY: ****"); } } int main(int argc,char *argv[ ]) { Char buf2[16] Int check=1; Char buf[8] Strcpy (buf2, "give me key! !"); strcpy(buf,argv[1]); if(check==65) { Challenge(buf); } else { printf("Check is not 65 (%d) \n Program terminated!!\n",check); } Return 0; }
【问题 1】(3 分) main 函数内的三个本地变量所在的内存区域称为什么?它的两个最基本操作是什么? 【问题 2】(3分) 画出buf,check,buf2 三个变量在内存的布局图。
【问题 3】(2分) 应该给程序提供什么样的命令行参数值(通过argv变量传递)才能使程序执行流程进入判断语句 If(check=65)....然后调用challenge( )函数。 【问题4】(4分) 上述代码所存在的漏洞名字是什么,针对本例代码,请简要说明如何修正上述代码以修补次漏洞。

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


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


第6题:
试题三(共 15分)
阅读以下关于嵌入式软件测试用例设计的叙述,回答问题 1至问题 3,将答案填入答题纸的对应栏内。
【说明】
某程序段的流程如图 3-1所示,x、y是两个变量,K、J 表示一段程序执行体,表 3-1 所示为本题可供选择的四组测试用例组。

【问题1】(3分)
简答以下问题。
(1)条件覆盖的含义是什么?
(2)路径覆盖的含义是什么?
【问题 2】(2分)
在程序测试用例设计中,有语句覆盖、条件覆盖、判定覆盖(分支覆盖)和路径覆盖等。其中,____是最强的覆盖准则。
请把以下 4个选项中正确的选项序号填入上述空白处。
①语句覆盖
②条件覆盖
③判定覆盖(分支覆盖)
④路径覆盖
【问题 3】(10 分)
为了对图 3-1 所示的程序段进行覆盖测试,必须适当地选取测试用例组。实现判定覆盖至少应采用的测试用例组是 (1)和 (2) ,实现条件覆盖至少应采用的测试用例组是 (3) ;实现路径覆盖至少应采用的测试用例组是 (4) 和 (5)。
请把以下 8个选项中正确的选项序号填入上述空白处。
① 试用例组Ⅰ和Ⅱ
②测试用例组Ⅱ和Ⅲ
③测试用例组Ⅲ和Ⅳ
④测试用例组Ⅰ和Ⅳ
⑤测试用例组Ⅰ、Ⅱ和Ⅲ
⑥测试用例组Ⅱ、Ⅲ和Ⅳ
⑦测试用例组Ⅰ、Ⅲ和Ⅳ
⑧测试用例组Ⅰ、Ⅱ和Ⅳ
试题三(共15分)
【问题1】(3分)
(1)条件覆盖是指设计足够的测试用例,使得被测程序每一个判定中的每个条件的所有可能结果至少出现一次。
(2)路径覆盖是指设计足够的测试用例,使得被测程序中每条路径至少执行一次。
【问题2】(2分)
(1)④(路径覆盖)
【问题3】 (10分)
(1)⑤
(2)⑧
(3)⑦
(4)⑤
(5)⑧
其中,第(1)、(2)题的答案顺序可互换,第(4)、(5)题的答案顺序可互换。
第7题:
()阅读下列说明和C语言程序,将应填入 (n)处的语句写在答题纸的对应栏内。[说明]设有定义 #define ITEM struct item #define SIZE sizeof(ITEM) ITEM { int num; ITEM *next; }; ITEM *head=NULL; 下述函数定义实现按插表尾形式(即每一新表元素插入至当前所生成链表的表尾之后)生成一个正向线性链表。最后指向所生成链表表头的指针作为函数值返回。为生成一个线性链表,要求输入一批整型数据,并以-1作为结束标志。请填空完善程序。 ITEM *gene(ITEM *head) { ITEM *temp,*tail;/*tail指向当前链表尾结点*/ int intno; printf("Enter integer NO.,-1 to stop:\n"); scanf("%d",&intno); while (intno!=-1) { temp=(____(1)_____)malloc(SIZE); temp->num=intno; if (head==_____(2)_____) /*空表*/ { head=temp; tail=______(3)______; } else /*非空表*/ { ____(4)_______=temp; tail=temp; } scanf("%d",&intno); } return (_______(5)_______);
第8题:
第9题:
第10题:
第11题:

第12题:
第13题:
阅读以下说明及C++程序代码,将应填入(n)处的语句写在对应栏内。
【说明】
本程序的功能是生成螺旋方阵,用户可以输入该方阵的行列数,然后就生成对应的螺旋方阵。例如:当n=5时,对应的螺旋方阵如下:
1 16 15 14 13
2 17 24 23 12
3 18 25 22 11
4 19 20 21 10
5 6 7 8 9
【C++代码】
include"stdio.h"
include"iostream,h"
int array[11][11];
int temp;
int ROW;
void godown(int &m,int &a)
{
for(temp=1; temp<=ROW;temp++)
if(array[temp][a]==0)
array[temp][a]=(1);
a++;
}
void goright(int &m,int &b)
{
for(temp=1;temp<=ROW;temp++)
if(array[b][temp]==0)
array[b][temp]=m++;
b--;
}
void goup(int &m.int &c)
{
for(temp=ROW;temp>0;temp-)
if(array[temp][c]==0)
array[temp][c]=m++;
c--;
}
void goleft(int &m,int &d)
{
for(temp=ROW;temp>0;temp--)
if(array[d][temp]==0)
array[d][temp]=m++;
(2);
}
void main()
{
int a,b,c,d,max,m;
cin>>ROW;
cout>>end1;
for(a=1;a<=ROW;a++)
for(b=1;b<=ROW;b++)
(3);
m=1;
a=d=1;
b=c=ROW;
max=(4);
whiie(m<=max)
{
godown(m,a);
(5) (m,b);
goup(m,c);
goleft(m,d):
}
for(a=1;a<=ROW;a++)
{
for(b=1;b<=ROW;b++)
printf("%3d ",array[a][b]);
cout<<end1;
}
}
第14题:
试题一(共15分)
阅读以下说明,回答问题1至问题5,将解答填入答题纸对应的解答栏内。
【说明】
某网吧拓扑结构如图 1-1 所示,可提供影视、游戏竞技、视频聊天等多种服务,采用VLAN 划分来区分不同的服务。

问题 1】(2分)
网吧要求实现千兆接入,可采用的方式为 (1) 。
(1)备选答案:
A. FTTx
B. ADSL
C. PSTN拨号
第15题:
【说明】 使用基本路径法设计出的测试用例能够保证程序的每一条可执行语句在测试过程中至少执行一次。以下代码由C语言书写,请按要求回答问题。 int isLeap (int year) { if (year % 4 == 0) { if (year % 100 == 0) { if ( year % 400 == 0) leap = 1; else leap = 0; } else leap = 1; } else leap = 0; return leap; } 【问题1】(3分) 请画出以上代码的控制流图。
第16题:
阅读以下关于软件测试的说明,回答司题l至问题3,将解答填入答题纸的对应
栏内。
【说明】
使用在汽车、飞机中的嵌入式软件, 日于直接影响人的生命及财产安全,测试要求
更为严格。语句覆盖、判定覆盖、条件覆盖和MC/DC覆盖是通常对这类软件的要求。
以下是一段C语言代码,请仔细阅读并回答相关问题:

【问题1】(6分)
请根据测试要求,简要说明语句覆盖、判定覆盖、条件覆盖和MC/DC覆盖的含义。
将答案填写在答题纸的对应栏中。
【问题2】(5分)
画出以上代码的流程图,将答案填写在答题纸的对应栏中。
【问题3】(4分)
请根据【说明】中的C语言代码,计算满足MC/DC覆盖要求的用例数量及条件取
值范围,将答案填写在答题纸的对应栏中.




第17题:
阅读下列说明和C代码,回答问题l至问题3.将解答写在答题纸的对应栏内。
【说明】
计算一个整数数组a的最长递增子序列长度的方法描述如下:
假设数组a的长度为n,用数组b的元素b[i]记录以a[i](0≤i<n)为结尾元素的最长
递增子序列的长度,则数组a的最长递增子序列的长度为器
;其中b[i]满足最优子结构,可递归定义为:
【c代码】
下面是算法的c语言实现。
(1)常量和变量说明
a:长度为n的整数数组,待求其最长递增子序列
b:长度为n的数组,b[i]记录以a[i](0≤i<n)为结尾元素的最长递增子序列的长度,
其中0≤i<n
len:最长递增子序列的长度
i.j:循环变量
temp,临时变量
(2)C程序
include <stdio . h>
int maxL (int *b. int n) {
int i. temp =0;
For(i = 0; i < n; i++){
if (b[i] > temp )
Temp= b[i];
}
Return temp;

【问题l】(8分)
根据说明和C代码,填充C代码中的空(1)~(4)。
【问题2】(4分)
根据说明和C代码,算法采用了(5)设计策略,时间复杂度为(6)(用O符号表示)。
【问题3】(3分)
已知数组a={3,10,5,15,6,8},根据说明和C代码,给出数组b的元素值。
第18题:
阅读下列说明,回答问题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的取值设计测试用例,使用例集满足基本路径覆盖标准。
请帮忙给出每个问题的正确答案和分析,谢谢!



第19题:
第20题:
第21题:
第22题:
第23题:
