白盒测试上机练习.docx
- 文档编号:23579852
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:16
- 大小:142.65KB
白盒测试上机练习.docx
《白盒测试上机练习.docx》由会员分享,可在线阅读,更多相关《白盒测试上机练习.docx(16页珍藏版)》请在冰豆网上搜索。
白盒测试上机练习
白盒测试课程练习
一、判断分析题
1.语句覆盖是最弱的逻辑覆盖。
(√)
2.语句覆盖是最强的逻辑覆盖。
(×)
3.判定覆盖不一定包含条件覆盖。
(√)
4.条件覆盖不一定包含判定覆盖.(√)
5.判定/条件覆盖能同时满足判定、条件两种覆盖标准.(√)
6.判定/条件覆盖指满足判定覆盖标准或条件覆盖标准。
(×)
7.DD-路径图是一种压缩图。
(√)
8.详细设计的目的是为软件结构图中的每一个模块确定使用的算法和块内数据结构,并用某种选定的表达工具给出清晰的描述。
(√)
9.尽量用公共过程或子程序去代替重复的代码段。
(√)
10.对于连锁型分支结构,若有n个判定语句,则有2n条路径。
(√)
11.尽量采用复合的条件测试,以避免嵌套的分支结构。
(×)
12.GOTO语句概念简单,使用方便,在某些情况下,保留GOTO语句反能使写出的程序更加简洁.(√)
二、简答题
1.请试着比较一下黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别与联系。
软件的黑盒测试意味着测试要在软件的接口处进行。
这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。
因此黑盒测试又叫功能测试或数据驱动测试.黑盒测试主要是为了发现以下几类错误:
1、是否有不正确或遗漏的功能?
2、在接口上,输入是否能正确的接受?
能否输出正确的结果?
3、是否有数据结构错误或外部信息(例如数据文件)访问错误?
4、性能上是否能够满足要求?
5、是否有初始化或终止性错误?
白盒测试:
已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查。
软件的白盒测试是对软件的过程性细节做细致的检查。
这种方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。
通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。
因此白盒测试又称为结构测试或逻辑驱动测试。
白盒测试主要是想对程序模块进行如下检查:
1、对程序模块的所有独立的执行路径至少测试一遍。
2、对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测一遍。
3、在循环的边界和运行的界限内执行循环体。
4、测试内部数据结构的有效性,等等。
单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确.通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。
单元测试是由程序员自己来完成,最终受益的也是程序员自己。
可以这么说,程序员有责任编写功能代码,同时也就有责任为自己的代码编写单元测试。
执行单元测试,就是为了证明这段代码的行为和我们期望的一致。
集成测试(也叫组装测试,联合测试)是单元测试的逻辑扩展。
它的最简单的形式是:
两个已经测试过的单元组合成一个组件,并且测试它们之间的接口。
从这一层意义上讲,组件是指多个单元的集成聚合.在现实方案中,许多单元组合成组件,而这些组件又聚合成程序的更大部分。
方法是测试片段的组合,并最终扩展进程,将您的模块与其他组的模块一起测试。
最后,将构成进程的所有模块一起测试.
系统测试是将经过测试的子系统装配成一个完整系统来测试。
它是检验系统是否确实能提供系统方案说明书中指定功能的有效方法。
(常见的联调测试)
系统测试的目的是对最终软件系统进行全面的测试,确保最终软件系统满足产品需求并且遵循系统设计。
验收测试是部署软件之前的最后一个测试操作。
验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务.
验收测试是向未来的用户表明系统能够像预定要求那样工作。
经集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,接着就应该进一步验证软件的有效性,这就是验收测试的任务,即软件的功能和性能如同用户所合理期待的那样。
2.什么是白盒测试?
白盒测试主要采用的技术有哪些?
白盒测试:
测试者了解被测程序的内部结构和处理过程,对程序的所有逻辑路径进行测试,在不同点检查程序状态,确定实际状态与预期状态是否一致。
白盒测试主要采用的技术有:
路径测试技术和事务处理流程技术,对包含有大量逻辑判断或条件组合的程序采用基于逻辑的测试技术。
3.白盒测试有那几种方法?
并简单描述各种方法的特点.
白盒测试的测试方法总体上分为静态方法和动态方法两大类。
白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、Z路径覆盖、程序变异。
1。
静态分析法
是一种不通过执行程序而进行测试的技术。
静态分析的关键功能是检查软件的表示和描述是否一致,没有冲突或者没有歧义。
2。
动态分析法
的主要特点是当软件系统在模拟的或真实的环境中执行之前、之中和之后,对软件系统行为的分析。
动态分析包含了程序在受控的环境下使用特定的期望结果进行正式的运行。
它显示了一个系统在检查状态下是正确还是不正确。
在动态分析技术中,最重要的技术是路径和分支测试。
下面要介绍的六种覆盖测试方法属于动态分析方法.
4.举例说明结构性测试覆盖指标C0,C1,C1P,CMCC的区别.
答:
结构性测试覆盖指标C0:
所有语句。
C1:
所有DD-路径(判断分支)
C1P:
所有判断的每种分支
CMCC:
多条件覆盖
5.常用的逻辑覆盖测试方法有哪几种?
并简单描述各种方法的目的。
1)、语句覆盖。
就是选择足够的测试用例,使程序中的每个可执行语句至少执行一次.
2)、判定覆盖.就是执行足够的测试用例,使得程序中的每个判定的”true”和"false”值都至少执行一次,这种测试也称为“分支测试"。
3)、条件覆盖。
执行足够的测试用例,使程序每个判定中的每个条件的”true"和”false"值至少执行一次。
4)、判定/条件覆盖。
执行足够的测试用例,使得判定中每个条件的所有可能至少出现一次,同时每个判定本身的判定结果也至少出现一次。
5)、条件组合覆盖。
执行足够的测试用例,使得每个判定中条件的各种可能组合至少出现一次。
6)、路径覆盖。
执行足够的测试用例,要求覆盖程序中所有可能的路径
6.逻辑覆盖中几种主要覆盖的含义?
举例说明?
白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。
逻辑覆盖包含多种:
语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖和路径覆盖。
语句覆盖:
就是设计若干个测试用例,运行被测程序,使得每一可执行语句至少执行一次。
这里的“若干个”,意味着使用测试用例越少越好。
例如上边的Coverage类代码,从patha到pathc再到pathe的路径就是所有可执行的语句路径,所以选择pathace路径设计测试用例即可覆盖所有可执行语句。
判定覆盖:
有时也称分支覆盖,就是指设计若干测试用例,运行被测程序,使得每个判定的取真分支和取假分支至少经历一次。
例如上边的Coverage类代码,pathace,pathabd,pathabe,pathacd四条路径均是符合判定覆盖要求的路径。
条件覆盖:
设计足够多的测试用例,使得每一判定语句中每个逻辑条件的可能取值至少满足一次。
例如上边的Coverage类代码,判定语句有两个,分别是第3行和第8行代码。
根据条件覆盖的定义,则应考虑“(A〉1andB==0)"和“(A==2orX〉1)”两个表达式中的变量取值。
判定条件覆盖:
设计足够多的测试用例,使得判定中的每个条件的所有可能(真/假)至少出现一次,并且每个判定本身的判定结果也至少出现一次。
例如上边的Coverage类代码,不仅考虑到pathace,pathabd,pathabe,pathacd四条分支路径(判定覆盖),也考虑到了“(A〉1andB==0)”和“(A==2orX〉1)”两个条件中的每个表达式的取值(条件覆盖)。
条件组合覆盖:
也称多条件覆盖,设计足够多的测试用例,使得每个判定中条件的各种可能组合都至少出现一次(以数轴形式划分区域,提取交集,建立最少的测试用例)。
例如上边的Coverage类中第8行“if(A==2orX〉1)”代码,所有可能的条件组合为:
“A==2,X>1”、“A==2,X〈=1"和“A!
=2,X>1”三种。
在条件覆盖中仅需考虑到这三种的一种即可,而在条件组合覆盖中需要都考虑到。
路径覆盖:
路径测试就是设计足够的测试用例,覆盖程序中所有可能的路径。
路径覆盖是覆盖率最高的一种覆盖技术。
7.逻辑覆盖中几种主要覆盖的含义?
举例说明?
白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。
逻辑覆盖包含多种:
语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖和路径覆盖。
语句覆盖:
就是设计若干个测试用例,运行被测程序,使得每一可执行语句至少执行一次。
这里的“若干个”,意味着使用测试用例越少越好。
例如上边的Coverage类代码,从patha到pathc再到pathe的路径就是所有可执行的语句路径,所以选择pathace路径设计测试用例即可覆盖所有可执行语句。
判定覆盖:
有时也称分支覆盖,就是指设计若干测试用例,运行被测程序,使得每个判定的取真分支和取假分支至少经历一次。
例如上边的Coverage类代码,pathace,pathabd,pathabe,pathacd四条路径均是符合判定覆盖要求的路径.
条件覆盖:
设计足够多的测试用例,使得每一判定语句中每个逻辑条件的可能取值至少满足一次。
例如上边的Coverage类代码,判定语句有两个,分别是第3行和第8行代码.根据条件覆盖的定义,则应考虑“(A〉1andB==0)”和“(A==2orX>1)"两个表达式中的变量取值。
判定条件覆盖:
设计足够多的测试用例,使得判定中的每个条件的所有可能(真/假)至少出现一次,并且每个判定本身的判定结果也至少出现一次.
例如上边的Coverage类代码,不仅考虑到pathace,pathabd,pathabe,pathacd四条分支路径(判定覆盖),也考虑到了“(A>1andB==0)”和“(A==2orX>1)”两个条件中的每个表达式的取值(条件覆盖)。
条件组合覆盖:
也称多条件覆盖,设计足够多的测试用例,使得每个判定中条件的各种可能组合都至少出现一次(以数轴形式划分区域,提取交集,建立最少的测试用例)。
例如上边的Coverage类中第8行“if(A==2orX〉1)”代码,所有可能的条件组合为:
“A==2,X>1”、“A==2,X〈=1”和“A!
=2,X>1”三种。
在条件覆盖中仅需考虑到这三种的一种即可,而在条件组合覆盖中需要都考虑到。
路径覆盖:
路径测试就是设计足够的测试用例,覆盖程序中所有可能的路径。
路径覆盖是覆盖率最高的一种覆盖技术。
8.什么是DD-路径?
什么是MM-路径?
DD-路径和MM—路径的区别与联系.
DD-路径是程序图中的一条链,使得:
情况1:
由一个节点组成,内度=0。
情况2:
由一个节点组成,外度=0。
情况3:
由一个节点组成,内度≥2或外度≥2。
情况4:
由一个节点组成,内度=1并且外度=1.情况5:
长度≥1的最大链.使用数据流测试方
MM—路径是:
图G的圈数由V(G)=e—n+p给定,其中:
e是G中的边数。
n是G中的节点数。
p是G中的组件数。
V(G)是图中不同区域的个数.
DD-路径和MM-路径没有简单的对应关系.
可能互相包容,更有可能部分重叠。
MM—路径是DD—路径的交叉。
9.使用数据流测试方法(定义/使用测试)设计佣金问题中变量totalStocks的测试用例。
答:
三、用例设计题
1.请用逻辑覆盖法对下面的java代码段进行测试。
publiccharfunction(intx,inty){
chart;
if((x>=90)&&(y>=90)){
t=’A’;
}else{
if((x+y)>=165){
t='B';
}else{
t='C';
}
}
returnt;
}
2.使用逻辑覆盖测试方法测试以下程序段:
voidDoWork(intx,inty,intz) {
1 intk=0,j=0;
2 if((x〉3)&&(z<10)){
4 k=x*y—1;
5 j=sqrt(k);
6 }
7 if((x==4)||(y〉5)){
8 j=x*y+10;
9}
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=4y=5 z=9执行路径:
1 2 34 5 6 7 8 9 10 11 2:
x=5 y=6 z=11执行路径:
1 2 7 9 10 11
3.以下代码由java语言书写,用于判断闰年。
请按要求回答问题。
publicbooleanisLeap(intyear){
booleanleap;
if(year%4==0){
if(year%100==0){
if(year%400==0){
leap=true;
}else{
leap=false;
}
}else{
leap=true;
}
}else{
leap=false;
}
returnleap;
}
(1)请画出以上代码的控制流图
(1)请计算上述控制流图的圈复杂度V(G)(独立线性路径数)
V(G)=8-5+1=4
独立线性路径数:
4
(2)假设输入的取值范围是0〈year〈2010,请使用基本路径测试法为变量year设计测试用例,使其满足基本路径覆盖的要求。
圈复杂度的计算方法很简单,计算公式为:
V(G)=e—n+2.其中,e表示控制流图中边的数量,n表示控制流图中节点的数量.其实,圈复杂度的计算还有更直观的方法,因为圈复杂度所反映的是“判定条件”的数量,所以圈复杂度实际上就是等于判定节点的数量再加上1,也即控制流图的区域数,对应的计算公式为:
V(G)=区域数=判定节点数+1.
V(G)=3+1=4 或V(G)=5-3+2=4
4.请用逻辑覆盖和基路径测试方法对下面的java代码进行测试.代码的功能是:
用折半查找法在元素呈升序排列的数组中查找值为key的元素.
publicintbinSearch(intarray[],intkey){
intmid,low,high;
low=0;
high=array.length-1;
while(low<=high){
mid=(low+high)/2;
if(key==array[mid]){
returnmid;
}elseif(key high=mid—1; }else{ low=mid+1; } } return—1; } 5.设计判别一个整数x(x≥2)是否为素数的程序,并设计测试用例满足条件覆盖和基本路径覆盖。 测试条件 测试数据 期待结果 小于2的整数 -12 输出错误信息 素数 67 素数 非素数 90 非素数 6.请用逻辑覆盖和基路径测试方法对下面的java代码进行测试。 代码的功能是: 输入三个数,判断它们是否为有效的日期(其中年小于2050). publicbooleanisDate(intyear,intmonth,intday){ booleanflag=true; if((year〈0)||(year>2050)){ flag=false; } if((month〈1)||(month〉12)){ flag=false; }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)){ flag=false; } break; case2: if(isLeap(year)){ if((day〉29)||(day<1)){ flag=false; } }else{ if((day>28)||(day〈1)){ flag=false; } } break; default: break; } } returnflag; } } 7.在三角形计算中,要求三角型的三个边长: A、B和C。 当三边不可能构成三角形时提示错误,可构成三角形时计算三角形周长。 若是等腰三角形打印“等腰三角形”,若是等边三角形,则提示“等边三角形”。 画出程序流程图、控制流程图、计算圈复杂度V(g),找出基本测试路径. 程序流程图: 控制流程图 计算圈复杂度V(g)=10-8+1=3 基本测试路径: path1: 1、2、3、5 Path2: 1、2、3、6、7 Path2: 1、2、3、6、8 Path2: 1、2、4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 测试 上机 练习