文档库 最新最全的文档下载
当前位置:文档库 › 黑盒测试实验报告

黑盒测试实验报告

专 业:教育技术学
班 级:教技142
学生姓名:安卓
指导老师:郭小雪
所属学期:2017-2018学年第二学期

一、引言 1.1 目的 测试报告为三角形问题和找零钱最佳组合问题项目的黑盒测试报告,目的在于总结测试阶段的测试以及分析测试结果。 1.2实验环境 在Windows 2000(SP2) 或Windows XP 操作系统上,使用C++语言,VC6.0工具作为开发环境(IDE) 1.3实验要求 1.根据给出的程序分别使用等价类划分法、边界值分析法、判定表方法、因果图法、正交试验法、功能图法、错误推测法来设计相应的测试用例。 2.输入数据进行测试,填写测试用例。 二、实验原理 黑盒测试原理:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。软件的黑盒测试意味着测试要在软件的接口处进行。这种方法是把测试对象看作一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。因此黑盒测试又叫功能测试。 从理论上讲,黑盒测试只有采用穷举输入测试,把所有可能的输入都

作为测试情况考虑,才能查出程序中所有的错误。实际上测试情况有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但可能的输入进行测试。这样看来,完全测试是不可能的,所以我们要进行有针对性的测试,通过制定测试案例指导测试的实施,保证软件测试有组织、按步骤,以及有计划地进行。黑盒测试行为必须能够加以量化,才能真正保证软件质量,而测试用例就是将测试行为具体量化的方法之一。具体的黑盒测试用例设计方法包括等价类划分法、边界值分析法、错误推测法、因果图法、判定表驱动法、正交试验设计法、功能图法等。 等价类划分的办法是把程序的输入域划分成若干部分(子集),然后从每个部分中选取少数代表性数据作为测试用例。每一类的代表性数据在测试中的作用等价于这一类中的其他值。该方法是一种重要的,常用的黑盒测试用例设计方法。 1 划分等价类 划分等价类:等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试。因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据。取得较好的测试结果。等价类划分可有两种不同的情况:有效等价类和无效等价类。 有效等价类:是指对

于程序的规格说明来说是合理的,有意义的输入数据构成的集合。利用有效等价类可检验程序是否实现了规格说明中

所规定的功能和性能。 无效等价类:与有效等价类的定义恰巧相反。 设计测试用例时,要同时考虑这两种等价类。因为,软件不仅要能接收合理的数据,也要能经受意外的考验。这样的测试才能确保软件具有更高的可靠性。 2 边界值分析 边界值分析是通过选择等价类边界的测试用例。边界值分析法不仅重视输入条件边界,而且也必须考虑输出域边界。它是对等价类划分方法的补充。 (1)边界值分析方法的考虑;长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。 使用边界值分析方法设计测试用例,首先应确定边界情况。通常输入和输出等价类的边界,就是应着重测试的边界情况。应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据。 (2)基于边界值分析方法选择测试用例的原则: 1)如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。 2)如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少一,比最大个数多一的数作为测试数据。

3)根据规格说明的每个输出条件,使用前面的原则1)。 4)根据规格说明的每个输出条件,应用前面的原则2)。 5)如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。 6)如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。 7)分析规格说明,找出其它可能的边界条件。 3 错误推测法 错误推测法是基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性的设计测试用例的方法。 错误推测方法的基本思想:列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例。例如, 在单元测试时曾列出的许多在模块中常见的错误。以前产品测试中曾经发现的错误等, 这些就是经验的总结。还有,输入数据和输出数据为0的情况。输入表格为空格或输入表格只有一行。这些都是容易发生错误的情况。可选择这些情况下的例子作为测试用例。 4 因果图法 前面介绍的等价类划分方法和边界值分析方法,都是着重考虑输入条件,但未考虑输入条件之间的联系,相互组合等。考虑输入条件之间的相互组合,

可能会产生一些新的情况。但要检查输入条件的组合不是一件容易的事情,即使把所有输入条件划分成等价类,他们之间的组合情况也相当多。因此必须考虑采用一种适合于描述对于多种条件的组合,

相应产生多个动作的形式来考虑设计测试用例。这就需要利用因果图(逻辑模型)。 因果图方法最终生成的就是判定表。它适合于检查程序输入条件的各种组合情况。 三、实验内容 3.1 三角形问题 1)划分等价类 有效等价类: 输入3个正整数或正小数: 1、两数之和大于第三数,如A
三角形测试用例类别 输入条件 有效等价类 无效等价类 是否是三角形 (A>0) (1) (B>0) (2) (C>0) (3) (A+B>C) (4) (B+C>A) (5) (C+A>B) (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)

(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) 等腰三角

形 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=0 0 3 4 输入无效 (2)b=0 3 0 4 (3)c=0 3 4 0 (4)a>0 3 4 5 这个三角形是三边不等的 (5)b>0 3 4 5 (6)c>0 3 4 5 (7)a+b=c 2 3 5

(8)a+c=b 2 3 5 输入无效 (9)b+c=a 2 3 5 (10)a+bc 5 3 1 (17)|a-c|>b 5 3 1 (18)|b-c|>a 5 3 1 (19)a≠b≠c 3 4 5 这个三角形是三边不等的 (20)a=b≠c 4 4 5 这个三

(21)a=c≠b 4 5 4 角形是等腰的 (22)b=c≠a 5 4 4 (23)a=b=c 4 4 4 这个三角形是等边的 测试源代码 三、测试代码 等价值测试法 package cn

