1、.1u测试的方法与技术测试的方法与技术软件测试的软件测试的策略和方法策略和方法静态测静态测试方法试方法动态测动态测试方法试方法人工测试方法人工测试方法计算机辅助静计算机辅助静态分析方法态分析方法白盒测试方法白盒测试方法黑盒测试方法黑盒测试方法.2.3软件输入输入不深入代码细节的测不深入代码细节的测试方法称为试方法称为动态黑盒动态黑盒测试。测试。软件测试员充当客户软件测试员充当客户来使用。来使用。输出输出测试对象测试对象一个黑盒子一个黑盒子动态黑盒测试动态黑盒测试 戴上眼罩测试软件戴上眼罩测试软件.4 1.等价分类法等价分类法 所谓等价分类,就是把所有可能的输入数据(有效的和所谓等价分类,就是把
2、所有可能的输入数据(有效的和无效的)划分成若干个无效的)划分成若干个等价类等价类( (等价类是指某个输入域的子等价类是指某个输入域的子集合。集合。 在该集合中,各个输入数据对于揭露程序中的错误在该集合中,各个输入数据对于揭露程序中的错误都是等价的都是等价的) )。 因此,可以把全部输入数据合理地划分为若因此,可以把全部输入数据合理地划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条干等价类,在每一个等价类中取一个数据作为测试的输入条件,这样就可以少量的代表性测试数据,来取得较好的测试件,这样就可以少量的代表性测试数据,来取得较好的测试结果。结果。.5WindowsWindows计算器
3、程序实例分析计算器程序实例分析(1 1)你测试了)你测试了1+11+1,1+2,1+31+2,1+3和和1+41+4之后,还有必要测试之后,还有必要测试1+51+5和和1+61+6吗?你能放心地认为它们正确吗?吗?你能放心地认为它们正确吗?(2 2)1+151+15与与1+999999999999999999999999999999991+99999999999999999999999999999999有有什么区别呢?什么区别呢?(3 3)测试计算器中)测试计算器中“菜单菜单”命令中的复制功能(单击命令中的复制功能(单击复制命令,在菜单弹出时键入复制命令,在菜单弹出时键入c c或者或者C C,
4、或者按,或者按Ctrl+c,Ctrl+c,这几种方法在设计测试用例时可以缩减为按这几种方法在设计测试用例时可以缩减为按Ctrl+cCtrl+c组组合键合键) )注意注意:在寻找等价类划分时,考虑把软件具有相似输入、:在寻找等价类划分时,考虑把软件具有相似输入、相似输出、相似操作的分在一组,这些组就是等价划分。相似输出、相似操作的分在一组,这些组就是等价划分。.6 是指对于程序的规格说明来说,是是指对于程序的规格说明来说,是合理的合理的 有意义的输入数据有意义的输入数据构成的集合。利用它可以检构成的集合。利用它可以检 验程序是否实现预先规定的功能和性能。验程序是否实现预先规定的功能和性能。 (1
5、)有效等价类)有效等价类 .7 是指对于程序的规格说明来说,是是指对于程序的规格说明来说,是不合理不合理 的的、无意义的输入数据无意义的输入数据构成的集合。程序员主构成的集合。程序员主 要利用这一类测试用例来检查程序中功能和性要利用这一类测试用例来检查程序中功能和性 能的实现是否能的实现是否不符合不符合规格说明要求。规格说明要求。 (2)无效等价类)无效等价类 .8n 划分等价类不仅要要考虑代表划分等价类不仅要要考虑代表“有效有效”输入值输入值 的有效等价类,还需考虑代表的有效等价类,还需考虑代表“无效无效”输入值的无输入值的无 效等价类。效等价类。 采用等价分类法要注意以下两点采用等价分类法
6、要注意以下两点: :n 每一无效等价类至少要用一个测试用例,不每一无效等价类至少要用一个测试用例,不 然就可能漏掉某一类错误,但允许若干有效等价然就可能漏掉某一类错误,但允许若干有效等价 类合用同一个测试用例,以便进一步减少测试的类合用同一个测试用例,以便进一步减少测试的 次数。次数。 .9如何划分等价类?如何划分等价类?有效等价类有效等价类( (合理等价类合理等价类) )无效等价类无效等价类( (不合理等价类不合理等价类) ) .10p划分等价类的规则划分等价类的规则 (5 5个个) )(1)(1)如果输入条件规定了如果输入条件规定了取值范围取值范围,可定义一个有效等价,可定义一个有效等价
7、类和两个无效等价类。类和两个无效等价类。例例1.1:1.1: 输入值是学生成绩,范围是输入值是学生成绩,范围是0 0100100。0 1000 100 有效有效等价类等价类00成绩成绩100100无效等价类无效等价类 成绩成绩100100 无效等价类无效等价类 成绩成绩01818岁,性别男,地区岁,性别男,地区河南河南的人的人。 答案答案: : 有效等价类:有效等价类:1 1个:年龄个:年龄1818岁岁andand性别男性别男andand地区地区河南河南 无效等价类:无效等价类:3 3个:年龄个:年龄=18=18岁,岁,or or 性别性别!男男,oror地区地区!河南河南.15p根据等价类创
8、建测试用例的步骤根据等价类创建测试用例的步骤建立等价类表,列出所有划分出的等价类:建立等价类表,列出所有划分出的等价类:.16(1)(1)为每一个等价类规定一个唯一编号;为每一个等价类规定一个唯一编号;(2)(2)设计一个新的测试用例,使其设计一个新的测试用例,使其尽可能多地覆盖尚未被尽可能多地覆盖尚未被覆盖的有效等价类,覆盖的有效等价类,重复这一步,直到所有的有效重复这一步,直到所有的有效等价类都被覆盖为止;等价类都被覆盖为止;(3)(3)设计一个新的测试用例,使其设计一个新的测试用例,使其仅覆盖一个尚未被覆盖仅覆盖一个尚未被覆盖的无效等价类,的无效等价类,重复这一步,直到所有的无效等价重复
9、这一步,直到所有的无效等价类都被覆盖为止。类都被覆盖为止。从划分出的等价类中按以下原则设计测试用例:从划分出的等价类中按以下原则设计测试用例:.17p常见等价类划分测试形式常见等价类划分测试形式针对是否对无效数据进行测试,可以将等价类测试分为 标准等价类测试和健壮等价类测试。标准等价类测试标准等价类测试不考虑无效数据值,测试用例使用每个等价类中的一个值。健壮等价类测试健壮等价类测试主要的出发点是考虑了无效等价类。对有效输入,测试用例从每个有效等价类中取一个值; 对无效输入,一个测试用例有一个无效值,其他值均取有效值。.18p使用等价类划分法测试的实例使用等价类划分法测试的实例例1 三角形问题分
10、析:在多数情况下,是从输入域划分等价类的,但并非不能从被测程序的输出域反过来定义等价类,事实上,这对于三角形问题却是最简单的划分方法。 在三角形问题中,有四种可能的输出:等边三角形、等腰三角形、一般三角形和非三角形。利用这些信息能够确定下列输出(值域)等价类。R1=a,b,c:边为a,b,c 的等边三角形R2=a,b,c:边为a,b,c 的等腰三角形R3=a,b,c:边为a,b,c 的一般三角形R4=a,b,c:边为a,b,c 不能构成三角形标准等价类测试不考虑无效数据值,测试用例使用每个等价类中的一个值。.19三角形问题的4个标准等价类测试用例.20三角形问题的7个健壮等价类测试用例.21例
11、例2:2:某报表处理系统要求用户输入处理报表的日期,日期某报表处理系统要求用户输入处理报表的日期,日期限制在限制在20052005年年1 1月至月至20092009年年1212月,即系统只能对该段期间月,即系统只能对该段期间内的报表进行处理,如日期不在此范围内,则显示输入错内的报表进行处理,如日期不在此范围内,则显示输入错误信息。系统日期规定由年、月的误信息。系统日期规定由年、月的6 6位数字字符组成,前位数字字符组成,前四位代表年,后两位代表月。四位代表年,后两位代表月。 如何用等价类划分法设计测试用例如何用等价类划分法设计测试用例, ,来测试程序的日期来测试程序的日期检查功能?检查功能?.
12、22第一步:等价类划分第一步:等价类划分第二步:为有效等价类设计测试用例。(多个有效等第二步:为有效等价类设计测试用例。(多个有效等价类可使用一个测试用例)价类可使用一个测试用例)第三步:为每一个无效等价类设至少第三步:为每一个无效等价类设至少 设计一个测试设计一个测试用例用例.23第一步:等价类划分第一步:等价类划分输入等价类输入等价类 有效等价类有效等价类 无效等价类无效等价类 报表日期的报表日期的类型及长度类型及长度6 6位数字字符位数字字符(1)(1)有非数字字符有非数字字符 (4)(4)少于少于6 6个数字字符个数字字符 (5)(5)多于多于6 6个数字字符个数字字符 (6)(6)年
13、份范围年份范围在在2005200520092009之间之间 (2)(2)小于小于2005 (7)2005 (7)大于大于2009 (8)2009 (8)月份范围月份范围在在1 11212之间之间(3)(3)“报表日期报表日期”输入条件的等价类表输入条件的等价类表小于小于1 (9)1 (9)大于大于12 (10)12 (10).24第二步:为有效等价类设计测试用例对表中编号为第二步:为有效等价类设计测试用例对表中编号为1 1,2 2,3 3的的3 3个有效等价类用一个测试用例覆盖:个有效等价类用一个测试用例覆盖: 测试数据 期望结果 覆盖范围200705200705等价类等价类(1)(2)(3)
14、(1)(2)(3)输入有效输入有效.25第三步:为每一个无效等价类设至少设计一个测试用例第三步:为每一个无效等价类设至少设计一个测试用例 不能出现相同不能出现相同的测试用例的测试用例 测试数据测试数据 期望结果期望结果 覆盖范围覆盖范围001001MAYMAY等价类等价类(4)(4)输入无效输入无效2006520065等价类等价类(5)(5)输入无效输入无效20070052007005等价类等价类(6)(6)输入无效输入无效200420040505等价类等价类(7)(7)输入无效输入无效201020100505等价类等价类(8)(8)输入无效输入无效200820080000等价类等价类(9)(
15、9)输入无效输入无效200620061313等价类等价类(10)(10)输入无效输入无效 本例的本例的1010个等价类至个等价类至少需要少需要8 8个测试用例个测试用例.26例3.在某网站申请免费信箱时,要求用户必须输入用户名、密码及确认密码,对每一项输入条件的要求如下: 用户名要求为4位以上,16位以下,使用英文字母、数字、“-”、“_”,并且首字符必须为字母或数字;密码要求为616位之间,只能使用英文字母、数字以及“-”、“_”,并且区分大小写。分析如下:分析程序的规格说明,列出等价类表(包括有效等价类和无效等价类),如表4-5所示。.27表4-5 等价类表.28根据上述等价类表,设计测试
16、用例如表4-6所示。表4-6 测试用例.29例4. 保险公司计算保费费率的程序 某保险公司的人寿保险的保费计算方式为: 投保额保险费率 其中,保险费率依点数不同而有别,10点及10点以上保险费率为0.6%,10点以下保险费率为0.1%;而点数又是由 投保人的年龄、性别、婚姻状况和抚养人数来决定,具体规则如下:.30(1)分析程序规格说明中给出和隐含的对输入条件的要求,列出等价类表(包括有效等价类和无效等价类)。年龄:一位或两位非零整数,值的有效范围为199性别:一位英文字符,只能取值M或F婚姻:字符,只能取值已婚或未婚抚养人数:空白或一位非零整数(19)点数 :一位或两位非零整数,值的范围为1
17、99(2)根据(1)中的等价类表,设计能覆盖所有等价类的 测试用例。.31.32.332. 2. 边界值分析法(边界值分析法(Boundary Value AnalysisBoundary Value Analysis)软件边界与悬崖很类似软件边界与悬崖很类似测试内点测试内点测试外点测试外点被测试被测试子域子域.34v边界值分析法与等价类划分法区别边界值分析法与等价类划分法区别(1)(1)边界值分析不是从某等价类中随便挑一个作为边界值分析不是从某等价类中随便挑一个作为代表,而是使这个等价类的每个边界都要作为代表,而是使这个等价类的每个边界都要作为测试条件。测试条件。(2)(2)边界值分析不仅考
18、虑输入条件,还要考虑输出边界值分析不仅考虑输入条件,还要考虑输出空间产生的测试情况(空间产生的测试情况(NextDateNextDate函数用例)。函数用例)。.35 采用边界值分析法来选择测试用例,可使采用边界值分析法来选择测试用例,可使 得被测程序能在得被测程序能在边界值及其附近边界值及其附近运行,从而更运行,从而更 有效地暴露出程序中潜藏的错误。有效地暴露出程序中潜藏的错误。边界值分析法边界值分析法.36 边界值分析法边界值分析法.37.381: Rem Creat a 10 element integer array2: Rem Initialize each element to -
19、13: Dim data(10) As Integer4: Dim i As Integer5: For i=1 To 106: data(i)= -17: Next I8: End演示边界条件缺陷的简单演示边界条件缺陷的简单BASIC程序程序.39 边界值设计原则边界值设计原则(1 1)如果输入条件规定了值的)如果输入条件规定了值的范围范围,则应取刚达到这个范,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。输入数据。 例如,例如,如果程序的规格说明中规定:如果程序的规格说明中规定:“重量在重量在1010公斤至公
20、斤至5050公斤范围内的邮件,其邮费计算公式为公斤范围内的邮件,其邮费计算公式为 ”。作为测。作为测试用例,我们应取试用例,我们应取1010及及5050,还应取,还应取10.01,49.99,9.9910.01,49.99,9.99及及50.0150.01等。等。.40 (2 2)如果输入条件规定了值的)如果输入条件规定了值的个数个数,则用最大个数、最,则用最大个数、最小个数、比最小个数少一、比最大个数多一的数作为测试数小个数、比最小个数少一、比最大个数多一的数作为测试数据。据。 例如,例如,一个输入文件应包括一个输入文件应包括1-2551-255个记录,则测试用例可个记录,则测试用例可取取1
21、 1和和255255,还应取,还应取0 0及及256256等。等。.41 3.3.将规则将规则1 1和和2 2应用于应用于输出条件输出条件,即设计测试用例使输,即设计测试用例使输出值达到边界值及其左右的值。出值达到边界值及其左右的值。 例如,例如,一程序属于情报检索系统,要求每次一程序属于情报检索系统,要求每次”最少显最少显示示1 1条、最多显示条、最多显示4 4条情报摘要条情报摘要”,这时我们应考虑的测,这时我们应考虑的测试用例包括试用例包括1 1和和4 4,还应包括,还应包括0 0和和5 5等。等。 再如,再如,一个学生成绩管理系统规定,只能查询一个学生成绩管理系统规定,只能查询95-98
22、95-98级大学生的各科成绩,可以设计测试用例,使得查询范级大学生的各科成绩,可以设计测试用例,使得查询范围内的某一届或四届学生的学生成绩,还需设计查询围内的某一届或四届学生的学生成绩,还需设计查询9494级、级、9999级学生成绩的测试用例(不合理输出等价类)。级学生成绩的测试用例(不合理输出等价类)。l由于输出值的边界不与输入值的边界相对应,所以要检查输出值的由于输出值的边界不与输入值的边界相对应,所以要检查输出值的边界不一定可能,要产生超出输出值之外的结果也不一定能做到,边界不一定可能,要产生超出输出值之外的结果也不一定能做到,但必要时还需试一试。但必要时还需试一试。.42(4 4)如果
23、程序的规格说明给出的输入域或输出域是)如果程序的规格说明给出的输入域或输出域是有序有序集合集合(如顺序文件、线性表等),则应选取集合的第一(如顺序文件、线性表等),则应选取集合的第一个元素和最后一个元素作为测试用例。个元素和最后一个元素作为测试用例。 (5 5)如果程序中使用了一个内部数据结构,则应当选择)如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。这个内部数据结构的边界上的值作为测试用例。 例如,例如,如果程序中定义了一个数组,其元素下标的下如果程序中定义了一个数组,其元素下标的下界是界是0 0,上界是,上界是100100,那么应选择达到这个数组下标
24、边界,那么应选择达到这个数组下标边界的值,如的值,如0 0与与100100,作为测试用例。,作为测试用例。(6 6)分析规格说明,找出其他可能的边界条件。)分析规格说明,找出其他可能的边界条件。.43 程序中判断输入日期(年月)是否有效,假设使用如下语句:程序中判断输入日期(年月)是否有效,假设使用如下语句: IFIF(ReportDate=MaxDateReportDate=MinDateReportDate=MinDate) THEN THEN 产生指定日期报表产生指定日期报表 ELSE ELSE 显示错误信息显示错误信息ENDIFENDIF如果将程序中的如果将程序中的“=”误写为误写为“
25、 ”,则上例的等价类划分中所有,则上例的等价类划分中所有测试用例都不能发现这一错误,采用边界值分析法的测试用例测试用例都不能发现这一错误,采用边界值分析法的测试用例如下表所示。如下表所示。 n对上述报表处理系统中的报表日期输入条件,以下对上述报表处理系统中的报表日期输入条件,以下用边界值分析设计测试用例。用边界值分析设计测试用例。.44输入输入条件条件报表日报表日期的类期的类型及长型及长度度1 1个数字字符个数字字符5 5个数字字符个数字字符7 7个数字字符个数字字符有有1 1个非数字字符个非数字字符全部是非数字字符全部是非数字字符6 6个数字字符个数字字符显示出错显示出错显示出错显示出错显示
26、出错显示出错显示出错显示出错显示出错显示出错输入有效输入有效日期日期范围范围月份月份范围范围“报表日期报表日期”边界值分析法测试用例边界值分析法测试用例测试用例说明测试用例说明测试数据测试数据期望结果期望结果选取理由选取理由5 52006520065200700520070052008.52008.5MAY-MAY-200605200605月份为月份为1 1月月月份为月份为1212月月月份月份11212200501200501200512200512200500200500200513200513200501200501200912200912200500200500200913200913输
27、入有效输入有效输入有效输入有效显示出错显示出错显示出错显示出错输入有效输入有效输入有效输入有效显示出错显示出错显示出错显示出错在有效范围在有效范围边界上选取边界上选取数据数据仅有仅有1 1个合法字符个合法字符比有效长度少比有效长度少1 1比有效长度多比有效长度多1 1只有只有1 1个非法字符个非法字符6 6个非法字符个非法字符类型及长度均有效类型及长度均有效最小日期最小日期最大日期最大日期刚好小于最小日期刚好小于最小日期刚好大于最大日期刚好大于最大日期最小月份最小月份最大月份最大月份刚好小于最小月份刚好小于最小月份刚好大于最大月份刚好大于最大月份.45 边界值分析法与等价类划分法比较边界值分析
28、法与等价类划分法比较 (1)(1)等价分类法的测试数据是在各个等价类允许的值域内任意等价分类法的测试数据是在各个等价类允许的值域内任意选取的,而边界值分析的测试数据必须在边界值附近选取。选取的,而边界值分析的测试数据必须在边界值附近选取。 (2) (2)一般地说,用边界值分析法设计的测试用例比等价分类法一般地说,用边界值分析法设计的测试用例比等价分类法的代表性更广,发现错误的能力也更强。但是对边界的分析的代表性更广,发现错误的能力也更强。但是对边界的分析与确定比较复杂,要求测试人员具有更多的经验和创造性。与确定比较复杂,要求测试人员具有更多的经验和创造性。 (3) (3)还需指出,有些包含的边
29、界情况比较简单,只需要分析输还需指出,有些包含的边界情况比较简单,只需要分析输入等价类。在有些情况下,除了考察输入值边界外,还需要入等价类。在有些情况下,除了考察输入值边界外,还需要考察考察输出值输出值和其他可能存在的边界。和其他可能存在的边界。.46例:假定被测程序是一个计算例:假定被测程序是一个计算x x的正弦值的正弦值sinsin(x x), ,其输出其输出具有具有3 3个边界值个边界值-1-1、0 0、1 1。在选择测试用例时,应使。在选择测试用例时,应使x x的的值分别产生上述的值分别产生上述的3 3种输出种输出边界值,即选取边界值,即选取-/2-/2、0 0、/2/2作为作为x x
30、的测试数据。的测试数据。.47 3. 3.错误猜测法错误猜测法 所谓猜测,就是猜测被测程序在哪些地方容易所谓猜测,就是猜测被测程序在哪些地方容易 出错,然后针对可能的薄弱环节来设计测试用例。出错,然后针对可能的薄弱环节来设计测试用例。 显然它比前两种方法更多地依靠测试人员的直觉与显然它比前两种方法更多地依靠测试人员的直觉与 经验。所以一般都先用前两方法设计测试用例,然经验。所以一般都先用前两方法设计测试用例,然后再用猜测法去补充一些例子作为辅助的手段。后再用猜测法去补充一些例子作为辅助的手段。错误猜测法错误猜测法.48.49错误推测法的基本思想基本思想是:列举出程序中所有可能有的错误和容易发生
31、错误的特殊情况,根据它们选择测试用例。显然,它比前两种方法更多地依靠测试人员的直觉和经验。所以,一般都先用前两种方法设计测试用例,然后用猜错法补充一些例子作为辅助手段。根据经验来设计测试用例的方法:根据经验来设计测试用例的方法:l 例如,数据测试中的:例如,数据测试中的:缺省值缺省值空白空白空值空值零值零值无无.50l 又如输入、输出数据为零是容易发生错误的情况;再如, 输入表格为空或输入表格只有一行是容易出错的情况等。例如对于一个排序程序,列出以下几项需特别测试的情况: (1)输入表为空。(2)输入表只含一个元素。(3)输入表中所有元素均相同。 (4)输入表中已排好序。l 仍以上述的报表日期
32、为例,在已经用等价分类法和边界值分析发设计过测试用例的基础上,还可用错误猜测法补充一些测试用例,例如:.514. 决策表法决策表法 4.1决策表法决策表法决策表通常由四个部分组成,如图4-1所示。条件桩条件桩:列出了问题的所有条件,通常认为列出的条件的先后次序无关紧要。动作桩:动作桩:列出了问题规定的可能采取的操作,这些操作的排列顺序没有约束。条件项:条件项:针对条件桩给出的条件列出所有可能的取值。动作项:动作项:与条件项紧密相关,列出在条件项的各组取值情况下应该采取的动作。规则:规则:一种条件取值组合和与其对应的动作组合(即判定表中贯穿条件项和动作项的一列)构成了判定表中的一个规则。条件取值
33、组合的数目就是规则的数目。.52图4-1 决策表的组成.53建立决策表的步骤:建立决策表的步骤: 列出条件桩和动作桩。 确定规则的个数,用来为规则编号。若有n个原因,由于每个原因可取0或1,故有2的n次方个规则。 完成所有条件项的填写。 完成所有动作项的填写。 合并相似规则,用以对初始决策表进行简化(见书P56)。 建立了决策表后,可针对决策表中的每一列有效规则设计一个测试用例,用以对程序进行黑盒测试。.54决策表最突出的优点:决策表最突出的优点:能够将复杂的问题按照各种可能的情况全部列举出来,简明并避免遗漏。因此,利用决策表能够设计出完整的测试用例集合。运用决策表设计测试用例,可以将条件理解
34、为输入,将动作理解为输出。4.2 实例分析实例分析 举例:以下列问题为例给出构造决策表的具体过程。举例:以下列问题为例给出构造决策表的具体过程。 如果某产品销售好并且库存低,则增加该产品的生产;如果该产品销售好,但库存量不低,则继续生产;若该产品销售不好,但库存量低,则继续生产;若该产品销售不好,且库存量不低,则停止生产。.55表4-2 决策表解法如下:解法如下:l确定规则的个数。对于本题有2个条件(销售、库存),每 个条件可以有两个取值,故有22=4种规则。l列出所有的条件桩和动作桩。l填入条件项。l填入动作项,得到初始决策表,如表4-2所示。.56 5. 5.因果图法因果图法 因果图法是借
35、助因果图法是借助图形图形来设计测试用例的一种系来设计测试用例的一种系 统方法。它适用于被测程序具有多种输入条件,统方法。它适用于被测程序具有多种输入条件, 程序的输出又依赖于输入条件的各种组合的情况。程序的输出又依赖于输入条件的各种组合的情况。 因果图是一种简化了的因果图是一种简化了的逻辑图逻辑图,它能直观地,它能直观地 表明程序输入条件(原因)和输出动作(结果)表明程序输入条件(原因)和输出动作(结果) 之间的相互关系。之间的相互关系。5.1 5.1 因果图法因果图法.57在等价类划分方法和边界值方法中未考虑输入条件的各在等价类划分方法和边界值方法中未考虑输入条件的各种组合,当输入条件比较多
36、时,输入条件组合的数目会种组合,当输入条件比较多时,输入条件组合的数目会相当大。相当大。因果图法是一种帮助人们系统地选择一组高效测试用例因果图法是一种帮助人们系统地选择一组高效测试用例的方法,它既考虑了输入条件的组合关系,又考虑了输的方法,它既考虑了输入条件的组合关系,又考虑了输出条件对输入条件的依赖关系,即因果关系,其测试用出条件对输入条件的依赖关系,即因果关系,其测试用例发现错误的效率比较高。例发现错误的效率比较高。因果图方法的因果图方法的特点特点是:是:考虑输入条件的组合关系;考虑输入条件的组合关系;考虑输出条件对输入条件的依赖关系,即因果关系;考虑输出条件对输入条件的依赖关系,即因果关
37、系;测试用例发现错误的效率高;测试用例发现错误的效率高;能检查出功能说明中的某些不一致或遗漏。能检查出功能说明中的某些不一致或遗漏。.58 在因果图中使用4种符号分别表示4种因果关系,如图5-1所示。用直线连接左右节点,其中左节点ci表示输入状态(或称原因),右节点ei表示输出状态(或称结果)。ci和ei都可取值0或1,0表示某状态不出现,1表示某状态出现。 (a)恒等 (b)非 (c)或 (d)与图5-1 因果图的基本符号 .59图中左边的结点表示原因,右边的结点表示结果图中左边的结点表示原因,右边的结点表示结果原因和结果之间的关系有:原因和结果之间的关系有:恒等:若恒等:若c1=1,则,则
38、e1=1;若;若c1=0,则,则e1=0非:若非:若c1=1,则,则e1=0;若;若c1=0,则,则e1=1或:若或:若c1=1或或c2=1 或或c3=1 ,则,则e1=1;否则;否则e1=0与:若与:若c1=c2=c3=1 ,则,则e1=1;否则;否则e1=0画因果图时原因在左,结果在右,由上向下排列,并根据功能画因果图时原因在左,结果在右,由上向下排列,并根据功能说明中规定的原因和结果之间的关系,用上述符号连接起来。说明中规定的原因和结果之间的关系,用上述符号连接起来。必要时还可以引入一些必要时还可以引入一些中间结点中间结点。.60图5-2 约束符号.61图中图中互斥、包含、唯一、要求互斥
39、、包含、唯一、要求是对是对原因原因的约束,的约束,屏蔽屏蔽是对是对结果结果的约束的约束互斥:表示互斥:表示a、b、c中至多只有一个为中至多只有一个为1,即不同时为,即不同时为1包含:表示包含:表示a、b、c中至少有一个为中至少有一个为1,即不同时为,即不同时为0唯一:表示唯一:表示a、b、c中有且仅有一个中有且仅有一个1要求:表示若要求:表示若a=1 ,则要求,则要求b必须为必须为1,即不可出现,即不可出现a=1 且且b=0屏蔽(强制):表示若屏蔽(强制):表示若a=1 ,则,则b必须为必须为0,即不可出现,即不可出现a=1 且且b=1.62利用因果图产生测试用例的基本步骤利用因果图产生测试用
40、例的基本步骤(1)(1) 分析软件规格说明描述中,分析软件规格说明描述中,哪些是原因哪些是原因( (即即输入条件或输入条件的等价类输入条件或输入条件的等价类) ),哪些是结哪些是结果果( (即输出条件即输出条件) ),并给每个原因和结果赋予,并给每个原因和结果赋予一个标识符。一个标识符。(2)(2) 分析软件规格说明描述中的语义,找出分析软件规格说明描述中的语义,找出原因原因与结果与结果之间,之间,原因与原因原因与原因之间对应的是什么之间对应的是什么 关系关系? ? 根据这些关系,画出因果图。根据这些关系,画出因果图。.63 (3) (3) 由于语法或环境限制,有些原因与原因之由于语法或环境限
41、制,有些原因与原因之 间,原因与结果之间的组合情况不可能出间,原因与结果之间的组合情况不可能出 现。为表明这些特殊情况,在因果图上用现。为表明这些特殊情况,在因果图上用 一些记号一些记号标明约束或限制条件标明约束或限制条件。(4)(4) 把因果图转换成决策表。把因果图转换成决策表。(5)(5) 把决策表的每一列拿出来作为依据,设计把决策表的每一列拿出来作为依据,设计测试用例。测试用例。 从因果图生成的测试用例中包括了所有输入数据的取从因果图生成的测试用例中包括了所有输入数据的取TRUETRUE与与FALSEFALSE情况,构成的测试用例数目达到最少,且测试情况,构成的测试用例数目达到最少,且测
42、试用例数目随输入数据数目的增加而线性地增加。用例数目随输入数据数目的增加而线性地增加。.64图5-3 因果图法示例.655.2因果图法测试用例因果图法测试用例 某软件规格说明中包含这样的要求:输入的第一个字符必须是A或B,第二个字符必须是一个数字,在此情况下进行文件的修改;但如果第一个字符不正确,则给出信息L;如果第二个字符不是数字,则给出信息M。 解法如下:解法如下:(1)分析程序的规格说明,列出原因和结果。原因:C1-第一个字符是A C2-第一个字符是B C3-第二个字符是一个数字结果:e1-给出信息Le2-修改文件e3-给出信息M(2)将原因和结果之间的因果关系用逻辑符号连接起来,得到因
43、果图,如图5-4所示。编号为11的中间节点是导出结果的进一步原因。.66图5-4 因果图示例.67图5-5 具有E约束的因果图 因为C1和C2不可能同时为1,即第一个字符不可能既是A又是B,在因果图上可对其施加E约束,得到具有约束的因果图,如图5-5所示。.68(3)将因果图转换成决策表,如表5-1所示。(4)设计测试用例。表5-1中的前两种情况,因为原因1和原因2不可能同时为1,所以应排除这两种情况。根据此表,可以设计出6个测试用例,如表5-2所示。 表5-1 决策表 .69表5-2 测试用例 .70 例例2 2 :某电力公司有:某电力公司有A A、B B、C C、D D四类收费标准四类收费
44、标准, ,并规定:并规定: 居民用电居民用电 100100度度/ /月月 按按A A类收费类收费 100100度度/ /月月 按按B B类收费类收费 动力用电动力用电 1000010000度度/ /月,非高峰,月,非高峰,B B类收费类收费 1000010000度度/ /月,非高峰,月,非高峰,C C类收费类收费 1000010000度度/ /月,月, 高峰,高峰,C C类收费类收费 1000010000度度/ /月,月, 高峰,高峰,D D类收费类收费.71 输入条件(原因)输入条件(原因) 输出动作(后果)输出动作(后果)c1居民用电居民用电 e1 按按A类收费类收费c2动力用电动力用电
45、e2 按按B类收费类收费c3 100度度/月月 e3 按按C类收费类收费c410000度度/月月 e4 按按D类收费类收费c5高峰用电高峰用电 设计测试用例的步骤设计测试用例的步骤:1. 列举所有存在的输入条件和输出结果。列举所有存在的输入条件和输出结果。2. 根据输入条件和输出条件生成决策表。根据输入条件和输出条件生成决策表。.72把因果图转换为决策表把因果图转换为决策表组合条件组合条件条件条件( (原因原因) ) 动作动作( (结果结果) )e1e1e2e2e3e3c1c1c2c2c3c31 12 23 34 45 56 61 1- -1 11 1- -0 0- -1 11 1- - -
46、-1 11 10 00 00 00 01 10 00 00 00 01 11 10 0c4c41 10 01 10 0c5c50 00 01 11 1e4e40 00 00 01 11 10 00 01 10 00 00 00 0测试用例测试用例-.731 1列列 居民电居民电,90,90度度/ /月月 A A2 2列列 居民电居民电,110,110度度/ /月月 B B3 3列列 动力电动力电, ,非高峰非高峰,8000,8000度度/ /月月 B B4 4列列 动力电动力电, ,非高峰非高峰,1.2,1.2万度万度/ /月月 C C5 5列列 动力电动力电, , 高峰高峰,0.9,0.9万
47、度万度/ /月月 C C6 6列列 动力电动力电, , 高峰高峰,1.1,1.1万度万度/ /月月 D D 条件条件 测试用例测试用例 预期结果预期结果组合组合 ( (输入数据输入数据) () (输出动作输出动作) )3. 针对决策表的每一列产生一个测试用例。针对决策表的每一列产生一个测试用例。.74例例3 3,有一个处理单价为,有一个处理单价为5 5角钱的饮料自动售货机软件,角钱的饮料自动售货机软件,其规格说明如下:其规格说明如下: 饮料自动售货机允许投入饮料自动售货机允许投入5 5角或角或1 1元的硬币,用户可通元的硬币,用户可通过过“橙汁橙汁”和和“啤酒啤酒”按钮选择饮料,售货机还装有一
48、按钮选择饮料,售货机还装有一个表示个表示“零钱找完零钱找完”的指示灯,当售货机中有零钱找时的指示灯,当售货机中有零钱找时指示灯暗,当售货机中无零钱找时指示灯亮。当用户指示灯暗,当售货机中无零钱找时指示灯亮。当用户投投入入5 5角角硬币并硬币并押下押下“橙汁橙汁”或或“啤酒啤酒”按钮后,售货机按钮后,售货机送送出出“橙汁橙汁”或或“啤酒啤酒” 。当用户。当用户投入投入1 1元元硬币并押下硬币并押下“橙汁橙汁”或或“啤酒啤酒”按钮后,如果售货机有零钱找,则按钮后,如果售货机有零钱找,则送出相应的饮料,并送出相应的饮料,并退还退还5 5角角硬币;如果售货机没有零钱硬币;如果售货机没有零钱找,则饮料不
49、送出,并且找,则饮料不送出,并且退还退还1 1元元硬币。硬币。.75(1) 分析规格说明,列出原因和结果分析规格说明,列出原因和结果规格说明中的规格说明中的红色部分红色部分是输入条件(原因),是输入条件(原因),蓝色部分蓝色部分是输是输出条件(结果)。出条件(结果)。 由于由于“售货机有零钱找售货机有零钱找”是在投入是在投入1元硬币时判断是否能找零钱的元硬币时判断是否能找零钱的依据,所以也可把它看作是一个输入条件,即原因。与之对依据,所以也可把它看作是一个输入条件,即原因。与之对应的结果是应的结果是售货机指示灯亮售货机指示灯亮(或暗)。(或暗)。.76.77.78.796.测试方法的选择测试方
50、法的选择 为了最大程度地减少测试遗留的缺陷,同时也为了最大限度地发现存在的缺陷,在测试实施之前,测试工程师必须确定将要采用的测试策略和测试方法,并以此为依据制定详细的测试方案。通常,一个好的测试策略和测试方法必将给整个测试工作带来事半功倍的效果。 如何才能确定好的测试策略和测试方法呢?通常,在确定测试如何才能确定好的测试策略和测试方法呢?通常,在确定测试方法时,应该遵循以下原则:方法时,应该遵循以下原则: 根据程序的重要性和一旦发生故障将造成的损失来确定测试等级和测试重点。 认真选择测试策略,以便能尽可能少地使用测试用例,发现尽可能多的程序错误。因为一次完整的软件测试过后,如果程序中遗留的错误