黑盒测试实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告书
课程名称:软件测试
实验题目:黑盒测试报告
专业:教育技术学
班级:教技142
学生姓名:安卓
指导老师:郭小雪
所属学期:2017-2018学年第二学期
一、引言
1.1目的
测试报告为三角形问题和找零钱最佳组合问题项目的黑盒测试报告,目的在于总结测试阶段的测试以及分析测试结果。
实验环境
在Windows 2000(SP2) 或Windows XP 操作系统上,使用C++语言,工具作为开发环境(IDE)
实验要求
1.根据给出的程序分别使用等价类划分法、边界值分析法、判定表
方法、因果图法、正交试验法、功能图法、错误推测法来设计相应的测试用例。
2.输入数据进行测试,填写测试用例。
二、实验原理
黑盒测试原理:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。
软件的黑盒测试意味着测试要在软件的接口处进行。
这种方法是把测试对象看作一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。
因此黑盒测试又叫功能测试。
从理论上讲,黑盒测试只有采用穷举输入测试,把所有可能的输入都
作为测试情况考虑,才能查出程序中所有的错误。
实际上测试情况有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但可能的输入进行测试。
这样看来,完全测试是不可能的,所以我们要进行有针对性的测试,通过制定测试案例指导测试的实施,保证软件测试有组织、按步骤,以及有计划地进行。
黑盒测试行为必须能够加以量化,才能真正保证软件质量,而测试用例就是将测试行为具体量化的方法之一。
具体的黑盒测试用例设计方法包括等价类划分法、边界值分析法、错误推测法、因果图法、判定表驱动法、正交试验设计法、功能图法等。
等价类划分的办法是把程序的输入域划分成若干部分(子集),然后从每个部分中选取少数代表性数据作为测试用例。
每一类的代表性数据在测试中的作用等价于这一类中的其他值。
该方法是一种重要的,常用的黑盒测试用例设计方法。
1 划分等价类
划分等价类:等价类是指某个输入域的子集合。
在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试。
因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据。
取得较好的测试结果。
等价类划分可有两种不同的情况:有效等价类和无效等价类。
有效等价类:是指对于程序的规格说明来说是合理的,有意义的输入数据构成的集合。
利用有效等价类可检验程序是否实现了规格说明中
所规定的功能和性能。
无效等价类:与有效等价类的定义恰巧相反。
设计测试用例时,要同时考虑这两种等价类。
因为,软件不仅要能接收合理的数据,也要能经受意外的考验。
这样的测试才能确保软件具有更高的可靠性。
2 边界值分析
边界值分析是通过选择等价类边界的测试用例。
边界值分析法不仅重视输入条件边界,而且也必须考虑输出域边界。
它是对等价类划分方法的补充。
(1)边界值分析方法的考虑;长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部。
因此针对各种边界情况设计测试用例,可以查出更多的错误。
使用边界值分析方法设计测试用例,首先应确定边界情况。
通常输入和输出等价类的边界,就是应着重测试的边界情况。
应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据。
(2)基于边界值分析方法选择测试用例的原则:
1)如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。
2)如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少一,比最大个数多一的数作为测试数据。
3)根据规格说明的每个输出条件,使用前面的原则1)。
4)根据规格说明的每个输出条件,应用前面的原则2)。
5)如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。
6)如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。
7)分析规格说明,找出其它可能的边界条件。
3 错误推测法
错误推测法是基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性的设计测试用例的方法。
错误推测方法的基本思想:列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例。
例如, 在单元测试时曾列出的许多在模块中常见的错误。
以前产品测试中曾经发现的错误等, 这些就是经验的总结。
还有,输入数据和输出数据为0的情况。
输入表格为空格或输入表格只有一行。
这些都是容易发生错误的情况。
可选择这些情况下的例子作为测试用例。
4 因果图法
前面介绍的等价类划分方法和边界值分析方法,都是着重考虑输入条件,但未考虑输入条件之间的联系,相互组合等。
考虑输入条件之间的相互组合,可能会产生一些新的情况。
但要检查输入条件的组合不是一件容易的事情,即使把所有输入条件划分成等价类,他们之间的组合情况也相当多。
因此必须考虑采用一种适合于描述对于多种条件的组合,
相应产生多个动作的形式来考虑设计测试用例。
这就需要利用因果图(逻辑模型)。
因果图方法最终生成的就是判定表。
它适合于检查程序输入条件的各种组合情况。
三、实验内容
三角形问题
1)划分等价类
有效等价类:
输入3个正整数或正小数:
1、两数之和大于第三数,如A<B+C;B<C+A;C<A+B
2、两数之和不大于第三数
3、两数相等,如A=B或B=C或C=A
4、三数相等,如A=B=C
5、三数不相等,如A!=B,B!=C,C!=A
无效等价类:
1、空
2、负整数
3、非数字
4、少于三个数
三角形测试用例:用最少的测试用例覆盖所有的有效等价类,而无效等价类每个类型都要覆盖到
三角形问题”的测试用例(边界值分析法)
测试源代码
三、测试代码
等价值测试法
package * “三角形问题”的测试用例(等价类测试)
*
* @author Mario
*
*/
public class TestTriangle {
@SuppressWarnings("resource")
public static void main(String[] args) {
try {
int a, b, c;
"开始黑盒测试");
Scanner in = new Scanner;
"条件1.请输入第一个大于0且小于等于100的整数");
a = ());
if (a <= 0 || a > 100 || !(a).matches("[0-9]+")) {
1010
throw new Exception();
}
"条件2.请输入第二个大于0且小于等于100的整数");
b = ());
if (b <= 0 || b > 100 || !(b).matches("[0-9]+")) {
throw new Exception();
}
"条件3.请输入第三个大于0且小于等于100的整数");
c = ());
if (c <= 0 || c > 100 || !(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) {
+ "," + b + "," + c + "可以组成一个等边三角形");
} else if (a == b || a == c || b == c) {
+ "," + 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)) {
+ "," + b + "," + c + "可以组成一个等腰直角三角形");
} else if ((a * a + b * b == c * c) || (a * a + c * c == b * b) || (c * c + b * b == a * a)) {
+ "," + b + "," + c + "可以组成一个直角三角形");
} else {
1111
+ "," + b + "," + c + "可以组成一个一般三角形");
}
} else {
if (a < 1 || a > 100)
"不满足条件1,不能构成三角形");
if (b < 1 || b > 100)
"不满足条件2,不能构成三角形");
if (c < 1 || c > 100)
"不满足条件3,不能构成三角形");
if (c < 1 || c > 100)
"不满足条件3,不能构成三角形");
if (a >= b + c)
"不满足a<b+c,不能构成三角形");
if (b >= a + c)
"不满足b<a+c,不能构成三角形");
if (c >= a + b)
"不满足c<a+b,不能构成三角形");
}
"黑盒测试结束");
} catch (Exception e) {
"不满足条件,不能构成三角形\n黑盒测试结束");
}
}
1212
v1.0 可编辑可修改
边界值测试法
package * “三角形问题”的测试用例(边界值测试)
*
* @author Mario
*/
public class TestTriangle2 {
@SuppressWarnings("resource")
public static void main(String[] args) {
try {
int a, b, c;
"开始黑盒测试");
Scanner in = new Scanner;
"条件1.请输入第一个大于0且小于等于100的整数");
a = ());
"条件2.请输入第二个大于0且小于等于100的整数");
1313
b = ());
"条件3.请输入第三个大于0且小于等于100的整数");
c = ());
if (a < 1 || a > 100 || !(a).matches("[0-9]+")) {
throw new Exception();
}
if (b < 1 || b > 100 || !(b).matches("[0-9]+")) {
throw new Exception();
}
if (c < 1 || c > 100 || !(c).matches("[0-9]+")) {
throw new Exception();
}
if ((!(a + b <= c || a + c <= b || b + c <= a))) {
if (a != b && b != c && a != c) {
"这个三角形是三边不等的");
} else if (a == b && b == c && a == c) {
"这个三角形是等边的");
} else if (a == b || a == c || c == b) {
"这个三角形是等腰的");
}
} else {
"输入无效");
}
"黑盒测试结束");
} catch (Exception e) {
"输入无效\n黑盒测试结束");
}
1414
v1.0 可编辑可修改
1515
}
}
找零钱最佳组合
一、分析输入的情形。
R P R>100
0<R<=100 P>100
R<=P<=10
二、分析输出情形。
三、分析规格中每一决策点之情形,以RR1,RR2,RR3表示计算要找50,10,5元货币数时之剩余金额。
R>100 R<=0 P>100 P<R RR1>=50 RR2>=10 R R3>=5
四、由上述之输入/输出条件组合出可能的情形。
(RR=P-R)
R>100
R<=0
0<R<=100,P>100
0<R<=100,P<R
0<R<=100,R<=P<=100,RR=50
0<R<=100,R<=P<=100,RR=49
1616
0<R<=100,R<=P<=100,RR=10
0<R<=100,R<=P<=100,RR=9
0<R<=100,R<=P<=100,RR=5
0<R<=100,R<=P<=100,RR=4
0<R<=100,R<=P<=100,RR=1
0<R<=100,R<=P<=100,RR=0
五、为满足以上之各种情形,测试资料设计如下:
1.货品价格=101
2.货品价格=0
3.货品价格=-1
4.货品价格=100,付款金额=101
5.货品价格=100,付款金额=99
6.货品价格=50,付款金额=100
7.货品价格=51,付款金额=100
8.货品价格=90,付款金额=100
9.货品价格=91,付款金额=100
10.货品价格=95,付款金额=100
11.货品价格=96,付款金额=100
12.货品价格=99,付款金额=100
13.货品价格=100,付款金额=100
测试源代码
1717
package class Price {
public static void main(String[] args) {
"请输入您购买的东西价格:");
Scanner scanner=new Scanner;
int value=();
if(value>100||value<0){
"无效货品价格");
"请输入您购买的东西价格:");
value=();
}
"请输入您支付的金额:");
int value2=();
if(value>value2||value2>100){
"无效付款");
}else if(value==value2){
"不找零");
}else{
int value3=value2-value;
if(value3>100||value3<0){
"输入的价钱不在本店范围内");
1818
value=();
}
Price price=new Price();
(value3);
}
}
public void process(int money){
"将"+money+"元找零需要");
int[] value={100,50,10,5,1};
int[] count=new int[];
for(int i=0;i<;i++){
while(money>=value[i]){
money-=value[i];
count[i]++;
}
if(count[i] !=0){
"应找回"+count[i]+"张"+value[i]+"元 ");
}
}
}
}
1919
v1.0 可编辑可修改
四、心得体会
通过这一次的黑盒测试实验,我们小组成员学习到了很多的知识。
首先对于测试计划上的失误,可以通过小组讨论,理清问题所在,交流寻找解决方案,以保证软件测试的后续展开。
还有对于测试人员对软硬件的熟悉程度引起的延误,可暂时延后测试行程,组员之间相互沟通交流软件、硬件系统使用心得,共同提高熟练程度后继续展开测试工作。
在这过程中我们发现我们仍然有很多不足的地方,例如对测试的基本知识掌握程序不够,编写测试用例可能不完整等等。
2020。