课程名称:软件测试实验题目:黑盒测试报告专业:教育技术学班级:教技142学生姓名:安卓指导老师:郭小雪所属学期:2017-2018学年第二学期1一、引言1.1目的测试报告为三角形问题和找零钱最佳组合问题项目的黑盒测试报告,目的在于总结测试阶段的测试以及分析测试结果。1.2实验环境在Windows2000(SP2)或WindowsXP操作系统上,使用C++语言,VC6.0工具作为开发环境(IDE)1.3实验要求1.根据给出的程序分别使用等价类划分法、边界值分析法、判定表方法、因果图法、正交试验法、功能图法、错误推测法来设计相应的测试用例。2.输入数据进行测试,填写测试用例。二、实验原理黑盒测试原理:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。软件的黑盒测试意味着测试要在软件的接口处进行。这种方法是把测试对象看作一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。因此黑盒测试又叫功能测试。从理论上讲,黑盒测试只有采用穷举输入测试,把所有可能的输入都2作为测试情况考虑,才能查出程序中所有的错误。实际上测试情况有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但可能的输入进行测试。这样看来,完全测试是不可能的,所以我们要进行有针对性的测试,通过制定测试案例指导测试的实施,保证软件测试有组织、按步骤,以及有计划地进行。黑盒测试行为必须能够加以量化,才能真正保证软件质量,而测试用例就是将测试行为具体量化的方法之一。具体的黑盒测试用例设计方法包括等价类划分法、边界值分析法、错误推测法、因果图法、判定表驱动法、正交试验设计法、功能图法等。等价类划分的办法是把程序的输入域划分成若干部分(子集),然后从每个部分中选取少数代表性数据作为测试用例。每一类的代表性数据在测试中的作用等价于这一类中的其他值。该方法是一种重要的,常用的黑盒测试用例设计方法。1划分等价类划分等价类:等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试。因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据。取得较好的测试结果。等价类划分可有两种不同的情况:有效等价类和无效等价类。有效等价类:是指对于程序的规格说明来说是合理的,有意义的输入数据构成的集合。利用有效等价类可检验程序是否实现了规格说明中3所规定的功能和性能。无效等价类:与有效等价类的定义恰巧相反。设计测试用例时,要同时考虑这两种等价类。因为,软件不仅要能接收合理的数据,也要能经受意外的考验。这样的测试才能确保软件具有更高的可靠性。2边界值分析边界值分析是通过选择等价类边界的测试用例。边界值分析法不仅重视输入条件边界,而且也必须考虑输出域边界。它是对等价类划分方法的补充。(1)边界值分析方法的考虑;长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。使用边界值分析方法设计测试用例,首先应确定边界情况。通常输入和输出等价类的边界,就是应着重测试的边界情况。应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据。(2)基于边界值分析方法选择测试用例的原则:1)如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。2)如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少一,比最大个数多一的数作为测试数据。43)根据规格说明的每个输出条件,使用前面的原则1)。4)根据规格说明的每个输出条件,应用前面的原则2)。5)如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。6)如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。7)分析规格说明,找出其它可能的边界条件。3错误推测法错误推测法是基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性的设计测试用例的方法。错误推测方法的基本思想:列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例。例如,在单元测试时曾列出的许多在模块中常见的错误。以前产品测试中曾经发现的错误等,这些就是经验的总结。还有,输入数据和输出数据为0的情况。输入表格为空格或输入表格只有一行。这些都是容易发生错误的情况。可选择这些情况下的例子作为测试用例。4因果图法前面介绍的等价类划分方法和边界值分析方法,都是着重考虑输入条件,但未考虑输入条件之间的联系,相互组合等。考虑输入条件之间的相互组合,可能会产生一些新的情况。但要检查输入条件的组合不是一件容易的事情,即使把所有输入条件划分成等价类,他们之间的组合情况也相当多。因此必须考虑采用一种适合于描述对于多种条件的组合,5相应产生多个动作的形式来考虑设计测试用例。这就需要利用因果图(逻辑模型)。因果图方法最终生成的就是判定表。它适合于检查程序输入条件的各种组合情况。三、实验内容3.1三角形问题1)划分等价类有效等价类:输入3个正整数或正小数:1、两数之和大于第三数,如AB+C;BC+A;CA+B2、两数之和不大于第三数3、两数相等,如A=B或B=C或C=A4、三数相等,如A=B=C5、三数不相等,如A!=B,B!=C,C!=A无效等价类:1、空2、负整数3、非数字4、少于三个数6三角形测试用例类别输入条件有效等价类无效等价类是否是三角形(A0)(1)(B0)(2)(C0)(3)(A+BC)(4)(B+CA)(5)(C+AB)(6)(A=0)(7)(B=0)(8)(C=0)(9)(A+B=C)(10)(B+C=A)(11)(C+A=B)(12)是否是等腰三角形(A=B)(13)(B=C)(14)(C=A)(15)(A!=B)and(B!=C)and(C!=A)(16)是否是等腰直角三角形(A=B)and(A2+B2=C2)(17)(B=C)and(B2+C2=A2)(18)(A!=B)and(B!=C)and(C!=A)(20)7(C=A)and(C2+A2=B2)(19)是否是等边三角形(A=B)and(B=C)and(C=A)(21)(A!=B)(22)(B!=C)(23)(C!=A)(24)三角形测试用例:用最少的测试用例覆盖所有的有效等价类,而无效等价类每个类型都要覆盖到序号输入[A,B,C]覆盖等价类输出1[3,4,5](1)(2)(3)(4)(5)(6)是三角形2[1,2,3](10)非三角形3[1,3,2](11)非三角形4[3,1,2](12)非三角形5[3,3,4](1)(2)(3)(4)(5)(6)(13)等腰三角形6[3,4,4](1)(2)(3)(4)(5)(6)(14)等腰三角8形7[3,4,3](1)(2)(3)(4)(5)(6)(15)等腰三角形8[3,4,5](1)(2)(3)(4)(5)(6)(16)(20)(22)(23)(24)是三角形9[3,3,3](1)(2)(3)(4)(5)(6)(16)(21)等边三角形10[3,4]无效等价类错误提示三角形问题”的测试用例(边界值分析法)测试用例说明测试数据期望结果(1)a=0034输入无效(2)b=0304(3)c=0340(4)a0345这个三角形是三边不等的(5)b0345(6)c0345(7)a+b=c2359(8)a+c=b235输入无效(9)b+c=a235(10)a+bc236(11)a+cb236(12)b+ca236(13)|a-b|=c532(14)|a-c|=b532(15)|b-c|=a532(16)|a-b|c531(17)|a-c|b531(18)|b-c|a531(19)a≠b≠c345这个三角形是三边不等的(20)a=b≠c445这个三10(21)a=c≠b454角形是等腰的(22)b=c≠a544(23)a=b=c444这个三角形是等边的测试源代码三、测试代码等价值测试法packagecn.heihe.sjx.test;importjava.util.Scanner;/***“三角形问题”的测试用例(等价类测试)**@authorMario**/publicclassTestTriangle{@SuppressWarnings(resource)publicstaticvoidmain(String[]args){try{inta,b,c;System.out.println(开始黑盒测试);Scannerin=newScanner(System.in);11System.out.print(条件1.请输入第一个大于0且小于等于100的整数);a=Integer.parseInt(in.nextLine());if(a=0||a100||!String.valueOf(a).matches([0-9]+)){thrownewException();}System.out.print(条件2.请输入第二个大于0且小于等于100的整数);b=Integer.parseInt(in.nextLine());if(b=0||b100||!String.valueOf(b).matches([0-9]+)){thrownewException();}System.out.print(条件3.请输入第三个大于0且小于等于100的整数);c=Integer.parseInt(in.nextLine());if(c=0||c100||!String.valueOf(c).matches([0-9]+)){thrownewException();}if((!(a+b=c||a+c=b||b+c=a))&&(a=1&&a=100)&&(b=1&&b=100)&&(c=1&&c=100)){if(a==b&&a==c){System.out.println(a+,+b+,+c+可以组成一个等边三角形);}elseif(a==b||a==c||b==c){System.out.println(a+,+b+,+c+可以组成一个等腰三角形);}elseif((a*a+b*b==c*c&&a==b)||(a*a+c*c==b*b&&a==c)||(c*c+b*b==a*a&&c==b)){System.out.println(a+,+b+,+c+可以组成一个等腰直角三角形);12}elseif((a*a+b*b==c*c)||(a*a+c*c==b*b)||(c*c+b*b==a*a)){System.out.println(a+,+b+,+c+可以组成一个直角三角形);}else{System.out.println(a+,+b+,+c+可以组成一个一般三角形);}}else{if(a1||a100)System.out.println(不满足条件1,不能构成三角形);if(b1||b100)System.out.println(不满足条件2,不能构成三角形);if(c1||c100)System.out.println(不满足条件3,不能构成三角形);if(c1||c100)System.out.println(不满足条件3,不能构成三角形);if(a=b+c)System.out.println(不满足ab+c,不能构成三角形);if(b=a+c)System.out.println(不满足ba+c,不能构成三角形);if(c=a+b)System.out.println(不满足ca+b,不能构成三角形);}System.out.println(黑盒测试结束);}c