.heihe.sjx.test; import java.util.Scanner; /** * “三角形问题”的测试用例(等价类测试) * * @author Mario * */ public class TestTriangle { @SuppressWarnings("resource") public static void main(String[] args) { try { int a, b, c; System.out.println("开始黑盒测试"); Scanner in = new Scanner(System.in);

System.out.print("条件1.请输入第一个大于0且小于等于100的整数"); a = Integer.parseInt(in.nextLine()); if (a <= 0 || a > 100 || !String.valueOf(a).matches("[0-9]+")) { throw new Exception(); } System.out.print("条件2.请输入第二个大于0且小于等于100的整数"); b = Integer.parseInt(in.nextLine()); if (b <= 0 || b > 100 || !String.valueOf(b).matches("[0-9]+")) { throw new Exception(); } System.out.print("条件3.请输入第三个大于0且小于等于100的整数"); c = Integer.parseInt(in.nextLine()); if (c <= 0 || c > 100 || !String.valueOf(c).matches("[0-9]+")) { throw new Exception(); } 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 + "可以组成一个等边三角形"); } else if (a == b || a == c || b == c) { System.out.println(a + "," + b + "," + c + "可以组成一个等腰三角形"); } else if ((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 + "可以组成一个等腰直角三角形");

} else if ((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 (a < 1 || a > 100) System.out.println("不满足条件1,不能构成三角形"); if (b < 1 || b > 100) System.out.println("不满足条件2,不能构成三角形"); if (c < 1 || c > 100) System.out.println("不满足条件3,不能构成三角形"); if (c < 1 || c > 100) System.out.println("不满足条件3,不能构成三角形"); if (a >= b + c) System.out.println("不满足a= a + c) System.out.println("不满足b= a + b) System.out.println("不满足c
边界值测试法 package cn.heihe.sjx.test; import java.util.Scanner; /** * “三角形问题”的测试用例(边界值测试) * * @author Mario */ public class TestTriangle2 { @SuppressWarnings("resource") public static vo

id main(String[] args) { try { int a, b, c;

System.out.println("开始黑盒测试"); Scanner in = new Scanner(System.in); System.out.print("条件1.请输入第一个大于0且小于等于100的整数"); a = Integer.parseInt(in.nextLine()); System.out.print("条件2.请输入第二个大于0且小于等于100的整数"); b = Integer.parseInt(in.nextLine()); System.out.print("条件3.请输入第三个大于0且小于等于100的整数"); c = Integer.parseInt(in.nextLine()); if (a < 1 || a > 100 || !String.valueOf(a).matches("[0-9]+")) { throw new Exception(); } if (b < 1 || b > 100 || !String.valueOf(b).matches("[0-9]+")) { throw new Exception(); } if (c < 1 || c > 100 || !String.valueOf(c).matches("[0-9]+")) { throw new Exception(); } if ((!(a + b <= c || a + c <= b || b + c <= a))) { if (a != b && b != c && a != c) { System.out.println("这个三角形是三边不等的"); } else if (a == b && b == c && a == c) { System.out.println("这个三角形是等边的"); } else if (a == b || a == c || c == b) { System.out.println("这个三角形是等腰的"); } } else { System.out.println("输入无效"); } System.out.println("黑盒测试结束");

} catch (Exception e) { System.out.println("输入无效\n黑盒测试结束"); } } } 3.2 找零钱最佳组合 一、分析输入的情形。 R P

R>100 0100 R<=P<=100 P=N10>=1 N10=0 N5=1 N5=0 4>=N1>=1 N1=0 三、分析规格中每一决策点之情形,以RR1,RR2,RR3表示计算要找50,10,5元货币数时之剩余金额。 R>100 R<=0 P>100 P=50 RR2>=10 RR3>=5 四、由上述之输入/输出条件组合出可能的情形。(RR=P-R) R>100 R<=0 0100 0
0
13.货品价格=100,付款金额=100 测试源代码 package com.xu.ceshi; import java.util.Scanner; public class Price { public static void main(String[] args) { System.out.println("请输入您购买的东西价格:"); Scanner scanner=new Scanner(System.in); int value=scanner.nextInt(); if(value>100||value<0){ System.out.println("无效货品价格"); System.out.println("请输入您购买的东西价格:"); value=scanner.nextInt(); } System.out.pr

intln("请输入您支付的金额:"); int value2=scanner.nextInt(); if(value>value2||value2>100){ System.out.println("无效付款"); }else if(value==value2){ System.out.println("不找零"); }else{ int value3=value2-value; if(value3>100||value3<0){ System.out.println("输入的价钱不在本店范围内"); value=scanner.nextInt(); } Price price=new Price();

price.process(value3); } } public void process(int money){ System.out.println("将"+money+"元找零需要"); int[] value={100,50,10,5,1}; int[] count=new int[value.length]; for(int i=0;i=value[i]){ money-=value[i]; count[i]++; } if(count[i] !=0){ System.out.print("应找回"+count[i]+"张"+value[i]+"元 "); } } } }

四、心得体会 通过这一次的黑盒测试实验,我们小组成员学习到了很多的知识。首先对于测试计划上的失误,可以通过小组讨论,理清问题所在,交流寻找解决方案,以保证软件测试的后续展开。 还有对于测试人员对软硬件的熟悉程度引起的延误,可暂时延后测试行程,组员之间相互沟通交流软件、硬件系统使用心得,共同提高熟练程度后继续展开测试工作。在这过程中我们发现我们仍然有很多不足的地方,例如对测试的基本知识掌握程序不够,编写测试用例可能不完整等等。

相关文档