|
|
|
|
移动端

练习

《软件测试基础教程》第2章基于需求的测试生成,本章主要介绍从非形式化或形式化定义的软件需求生成测试集的技术。这些技术,有的可以自动地执行,而大部分则需测试人员付出艰辛的劳动,特别是在测试大型软件时。本章所介绍的大部分测试技术属于黑盒测试,因为生成测试集时不需参考被测软件的源代码。本节为本章的练习部分。

作者:王峰/郭长国/陈振华 等译来源:机械工业出版社|2011-09-18 21:34

【新品产上线啦】51CTO播客,随时随地,碎片化学习

练习

2.1设s是由N个整数组成的序列,序列s中的每个整数可以取v个不同的值。证明:可能的序列数是

2.2集合S上的等价关系R是自反的、对称的、传递的,同时,R将S划分为等价类。证明:练习2.3、2.4中定义的每个关系都是等价关系。

2.3为下列输入变量定义等价类:

(a) int pen_inventory;表示签字笔的当前库存量。

(b) string planet_name;表示行星的名字。

(c) operating system={"OS X","Windows XP","Windows 2000","Unix","Linux","Xinu","VxWorks"};表示操作系统的名字。

(d) printer_class=set printer_name;打印机名字的集合。

printer_class p;

(e) int name[1...10];一个最多包含10个整数的数组。

2.4在例2.4中,现在假设增加一类打印机,比如“Home and Home Office(hh)”。定义一个关系hh,hh将pTest的输入域划分为两个等价类。分析hh定义的等价类与例2.4中原来4个关系定义的8个等价类的重叠情况。

2.5考虑如下关系:

 

cl将例2.4中pTest的输入域I映射到集合{yes,no}。如果打印机是彩色激光打印机,则cl将打印机品牌和型号映射为yes,否则映射为no。cl是等价关系吗?

2.6(a) 在例2.5中,只要简单一检查,就能发现代码已经对相关等价类的情况进行了正确处理,为什么还要考虑等价类E2~E6?至少给出两个原因。(b) 在划分wordCount的输入域时,还应考虑其他等价类吗?

2.7根据表2-1、表2-2中的指导原则,将例2.6中组件transcript的输入域划分成等价类。注意,组件transcript有两个输入变量:记录型变量R和整数型变量N。

2.8(a) 分别针对例2.7中用一元划分、多元划分方法产生的等价类划分,设计两个测试集T1、T2。下列哪些关系成立:T1=T2,T1T2,T1T2,T1T2,T1T2,T1≠T2?(b) 假设T1是从用一元划分方法产生的等价类中设计出来的,T2是从用多元划分方法产生的等价类中设计出来的,上述T1与T2之间的6种关系哪些成立?

2.9考虑软件App,它有两个输入变量,分别是name和age,其中,name是至多包含20个字母字符的非空字符串,age是整数型变量,0≤age≤120。当输入给name的字符串的长度超过20时,App截取前20个字符作为name的值;如果输入的是一个空字符串,则App显示一条错误提示信息。当输入给age的值不在规定范围中时,App显示一条错误提示信息。

(a) 采用一元划分方法划分App的输入域;(b) 采用多元划分方法划分App的输入域。(c)分别用(a)、(b)中产生的等价类设计App的测试集。

2.10假设某软件有m个输入变量,且每个输入变量都将其输入空间划分为n个等价类。如果采用多元划分方法,会将输入域划分成多少个等价类?

2.11某软件有两个输入变量,分别是x和y,其中,x≤y,-5≤y≤4。(a) 分别用一元划分和多元划分方法,对该软件的输入域进行划分。(b) 根据(a)中产生的划分设计测试集。

2.12在例2.8中,开始时计算的等价类数目是120。之所以这样,是因为没有考虑cmd与tempch之间的“父-子”约束关系。如果考虑了这种约束关系,在对输入域进行等价类划分的初始阶段,能得到多少个等价类?

2.13(a) 尽你所能,找出例2.10中测试集T的缺陷。

(b) 设计一个测试集,使其覆盖例2.8中4个输入变量的所有等价类,同时还要维持变量之间的语义关系。

