软件测试-白盒测试用例练习题,DOC
软件测试-白盒测试用例练习题
白盒测试用例练习一、为以下所示的程序段设计一组测试用例,要求分别满足语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖,并画出相应的程序流程图。
void DoWork (int x,int y,int z) {int k=0,j=0; if ( (x>3)&&(z<10) ) { k=x*y-1;j=sqrt(k); //语句块1} if ( (x==4)||(y>5) ) {j=x*y+10;} //语句块2 j=j%3; //语句块3 } a Y cN b eYx>3 and x=4 ork=x*y-1 k=0Nd由这个流程图可以看出,该程序模块有4条不同的路径: P1:(a-c-e) P2:(a-c-d) P3:(a-b-e) P4:(a-b-d) 将里面的判定条件和过程记录如下: 判定条件M ={x>3 and z<10} 判定条件N={x=4 or y>5} 1、 语句覆盖测试用例输入输出判定M 的取值判定N 的取值覆盖路径x=4,z=5,y=8 k=31,j=0 TTP1(a-c-e) 2、判定覆盖p1和p4可以作为测试用例,其中p1作为取真的路径,p4作为取反的路径。
测试用例输入 输出 判定M 的取值判定N 的取值覆盖路径x=4,z=5,y=8k=31,j=0TTP1(a-c-e) x=2,z=11,y =5k=0,j=0FFP4(a-b-d)也可以让测试用例测试路径P2和P3。
相应的两组输入数据如下: 测试用例输输出判定M 的取判定N 的取覆盖路径j=j%3j=x*y+1入值值x=5,z=5,y= 4 k=19,j=sqrt(19)%3T F P2(a-c-d)x=4,z=11,y=6k=0,j=1 F T P3(a-b-e)3、条件覆盖对于M:x>3取真时T1,取假时F1;z<10取真时T2,取假时F2;对于N:x=4取真时T3,取假时F3;y>5取真时T4,取假时F4。
白盒和黑盒测试用例测试题目
一、问题:报表日期等价类划分和边界值分析设某公司要打印2001~2005年的
报表,其中报表日期为6位数字组成,其中,前4位为年份,后两位为月份。
二、请结合等价类方法给出getNumDaysInMonth(int month, int year)方法
的测试用例,其中getNumDaysInMonth方法根据给定的月份和年份返回该月份的总天数。
三、阅读下列说明,回答问题 1 至问题 3,将解答填入答题纸的对应栏内。
[说明]在 ERP(企业资源计划)系统中,“计划管理”模块的流程图如下:
[问题1]因果图法是功能测试案例设计方法中的一种,简述利用因果图导出测试用例需要经过哪几个步骤?
[问题2]根据题干中的流程图,利用因果图法,找出哪些是正确的输入条件,那些是正确的输出结果,将下列描述的字母编号填入表中。
a.可以进行销售发货管理
b.可用库存不满足销售需求(有可用库存)
c.可用库存不满足销售需求(无可用库存)
d.可用库存满足生产需求
e.可用库存不满足生产需求
f.可用库存不满足生产需求(无可用库存)
g.可以进行 MPS 运算
h.可用库存满足销售需求
i.生成主生产计划
j.生成计划采购单
k.生成计划生产定单
l.可以进行 MRP 运算
[问题3]下图画出“计划管理”模块的因果图。
请把问题2中列出的输入条件和输出结果的字母编号填入到空白框中相应的位置。
四、有一个在线购物的实例,用户进入一个在线购物网站进行购物,选购物品
后,进行在线购买,这时需要使用帐号登录,登录成功后,进行付钱交易,交易成功后,生成订购单,完成整个购物过程。
五、根据如下流程图,写出白盒测试测试用例。
软件测试练习题
软件测试练习题白盒测试单元测试学号姓名1.以程序内部的逻辑结构为基础的测试用例设计技术属于()。
A.灰盒测试B.数据测试C.黑盒测试D.白盒测试2.即使对程序的所有路径都进行了测试,程序也可能存在没能检查出来的缺陷,其原因可能是()。
A.程序可能会因为缺少某些路径而存在问题B.即使是穷举路径测试也不能保证程序符合其设计规格说明C.穷举路径测试也可能不会暴露数据敏感性错误D.以上全部3.下列关于测试方法的叙述中不正确的是()。
A.从某种角度上讲,白盒测试和黑盒测试都属于动态测试B.功能测试属于黑盒测试C.对功能的测试通常要考虑程序的内部结构D.结构测试属于白盒测试4.不需要运行程序,通过收集有关代码的结构信息来对程序进行的测试是()。
A.性能测试B.黑盒测试C.白盒测试D.静态分析5.在白盒测试中,程序员要运用自己的智力和程序理解力,深入到源程序中进行测试,这样的好处是()。
A.重点测试B.数据完整性和内部边界C.测试覆盖和控制流D.以上全部6.关注在一连串的测试中如何选择合适的程序或子程序路径来执行有效的检查,这种测试极有可能是()。
A.结构测试B.黑盒测试C.功能测试D.静态测试7.在覆盖准则中,最常用的是()。
A.语句覆盖B.条件覆盖C.分支覆盖D.以上全部8.大多数实际情况下,性能测试的实现方法是()。
A.黑盒测试B.白盒测试C.静态分析D.可靠性测试9.如果一个判定中的复合条件表达式为(A>1)or(B<=3),则为了达到100%的条件覆盖率,至少需要设计()个测试用例。
A.1B.2C.3D.410.下列逻辑覆盖中,最强的是()A.语句覆盖B.条件覆盖C.路径覆盖D.条件组合覆盖11.关于逻辑覆盖,说法错误的是()。
A.DDP(判定路径覆盖)是判定覆盖的一个变体B.满足条件覆盖也一定满足判定覆盖C.指令块覆盖属于语句覆盖D.若判定覆盖率达到100%,则语句覆盖率也达到100%。
软件测试用例测验题1
1单选在黑盒测试方法中,设计测试用例的主要根据是()3单选凭经验或直觉推测可能的错误,列出程序中可能有的错误和容易发生错误的特殊情况,选择测试用例的测试方法叫()4单选2元地铁票售票软件:投币2元时,按下“2元”按钮,弹出相应地铁票;投币5元,则弹出地铁票同时退还3元,若对该功能进行测试用例设计最宜选择哪种方法5单选黑盒测试技术,使用最广的用例设计技术是等值分析测试边界值分析测试错误推测法逻辑覆盖测试6单选既可以用于黑盒测试,也可以用于白盒测试的方法的是逻辑覆盖法边界值法基本路径法正交试验设计法7单选某购物中心电梯限坐15人。
在电梯中安装计数器来统计乘客数量。
如出现超出规定人数以外的任何情况,会有不同的警示音。
软件编写后进行边界值测试,应选取的边界值是:()1,15,16.1 1510,1515,208单选关于等价类划分法,下面说法不正确的是(9单选某系统对每个员工一年的出勤天数进行核算和存储(按每月22个工作日计算),使用文本框的模式进行填写,在此文本框的测试用例编写中使用了等价类。
下列关于等价类划分法,划分错误的是()无效等价类,出勤日>264无效等价类,出勤日<0有效等价类,0< =出勤日< =264有效等价类,0<出勤日<26410单选若一个通讯录最多可以输入100条记录,则下列哪组测试用例最优?分别输入1、50、100条记录分别输入0、1、50、99、100条记录分别输入0、1、99、100、101条记录分别输入0、1、50、99、100、101条记录11单诜对于功率大于50马力的机器、维修记录不全或已运行10年以上的机器,应优先维修单选处理。
根据这段话,使用判定表法设计测试用例,以下说法不正确的是()12单选以下不属于因果图约束中的输入约束的是()要求强制13单选因果图中,关系符号“V”代表的是(恒等14单选现有一个处理单价为1元的盒装饮料的自动售货机软件,若投入1元币,按下“可乐”、“雪碧”或“红茶”按钮,相应的饮料就送出来,若投入的是2元币,在送出饮料的同时还退还1元币。
白盒测试试题答案
先看以下代码:/** 白盒测试逻辑覆盖测试范例*/int logicExample(int x, int y){int magic=0;if(x>0 && y>0){magic = x+y+10; // 语句块1}else{magic = x+y-10; // 语句块2}if(magic < 0){magic = 0; // 语句块3}return magic; // 语句块4}解答:一般做白盒测试不会直接根据源代码,而是根据流程图来设计测试用例和编写测试代码,在没有设计文档时,要根据源代码画出流程图:做好了上面的准备工作,接下来就开始讲解六个逻辑覆盖标准:一、语句覆盖1、概念:设计足够多的测试用例,使得被测试程序中的每条可执行语句至少被执行一次。
在本例中,可执行语句是指语句块1到语句块4中的语句。
2、测试用例:{x=3, y=3}可以执行到语句块1和语句块4,所走的路径:a-b-e-f{x=-3, y=0}可以执行到语句块2、语句块3和语句块4,所走的路径:a-c-d-f这样,通过两个测试用例即达到了语句覆盖的标准,当然,测试用例(测试用例组)并不是唯一的。
3、测试的充分性:假设第一个判断语句if(x>0 && y>0)中的“&&”被程序员错误地写成了“||”,即if(x>0 || y>0),使用上面设计出来的一组测试用例来进行测试,仍然可以达到100%的语句覆盖,所以语句覆盖无法发现上述的逻辑错误。
在六种逻辑覆盖标准中,语句覆盖标准是最弱的。
二、判断覆盖(分支覆盖)1、概念:设计足够多的测试用例,使得被测试程序中的每个判断的“真”、“假”分支至少被执行一次。
在本例中共有两个判断if(x>0 && y>0)(记为P1)和if(magic < 0)(记为P2)。
2、测试用例:两个判断的取真、假分支都已经被执行过,所以满足了判断覆盖的标准。
软件测试用例设计考核试卷
5. 以下哪些情况下可能需要回归测试?( )
A. 软件修复了一个bug
B. 软件添加了新功能
C. 环境发生变化
D. 代码重构
E. 更新了测试用例
6. 以下哪些工具可以用于自动化测试?( )
A. QTP
B. Selenium
C. JMeter
D. LoadRunner
E. Microsoft Word
D. 回归测试
10. 以下哪个不是软件测试的主要类型?( )
A. 功能测试
B. 性能测试
C. 安全性测试
D. 编码测试
11. 在软件测试用例设计中,以下哪个方法主要用于测试输入的有效性?( )
A. 等价类划分
B. 边界值分析
C. 错误推测法
D. 因果图法
12. 以下哪个测试主要用于检测软件的编码错误?( )
10. 在软件测试过程中,______是测试人员根据测试用例执行测试并记录测试结果的活动。
四、判断题(本题共10小题,每题1分,共10分,正确的请在答题括号中画√,错误的画×)
1. 软件测试的目的是证明软件是正确的。( )
2. 单元测试主要是由开发人员来执行的。( )
3. 测试用例设计完成之后,无需根据项目的变化进行更新。( )
2. 功能
3. 代码
4. 测试工具
5. 不能替代人工测试
6. 响应速度
7. 单元测试
8. 用户
9. 兼容性测试
10. 测试执行
四、判断题
1. ×
2. √
3. ×
4. √
5. ×
6. √
7. √
8. ×
9. √
10. ×
白盒测试及例题
基本路径测试
• 前提条件 测试进入的前提条件是在测试人员 已经对被测试对象有了一定的了解,基 本上明确了被测试软件的逻辑结构。 • 测试过程 过程是通过针对程序逻辑结构设计 和加载测试用例,驱动程序执行,以对 程序路径进行测试。测试结果是分析实 际的测试结果与预期的结果是否一致。
基本路径测试
• 在程序控制流图的基础上,通过分析控制构造的环 路复杂性,导出基本可执行路径集合,从而设计测 试用例。包括以下4个步骤和一个工具方法: 1. 程序的控制流图:描述程序控制流的一种图示 方法。 2. 程序圈复杂度:McCabe复杂性度量。从程序的 环路复杂性可导出程序基本路径集合中的独立 路径条数,这是确定程序中每个可执行语句至 少执行一次所必须的测试用例数目的上界。 3. 导出测试用例:根据圈复杂度和程序结构设计 用例数据输入和预期结果。 4. 准备测试用例:确保基本路径集中的每一条路
条件组合覆盖
• 针对上述问题又提出了另一种标准——―条 件组合覆盖”。它的含义是:执行足够的 例子,使得每个判定中条件的各种可能组 合都至少出现一次。显然,满足“条件组 合覆盖”的测试用例是一定满足“分支覆 盖”、“条件覆盖”和“分支/条件覆盖” 的。
条件组合覆盖
再看例1的程序,我们需要选择适当 的例子,使得下面 8种条件组合都能 够出现:
基本路径测试
工具方法: 图形矩阵:是在基本路径测试中起辅 助作用的软件工具,利用它可以实现自 动地确定一个基本路径集。
控制流图的符号
• 在介绍基本路径方法之前,必须先介绍一种简单的 控制流表示方法,即流图。流图是对待测试程序过 程处理的一种表示。流图使用下面的符号描述逻辑 控制流,每一种结构化构成元素有一个相应的流图 符号。
• • • • 白盒测试概念 测试覆盖标准 逻辑驱动测试 基本路径测试
软件测试_白盒测试
12
控制流图中节点合并
有的时候,我 们可以把几个 节点合并成一 个, 合并的原则: 若在一个节点 序列中没有分 支,则我们可 以把这个序列 的节点都合并 成一个节点。
4 5 6 9
10 12 13 21 15 17 19 20 22 23
22 23 20
7
8
4
9
11
10 12 13
11
14 16 18
Dim a,b As Integer Dim c As Double If (a>0 And b>0) Then c=c/a End if If (a>1 or c>1) Then c=c+1 End if c=b+c
a>0 and b>0 N a>1 or c>1 N c=b+c
Y
c=c/a
Y
c=c+1
21 15
14 16 17 19 18
13
逻辑覆盖法
覆盖测试,是利用程序的逻辑结构设计相应 的测试用例。测试人员要深入了解被测程序 的逻辑结构特点,完全掌握源代码的流程, 才能设计出恰当的用例。 白盒测试中的逻辑覆盖方法有以下6种:
语句覆盖 判定覆盖 条件覆盖 判定-条件覆盖 条件组合覆盖 路径覆盖
28
4.判定-条件覆盖
基本思想是:设计足够的测试用例,使得 判断条件中的所有条件可能至少执行一次 取值,同时,所有判断的可能结果至少执 行一次。
29
1
4.判定-条件覆盖……续1
按照判定-条件覆盖 的要求,我们设计的 测试用例要满足如下 条件: 1. 所有条件可能至少执 行一次取值; 2. 所有判断的可能结果 至少执行一次。
白盒测试逻辑覆盖练习题
白盒测试逻辑覆盖练习题一、语句覆盖if (a > 0 && b > 0) {c = a + b;} else {c = 0;}def check_age(age):if age < 18:return "未成年"elif age >= 18 and age < 60:return "成年人"else:return "老年人"二、分支覆盖if (x > 0) {if (y > 0) {printf("第一象限");} else {printf("第四象限");}} else {if (y > 0) {printf("第二象限");} else {printf("第三象限");}}function calculateGrade(score) {if (score >= 90) {return 'A';} else if (score >= 80) {return 'B';} else if (score >= 70) {return 'C';} else {return 'D';}}三、路径覆盖public int calculate(int a, int b) { if (a > 0) {if (b > 0) {return a + b;} else {return a b;}} else {if (b > 0) {return b a;} else {return 0;}}}public int Max(int a, int b, int c) { if (a > b) {if (a > c) {return a;} else {return c;}} else {if (b > c) {return b;} else {return c;}}}四、条件覆盖def check_password(password):if len(password) >= 8 and any(char.isdigit() for char in password):return "密码强度高"else:return "密码强度低"function validateForm(username, password) {if (username.length > 0 && password.length > 0) { return true;} else {return false;}}五、判定条件覆盖public boolean isEligible(int age, boolean hasLicense) {if (age >= 18 && hasLicense) {return true;} else {return false;}}int isPrime(int num) {if (num <= 1) {return 0;}for (int i = 2; i < num; i++) {if (num % i == 0) {return 0;}}return 1;}六、多条件覆盖public string GetGrade(int score, bool isFinalExam) { if (score >= 90 || (isFinalExam && score >= 80)) { return "A";} else if (score >= 80 || (isFinalExam && score >= 70)) {return "B";} else if (score >= 70 || (isFinalExam && score >= 60)) {return "C";} else {return "D";}}return "Eligible";} else {return "Not Eligible";}}七、条件组合覆盖def check_login(username, password, is_admin):if (username == "admin" or username == "user") and password == "56" and not is_admin:return "User logged in";elif (username == "admin" and is_admin) and password == "admin123":return "Admin logged in";else:return "Invalid credentials";public String authenticate(String username, String password, boolean hasTwoFactor) {if (username.equals("admin") &&password.equals("admin123") && hasTwoFactor) {return "Admin access granted";} else if (username.equals("user") &&password.equals("user123") && !hasTwoFactor) {return "User access granted";} else {return "Access denied";}}八、路径条件覆盖void processOrder(int quantity, float discount) {if (quantity > 10) {if (discount < 0.1) {printf("Order processed with standard discount");} else {printf("Order processed with special discount");}} else {printf("Order processed without discount");}}function calculateTotal(price, isMember, hasCoupon) { let total = price;if (isMember) {total = 0.9; // 10% discount for members}if (hasCoupon) {total = 0.95; // Additional 5% discount for coupon}return total;}九、修改条件/判定覆盖def upgrade_account(user_type, points):if user_type == "basic" and points >= 100:return "Upgrade to premium"elif user_type == "premium" and points >= 200:return "Upgrade to elite"else:return "No upgrade available"public String checkSubscription(String type, int duration) {if (type.equals("monthly") && duration >= 6) {return "Eligible for annual plan";} else if (type.equals("annual") && duration >= 12) {return "Eligible for lifetime plan";} else {return "Continue current plan";}}答案一、语句覆盖1. 测试用例:a=1, b=1;a=1, b=12. 测试用例:age=15;age=25;age=65二、分支覆盖1. 测试用例:x=1, y=1;x=1, y=1;x=1, y=1;x=1, y=12. 测试用例:score=95;score=85;score=75;score=65三、路径覆盖1. 测试用例:a=1, b=1;a=1, b=1;a=1, b=1;a=1, b=12. 测试用例:a=10, b=5, c=3;a=5, b=10, c=8;a=5, b=5, c=10;a=3, b=3, c=3四、条件覆盖1. 测试用例:password="567";password=""2. 测试用例:username="test", password="pass";username="", password=""五、判定条件覆盖1. 测试用例:age=20, hasLicense=True;age=17, hasLicense=False2. 测试用例:num=2;num=1;num=0;num=1六、多条件覆盖1. 测试用例:score=95, isFinalExam=False;score=85, isFinalExam=True;score=75, isFinalExam=False;score=65, isFinalExam=True七、条件组合覆盖1. 测试用例:username="admin", password="admin123",is_admin=False;username="user", password="56",is_admin=False;username="admin", password="admin123",is_admin=True2. 测试用例:username="admin", password="admin123", hasTwoFactor=True;username="user", password="user123", hasTwoFactor=False;username="admin", password="wrong", hasTwoFactor=True八、路径条件覆盖1. 测试用例:quantity=15, discount=0.05;quantity=8, discount=0.05;quantity=15, discount=0.22. 测试用例:price=100, isMember=True, hasCoupon=True;price=100, isMember=False, hasCoupon=False;price=100, isMember=True, hasCoupon=False九、修改条件/判定覆盖1. 测试用例:user_type="basic", points=50;user_type="basic", points=150;user_type="premium",points=150;user_type="premium", points=2502. 测试用例:type="monthly", duration=3;type="monthly", duration=9;type="annual", duration=9;type="annual", duration=15。
《软件测试》第三章 白盒测试方法
《软件测试》第三章白盒测试方法一、填空题1、语句覆盖的目的是测试程序中的代码是否被执行,它只测试代码中的执行语句。
2、判定覆盖的作用是使真假分支军被执行。
3、条件覆盖是指判定语句中的每个条件都要取真、假值各一次。
4、对于判定语句IF (a>1 AND c1、c1 AND c判断覆盖方法。
5、判定条件覆盖要求判定语句中所有条件取值的可能组合都至少出现一次。
6、在程序插桩法中,插入到程序中的代码称为探针。
二、判断题1、语句覆盖无法考虑分支组合情况。
(X )。
2、目标代码插桩需要重新编译、链接程序。
(√)。
3、语句覆盖可以测试程序中的逻辑错误。
(√)。
4、判定-条件覆盖没有考虑判定语句与条件判断的组合情况。
(X )。
5、对于源代码插桩,探针具有较好的通用性。
(√)。
三、单选题1、下列选项中,哪一项不属于逻辑覆盖?( D )。
A.语句覆盖B.条件覆盖C.判定覆盖D.判定-语句覆盖。
2、关于逻辑覆盖,下列说法中错误的是( C )。
A.语句覆盖的语句不包括空行、注释等。
B.相比于语句覆盖,判定覆盖考虑到了每个判定语句的取值情况。
C.条件覆盖考虑到了每个逻辑条件取值的所有组合情况。
— 1/2 —— 1/2 —D.在逻辑覆盖中,条件组合覆盖是覆盖率最大的测试方法。
3、关于程序插桩法,下列说法中错误的是( D )。
A.程序插桩法就是往被测程序中插入测试代码以达到测试目的的方法。
B. 程序插桩法可分为目标代码插桩法和源代码插桩。
C. 源代码插桩的程序需要重新编译、链接过程,单测试代码不参与编译、链接过程。
D. 目标代码插桩是往二进制程序中插入测试代码四、简答题1、请简述逻辑覆盖的几种方法及他们之间的区别。
答:6种。
语句覆盖(SC):设计足够多的测试用例,抄确保每条语句都被执行过。
判定覆盖(DC):设计足够多的测试用例,确保每个判定都分别取真值与假值。
条件覆盖(CC):设计足够多的测试用例,确保每个条件都分别取真值与假值。
白盒测试
湖北科技学院软件测试实验报告int k=0,j=0;if((x>3) && (z<10)){k=x*y-1;j=(int) Math.sqrt(k);}if((x==4)||(y>5))j=x*y+10;j=j%3;}public boolean doWork(int x,int y,int z){return true;}}测试程序:(1)package gy.test2;import junit.framework.*;import org.junit.Test;public class DoWorkTest1 extends TestCase { private static int x,y,z;private static DoWork dowork=new DoWork(x,y,z);public void setUp() throws Exception {}@Testpublic void testDoWork() {assertEquals(true, dowork.doWork(4, 8, 8));}}(2)package gy.test2;import static org.junit.Assert.*;import org.junit.Test;public class DoWorkTest2 {private static int x,y,z;private static DoWork dowork=new DoWork(x,y,z);public void setUp() throws Exception {}@Testpublic void testDoWork() {assertEquals(true, dowork.doWork(4, 3, 13));}}(3)package gy.test2;import static org.junit.Assert.*;import org.junit.Test;public class DoWorkTest3 {private static int x,y,z;private static DoWork dowork=new DoWork(x,y,z);public void setUp() throws Exception {}@Testpublic void testDoWork() {assertEquals(true, dowork.doWork(6, 2, 8));}}(4)package gy.test2;import static org.junit.Assert.*;import org.junit.Test;public class DoWorkTest4 {private static int x,y,z;private static DoWork dowork=new DoWork(x,y,z);public void setUp() throws Exception {}@Testpublic void testDoWork() {assertEquals(true, dowork.doWork(2, 3, 13));}}2.源程序:package gy.test;public class BinSearch {public int binSearch (int array[],int key) { int mid,low,high;low = 0;high = array.length-1;while (low <= high) {mid = (low+high)/2;if (key == array[mid])return mid;else if (key < array [mid])high = mid -1;elselow = mid+1;}return -1;}}测试程序:(1)package gy.test;import junit.framework.*;public class BinSearchTest1 extends TestCase{ private static BinSearch search= new BinSearch();private int array[] = {};public void setUp() throws Exception {}public void testBinSearch() {assertEquals(-1, search.binSearch(array, 1));}}(2)package gy.test;import junit.framework.*;public class BinSearchTest2 extends TestCase { private static BinSearch search= new BinSearch();private int array[] = {2,4,6};public void setUp() throws Exception {}public void testBinSearch() {assertEquals(1, search.binSearch(array, 4));}}(3)package gy.test;import junit.framework.*;public class BinSearchTest3 extends TestCase{ private static BinSearch search= new BinSearch();private int array[] = {2,4,6,8};public void setUp() throws Exception {}public void testBinSearch() {assertEquals(0, search.binSearch(array, 2));}}(4)package gy.test;import junit.framework.*;public class BinSearchTest4 extends TestCase {private static BinSearch search= new BinSearch();private int array[] = {2,4,6,8};public void setUp() throws Exception {}public void testBinSearch() {assertEquals(2, search.binSearch(array, 6));}}。
软件测试练习题及答案
练习题、判断01 )测试是为了验证软件已正确地实现了用户的要求。
错02 )白盒测试仅与程序的内部结构有关,完全可以不考虑程序的功能要求。
对03 )白盒测试不仅与程序的内部结构有关,还要考虑程序的功能要求。
错04)程序员兼任测试员可以提高工作效率。
错05 )黑盒测试的测试用例是根据应用程序的功能需求设计的。
对06 )当软件代码开发结束时,软件测试过程才开始。
错07 )据有关数据统计,代码中60%以上的缺陷可以通过代码审查发现出来。
对08)无效等价类是无效的输入数据构成的集合,因此无需考虑无效的等价类划分。
错09 )软件本地化就是将一个软件产品按特定国家或语言市场的需要翻译过来。
错10 )在压力测试中通常采用的是黑盒测试方法。
对11 )软件测试员无法对产品说明书进行白盒测试。
对12 )功能测试工具主要适合于回归测试。
对13)测试人员说:“没有可运行的程序,我无法进行测试工作” 。
错14 )自底向上集成需要测试员编写驱动程序。
对15 )测试是可以穷尽的。
错16 )自动化测试相比手工测试而言,能发现更多的错误。
错17 )软件测试自动化可以提高测试效率,可以代替手工测试。
错语句至少被执行一次。
对18)语句覆盖法的基本思想是设计若干测试用例,运行被测程序,使程序中的每个可执行19)Beta 测试是验收测试的一种。
对20 )软件开发全过程的测试工作都可以实现自动化。
错21 )软件只要经过严格严谨的内部测试之后,可以做到没有缺陷。
错22)结构性测试是根据软件的规格说明来设计测试用例。
错23 )软件测试工具可以代替软件测试员。
错24 )通过软件测试,可以证明程序的正确性。
错25)在单元测试中,驱动程序模拟被测模块工作过程中所调用的下层模块。
错26 )软件缺陷可能会被修复,可能会被保留或者标识出来。
对27 )测试用例是由测试输入数据和对应的实际输出结果这两部分组成。
错28 )单元测试通常由开发人员进行。
对(29 )现在人们普遍认为软件测试不应该贯穿整个软件生命周期,而应在编程完毕之后再进行,这样可以降低成本。
软件测试之白盒测试题及答案
#include <iostream.h> //白盒测试测验题目白盒测试测验题目//程序功能:输入年、月,输出该月份的最大天数 void main() 1{2 int year, int month;3 int maxday = 0;4 cin>>year>>month;5 if ( month >= 1 && month <= 12 )6 {7 if ( month == 2 )8 {9 if ( year % 4 == 0 ) 10 { 11 if ( year % 100 == 0 ) 12 {13 if ( year % 400 == 0 ) 14 maxday = 29; 15 else16maxday = 28;17 } 18 else19 maxday = 29; 20 } 21else22 maxday = 28; 23 } 24 else 25 {26 if ( month == 4 || month == 6 || month == 9 || month == 11 ) 27 maxday = 30; 28 else29 maxday = 31; 30 } 31 }32cout<<"The MaxDay is:"<<maxday<<endl;33}要求:要求: 1. 画出该程序的程序流程图画出该程序的程序流程图1 2345 7 F1T168 10 F 2 T2912 11 27 F3 T 31331 33 F6 T632 28 14 29 23 F4 T4 1535 24 341630 25 36 18 F5 T51737 2026 2138 2219 39400:开始:开始 1 2 3456798 101112 13 14 1516 17 18 19 2021 22 23242526 27 28 29 30 31 323334:结束结束2. 画出该程序的DD 路径图路径图转换后的(D-D 图):A :{1-5};B :{6-7};C:{8-9}; D :{24-26};E :{10-11}; F :{21-23}; G :{12-13}; H :{18-20}; I :{14};J :{15-17};K :{27}; L :{28-31}; M :{32-33}; F1T1F2 T2T3F6 T6 F3 F4 T4F5T50:开始开始ABD C FEH GJ KL M 34:结束:结束 I3. 试用路径覆盖法中的语句覆盖、判定覆盖、条件覆盖、判定条件覆盖以及路径覆盖五种方法对上述问题设计测试用例述问题设计测试用例 1.语句覆盖:语句覆盖: 测试用例编号输入数据输入数据预期输出结果预期输出结果 覆盖语句覆盖语句yearmonthTC-00120002The MaxDay is:290,1,2,3,4,5,6,7,8,9,10,11,12,13,14,32,33,34TC-002 1700 2 The MaxDay is:280,1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,17,32,33,34 TC-003 1604 2 The MaxDay is:290,1,2,3,4,5,6,7,8,9,10,11,18,19,20,32,33,34TC-004 1605 2 The MaxDay is:28 0,1,2,3,4,5,6,7,8,9,21,22,23,32,33,34TC-005 1914 6 The MaxDay is:30 0,1,2,3,4,5,6,7,24,25,26,27,32,33,34TC-006 1914 7 The MaxDay is:310,1,2,3,4,5,6,7,24,25,26,28,29,30,31,32,33,342.判定覆盖:判定覆盖:解释:我在各判断分支的真假分支都编有相应的真假符号,在判定覆盖中用判定分支的真假序号表示; 测试用例编号 输入数据输入数据 预期输出结果预期输出结果 覆盖判定覆盖判定yearmonthTC-001 2000 2 The MaxDay is:29 T1,T2,T3,T4,T5 TC-002 1700 2 The MaxDay is:28 T1,T2,T3,T4,F5TC-003 1604 2 The MaxDay is:29 T1,T2,T3,F4TC-004 1605 2 The MaxDay is:28 T1,T2,F3TC-005 1914 6 The MaxDay is:30 T1,F2,T6TC-006 1914 7 The MaxDay is:31 T1,F2,F6TC-007 1914 14 The MaxDay is:0 F13.条件覆盖:条件覆盖:(1)在判定语句5中有以下条件:中有以下条件:1.month >= 1 ;2.month <= 12 ;(2)在判定语句7中有以下条件:中有以下条件:3.month == 2;(3)在判定语句9中有以下条件:中有以下条件:4.year % 4 == 0;(4)在判定语句11中有以下条件:中有以下条件:5.year % 100 == 0;(5)在判定语句13中有以下条件:中有以下条件:6. year % 400 == 0;(6)在判定语句26中有以下条件:7. month == 4 ;8.month == 6 ;9.month == 9 ;10.month == 11;测试用例编号 输入数据输入数据 预期输出结果预期输出结果 覆盖的条件覆盖的条件yearmonthTC-001 2000 0 The MaxDay is:0 F1TC-002 1700 15 The MaxDay is:0 T1,F2TC-003 2000 2 The MaxDay is:29 T1,T2,T3,T4,T5,T6 TC-004 1605 4 The MaxDay is:30 T1,T2,F3,T7TC-005 1900 2 The MaxDay is:28 T1,T2,T3,T4,T5,F6TC-006 1604 2 The MaxDay is:29 T1,T2,T3,T4,F5TC-007 2013 2 The MaxDay is:28 T1,T2,T3,F4TC-008 1700 5 The MaxDay is:31 T1,T2,F3,F7,F8,F9,F10TC-009 1604 11 The MaxDay is:30 T1,T2,F3,F7,F8,F9,T10TC-0010 1605 9 The MaxDay is:30 T1,T2,F3,F7,F8,T9TC-0011 1914 6 The MaxDay is:30 T1,T2,F3,F7,T84.判定条件覆盖:(1)在判定语句5中有以下条件:中有以下条件:1.month >= 1 ;2.month <= 12 ;(2)在判定语句7中有以下条件:中有以下条件:3.month == 2;(3)在判定语句9中有以下条件:中有以下条件:4.year % 4 == 0;(6)在判定语句11中有以下条件:中有以下条件:5.year % 100 == 0;(7)在判定语句13中有以下条件:中有以下条件:6. year % 400 == 0;(6)在判定语句26中有以下条件:7. month == 4 ;8.month == 6 ;9.month == 9 ;10.month == 11;(覆盖的判定语句在程序流程图中有标识)(覆盖的判定语句在程序流程图中有标识)测试用例编号 输入数据输入数据 预期输出结果预期输出结果 覆盖的条件覆盖的条件 覆盖的判定覆盖的判定yearmonthTC-001 2000 0 The MaxDay is:0 F1 F1 TC-002 1700 15 The MaxDay is:0 T1,F2 F1TC-003 2000 2 TheMaxDay is:29 T1,T2,T3,T4,T5,T6 T1,T2,T3,T4,T5TC-004 1605 4 TheMaxDay is:30 T1,T2,F3,T7 T1,F2,T6TC-005 1900 2 TheMaxDayis: 28 T1,T2,T3,T4,T5,F6 T1,T2,T3,T4,F5TC-006 1604 2 The MaxDay is:29 T1,T2,T3,T4,F5 T1,T2,T3,F4 TC-007 2013 2 The MaxDay is:28 T1,T2,T3,F4 T1,T2,F3TC-008 1700 5 The MaxDay is:31 T1,T2,F3,F7,F8,F9,F10T1,F2,F6TC-009 1604 11 The MaxDay is:30 T1,T2,F3,F7,F8,F9,T10T1,F2,T6TC-0010 1605 9 The MaxDay is:30 T1,T2,F3,F7,F8,T9T1,F2,T6TC-0011 1914 6 The MaxDay is:30 T1,T2,F3,F7,T8 T1,F2,T65.路径覆盖:路径覆盖:解释:我在控制流程图的各条边上都编了序号,在路径覆盖中覆盖的路径用分支边上的序号表示;测试用例编号 输入数据输入数据 预期输出结果预期输出结果 覆盖的路径覆盖的路径year monthTC-001 2000 2 The MaxDay is:29 1-2-3-4-5-6-8-9-11-13-14-15-16-17-19-39-40 TC-00217002The MaxDay is:281-2-3-4-5-6-8-9-11-13-14-15-16-18-20-21-22-39-40TC-003 1604 2 The MaxDay is:29 1-2-3-4-5-6-8-9-11-13-14-23-24-25-26-39-40 TC-004 1605 2 The MaxDay is:28 1-2-3-4-5-6-8-9-11-27-28-29-30-39-40TC-005 1914 6 The MaxDay is:30 1-2-3-4-5-6-8-10-12-31-32-34-39-40TC-006 1914 7 The MaxDay is:31 1-2-3-4-5-6-8-10-12-31-33-35-36-37-38-39-40 TC-007 191414The MaxDay is:01-2-3-4-5-7-39-404. 用三种方法求出上述问题的圈复杂度(基路径数量V (G ))方法一:判定()结点个数计算法:V(G)=p+1;在此D-D 图中,判定结点个数为P=6;V(G)=6+1=7;方法二:.圈数计算法:V(G)= 圈数+1;该D-D 图中,圈数为6;V(G)=6+1=7;方法三:根据连通图公式计算:V(G)=E-N+2p ;E 是D-D 图中边的个数,图中边的个数, N 是D-D 图中结点的个数,p 是连通图的个数,p 一般等于1;在该图中E=40,N=35,p=1; V(G)=E-N+2p=40-35+2=7; 5. 写出上述问题的基路径测试方法所采用的基路径,写明过程写出上述问题的基路径测试方法所采用的基路径,写明过程过程:过程: 首先我根据D-D 路径来寻找基路径,找到一条最长的路径为路径1,再根据路径1中的中的 第一个分一个分支结点A 寻找其他没走过的路,这条路为路径2, 此时遍历完了分支结点A ,再在路径1中找第2个分支结点为B ,根据分支结点B 找到路径3,同理我们在路径1中还有分支结点C ,E ,G ,它们可以找到路径4,路径5和路径6,此时我们会发现已经查找完了5个分支结点,只剩下分支结点D 未被遍历,我们根据分支结点D 可以找到路径7,此时所有的基路径就已经全部找到的。
白盒测试习题
习题010401 逻辑路径覆盖法是白盒测试用例的重要设计方法,其中语旬覆盖法是较为常用的方法,针对下面的语句段,采用语句覆盖法完成测试用例设计,测试用例见下表,对表中的空缺项(True或者False),正确的选择是( )。
语句段:if(A&&(B||C)) x=1;else x=0;用例表:A. ①TRUE ②FALSE ③TRUEB. ①TRUE ②FALSE ③FALSEC. ①FALSE ②FALSE ③TRUED. ①TRUE ②TRUE ③FALSE0402 针对以下程序段,对于(A,B,C)的取值,以下( )测试用例能够满足语句覆盖的要求。
IF((A+10)=2 OR (B-20)<3) THEN C=0IF((A+30)>10 AND (C-30)<0) THEN B=30A. (2,30,1)B.(-20,0,30)C. (-30,20,30)D. (2,20,3)0403 为以下程序段,设计足够的测试用例满足语句覆盖。
if (x>8&&y>5) {if(x>16||y>10) s1;}else {if (x>0||y>0) s2;else s3;0404 针对下列程序段,需要()个测试用例才可以满足语句覆盖的要求。
switch ( value ){case 0: other = 30; break;case 1: other = 50; break;case 2: other = 300;case 3: other = other / value; break;default: other = other * value;}0405 对下面的个人所得税程序中,满足语句覆盖测试用例的是( ) 。
if (income < 800) tarrate = 0else if (income <= 1500) tarrate = 0.05else if (income < 2000) tarrate = 0.08else tarrate = 0.1A.income = (800, 1500, 2000, 2001)B.income = (800, 801, 1999, 2000)C.income = (799, 1499, 2000, 2001)0406 阅读下列流程图:当用判定覆盖法进行测试时,至少需要设计( ) 个测试用例。
白盒测试作业参考答案
第四章白盒测试参考答案(注意:答案仅供参考,若有误,请自行修改。
)1、使用逻辑覆盖法测试以下程序段。
private void DoWork(int x, int y, int z)1 {2 int k = 0, j = 0;3 if ((x > 3) && (z < 10)) //3-a 和 3-b4 {5 k = x * y - 1;6 j = (int)Math.Sqrt(k);7 }8 if ((x == 4) || (y > 5)) //8-a 和 8-b9 j = x * y + 10;10 j = j % 3;11 lbResult.Text = "k=" + k.ToString() +" j=" +j.ToString () ;12 }说明:程序段中每行开头的数字是对每条语句的编号。
要求:(1)画出程序的控制流图(用题中给出的语句编号表示)。
(2)分别以语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖和路径覆盖法设计测试用例,并写出每个测试用例的执行路径(用题中给出的语句编号表示)。
(3)执行测试用例,并记录测试结果。
参考答案:(1):控制流图:(2)(3)测试用例略。
2.基本路径测试按要求对下面的代码进行测试。
代码功能是:用折半查找在元素呈升序排列的数组中查找值为key的元素。
代码如下:private int BinSearch(int [] array,int key)1 {2 int mid,low,high;3 low=0;4 high = array.Length - 1;5 while (low <= high)6 {7 mid = (low + high) / 2;8 if (key == array[mid])9 return mid;10 else if (key < array[mid])11 high = mid - 1;12 else13 low = mid + 1;14 }15 return -1;16 }参考答案:(1)控制流图:(2)环形复杂度V(G)=3+1=4;(3)独立路径:5→15→165→8→165→8→10→11→14→5→……5→8→10→13→14→5→……测试用例表略。
(完整版)白盒测试练习及答案
1、在白盒测试用例设计中,有语句覆盖、分支覆盖、条件覆盖、路径覆盖等,其中( A )是最强的覆盖准则。
为了对如下图所示的程序段进行覆盖测试,必须适当地选取测试用例组。
若x, y是两个变量,可供选择的测试用例组共有Ⅰ、Ⅱ、Ⅲ、Ⅳ四组,如表中给出,则实现判定覆盖至少应采取的测试用例组是( B )或( C );实现条件覆盖至少应采取的测试用例组是( D );实现路径覆盖至少应采取的测试用例组是( E )或( F )。
供选择的答案A:① 语句覆盖② 条件覆盖③ 判定覆盖④ 路径覆盖B~F:① Ⅰ和Ⅱ组② Ⅱ和Ⅲ组③ Ⅲ和Ⅳ组④ Ⅰ和Ⅳ组⑤ Ⅰ、Ⅱ、Ⅲ组⑥ Ⅱ、Ⅲ、Ⅳ组⑦ Ⅰ、Ⅲ、Ⅳ组⑧ Ⅰ、Ⅱ、Ⅳ组解答:A. ④ B. ⑤ C. ⑧ D. ④ E. ⑤ F. ⑧2. 阅读下面这段程序,使用逻辑覆盖法进行测试,请问哪一组关于(a,b,c)的输入值可以达到条件覆盖。
( B )int func(int a,b,c){ int k=1;if ( (a>0) || (b<0) || (a+c>0) ) k=k+a;else k=k+b;if (c>0) k=k+c;return k;}A. (a,b,c) = (3,6,1)、(-4,-5,7)B. (a,b,c) = (2,5,8)、(-4,-9,-5)C. (a,b,c) = (6,8,-2)、(1,5,4)D. (a,b,c) = (4,9,-2)、(-4,8,3)3. 阅读下面这段程序,使用逻辑覆盖法进行测试,请问哪一组关于(a,b,c)的输入值可以达到判定覆盖。
(D )int func(int a,b,c){ int k=1;if ( (a>0) &&(b<0) && (a+c>0) ) k=k+a;else k=k+b;if (c>0) k=k+c;return k;}A. (a,b,c) = (3,6,1)、(-4,-5,7)B. (a,b,c) = (2,5,8)、(-4,-9,-5)C. (a,b,c) = (6,8,-2)、(1,5,4)D. (a,b,c) = (4,-9,-2)、(-4,8,3)4. 阅读下面这段程序,使用逻辑覆盖法进行测试,请问哪一组关于(a,b,c)的输入值可以达到判定条件覆盖。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
白盒测试用例练习
一、为以下所示的程序段设计一组测试用例,要求分别满足语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖,并画出相应的程序流程图。
voidDoWork(intx,inty,intz) {
intk=0,j=0;
if((x>3)&&(z<10)) {k=x*y-1;
j=sqrt(k);//语句块1 }
if((x==4)||(y>5)) {
j=x*y+10; }//语句块2 j=j%3;//语句块3 } a Y c
N
b e
Y
N d 由这个流程图可以看出,该程序模块有4条不同的路径: P1:(a-c-e)P2:(a-c-d)
P3:(a-b-e)P4:(a-b-d)
将里面的判定条件和过程记录如下: 判定条件M ={x>3andz<10} 判定条件N={x=4ory>5} 1、 语句覆盖
测试用例输入
输出
判定M 的取值 判定N 的取值
覆盖路径
x=4,z=5,y=8 k=31,j=0 T
T
P1(a-c-e)
2、判定覆盖
x>3 and z<10
x=4 or y>5 j=j%3
j=x*y+10
k=x*y-1
j=sqrt(k )
k=0
j=0
p1和p4可以作为测试用例,其中p1作为取真的路径,p4作为取反的路径。
测试用例输入输出判定M的取
值
判定N的取值覆盖路径
x=4,z=5,y=8 k=31,j=0 T T P1(a-c-e) x=2,z=11,y=
5
k=0,j=0 F F P4(a-b-d) 也可以让测试用例测试路径P2和P3。
相应的两组输入数据如下:
测试用例输入输出判定M的取
值
判定N的取
值
覆盖路径
x=5,z=5,y=4 k=19,j=sqrt(1
9)%3
T F P2(a-c-d)
x=4,z=11,y=
6
k=0,j=1 F T P3(a-b-e)
3、条件覆盖
对于M:x>3取真时T1,取假时F1;
z<10取真时T2,取假时F2;
对于N:x=4取真时T3,取假时F3;
y>5取真时T4,取假时F4。
条件:x>3,z<10,x=4,y>5
条件:x<=3,z>=10,x!=4,y<=5
根据条件覆盖的基本思路,和这8个条件取值,组合测试用例如表所示: 测试用例输
入
输出取值条件具体取值条件覆盖路径
x=4,z=5,y=8 k=31,j=
0 T1,T2,T3,
T4
x>3,z<10,x=4,y>5 P1(a-c-e)
x=3,z=11,y= 5 k=0,j=0 F1,F2,F3,
F4
x<=3,z>=10,x!=4,
y<=5
P4(a-b-d)
4、判定/条件覆盖
测试用例输
入
输出取值条件具体取值条件覆盖路径
x=4,z=5,y=8 k=31,j=
0 T1,T2,T3,
T4
x>3,z<10,x=4,y>5 P1(a-c-e)
x=3,z=11,y= 5 k=0,j=0 F1,F2,F3,
F4
x<=3,z>=10,x!=4,
y<=5
P4(a-b-d)
5、组合覆盖
条件组合
1)x>3,z<102)x>3,z>=10
3)x<=3,z<104)x<=3,z>=10
5)x=4,y>56)x=4,y<=5
7)x!=4,y>58)x!=4,y<=5
测试用例输入输出覆盖条件取值覆盖条件组覆盖路径
合
x=4,z=5,y=6 k=23,j=1 T1,T2,T3,T4 1,5 P1(a-c-e) x=4,z=10,y=5 k=0,j=0 T1,F2,T3,F4 2,6 P2(a-c-d) x=3,z=5,y=6 k=14j=1 F1,T2,F3,T4 3,7 P3(a-b-e) z=3,z=10,y=5 k=0,j=2 F1,F2,F3,F4 4,8 P4(a-b-d) 6、路径覆盖
测试用例输入输出覆盖条件取值覆盖条件
组合
覆盖路径
x=4,z=5,y=8 k=31,j=0 T1,T2,T3,
T4
1,5 P1(a-c-e)
x=5,z=5,y=4 k=19,j=sqrt(1
9)%3 T1,T2,F3,
F4
1,8 P2(a-c-d)
x=4,z=11,y=6 k=0,j=1 T1,F2,T3,
T4
2,5 P3(a-b-e)
x=2,z=11,y=5 k=0,j=0 F1,F2,F3,
F4
4,8 P4(a-b-d) 二、冒泡法排序:
#include<stdio.h>
main()
{
inti,j,temp;
inta[10];
for(i=0;i<10;i++)
scanf("%d,",&a[i]);
for(j=0;j<=9;j++){
for(i=0;i<10-j;i++)
if(a[i]>a[i+1]){
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;}
}
for(i=0;i<10;i++)
printf("%5d,",a[i]);
printf("\n");
}
2、程序流程图
i=0,j=0
3白盒测试:
3.1语句覆盖 测试用例 测试输入 覆盖对象
测试结果 I=0,j=0
1,4,3,2,5,7,6,8,9,11 1,2,4,5,6,3,7
1,2,3,4,5,6,7,8,9,11
3.2判定覆盖 测试用例 测试输入 覆盖对象 测试结果 I=0,j=0
1,4,3,2,5,7,6,8,9,11 1,2,6,7,8,9,4,5,3 1,2,3,4,5,
6,7,8,9,11
3.3条件覆盖 测试用例 测试输入 覆盖对象 测试结果 I=0,j=0
1,4,3,2,5,7,6,8,9,11 1,2,6,7,8,9,4,5,3 1,2,3,4,5,
6,7,8,9,11
3.4路径覆盖 测试用例
测试输入
覆盖对象
测试结果
输入要排序的一组元
j<9 i<10
j=j+
i=i+1 a[i]>a[i +1]
N Y
N
tamp=a[i] a[i]=a[i+1]
a[i+1]=temp
结束
Y
N Y 1 2
3 4
5
6
7 8
9
9 1
2
3
4 5 6
7
I=0,j=0 1,4,3,2,5,7,6,8,9,11 1,2,6,7,8,9,4,5,31,2,3,4,5,
6,7,8,9,11。