1407040248_周立群_白盒测试试题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二、简答题
1.请试着比较一下黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别与联系。
答:黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查。单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。集成测试(也叫组装测试,联合测试)是单元测试的逻辑扩展。它的最简单的形式是:两个已经测试过的单元组合成一个组件,并且测试它们之间的接口。从这一层意义上讲,组件是指多个单元的集成聚合。在现实方案中,许多单元组合成组件,而这些组件又聚合成程序的更大部分。方法是测试片段的组合,并最终扩展进程,将您的模块与其他组的模块一起测试。最后,将构成进程的所有模块一起测试。
系统测试是将经过测试的子系统装配成一个完整系统来测试。它是检验系统是否确实能提供系统方案说明书中指定功能的有效方法。(常见的联调测试)系统测试的目的是对最终软件系统进行全面的测试,确保最终软件系统满足产品需求并且遵循系统设计。验收测试是部署软件之前的最后一个测试操作。验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务。
例如上边的Coverage类代码,不仅考虑到path ace,path abd,path abe,path acd四条分支路径(判定覆盖),也考虑到了“(A>1 and B==0)”和“(A==2 or X>1)”两个条件中的每个表达式的取值(条件覆盖)。
条件组合覆盖:也称多条件覆盖,设计足够多的测试用例,使得每个判定中条件的各种可能组合都至少出现一次(以数轴形式划分区域,提取交集,建立最少的测试用例)。
7.什么是DD-路径?什么是MM-路径?DD-路径和MM-路径的区别与联系。
答:DD-路径是程序图中的一条链,使得:情况1:由一个节点组成,内度=0。情况2:由一个节点组成,外度=0。情况3:由一个节点组成,内度≥2或外度≥2。情况4:由一个节点组成,内度=1并且外度=1。情况5:长度≥1的最大链。使用数据流测试方
publicbooleanisDate(intyear,intmonth,intday) {
booleanflag =true;
if((year < 0) || (year > 2050)) {
flag =false;
}
if((month < 1) || (month > 12)) {
flag =false;
值至少执行一次。
4)、判定/条件覆盖。执行足够的测试用例,使得判定中每个条件的所有可能至少出现一次,同时每个判定本身的判定结果也至少出现一次。
5)、条件组合覆盖。执行足够的测试用例,使得每个判定中条件的各种可能组合至少出现一次。
6)、路径覆盖。执行足够的测试用例,要求覆盖程序中所有可能的路径
6.逻辑覆盖中几种主要覆盖的含义?举例说明?
flag =false;
}
break;
case2:
if(isLeap(year)) {
if((day > 29) || (day < 1)) {
flag =false;
}
}else{
if((day > 28) || (day < 1)) {
leap =false;
}
}else{
leap =true;
}
}else{
leap =false;
}
returnleap;
}
(1)请画出以上代码的控制流图
答:
(2)请计算上述控制流图的圈复杂度V(G)(独立线性路径数)
答:V(G)=8-5+1=4,独立线性路径数:4
(3)假设输入的取值范围是0 < year < 2010,请使用基本路径测试法为变量year设计测试用例,使其满足基本路径覆盖的要求。
while(low <= high) {
mid = (low + high) / 2;
if(key == array [mid]) {
returnmid;
}elseif(key < array[mid]) {
high = mid - 1;
}else{
low = mid + 1;
}
}
return-1;
三、用例设计题
1.请用逻辑覆盖法对下面的java代码段进行测试。
publiccharfunction(intx,inty) {
chart;
if((x >= 90) && (y >= 90)) {
t = 'A';
}else{
if((x + y) >= 165) {
t = 'B';
}else{
t = 'C';
3.以下代码由java语言书写,用于判断闰年。请按要求回答问题。
publicbooleanisLeap(intyear) {
booleanleap;
if(year % 4 == 0) {
if(year % 100 == 0) {
if(year % 400 == 0) {
leap =true;
}else{
例如上边的Coverage类代码,判定语句有两个,分别是第3行和第8行代码。根据条件覆盖的定义,则应考虑“(A>1 and B==0)”和“(A==2 or X>1)”两个表达式中的变量取值。判定条件覆盖:设计足够多的测试用例,使得判定中的每个条件的所有可能(真/假)至少出现一次,并且每个判定本身的判定结果也至少出现一次。
例如上边的Coverage类中第8行“if(A==2 or X>1)”代码,所有可能的条件组合为:“A==2,X>1”、“A==2,X<=1”和“A!=2,X>1”三种。在条件覆盖中仅需考虑到这三种的一种即可,而在条件组合覆盖中需要都考虑到。
路径覆盖:路径测试就是设计足够的测试用例,覆盖程序中所有可能的路径。路径覆盖是覆盖率最高的一种覆盖技术。
答:V(G)=e-n+2。其中,e表示控制流图中边的数量,n表示控制流图中节点的数量。其实,圈复杂度的计算还有更直观的方法,因为圈复杂度所反映的是“判定条件”的数量,所以圈复杂度实际上就是等于判定节点的数量再加上1,也即控制流图的区域数,对应的公式为:V(G)=区域数=判定节点数+1。V(G)=3+1=4或V(G)=5=3+2=4
}
}
returnt;
}
2.使用逻辑覆盖测试方法测试以下程序段:
voidDoWork (intx,inty,intz) {
1intk=0,j=0;
2if( (x>3)&&(z<10) ){
4 k=x*y-1;
5 j=sqrt(k);
6 }
7if((x==4)||(y>5)){
8 j=x*y+10;
9 }
}else{
switch(month) {
case1:
case3:
case5:
case7:
case8:
case10:
case12:
if((day > 31) || (day < 1)) {
flag =false;
}
break;
case4:
case6:
case9:
case11:
if((day > 30) || (day < 1)) {
MM-路径是:图G的圈数由V(G)=e-n+p给定,其中:e是G中的边数。n是G中的节点数。p是G中的组件数。V(G)是图中不同区域的个数。DD-路径和MM-路径没有简单的对应关系。可能互相包容,更有可能部分重叠。MM-路径是DD-路径的交叉。
8.使用数据流测试方法(定义/使用测试)设计佣金问题中变量totalStocks的测试用例。
}
5.设计判别一个整数x(x≥2)是否为素数的程序,并设计测试用例满足条件覆盖和基本路径覆盖。
答:
测试条件
测试数据
期待结果
小于2的整数
-12
输出错误信息
素数
67
素数
非素数
90
非素数
6.请用逻辑覆盖和基路径测试方法对下面的java代码进行测试。代码的功能是:输入三个数,判断它们是否为有效的日期(其中年小于2050)。
10 j=j%3;
11 }
说明:程序段中每行开头的数字(1~10)是对每条语句的编号。
(1) 画出程序的控制流图(用题中给出的语句编号表示)。
(2)分别以语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖方法设计测试用例,并写出每个测试用例的执行路径(用题中给出的语句编号表示)。
答:语句覆盖x=4y=5 z=9执行路径:1 2 34 5 6 7 8 9 10 11判定覆盖取:1:x=4y=5 z=9执行路径:1 2 34 5 6 7 8 9 10 11 2:x=4 y=5 z=9执行路径:1 2 7 9 10 11条件覆盖取:1:x=4 y=5 z=9执行路径:1 2 3 4 5 6 7 8 910 11 2:x=5 y=6 z=11执行路径:1 2 7 9 10 11路径覆盖取:1:x=5 y=6 z=11执行路径:1 2 34 5 6 7 8 9 10 11 2:x=5 y=6 z=11执行路径:1 2 7 9 10 11
2.什么是白盒测试?白盒测试主要采用的技术有哪些?
答:白盒测试是通过对程序内部结构的分析、检测来寻找问题。词法分析与语法分析,静态错误分析,程序插桩技术。
3.白盒测试有那几种方法?并简单描述各种方法的特点。
答:白盒测试方法分为两大类:静态测试方法和动态测试方法。
静态测试方法:检查软件的表示和描述是否一致,没有冲突或者没有歧义。
动态测试方法:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、路径覆盖。
4.举例说明结构性测试覆盖指标C0,C1,C1P,CMCC的区别。
答:结构性测试覆盖指标C0:所有语句。
C1:所有DD-路径(判断分支)
C1P:所有判断的每种分支
CMCC:多条件覆盖
5.常用的逻辑覆盖测试方法有哪几种?并简单描述各种方法的目的。
判定覆盖:有时也称分支覆盖,就是指设计若干测试用例,运行被测程序,使得每个判定的取真分支和取假分支至少经历一次。
例如上边的Coverage类代码,path ace,path abd,path abe,path acd四条路径均是符合判定覆盖要求的路径。
条件覆盖:设计足够多的测试用例,使得每一判定语句中每个逻辑条件的可能取值至少满足一次。
8.详细设计的目的是为软件结构图中的每一个模块确定使用的算法和块内数据结构,并用某种选定的表达工具给出清晰的描述。(X)
9.尽量用公共过程或子程序去代替重复的代码段。(X)
10.对于连锁型分支结构,若有n个判定语句,则有2n条路径。(√)
11.尽量采用复合的条件测试,以避免嵌套的分支结构。(√)
12.GOTO语句概念简单,使用方便,在某些情况下,保留GOTO语句反能使写出的程序更加简洁。(√)
答:白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。逻辑覆盖包含多种:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖和路径覆盖。
语句覆盖:就是设计若干个测试用例,运行被测程序,使得每一可执行语句至少执行一次。这里的“若干个”,意味着使用测试用例越少越好。
例如上边的Coverage类代码,从path a到path c再到path e的路径就是所有可执行的语句路径,所以选择path ace路径设计测试用例即可覆盖所有可执行语句。
第五章 白盒测试
一、判断分析题
1.语句覆盖是最弱的逻辑覆盖。(√)
2.语句覆盖是最强的逻辑覆盖。(X)Fra Baidu bibliotek
3.判定覆盖不一定包含条件覆盖。(X)
4.条件覆盖不一定包含判定覆盖。(√)
5.判定/条件覆盖能同时满足判定、条件两种覆盖标准。(√)
6.判定/条件覆盖指满足判定覆盖标准或条件覆盖标准。(X)
7.DD-路径图是一种压缩图。(X)
4.请用逻辑覆盖和基路径测试方法对下面的java代码进行测试。代码的功能是:用折半查找法在元素呈升序排列的数组中查找值为key的元素。
publicintbinSearch(intarray[],intkey) {
intmid, low, high;
low = 0;
high = array.length - 1;
答:1)、语句覆盖。就是选择足够的测试用例,使程序中的每个可执行语句至少执行一次。
2)、判定覆盖。就是执行足够的测试用例,使得程序中的每个判定的"true"和"false"值都至少执行一次,这种测试也称为“分支测试”。
3)、条件覆盖。执行足够的测试用例,使程序每个判定中的每个条件的"true"和"false"
1.请试着比较一下黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别与联系。
答:黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查。单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。集成测试(也叫组装测试,联合测试)是单元测试的逻辑扩展。它的最简单的形式是:两个已经测试过的单元组合成一个组件,并且测试它们之间的接口。从这一层意义上讲,组件是指多个单元的集成聚合。在现实方案中,许多单元组合成组件,而这些组件又聚合成程序的更大部分。方法是测试片段的组合,并最终扩展进程,将您的模块与其他组的模块一起测试。最后,将构成进程的所有模块一起测试。
系统测试是将经过测试的子系统装配成一个完整系统来测试。它是检验系统是否确实能提供系统方案说明书中指定功能的有效方法。(常见的联调测试)系统测试的目的是对最终软件系统进行全面的测试,确保最终软件系统满足产品需求并且遵循系统设计。验收测试是部署软件之前的最后一个测试操作。验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务。
例如上边的Coverage类代码,不仅考虑到path ace,path abd,path abe,path acd四条分支路径(判定覆盖),也考虑到了“(A>1 and B==0)”和“(A==2 or X>1)”两个条件中的每个表达式的取值(条件覆盖)。
条件组合覆盖:也称多条件覆盖,设计足够多的测试用例,使得每个判定中条件的各种可能组合都至少出现一次(以数轴形式划分区域,提取交集,建立最少的测试用例)。
7.什么是DD-路径?什么是MM-路径?DD-路径和MM-路径的区别与联系。
答:DD-路径是程序图中的一条链,使得:情况1:由一个节点组成,内度=0。情况2:由一个节点组成,外度=0。情况3:由一个节点组成,内度≥2或外度≥2。情况4:由一个节点组成,内度=1并且外度=1。情况5:长度≥1的最大链。使用数据流测试方
publicbooleanisDate(intyear,intmonth,intday) {
booleanflag =true;
if((year < 0) || (year > 2050)) {
flag =false;
}
if((month < 1) || (month > 12)) {
flag =false;
值至少执行一次。
4)、判定/条件覆盖。执行足够的测试用例,使得判定中每个条件的所有可能至少出现一次,同时每个判定本身的判定结果也至少出现一次。
5)、条件组合覆盖。执行足够的测试用例,使得每个判定中条件的各种可能组合至少出现一次。
6)、路径覆盖。执行足够的测试用例,要求覆盖程序中所有可能的路径
6.逻辑覆盖中几种主要覆盖的含义?举例说明?
flag =false;
}
break;
case2:
if(isLeap(year)) {
if((day > 29) || (day < 1)) {
flag =false;
}
}else{
if((day > 28) || (day < 1)) {
leap =false;
}
}else{
leap =true;
}
}else{
leap =false;
}
returnleap;
}
(1)请画出以上代码的控制流图
答:
(2)请计算上述控制流图的圈复杂度V(G)(独立线性路径数)
答:V(G)=8-5+1=4,独立线性路径数:4
(3)假设输入的取值范围是0 < year < 2010,请使用基本路径测试法为变量year设计测试用例,使其满足基本路径覆盖的要求。
while(low <= high) {
mid = (low + high) / 2;
if(key == array [mid]) {
returnmid;
}elseif(key < array[mid]) {
high = mid - 1;
}else{
low = mid + 1;
}
}
return-1;
三、用例设计题
1.请用逻辑覆盖法对下面的java代码段进行测试。
publiccharfunction(intx,inty) {
chart;
if((x >= 90) && (y >= 90)) {
t = 'A';
}else{
if((x + y) >= 165) {
t = 'B';
}else{
t = 'C';
3.以下代码由java语言书写,用于判断闰年。请按要求回答问题。
publicbooleanisLeap(intyear) {
booleanleap;
if(year % 4 == 0) {
if(year % 100 == 0) {
if(year % 400 == 0) {
leap =true;
}else{
例如上边的Coverage类代码,判定语句有两个,分别是第3行和第8行代码。根据条件覆盖的定义,则应考虑“(A>1 and B==0)”和“(A==2 or X>1)”两个表达式中的变量取值。判定条件覆盖:设计足够多的测试用例,使得判定中的每个条件的所有可能(真/假)至少出现一次,并且每个判定本身的判定结果也至少出现一次。
例如上边的Coverage类中第8行“if(A==2 or X>1)”代码,所有可能的条件组合为:“A==2,X>1”、“A==2,X<=1”和“A!=2,X>1”三种。在条件覆盖中仅需考虑到这三种的一种即可,而在条件组合覆盖中需要都考虑到。
路径覆盖:路径测试就是设计足够的测试用例,覆盖程序中所有可能的路径。路径覆盖是覆盖率最高的一种覆盖技术。
答:V(G)=e-n+2。其中,e表示控制流图中边的数量,n表示控制流图中节点的数量。其实,圈复杂度的计算还有更直观的方法,因为圈复杂度所反映的是“判定条件”的数量,所以圈复杂度实际上就是等于判定节点的数量再加上1,也即控制流图的区域数,对应的公式为:V(G)=区域数=判定节点数+1。V(G)=3+1=4或V(G)=5=3+2=4
}
}
returnt;
}
2.使用逻辑覆盖测试方法测试以下程序段:
voidDoWork (intx,inty,intz) {
1intk=0,j=0;
2if( (x>3)&&(z<10) ){
4 k=x*y-1;
5 j=sqrt(k);
6 }
7if((x==4)||(y>5)){
8 j=x*y+10;
9 }
}else{
switch(month) {
case1:
case3:
case5:
case7:
case8:
case10:
case12:
if((day > 31) || (day < 1)) {
flag =false;
}
break;
case4:
case6:
case9:
case11:
if((day > 30) || (day < 1)) {
MM-路径是:图G的圈数由V(G)=e-n+p给定,其中:e是G中的边数。n是G中的节点数。p是G中的组件数。V(G)是图中不同区域的个数。DD-路径和MM-路径没有简单的对应关系。可能互相包容,更有可能部分重叠。MM-路径是DD-路径的交叉。
8.使用数据流测试方法(定义/使用测试)设计佣金问题中变量totalStocks的测试用例。
}
5.设计判别一个整数x(x≥2)是否为素数的程序,并设计测试用例满足条件覆盖和基本路径覆盖。
答:
测试条件
测试数据
期待结果
小于2的整数
-12
输出错误信息
素数
67
素数
非素数
90
非素数
6.请用逻辑覆盖和基路径测试方法对下面的java代码进行测试。代码的功能是:输入三个数,判断它们是否为有效的日期(其中年小于2050)。
10 j=j%3;
11 }
说明:程序段中每行开头的数字(1~10)是对每条语句的编号。
(1) 画出程序的控制流图(用题中给出的语句编号表示)。
(2)分别以语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖方法设计测试用例,并写出每个测试用例的执行路径(用题中给出的语句编号表示)。
答:语句覆盖x=4y=5 z=9执行路径:1 2 34 5 6 7 8 9 10 11判定覆盖取:1:x=4y=5 z=9执行路径:1 2 34 5 6 7 8 9 10 11 2:x=4 y=5 z=9执行路径:1 2 7 9 10 11条件覆盖取:1:x=4 y=5 z=9执行路径:1 2 3 4 5 6 7 8 910 11 2:x=5 y=6 z=11执行路径:1 2 7 9 10 11路径覆盖取:1:x=5 y=6 z=11执行路径:1 2 34 5 6 7 8 9 10 11 2:x=5 y=6 z=11执行路径:1 2 7 9 10 11
2.什么是白盒测试?白盒测试主要采用的技术有哪些?
答:白盒测试是通过对程序内部结构的分析、检测来寻找问题。词法分析与语法分析,静态错误分析,程序插桩技术。
3.白盒测试有那几种方法?并简单描述各种方法的特点。
答:白盒测试方法分为两大类:静态测试方法和动态测试方法。
静态测试方法:检查软件的表示和描述是否一致,没有冲突或者没有歧义。
动态测试方法:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、路径覆盖。
4.举例说明结构性测试覆盖指标C0,C1,C1P,CMCC的区别。
答:结构性测试覆盖指标C0:所有语句。
C1:所有DD-路径(判断分支)
C1P:所有判断的每种分支
CMCC:多条件覆盖
5.常用的逻辑覆盖测试方法有哪几种?并简单描述各种方法的目的。
判定覆盖:有时也称分支覆盖,就是指设计若干测试用例,运行被测程序,使得每个判定的取真分支和取假分支至少经历一次。
例如上边的Coverage类代码,path ace,path abd,path abe,path acd四条路径均是符合判定覆盖要求的路径。
条件覆盖:设计足够多的测试用例,使得每一判定语句中每个逻辑条件的可能取值至少满足一次。
8.详细设计的目的是为软件结构图中的每一个模块确定使用的算法和块内数据结构,并用某种选定的表达工具给出清晰的描述。(X)
9.尽量用公共过程或子程序去代替重复的代码段。(X)
10.对于连锁型分支结构,若有n个判定语句,则有2n条路径。(√)
11.尽量采用复合的条件测试,以避免嵌套的分支结构。(√)
12.GOTO语句概念简单,使用方便,在某些情况下,保留GOTO语句反能使写出的程序更加简洁。(√)
答:白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。逻辑覆盖包含多种:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖和路径覆盖。
语句覆盖:就是设计若干个测试用例,运行被测程序,使得每一可执行语句至少执行一次。这里的“若干个”,意味着使用测试用例越少越好。
例如上边的Coverage类代码,从path a到path c再到path e的路径就是所有可执行的语句路径,所以选择path ace路径设计测试用例即可覆盖所有可执行语句。
第五章 白盒测试
一、判断分析题
1.语句覆盖是最弱的逻辑覆盖。(√)
2.语句覆盖是最强的逻辑覆盖。(X)Fra Baidu bibliotek
3.判定覆盖不一定包含条件覆盖。(X)
4.条件覆盖不一定包含判定覆盖。(√)
5.判定/条件覆盖能同时满足判定、条件两种覆盖标准。(√)
6.判定/条件覆盖指满足判定覆盖标准或条件覆盖标准。(X)
7.DD-路径图是一种压缩图。(X)
4.请用逻辑覆盖和基路径测试方法对下面的java代码进行测试。代码的功能是:用折半查找法在元素呈升序排列的数组中查找值为key的元素。
publicintbinSearch(intarray[],intkey) {
intmid, low, high;
low = 0;
high = array.length - 1;
答:1)、语句覆盖。就是选择足够的测试用例,使程序中的每个可执行语句至少执行一次。
2)、判定覆盖。就是执行足够的测试用例,使得程序中的每个判定的"true"和"false"值都至少执行一次,这种测试也称为“分支测试”。
3)、条件覆盖。执行足够的测试用例,使程序每个判定中的每个条件的"true"和"false"