(c) 针对测试集规模、错误检测效力,将(b)中设计的测试集与表2-3中的测试集进行比较。如果你认为自己设计的测试集的错误检测效力不如表2-3中测试集的话,请举出热水器温控软件的一个错误例子,你的测试集很可能检测不出该错误,而表2-3中的测试集很可能会检测出来。

2.14一个对象compute,以整数x作为输入,要求:当x≤0时,compute发送一消息给对象O1;当x>0时,compute发送一消息给另一对象O2。但是,由于compute中存在一个错误,使得:当x<0时,compute发送一消息给对象O1;当x≥0时,compute发送一消息给对象O2。请问,在什么条件下,测试输入x=0不能检测出compute中的这个错误?

2.15针对例2.12中的每一个t∈T,构造textSearch的一个错误例子,保证该错误只有通过测试用例t才能检测出来。提示:避免简单的例子。

2.16一个函数cC有3个输入变量:from、to、amount。变量from和to都是字符串,代表一个国家的名称,amount是浮点类型。函数cC将from国家amount单位的货币转换为to国家的等值货币。下面是一个在2004年7月26日的例子:

输入:from=“USA”,to=“Japan”,amount=100;

返回值:11012.0。

(a) 采用等价类划分和边界值分析方法导出函数cC的一个测试集。

(b) 假设一个GUI封装了cC,允许用户通过国家名称“调色板”选项选择from、to的值,在一个文本框中输入要转换的货币数量,然后点击按钮“Convert”。有了GUI,是否改变了在(a)中导出的测试集?若改变了,为什么?若没有,为什么?

你可能发现cC的需求规范许多方面都不完整。在设计测试用例时,建议解决软件需求规范中的二义性问题,利用常识完善需求规范,并/或与设计、开发团队的人员讨论这些问题。

2.17回想例2.11中的边界值分析。

(a) 构造一个在fP中包含边界错误的例子,而这个错误用例2.11中的测试用例很可能检测不出来,除非换掉测试用例t2、t5,以便对code、qty边界值计算的检查由不同的测试用例完成。

(b) 用适当的测试集替换测试用例t2、t5,以便测试fP时,对code、qty边界的测试由不同的测试用例完成。

2.18在例2.15中,假设将函数fP用于超市付款台的收银机中。收银机与中央数据库相连,fP访问数据库,获取每件商品的各种属性,如名称、单价。在这样网络化的环境中使用fP,会增加环境对象吗?还能考虑到别的类别和划分吗?

2.19在例2.17中,编写的测试规范不包含对优惠折扣类别的处理。给定第2.5.1小节中的软件规范,修改例2.17中的测试规范,以便生成的测试用例能够正确测试优惠折扣类别。

2.20一个通过Internet可操作的自动化的狗粮自动售货机(以下简称iDFD),由两个独立的自动售货机组成:食物自动售货机(以下简称FD)和水自动售货机(WD)。每个售货机由一个独立的定时器控制,定时器的默认设置为8小时,也可以设?煌氖奔涠巍C康币桓龆ㄊ逼髦卸希琲DFD根据判断的结果,即食物售货机还是水售货机发出的中断,然后送出食物或水。每次送出的食物或水的数量是固定的。

iDFD有两组指示器,每个自动售货机一组。每组指示器包含3个同样的指示器,分别标识为“Okey”、“Low”、“Empty”。每次送出食物或水之后,iDFD都将检查食物和水的存量并及时变更指示器。

iDFD通过一条安全线路连到Internet。iDFD需要授权用户来设置或修改定时器、判断食物箱中食物的数量以及水箱中水的瓶数。当因售出食物或水而使相应的指示器变为“Low”或“Empty”时,iDFD的授权用户会收到一封E-mail。

iDFD由一个嵌入式微处理器和一个控制软件控制。控制软件完成上述所有功能。

试着用以下三步设计测试的输入,以测试控制软件:

(a) 标识所有的原因和结果。

(b) 画出因果图,将(a)中找到的原因和结果联系起来。

(c) 将(b)中画出的因果图转化为判定表。

(d) 从(c)中的判定表生成测试用例。

在执行上述各步骤时,需要排除iDFD需求中的二义性。同时,考虑将食物自动售货机与水自动售货机的测试输入区分开。

