测试的方法与技术软件测试的策略和方法静态测试方法动态测试方法人工测试方法计算机辅助静态分析方法白盒测试方法黑盒测试方法黑盒测试方法是在程序接口上进行测试,主要是为了发现以下错误:是否有不正确或遗漏了的功能?在接口上,输入能否正确地接受?能否输出正确的结果?是否有数据结构错误或外部信息(例如数据文件)访问错误?性能上是否能够满足要求?是否有初始化或终止性错误?软件输入不深入代码细节的测试方法称为动态黑盒测试。软件测试员充当客户来使用。输出这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。动态黑盒测试—戴上眼罩测试软件1.等价分类法所谓等价分类,就是把所有可能的输入数据(有效的和无效的)划分成若干个等价类(等价类是指某个输入域的子集合。在该集合中,各个输入数据对于揭露程序中的错误都是等价的)。因此,可以把全部输入数据合理地划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,这样就可以少量的代表性测试数据,来取得较好的测试结果。Windows计算器程序实例分析(1)你测试了1+1,1+2,1+3和1+4之后,还有必要测试1+5和1+6吗?你能放心地认为它们正确吗?(2)1+15与1+99999999999999999999999999999999有什么区别呢?(3)测试计算器中“菜单”命令中的复制功能(单击复制命令,在菜单弹出时键入c或者C,或者按Ctrl+c,这几种方法在设计测试用例时可以缩减为按Ctrl+c组合键)注意:在寻找等价类划分时,考虑把软件具有相似输入、相似输出、相似操作的分在一组,这些组就是等价划分。是指对于程序的规格说明来说,是合理的有意义的输入数据构成的集合。利用它可以检验程序是否实现预先规定的功能和性能。(1)有效等价类是指对于程序的规格说明来说,是不合理的、无意义的输入数据构成的集合。程序员主要利用这一类测试用例来检查程序中功能和性能的实现是否不符合规格说明要求。(2)无效等价类划分等价类不仅要要考虑代表“有效”输入值的有效等价类,还需考虑代表“无效”输入值的无效等价类。采用等价分类法要注意以下两点:每一无效等价类至少要用一个测试用例,不然就可能漏掉某一类错误,但允许若干有效等价类合用同一个测试用例,以便进一步减少测试的次数。如何划分等价类?有效等价类(合理等价类)无效等价类(不合理等价类)划分等价类的规则(5个)(1)如果输入条件规定了取值范围,可定义一个有效等价类和两个无效等价类。例1.1:输入值是学生成绩,范围是0~100。0100有效等价类0≤成绩≤100无效等价类成绩100无效等价类成绩0(2)如果输入条件规定了输入值的集合,或者是规定了“必须如何”的条件,这时可确立一个有效等价类和一个无效等价类。例1.2:输入条件要求:x==5,答案:有效等价类:1个x==5无效等价类:1个:x!=5(3)在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类。例1.3:输入条件要求:x==ture,答案:有效等价类:1个x==ture无效等价类:1个:x==false(4)在规定了输入数据的一组值(假定n个,or关系),并且程序要对每一个输入值分别进行处理的情况下,可确立n个有效等价类和一无效等价类(and关系)。例1.4:输入条件说明学历可为:专科、本科、硕士、博士四种之一。答案:有效等价类:4个:专科、or本科、or硕士、or博士无效等价类:1个:!专科and!本科and!硕士and!博士例如,在教师上岗方案中规定对教授、副教授、讲师和助教分别计算分数,做相应的处理。因此可以确定4个有效等价类为教授、副教授、讲师和助教,一个无效等价类,它是所有不符合以上身分的人员的输入值的集合。(5)在规定了输入数据必须遵守的规则的情况下(and关系),可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则,or关系)。例1.5:要求输入必须满足年龄18岁,性别=男,地区=河南的人。答案:有效等价类:1个:年龄18岁and性别=男and地区=河南无效等价类:3个:年龄=18岁,or性别!=男,or地区!=河南根据等价类创建测试用例的步骤建立等价类表,列出所有划分出的等价类:输入条件有效等价类无效等价类………………(1)为每一个等价类规定一个唯一编号;(2)设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止;(3)设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。从划分出的等价类中按以下原则设计测试用例:常见等价类划分测试形式针对是否对无效数据进行测试,可以将等价类测试分为标准等价类测试和健壮等价类测试。标准等价类测试——不考虑无效数据值,测试用例使用每个等价类中的一个值。健壮等价类测试——主要的出发点是考虑了无效等价类。对有效输入,测试用例从每个有效等价类中取一个值;对无效输入,一个测试用例有一个无效值,其他值均取有效值。使用等价类划分法测试的实例例1三角形问题分析:在多数情况下,是从输入域划分等价类的,但并非不能从被测程序的输出域反过来定义等价类,事实上,这对于三角形问题却是最简单的划分方法。在三角形问题中,有四种可能的输出:等边三角形、等腰三角形、一般三角形和非三角形。利用这些信息能够确定下列输出(值域)等价类。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不能构成三角形}标准等价类测试不考虑无效数据值,测试用例使用每个等价类中的一个值。例2:某报表处理系统要求用户输入处理报表的日期,日期限制在2005年1月至2009年12月,即系统只能对该段期间内的报表进行处理,如日期不在此范围内,则显示输入错误信息。系统日期规定由年、月的6位数字字符组成,前四位代表年,后两位代表月。如何用等价类划分法设计测试用例,来测试程序的日期检查功能?步骤:第一步:等价类划分第二步:为有效等价类设计测试用例。(多个有效等价类可使用一个测试用例)第三步:为每一个无效等价类设至少设计一个测试用例第一步:等价类划分输入等价类有效等价类无效等价类报表日期的类型及长度6位数字字符(1)有非数字字符(4)少于6个数字字符(5)多于6个数字字符(6)年份范围在2005~2009之间(2)小于2005(7)大于2009(8)月份范围在1~12之间(3)“报表日期”输入条件的等价类表小于1(9)大于12(10)第二步:为有效等价类设计测试用例对表中编号为1,2,3的3个有效等价类用一个测试用例覆盖:测试数据期望结果覆盖范围200705等价类(1)(2)(3)输入有效第三步:为每一个无效等价类设至少设计一个测试用例不能出现相同的测试用例测试数据期望结果覆盖范围001MAY等价类(4)输入无效20065等价类(5)输入无效2007005等价类(6)输入无效200405等价类(7)输入无效201005等价类(8)输入无效200800等价类(9)输入无效200613等价类(10)输入无效本例的10个等价类至少需要8个测试用例例3.在某网站申请免费信箱时,要求用户必须输入用户名、密码及确认密码,对每一项输入条件的要求如下:用户名要求为4位以上,16位以下,使用英文字母、数字、“-”、“_”,并且首字符必须为字母或数字;密码要求为6~16位之间,只能使用英文字母、数字以及“-”、“_”,并且区分大小写。分析如下:分析程序的规格说明,列出等价类表(包括有效等价类和无效等价类),如表4-5所示。输入条件有效等价类编号无效等价类编号用户名4~16位1少于4位8多于16位9首字符为字母2首字符为除字母、数字之外的其他字符10首字符为数字3英文字母、数字、“-”、“_”组合4组合中含有除英文字母、数字、“-”、“_”之外的其他特殊字符11密码6~16位5少于6位12多于16位13英文字母、数字、“-”、“_”组合6组合中含有除英文字母、数字、“-”、“_”之外的其他特殊字符14确认密码内容同密码相同7内容同密码相同,但字母大小写不同15表4-5等价类表根据上述等价类表,设计测试用例如表4-6所示。测试用例用户名密码确认密码预期输出TC1abc_2000abc_123abc_123注册成功TC22000-abc123-abc123-abc注册成功TC3abc1234567812345678提示用户名错误TC4abcdefghijk1234561234567812345678提示用户名错误TC5_abc1231234567812345678提示用户名错误TC6abc&1231234567812345678提示用户名错误TC7abc_1231234512345提示密码错误TC8abc_123abcdefghijk123456abcdefghijk123456提示密码错误TC9abc_123abc&123abc&123提示密码错误TC10abc_123abc_123Abc_123提示密码错误表4-6测试用例例4.保险公司计算保费费率的程序某保险公司的人寿保险的保费计算方式为:投保额×保险费率其中,保险费率依点数不同而有别,10点及10点以上保险费率为0.6%,10点以下保险费率为0.1%;而点数又是由投保人的年龄、性别、婚姻状况和抚养人数来决定,具体规则如下:年龄性别婚姻抚养人数20~3940~59其它MF已婚未婚1人扣0.5点最多扣3点(四舍五入取整)6点4点2点5点3点3点5点(1)分析程序规格说明中给出和隐含的对输入条件的要求,列出等价类表(包括有效等价类和无效等价类)。年龄:一位或两位非零整数,值的有效范围为1~99性别:一位英文字符,只能取值‘M’或’F’婚姻:字符,只能取值‘已婚’或‘未婚’抚养人数:空白或一位非零整数(1~9)点数:一位或两位非零整数,值的范围为1~99(2)根据(1)中的等价类表,设计能覆盖所有等价类的测试用例。2.边界值分析法(BoundaryValueAnalysis)软件边界与悬崖很类似测试内点测试外点被测试子域边界值分析法与等价类划分法区别(1)边界值分析不是从某等价类中随便挑一个作为代表,而是使这个等价类的每个边界都要作为测试条件。(2)边界值分析不仅考虑输入条件,还要考虑输出空间产生的测试情况(NextDate函数用例)。采用边界值分析法来选择测试用例,可使得被测程序能在边界值及其附近运行,从而更有效地暴露出程序中潜藏的错误。边界值分析法边界值分析法边界值分析法是对等价类划分方法的补充。人们从长期的测试工作经验得知,大量的错误是发生在输入或输出范围的边界上,而不是在输入范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。边界值分析的基本思想是把测试的重点放在各个等价类的边界上,使用在最小值、略小于最小值、略高于最小值、正常值、最大值、略低于最大值和略超过最大值处的值做为测试数据,并据此设计出相应的测试用例。比如,在做三角形计算时,要输入三角形的三个边长:A、B和C。我们应注意到这三个数值应当满足A>0、B>0、C>0、A+B>C、A+C>B、B+C>A,才能构成三角形。但如果把六个不等式中的任何一个大于号“>”错写成大于等于号“≥”,那就不能构成三角形。问题恰出现在容易被疏忽的边界附近。1:RemCreata10elementintegerarray2:RemInitializeeachelementto-13:Dimdata(10)AsInteger4:DimiAsInteger5:Fori=1To106:data(i)=-17:NextI8:End演示边界条件缺陷的简单BASIC程序边界值设计原则(1)如果输入条件规定了值的范围,