代码检查走查与评审覆盖率白盒测试.docx
- 文档编号:10903067
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:33
- 大小:29.21KB
代码检查走查与评审覆盖率白盒测试.docx
《代码检查走查与评审覆盖率白盒测试.docx》由会员分享,可在线阅读,更多相关《代码检查走查与评审覆盖率白盒测试.docx(33页珍藏版)》请在冰豆网上搜索。
代码检查走查与评审覆盖率白盒测试
代码检查、走查与评审、覆盖率(白盒)测试
(总分:
108.00,做题时间:
90分钟)
一、选择题(总题数:
39,分数:
39.00)
1.以下叙述中正确的是______。
(分数:
1.00)
A.可跟踪性分析是在整体上分析整个资源的分配策略
B.关键性分析是标识原始需求和相应开发结果之间关系的能力
C.接口分析必须关注3种接口:
用户接口、硬件接口和软件接口 √
D.评估权在软件开发的最后阶段进行,以确认产品是否符合规格说明
解析:
[解析]接口分析的目的是评估软件交付物是否正确、已知、完整和准确地说明了接口需求。
接口分析必须关注3种接口:
用户接口、硬件接口和软件接口。
2.走查是对软件进行静态测试的一种方法,以下不属于走查活动的是______。
(分数:
1.00)
A.计划走查会议
B.准备测试用例 √
C.执行走查以发现和改正错误
D.在走查过程中程序员逐渐讲解自己的程序
解析:
[解析]走查的步骤如下:
(1)计划走查会议;
(2)走查产品;(3)执行走查;(4)解决缺陷;(5)走查记录;(6)产品返工,准备测试用例是走查之前要进行的活动。
3.检查是否存在“已定义但未使用”的变量引用异常应属于______。
(分数:
1.00)
A.静态分析 √
B.动态分析
C.代码执行
D.调试
解析:
[解析]静态错误分析有以下几种:
类型和单位分析、引用分析等,其中在静态错误分析中,使用技术最广泛的是发现引用异常。
4.软件静态分析一般包括:
控制流分析、数据流分析、接口分析,以及______。
(分数:
1.00)
A.表达式分析 √
B.功能分析
C.边界值分析
D.因果图分析
解析:
[解析]静态错误分析主要用于确定在源程序中是否有某类错误或危险结构。
它有以下几种类型:
单位分析、引用分析、表达式分析、接口分析。
5.在程序测试中,用于检查程序模块或子程序之间的调用是否正确的静态分析方法是______。
(分数:
1.00)
A.操作性分析
B.可靠性分析
C.引用分析
D.接口分析 √
解析:
[解析]静态错误分析主要用于确定在源程序中是否有某类错误或者危险结构,包括:
(1)类型和单位分析。
为了强化对源程序中数据类型的检查,在程序设计语言中扩充一些新的数据类型
(2)引用分析。
在静态错误分析中,使用技术最广泛的是发现引用异常。
(3)表达式分析。
对表达式进行分析,以发现和纠正在表达式中出现的错误。
(4)接口分析。
接口的一致性是程序的静态错误分析和设计分析共同研究的题目。
接口一致性的设计分析主要检查模块之间接口的一致性和模块与外部数据库之间接口的一致性。
6.下列引用表,不能直接从表中查出说明/使用错误的是______。
(分数:
1.00)
A.循环层次表
B.等价表 √
C.变量交叉引用表
D.标号交叉引用表
解析:
7.程序的静态错误分析和设计分析共同研究的题目是______。
(分数:
1.00)
A.接口一致性 √
B.表达式分析
C.引用分析
D.类型和单位分析
解析:
8.下列关于代码检查说法正确的是______。
①代码检查过程的目的是发现错误,而不是纠正错误
②程序员通常可以通过代码检查得到编程风格、算法选择及编程技术等方面的反馈信息
③代码检查是早期发现程序中最易出错部分的方法之一
(分数:
1.00)
A.①
B.①②
C.②③
D.都是 √
解析:
9.以下关于人工检查方法叙述正确的是______。
(分数:
1.00)
A.走查的主要工作是由程序编写者本人来完成的
B.代码检查是对程序进行模拟,一步一步地展示程序如何处理由检查人员提供的测试数据
C.同行评审是一种通过作者的同行来确认缺陷和需要变更区域的检查方法 √
D.桌上检查是以小组为单位进行检查程序的
解析:
10.评审方法有很多,其中最便宜的评审方法是______。
(分数:
1.00)
A.轮查
B.结对评审 √
C.小组评审
D.走查
解析:
11.同行评审是一种通过作者的同行来确认缺陷和需要变更区域的检查方法,它主要分为管理评审、技术评审、过程评审和______。
(分数:
1.00)
A.程序评审
B.数据评审
C.组织体系评审
D.文档评审 √
解析:
12.下列不属于人工测试方法的是______。
(分数:
1.00)
A.单元测试 √
B.桌上检查
C.同行评审
D.走查
解析:
13.在代码检查中,讲解员的最佳人选是______。
(分数:
1.00)
A.检查人员
B.程序或文档的编写者 √
C.程序或文档的测试者
D.会议主持人员
解析:
14.下列不属于表达式分析的是______。
(分数:
1.00)
A.数组下标越界
B.形参和实参类型的一致性 √
C.除式为零
D.表达式中不正确使用括号
解析:
15.代码检查的作用是______。
(分数:
1.00)
A.发现程序中的缺陷和错误
B.程序员会得到编程风格、算法选择及编程技术等反馈信息
C.可以在早期发现程序中最易出错的部分
D.以上全部 √
解析:
16.用于代码检查的错误列表有______。
(分数:
1.00)
A.数据引用或声明错误
B.运算、比较错误
C.控制流、接口、输入/输出错误
D.以上全部 √
解析:
17.在走查的过程中,参加审查的人员中,程序编写者有______。
(分数:
1.00)
A.1个 √
B.2个
C.多于2个
D.不确定
解析:
18.在走查的第一步计划走查会议中,下列活动不属于协调人完成的是______。
(分数:
1.00)
A.选择一名或多名人员组成走查小组
B.为审查程序准备测试用例 √
C.分发所有必需的材料给审查人员
D.安排走查会议时间和地点
解析:
19.负责在走查期间做出所有说明,包括发现的问题、样式方面错误、遗漏、矛盾、改进意见等,该角色应该是——。
(分数:
1.00)
A.协调人
B.走查小组秘书 √
C.测试员
D.记录员
解析:
20.以小组形式进行,小组成员集体扮演计算机角色检查源程序的方法是______。
(分数:
1.00)
A.评审
B.代码检查
C.走查 √
D.轮查
解析:
21.在一个正式的评审活动小组中,职责是确保即将评审的文件已经准备好,这个角色是______。
(分数:
1.00)
A.评审组长
B.作者 √
C.读者
D.评审秘书
解析:
22.管理评审主要是评价管理体系的______。
(分数:
1.00)
A.适应性
B.充分性
C.有效性
D.以上全部 √
解析:
23.技术评审分为正式和非正式两种,通常由技术负责人制度详细地评审计划,包括______。
(分数:
1.00)
A.评审时间
B.对所需文件的定义
C.评审地点
D.以上全部 √
解析:
24.在软件开发过程中,需要的文档评审有______。
(分数:
1.00)
A.需求文档评审
B.软件设计文档评审
C.代码评审和质量验证文档评审
D.以上全部 √
解析:
25.过程评审的目标是______。
(分数:
1.00)
A.评估主要的质量保证代码
B.总结和共享好的经验
C.指出进一步完善和改进的部分
D.以上全部 √
解析:
26.有一种评审方法是有计划和结构化的、非常接近于最正式的评审技术,它是______。
(分数:
1.00)
A.小组评审 √
B.正式评审
C.结对评审
D.走查
解析:
27.对于核心代码的评审最好是______。
(分数:
1.00)
A.结对评审
B.走查
C.正式评审 √
D.分配检查方法
解析:
28.如果程序通过了100%的代码覆盖率测试,则说明程序满足了______。
(分数:
1.00)
A.语句覆盖 √
B.编程规范
C.设计规格
D.功能需求
解析:
[解析]语句覆盖就是设计若干测试用例,运行被测程序,使得每一可执行语句至少执行一次。
29.设有一段程序如下:
if((a==b)and((c==d)or(e==f)))doS1
elseif((p==q)or(s==t))doS2
elsedoS3
满足判定/条件覆盖的要求下,最少的测试用例数目是______。
(分数:
1.00)
A.6
B.8
C.3 √
D.4
解析:
[解析]判定/条件覆盖,就是设计足够的测试用例,使得判定语句中每个条件的所有可能取值至少评价一次,同时每个判定语句本身所有可能分支也至少评价一次。
本程序一共有两个判定语句和三条路径。
若以1代表某一个条件为真,0代表为假,则对于(a==b)、(c==d)、(e==f)、(p==q)、(s==t)这5个条件,取不同的真值组合,即可设计出相应的测试用例,达到判定/条件覆盖的要求。
在这里,先取(a==b)、(c==d)、(e==f)为101,(p==q)、(s==t)为任意值,然后取全部5个条件为01011和01000,即能达到判定/条件覆盖的要求。
30.在以下有关逻辑覆盖的说法中错误的是______。
(分数:
1.00)
A.所有满足条件组合覆盖标准的测试用例集,也满足路径覆盖的覆盖标准 √
B.条件覆盖能够查出条件中包含的错误,但有时达不到判定覆盖的覆盖率要求
C.路径覆盖的差错能力很强,但有时达不到条件组合覆盖的覆盖率要求
D.判定覆盖包含了语句覆盖,但它不能保证每个错误条件都能检查出来
解析:
[解析]满足了条件覆盖,并不一定满足判定覆盖。
尽管路径覆盖比判定/条件覆盖更强,但是路径覆盖并不一定能包含判定/条件覆盖。
31.对于具有串联型分支结构的程序,如果有7个判断语句串联,则使用正交实验设计法,至少需要的测试用例数应为______。
(分数:
1.00)
A.23 √
B.24
C.26
D.27
解析:
[解析]设串联型分支结构中有n个判定语句,计算满足关系式n+1≤2m的最小自然数m;设t=2m,取正交表Lt,并利用它设计测试数据,其中t为最少需要的测试用例数。
32.下列指导选择和使用测试覆盖率的原则中错误的是______。
(分数:
1.00)
A.覆盖率不是目的,仅是一种手段
B.不要追求绝对100%的覆盖率
C.不可能针对所有的覆盖率指标来选择测试用例
D.只根据测试覆盖率指标来指导测试用例的设计 √
解析:
[解析]在选择和使用覆盖率时,应该注意以下原则:
(1)覆盖率只是一种手段,不是测试的最终目的。
(2)不可能针对所有的覆盖率进行测试,但如果只考虑一种覆盖率也是不妥的。
(3)不要追求绝对100%的覆盖率。
(4)设计测试用例时,不仅要考虑到覆盖率,还应综合考虑其他方面,如成本等。
根据以上原则,A、B、C的说法均正确,而D说法不当,覆盖率不是唯一的参考指标。
33.覆盖率对软件测试有非常重要的作用,下列关于覆盖率说法正确的是______。
(分数:
1.00)
A.覆盖率是用于度量测试完整性的一个手段,覆盖率可以分为逻辑覆盖和功能覆盖两种 √
B.为了测试的完整性,我们在测试时通常要针对所有的覆盖率指标进行测试
C.路径覆盖是最强的覆盖,故达到路径覆盖的测试用例一定满足判定/条件覆盖
D.为了测试更充分,我们通常要求测试用例能达到100%的覆盖率
解析:
34.如果一个判定中的复合条件表达式为(A>1)or(B<=3),则为了达到100%的判定覆盖率,至少需要设计多少个测试用例______。
(分数:
1.00)
A.1个
B.2个 √
C.3个
D.4个
解析:
35.路径覆盖必定也满足______。
(分数:
1.00)
A.语句覆盖 √
B.条件覆盖
C.判定覆盖
D.条件组合覆盖
解析:
36.以下关于逻辑覆盖的叙述中正确的是______。
(分数:
1.00)
A.对所有代码达到100%的语句覆盖率是不现实的
B.测试用例满足条件覆盖则必定满足判定覆盖
C.语句覆盖是测试完整性方面很好的度量方法
D.条件/判定覆盖是一个比判定覆盖和条件覆盖更强的覆盖 √
解析:
37.下列语句中既可以作为定义节点,同时还可以作为使用节点的是______。
(分数:
1.00)
A.输入语句
B.输出语句
C.赋值语句 √
D.条件语句
解析:
38.下列几种逻辑覆盖标准中,设计足够的测试用例,运行被测程序,使得程序中所有可能的路径至少执行一次,称为______。
(分数:
1.00)
A.判定覆盖
B.条件覆盖
C.语句覆盖
D.路径覆盖 √
解析:
39.程序流程如下图所示,要覆盖程序中所有可能的路径,所需测试用例数至少是______。
(分数:
1.00)
A.3个
B.5个
C.15个 √
D.30个
解析:
二、论述题(总题数:
7,分数:
69.00)
已知C源程序如下:
/*Inputtoday"sdate,outputtomorrow"sdate*/
/*version2*/
#include<stdio.h>
structydate
{intday;intmonth;intyear;};
intleap(structydated)
{if((d.year%4=0&&d.year%100!
=0)||(d.year%400==0))
return1;
else
return0;
}
intnumdays(structydated)
{intday;
staticintdaytab[]=
{31,28,31,30,31,30,31,31,30,31,30,31};
if(leap(d)&&d.month==2)
day=29;
else
day=daytab[d.month-1];
returnday;
}
intmain(void)
{structydatetoday,tomorrow;
printf("formatofdateis:
year,month,day
输入的年、月、日之间应用逗号隔开/n");
printf("todayis:
");
scanf("%d,%d,%d",&today.year,&today.month,&today.day);
while(0>=today.year||today.year>65535||0>=today.month||today.month>12)||0>=today.day||today.day>numdays(today))
{printf("inputdateerror!
reentertheday!
/n");
printf("todayis:
");
scanf("%d,%d,%d",&today.year,&today.month,&today.day);
}
if(today.day!
=numdays(today))
{tomorrow.year=today.year;
tomorrow.month=today.month;
tomorrow.day=today.day+1;
}
elseif(today.month==12)
{tomorrow.year=today.year+1;
tomorrow.month=1;
tomorrow.day=1;
}
else
{tomorrow.year=today.year;
tomorrow.month=today.month+1;
tomorrow.day=1;
}
printf("tomorrowis:
%d,%d,%d/n/n",
tomorrow.year,tomorrow.month,tomorrow.day);
}(分数:
10.00)
(1).画出程序中所有函数的控制流程图。
(分数:
5.00)
__________________________________________________________________________________________
正确答案:
()
解析:
函数leap的流程图如下:
函数numdays的流程图如下左图所示。
main函数的流程图如下右图所示(语句的具体内容已略去)。
(2).设计一组测试用例,使该程序所有函数的语句覆盖率和分支覆盖率均能达到100%。
如果认为该程序的语句或分支覆盖率无法达到100%,则说明为什么。
(分数:
5.00)
__________________________________________________________________________________________
正确答案:
()
解析:
本题的程序用来打印输入日期的第二天日期,只要根据程序中的判断语句设计出相关的测试用例,就能使得所有函数的语句覆盖率和分支覆盖率均能达到100%。
为了满足leap函数的语句覆盖率和分支覆盖率均能达到100%,应当设置两个测试用例,其中一个是闰年,一个不是,在这里可以取2008年和2007年。
由于numdays函数的判定语句是对leap的函数值进行判定,满足了leap的覆盖率要求,就能够满足numdays的覆盖率要求。
对于main函数中的while语句,根据流程图,先使判断部分为1,然后为0,这样就可以达到覆盖要求。
对于while语句之后的if...elseif...else语句,只要能够使每个分支都执行一遍,就能达到覆盖要求。
根据以上分析,设计测试用例如下:
用例编号
年
月
日
leap
numdays
while
if...elseif...else
输出结果
1
2008
2
30
1
29
1
error
2
2007
12
31
0
30
0
month=12
2008.1.1
3
6
10
31
0
31
0
today=
numdays
6.11.1
4
804
4
17
1
30
0
today!
=
numdays
804.4.18
注意,这里的第1、2个用例使得leap函数中的return1和return0都能执行一遍,同时numdays函数中的if...else结构两个分支也都能得到执行;第1个用例也能够使while循环体能够得到执行;第2、3、4用例3个测试用例刚好使main中的if...elseif...else3个分支都执行一遍。
已知C源程序如下:
#include<stdio.h>
#include<string.h>
voidreverse(chars[]){
intc,i,j;
for(i=0,j=strlen(s)-1;i<j;i++,j++){
c=s[i];
s[i]=s[j];
s[j]=c;
}
}
voidgetHex(intnumber,chars[]){
intI;
i=0;
while(number>0){
if(number%16<10)
s[i++]=number%16+"0";
else
switch(number%16){
case10:
s[i++]="A";break;
case11:
s[i++]="B";break;
case12:
s[i++]="C";break;
case13:
s[i++]="D";break;
case14:
s[i++]="E";break;
case15:
s[i++]="F";break;
default:
printf("Error");break;
}
number/=16;
}
s[i]="/0";
reverse(s);
}
intmsin(){
unsignedintnumber;
inti=0;
chars[50];
printf("%s","pleaseinputnumber:
/n");
scanf("%d",&number);
getHex(number,s);
i=0;
while(s[i])
printf("%c",s[i++]);
return0;
}(分数:
10.00)
(1).画出程序中所有函数的控制流程图。
(分数:
5.00)
__________________________________________________________________________________________
正确答案:
()
解析:
流程图
①voidreverse(chars[])的流程图如下图所示。
@voidgetHex(intnumber,chars[])的流程图如下图所示。
③intmain()的流程图如下图所示。
(2).设计一组测试用例,使该程序所有函数的语句覆盖率和分支覆盖率均能达到100%。
如果认为该程序的语句覆盖率或分支率无法达到100%,则说明为什么。
(分数:
5.00)
__________________________________________________________________________________________
正确答案:
()
解析:
设计测试用例
①输入0,输出0。
②输入2,输出2。
③输入26,输出1A。
④输入27,输出1B。
⑤输入28,输出1C。
⑥输入29,输出1D。
⑦输入30,输出1E。
⑧输入31,输出1F。
⑨输入20P,输出错误。
语句覆盖率无法达到100%,因为main()函数中的return0语句永远无法执行。
已知C源程序如下:
/*一个使用结构体数组的简单地址列表*/
#include<stdion.h>
#include<stdlib.h>
defineMAX4
structaddr{
charname[30];
charstreet[40];
charcity[20];
unsignedlongintzip;
}addr_list[MAX];
voidinit_list(void),enter(void);
voiddeleteAddr(void),list(void);
intmenu_sele
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 代码 检查 评审 覆盖率 测试