2.21在例2.19中,我们忽略了客户选择对GUI变化产生的影响。例如,当客户选择CPU 3时,显示器窗口中的内容从显示所有三个显示器变到只显示M 30一个显示器。

(a) 标识例2.19中所有这种与GUI相关的结果。

(b) 画出因果图,将例2.19中的原因与(a)中标识的结果联系起来。

(c) 将(b)中画出的因果图转化为判定表。

(d) 用(c)中的判定表生成测试用例。

2.22考虑图2-24中的4个因果图。

(a) 针对图中的每个因果图,不使用表2-4中的启发式知识,生成使结果Ef处于1状态的输入条件(原因)组合。

(b) 现在利用表2-4中的启发式知识,减少(a)中生成的输入条件组合的数量。针对每个因果图,各删除了多少个输入条件组合?

(c) 假如还有别的输入条件组合也能满足,(b)中生成的输入条件组合是唯一的并且数量也是最小的吗?

 
图2-24 练习2.22中的因果图

2.23构造一个实现示例I,说明应用表2-4中的启发式知识H2将会遗漏至少一个本能检测出I中错误的测试用例。

2.24考虑表2-4中启发式知识H1、H4的下面修改版本:

H1:列举出任一种使n1=n2=0成立的输入组合。

H4:列举出所有使n1=n2=1成立的输入组合。

讨论为什么以上启发式知识不合理(或合理)。

2.25针对例2.19:

(a) 采用第2.6.3节中的算法CEGDT构造一个判定表,在构造判定表时使用表2-4中的启发式知识。

(b) 从判定表生成一个测试集。

2.26针对例2.20,利用表2-4中的启发式知识,减少判定表中的组合。给定下列原因,生成一个测试集:

C1:用户选择“Save As”

C2:用户选择“Open”

C3:用户从相关窗口中输入一个大于99的整数

C4:用户从一列表中选择一个选项“High”或“Medium”

2.27考虑关系表达式Ec:2*r<s+t,其中,r、s、t是浮点变量。构造Ec的3个故障版本,使其分别包含off-by-ε、off-by-ε*、off-by-ε+故障,注意,选择适当的ε值。

2.28考虑条件C:(a+1>b)∧(c=d),其中,a、b、c、d都是类型相匹配的变量。

(a) 设S1={(>,=),(>,>),(>,<),(=,=),(<,=)}是C上的约束集。参照例2.25,构造一个测试集T1,使得T1满足S1,并证明T1是BRO充分的。

(b) 考虑C上的约束集合S2={(+ε,=),(=,-ε),(-ε,=),(+ε,+ε)}。构造一个测试集T2,使得T2满足S2。假设ε=1,T2是BRE充分的吗?

2.29设A={(<,=),(>,<)}、B={(t,=),(t,>),(f,<)}是两个约束集合,计算A×B和AB。

2.30考虑例2.28中的谓词p2:(a+b<c)∧﹁p∨(r>s)。证明:任何通过向p2导入一个或多个单/多布尔运算符故障而得到的谓词p′2,表2-7的4个测试用例中至少有一个测试用例针对p′2的真值与针对p2的不同。

2.31考虑例2.29中的谓词pr:(a+b<c)∧﹁p∨(r>s)。证明:任何通过向pr导入一个或多个单/多布尔运算符、关系运算符故障而得到的谓词p′r,表2-8的5个测试用例中至少有一个测试用例针对p′r的真值与针对pr的不同。

2.32针对谓词pr:(a+b<c)∧﹁p∨(r>s),表2-8中BRO充分的测试集TBRO比表2-7中BOR充分的测试集TBOR多一个测试用例。

(a) 是否能从pr导出一个故障谓词p′r,使得TBRO能将pr、p′r区分开,而TBOR却区分不开。

(b) 是否能从pr导出一个故障谓词p′r,使得TBOR能将pr、p′r区分开,而TBRO却区分不开。

考虑的故障模型只限于第2.7.2小节描述的故障模型。

2.33构造一个谓词pr及其BRO充分的测试集TBRO、BRE充分的测试集TBRE。请问,当ε取何值时,测试集TBRO与TBRE的故障检测能力相同。

