测试用例设计方法1等价类划分1.1理论知识等价类划分是一种典型的黑盒测试方法。这一方法完全不考虑程序的内部结构,只依据程序的规格说明来设计测试用例。等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭示程序中的错误都是等效的。等价类合理地假设:某个等价类的代表值,与该等价类的其他值,对于测试来说是等价的。因此,可以把全部的输入数据划分成若干的等价类,在每一个等价类中取一个数据来进行测试。这样就能以较少的具有代表性的数据进行测试,而取得较好的测试效果。等价类划分是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例.该方法是一种重要的,常用的黑盒测试用例设计方法.1)分类:划分等价类:等价类是指某个输入域的子集合.在该子集合中,各个输入数据对于揭露程序中的错误都是等效的.并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试.因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据.取得较好的测试结果.等价类划分可有两种不同的情况:有效等价类和无效等价类.有效等价类:是指对于程序的规格说明来说是合理的,有意义的输入数据构成的集合.利用有效等价类可检验程序是否实现了规格说明中所规定的功能和性能.无效等价类:与有效等价类的定义恰巧相反.设计测试用例时,要同时考虑这两种等价类.因为,软件不仅要能接收合理的数据,也要能经受意外的考验.这样的测试才能确保软件具有更高的可靠性.2)划分等价类的方法:下面给出六条确定等价类的原则:①在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类.②在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可确立一个有效等价类和一个无效等价类.③在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类.④在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类.⑤在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则).⑥在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类.3)原则:设计测试用例:在确立了等价类后,可建立等价类表,列出所有划分出的等价类:输入条件有效等价类无效等价类..................然后从划分出的等价类中按以下三个原则设计测试用例:①为每一个等价类规定一个唯一的编号.②设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖地有效等价类,重复这一步.直到所有的有效等价类都被覆盖为止.③设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步.直到所有的无效等价类都被覆盖为止.之所以这么做,是因为程序中对于某一个错误输入的检查,往往会屏蔽对于其他错误输入的检查。因此,必须针对每一个无效等价类分别设计测试用例1.2实例1、保险费率计算人人保险公司承担人寿保险已有多年历史,该公司保费计算方式为投保额*保险率,保险率又依点数不同而有别,10点以上费率为0.6%,10点以下费率为0.1%:输入数据说明年龄20~39岁6点40~59岁4点60岁以上20岁以下2点性别MALE5点FEMALE3点婚姻已婚3点未婚5点扶养人数一人扣0.5点最多扣3点(四舍五入取整数)一、分析输入数据型式。年龄:一或两位数字。性别:以英文「Male」、Female」、「M」、「F」表示。婚姻:「已婚」、「未婚」。扶养人数:空白或一位数字。保险费率:10点以上,10点以下。二、划分输入数据1.年龄数字范围1~99等价类20~39岁40~59岁60岁以上20岁以下2.性别类型英文字之集合等价类类型:英文字集合:「Male」、「M」集合:「Female」、「F」3.婚姻等价类已婚未婚4.扶养人数选择项扶养人数可以有,也可没有范围1~9等价类空白1~6人6人以上5.保险费率等价类10点以上10点以下三、设计输入数据。有效等价类无效等价类无效等价类1.年龄20~39任选一个2.年龄40~59任选一个3.年龄60岁以上、20岁以下任选一个小於1,选一个大於99,选一个4.性别英文Male,M,F,Female任选一个非英文字如「男」5.性别英文Male,M任选一个非Male,M,Female,F之任意字元,如「Child」6.性别英文Female,F任选一个非Male,M,Female,F之任意字符,如「Child」7.婚姻「已婚」非「已婚」或「未婚」之任意字符,如「离婚」8.婚姻「未婚」非「已婚」或「未婚」之任意字符,如「离婚」9.扶养人数空白10.扶养人数1~6小於1,选一个11.扶养人数7~9大於9,选一个12.保险费率10点以上(0.6%)13.保险费率10点以下(0.6%)四、根据以上分析设计测试用例:用例编号年龄性别婚姻扶养人数保险费率备注1.27Female未婚空白0.6%有效年龄:20~39岁性别:集合「Female,F」婚姻:集合「未婚」扶养人数:空白保险费率:0.6%2.50Male已婚20.6%有效年龄:40~59岁性别:集合「Male,M」婚姻:集合「已婚」扶养人数:1~6人3.70F未婚70.1%有效年龄:60岁以上或20岁以下性别:集合「Female,F」婚姻:集合「未婚」扶养人数:6人以上4.0M已婚4无法推算年龄类无效,因此无法推算保险费率5.100Female未婚5无法推算年龄类无效,因此无法推算保险费率6.1男已婚6无法推算性别类无效,因此无法推算保险费率7.99Child未婚1无法推算性别类无效,因此无法推算保险费率8.30Male离婚3无法推算婚姻类无效,因此无法推算保险费率.9.75Female未婚0无法推算扶养人数类无效,因此无法推算保险费率10.17Male已婚10无法推算扶养人数类无效,因此无法推算保险费率2边界值分析法2.1理论知识边界值分析方法是对等价类划分方法的补充,也是一种黑盒测试方法,适度等价类分析方法的一种补充,由长期的测试工作经验得知,大量的错误是发生在输入或输出的边界上。因此针对各种边界情况设计测试用例,可以查出更多的错误。(1)边界值分析方法的考虑:长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部.因此针对各种边界情况设计测试用例,可以查出更多的错误.使用边界值分析方法设计测试用例,首先应确定边界情况.通常输入和输出等价类的边界,就是应着重测试的边界情况.应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据.(2)基于边界值分析方法选择测试用例的原则:1)如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据.2)如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少一,比最大个数多一的数作为测试数据.3)根据规格说明的每个输出条件,使用前面的原则1).4)根据规格说明的每个输出条件,应用前面的原则2).5)如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例.6)如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例.7)分析规格说明,找出其它可能的边界条件.2.2实例找零钱最佳组合假设商店货品价格(R)皆不大于100元(且为整数),若顾客付款在100元内(P),求找给顾客之最少货币个(张)数?(货币面值50元(N50),10元(N10),5元(N5),1元(N1)四种)一、分析输入的情形。R1000R=100R=0P100R=P=100PR二、分析输出情形。N50=1N50=04N10=1N10=0N5=1N5=04N1=1N1=0三、分析规格中每一决策点之情形,以RR1,RR2,RR3表示计算要找50,10,5元货币数时之剩余金额。R100R=0P100PRRR1=50RR2=10RR3=5四、由上述之输入/输出条件组合出可能的情形。1、R1002、R=03、0R=100,P1004、0R=100,PR5、0R=100,R=P=100,RR=506、0R=100,R=P=100,RR=497、0R=100,R=P=100,RR=108、0R=100,R=P=100,RR=99、0R=100,R=P=100,RR=510、0R=100,R=P=100,RR=40R=100,R=P=100,RR=10R=100,R=P=100,RR=0五、为满足以上之各种情形,测试资料设计如下:1.货品价格=1012.货品价格=03.货品价格=-14.货品价格=100,付款金额=1015.货品价格=100,付款金额=996.货品价格=50,付款金额=100RR=507.货品价格=51,付款金额=100RR=498.货品价格=90,付款金额=100RR=109.货品价格=91,付款金额=100RR=910.货品价格=95,付款金额=100RR=511.货品价格=96,付款金额=100RR=412.货品价格=99,付款金额=100RR=113.货品价格=100,付款金额=100RR=03错误推测法1、定义:基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性的设计测试用例的方法.2、错误推测方法的基本思想:列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例。1)例如,输入数据和输出数据为0的情况;输入表格为空格或输入表格只有一行。这些都是容易发生错误的情况。可选择这些情况下的例子作为测试用例。2)例如,前面例子中成绩报告的程序,采用错误推测法还可补充设计一些测试用例:I.程序是否把空格作为回答II.在回答记录中混有标准答案记录III.除了标题记录外,还有一些的记录最后一个字符即不是2也不是3IV.有两个学生的学号相同V.试题数是负数。3)再如,测试一个对线性表(比如数组)进行排序的程序,可推测列出以下几项需要特别测试的情况:I.输入的线性表为空表;II.表中只含有一个元素;III.输入表中所有元素已排好序;IV.输入表已按逆序排好;V.输入表中部分或全部元素相同。4因果图方法4.1理论知识前面介绍的等价类划分方法和边界值分析方法,都是着重考虑输入条件,但未考虑输入条件之间的联系,相互组合等.考虑输入条件之间的相互组合,可能会产生一些新的情况.但要检查输入条件的组合不是一件容易的事情,即使把所有输入条件划分成等价类,他们之间的组合情况也相当多.因此必须考虑采用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来考虑设计测试用例.这就需要利用因果图(逻辑模型).因果图方法最终生成的就是判定表.它适合于检查程序输入条件的各种组合情况.利用因果图生成测试用例的基本步骤:(1)分析软件规格说明描述中,哪些是原因(即输入条件或输入条件的等价类),哪些是结果(即输出条件),并给每个原因和结果赋予一个标识符.(2)分析软件规格说明描述中的语义.找出原因与结果之间,原因与原因之间对应的关系.根据这些关系,画出因果图.(3)由于语法或环境限制,有些原因与原因之间,原因与结果之间的组合情况不不可能出现.为表明这些特殊情况,在因果图上用一些记号表明约束或限制条件.(4)把因果图转换为判定表.(5)把判定表的每一列拿出来作为依据,设计测试用例.从因果图生成的测试用例(局部,组合关系下的)包括了所有输入数据的取TRUE与取FALSE的情况,构成的测试用例数目达到最少,且测试用例数目随输入数据数目的增加而线性地增加.前面因果图方法中已经用到了判定表.判定表(DecisionTable)是分析和表达多逻辑条