2.34(a) 证明:从BRO约束集可以方便地导出BRE约束集,只需简单地分别将约束 (>) 、(<)替换成约束(+ε)、(-ε) 即可,约束(=)保持不变。

(b) 解释:为什么一个BRO充分的测试集不一定是BRE充分的。

(c) 一个BRE充分的测试集总是BRO充分或BOR充分的吗?

(d) 一个BRO充分的测试集总是BOR充分的吗?

2.35设谓词pr最多包含n个AND或OR运算符,证明:

 

2.36在自底向上遍历谓词抽象语法树生成约束集时,算法BOR-CSET、BRO-CSET和BRE-CSET都用到了集合的onto积(),证明:如果不用,而用笛卡儿积(×)运算,产生的约束集的规模会更大一些。

2.37当对某个包含一个或多个非奇异表达式的谓词应用算法BOR-CSET、BRO-CSET或BRE-CSET时,会出现什么问题?提示:假设谓词为pr:(a+b)(bc),选用上面任意一个算法,回答此问题。

2.38采用算法BOR-CSET设计谓词pr:a+b的测试用例集。

(a) 设计的测试用例集能确保检测出pr实现中的缺失布尔变量故障吗?比如,因缺失布尔变量故障,谓词pr变为a。

(b) 设计的测试用例集能确保检测出pr实现中的冗余布尔变量故障吗?比如,因冗余布尔变量故障,谓词pr变为a+b+c,c是冗余变量。

2.39证明,在算法MI-CSET中:

(a) 对所有1≤i≤n,Stei≠。

(b) 对于pr中的不同积项ei,FSeji可能并非互不相交,且可能为空。

2.40采用例2.32中导出的约束集SE证明:从SE得到的测试用集,针对谓词E:a(bc+bd)的下列错误实现,至少有一个测试用例使其真值与E不同。

(i) a(bc+bd)缺失NOT运算符

(ii) a(bc+bd)    不正确的NOT运算符

(iii) a+(bc+bd)   不正确的OR运算符

(iv) a+(bcbd)    不正确的AND运算符

(v) a+(bc+bd)    不正确的OR和NOT运算符

2.41(a) 采用算法BOR-MI-CSET,导出下面谓词pr的约束集:

(a<b)∧(((r>s)∧u)∨(a≥b)∨((c<d)∨(f=g))∧(v∧w))

其中,a,b,c,d,f,g,r,s是整型变量;u,v,w是布尔变量。

(b) 采用(a)中导出的约束集,构造谓词pr的测试集T。

(c) 验证测试集T能将pr的下面错误实现与pr区分开来:

(i) (a<b)∧((﹁(r>s)∧u)∨(a≥b)∨((c<d)∨(f=g))∧(v∧w))不正确的NOT运算符

(ii) (a<b)∧(((r>s)∧u)∨(a≥b)∧((c<d)∨(f=g))∧(v∧w))不正确的AND运算符

(iii) (a<b)∨(((r>s)∨u)∨(a≥b)∨((c<d)∨(f=g))∧(v∧w))两个不正确的OR运算符

(iv) (a<b)∨(((r>s)∧u)∨(a≥b)∨((c<d)∨(f=g))∧(v∧w))不正确的OR和NOT运算符

2.42考虑如图2-25所示的因果图,它表示了几个原因与结果E之间的关系。

 
图2-25练习2.42中的因果图。a,b,c,d是整型
变量;u:a<b;v:c>d;w是布尔变量

(a) 采用第2.6.3节中描述的算法CEGDT生成一个测试集TCEG,用于测试E的实现。

(b) 利用图2-25所示的因果图,构造一个布尔表达式pr,选择算法BOR-CSET、BRO-CSET、BRE-CSET、BOR-MI-CSET之一,为pr设计一个测试集TP。提示:假设在关系表达式中存在错误,作为原因,它会影响到结果;根据导出的约束集生成测试集TP。

(c) 假设u被错误地实现成a<b+1。测试集TCEG包含能检测出该错误的测试用例吗?测试集TP呢?


【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

循序渐进Oracle——数据库管理、优化与备份恢复

本书从基础知识入手,详细讨论了Oracle数据库的创建、OEM及iSQL*Plus等工具的使用、Oracle的字符集知识、用户的创建与管理、表空间和数据文...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