软件测试大作业.docx
《软件测试大作业.docx》由会员分享,可在线阅读,更多相关《软件测试大作业.docx(41页珍藏版)》请在冰豆网上搜索。
软件测试大作业
软件测试大作业.(总31页)
江西财经大学
“软件测试与质量保证”课程
作业(实验)报告
组长姓名学号
成员
专业软件工程班级
作业名称多部电梯调度模拟软件功能性测试
指导教师
开课学期2015至_2016学年_1_学期
完成时间2014年12月27日
4.3.1边界值测试12
4.3.1白盒测试14
1前言
电梯作为高层建筑中垂直运行的交通工具已于人们的日常生活密不可分,是建筑物中的永久性垂直交通工具。
电梯实际上是一个人机交互式的控制系统,单纯用顺序控制或逻辑控制是不能满足控制要求的,而PLC控制的电梯运行可靠性高,程序设计方便灵活,抗干扰能力强、运行稳定可靠等特点,所以现在的电梯控制系统广泛采用可编程控制器来实现。
在工艺加工的最初,把多种原料在合适的实践和条件下进行需要加工得以得到产品一直都是在人监控或操作下进行的但是现在随着时代的发展,这些方式已经不能满足工业生产的实际需要。
实际生产中需要更精确、更便捷的控制装置。
可编程控制器液体混合控制系统的特点:
(1)系统自动工作;
(2)控制的单周期运行方式;(3)启动后能自动完成下一个周期的工作,并循环。
我们采用的PLC具有小型化、高速度、高性能等特点。
这次设计可以使我们熟练使用置位和复位等各条基本指令,通过对工程实例的模拟,熟练地掌握PLC的编程和程序调试。
本报告首先从软件测试的基本概念入手,介绍了与软件测试相关的一些理论知识。
然后对我要地图网站的结构和功能进行了简单的分析。
针对电梯划分的楼层,开关,载人数,独一性等功能模块进行测试。
从等价类,边界值,白盒测试三种方法对这个电梯程序进行测试最后对电梯实例缺陷进行总体概括分析。
2软件测试概述
2.1软件测试的概念
软件测试是指在规定条件下对程序进行操作,以发现错误,对软件质量进行评估。
目前,国际上已对软件测试形成一个共识:
软件测试就是在软件投入使用前,对软件的需求分析、设计规格说明和系统编码的最终复审。
由此可见,软件测试的对象不仅仅是程序,需求规格说明、概要设计、详细设计、源程序等都是软件测试的对象。
首先,测试不能表明软件中不存在错误,它只能说明软件中存在错误。
从用户的角度来看,希望通过测试发现错误和缺陷,从而考虑是否可接受该产品。
而从软件开发者的角度来看,则希望通过测试,表明软件产品中不存在错误。
换句话说,测试的目的是以最少的时间和人力,系统地找出软件中潜在的各种错误和缺陷。
2.2测试的目的
基于不同的立场,也会有不同的测试目的,从用户角度出发,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,以考虑是否可接受该产品但从软件开发者的角度出发,则希望测试能成为表明软件产品中不存在错误的过程,验证该产品已确实地实现了用户的要求,确立人们对软件质量的信心。
2.3测试的原则
基于测试是为了寻找软件的错误和缺陷,评估与提高软件质量,我们在测试的时候遵循以下原则:
(1)所有的软件测试都应追溯到用户需求。
(2)应当把“尽早地不断地进行软件测试”作为软件测试者的座右铭。
(3)完全测试是不可能的,测试需要终止。
(4)测试无法显示软件潜在的缺陷。
(5)充分注意测试中的群集现象。
(6)程序员应避免检查自己的程序。
(7)尽量避免测试的随意性。
3电梯内容结构简介
电梯由安装在各楼层厅门口的上升和下降呼叫按钮进行呼叫操纵,其操纵内容为电梯运行方向。
电梯轿箱内设有楼层内选按钮S1~Sn,用以选择需停靠的楼层。
L1为一层指示、L2为二层指示、L3为三层指示。
电梯上升途中只响应上升呼叫,下降途中只响应下降呼叫,任何反方向的呼叫均无效。
例如,电梯停在一层,在二层轿箱外呼叫时,必须按二层上升呼叫按钮,电梯才响应呼叫(从一层运行到二层),按二层下降呼叫按钮无效;反之,若电梯停在三层,在二层轿箱外呼叫时,必须按二层下降呼叫按钮,电梯才响应呼叫(从三层运行到二层),按二层上升呼叫按钮无效。
3.1系统界面
图3.1初始输入信息界面
图3.2进入多电梯控制面板
3.2程序流程
输入楼层信息,电梯数目及最大载人数
点击任意一组电梯的开关门
点击选中电梯的上人
点击选中电梯的关门
点击选中电梯的楼层选择
点击外部大楼选择面板的某楼层的上或者下
循环点击,直到按下关闭程序键
4制定测试计划和实施
4.1测试方法
在实例电梯测试中,主要从以下几个方法进行:
边界值,等价类,白盒测试。
4.2测试通过标准
(1)如果测试结果与测试用例中预期结果一致测试通过否则不通过。
(2)数据安全、正确,测试通过,否则测试不通过。
(3)系统崩溃,无法测试,测试不通过。
4.3测试用例的设计与实施
测试用例是将测试行为具体量化的方法之一, 指设计一种情况,软件程序在这种情况下,必须能够正常运行并且达到程序所设计的执行结果,为达到最佳的测试效果或高效的揭露隐藏的错误而精心设计的少量测试数据。
一个好的测试用例是在于它能发现至今未发现的错误,在开始实施测试之前设计好测试用例,可以避免盲目测试并提高测试效率测试用例的使用令软件测试的实施重点突出、目的明确在软件版本更新后只需修正少部分的测试用例便可展开测试工作,降低工作强度,缩短项目周期功能模块的通用化和复用化使软件易于开发,而测试用例的通用化和复用化使软件测试易于开展,并随着测试用例的不断精化其效率也不断攀升
4.3.1等价类测试
一、黑盒测试——等价类测试:
1、初始化数据
①只由0-9组合而成的数据、②字母、③负数、④特殊字符、⑤字母和特殊字符的组合、⑥字母和数字的组合、⑦空格和其他字符的组合、⑧小数。
序号
输入数据
包含
等价类
预计输出
实际输出
测试
结果
楼层数
电梯数
最大载人数
1
10
5
10
①
初始化
电梯控制台
初始化
电梯控制台
Passed
2
010
05
010
①
初始化
电梯控制台
初始化
电梯控制台
Passed
3
0.1
0.1
0.1
⑧
初始化失败,提示输入非法
初始化失败,未提示
Failed
截图一
4
a
b
c
②
初始化失败,提示输入非法
初始化失败,未提示
Failed
截图二
5
-10
-5
-10
③
初始化失败,提示输入非法
初始化失败,未提示
Failed
截图三
6
@
#
¥
④
初始化失败,提示输入非法
初始化失败,未提示
Failed
截图四
7
a%
b%
c%
⑤
初始化失败,提示输入非法
初始化失败,未提示
Failed
截图五
8
a10
b5
c10
⑥
初始化失败,提示输入非法
初始化失败,未提示
Failed
截图六
9
1空格0
2
1空格0
⑦
初始化失败,提示输入非法
初始化失败,未提示
Failed
截图七
截图一:
原因说明:
对于不合法的输入数据没有给出提示。
截图二:
原因说明:
对于不合法的输入数据没有给出提示。
截图三:
原因说明:
对于不合法的输入数据没有给出提示。
截图四:
原因说明:
对于不合法的输入数据没有给出提示。
截图五:
原因说明:
对于不合法的输入数据没有给出提示。
截图六:
原因说明:
对于不合法的输入数据没有给出提示。
截图七:
原因说明:
对于不合法的输入数据没有给出提示。
2、初始化界面
A、楼层数==电梯数==最大载人数
B、楼层数==电梯数<最大载人数
C、楼层数<电梯数==最大载人数
D、楼层数<电梯数<最大载人数
E、楼层数<最大载人数<电梯数
F、电梯数<楼层数==最大载人数
G、电梯数<楼层数<最大载人数
H、电梯数<最大载人数<楼层数
I、最大载人数<电梯数==楼层数
J、最大载人数<电梯数<楼层数
K、最大载人数<楼层数<电梯数
测试用例:
序号
输入数据
包含
等价类
预计输出
实际输出
测试
结果
楼层数
电梯数
最大载人数
1
6
6
6
A
电梯控制台
成功初始化
初始化界面
显示不完全
Failed
截图一
2
6
6
7
B
电梯控制台
成功初始化
初始化界面
显示不完全
Failed
截图二
3
6
7
7
C
初始化失败
提示错误原因
初始化失败
Failed
截图三
4
7
8
9
D
初始化失败
提示错误原因
初始化失败
Failed
截图四
5
7
9
8
E
初始化失败
提示错误原因
初始化失败
Failed
截图五
6
7
2
7
F
电梯控制台
成功初始化
初始化界面
显示不完全
Failed
截图六
7
7
6
8
G
电梯控制台
成功初始化
初始化界面
显示不完全
Failed
截图七
8
10
2
8
H
电梯控制台
成功初始化
电梯控制台
成功初始化
Passed
9
7
7
6
I
电梯控制台
成功初始化
初始化界面
显示不完全
Failed
截图八
10
8
7
6
J
电梯控制台
成功初始化
初始化界面
显示不完全
Failed
截图九
11
7
8
6
k
初始化失败
提示错误原因
初始化失败
Failed
截图十
截图一:
原因说明:
按钮的界面为绝对布局,此时楼层数不够高,导致界面高度不够,按钮未完全展示。
截图二:
原因说明:
按钮的界面为绝对布局,此时楼层数不够高,导致界面高度不够,按钮未完全展示。
截图三:
原因说明:
电梯层数高于楼层数。
截图四:
原因说明:
电梯层数高于楼层数。
截图五:
原因说明:
电梯层数高于楼层数。
截图六:
原因说明:
按钮的界面为绝对布局,此时楼层数不够高,导致界面高度不够,按钮未完全展示。
截图七:
原因说明:
按钮的界面为绝对布局,此时楼层数不够高,导致界面高度不够,按钮未完全展示。
截图八:
原因说明:
按钮的界面为绝对布局,此时楼层数不够高,导致界面高度不够,按钮未完全展示。
截图九:
原因说明:
按钮的界面为绝对布局,此时楼层数不够高,导致界面高度不够,按钮未完全展示。
截图十:
原因说明:
电梯层数高于楼层数。
4.3.1边界值测试
边界值测试用例设计:
序号
输入数据
预计输出
实际输出
测试
结果
楼层数
电梯数
最大载人数
1
0
0
0
fail
fail
fail
2
-1
0
0
fail
fail
fail
3
0
-1
0
fail
fail
fail
4
0
0
-1
fail
fail
fail
5
1
1
1
fail
pass
pass
6
1
0
1
pass
fail
fail
7
1
1
0
pass
pass
pass
8
0
1
1
fail
fail
fail
9
space
space
space
fail
fail
fail
10
null
null
null
fail
fail
fail
11
\
\
\
fail
fail
fail
12
3
4
4
pass
fail
fail
13
5
4
1
pass
pass
pass
14
5
5
9999
fail
pass
pass
15
9999
1
1
fail
pass
pass
截图缺陷:
1
2
3.
分析总结
这个程序的一些缺陷通过边界值测试分析出来了,主要是某些边界值如0这样的数字系统是会报错的,另外当楼层小于电梯数量的时候系统也会报错,还有一些非法字符系统也会出错。
4.3.1白盒测试
白盒测试:
(一)语句:
A.LiftGroupMaster初始化各变量Init()
1.protectedvoidinit(){
2.outBtn=newOutButton(numOfFloor);
3.distance=newint[numOfFloor+1];
4.minOrder=newint[numOfFloor+1];
5.upAlloateFail=newint[numOfFloor+1];
6.downAlloateFail=newint[numOfFloor+1];
7.group=newLiftMaster[numOfLift+1];
8.for(inti=1;i<=numOfLift;i++)
9.group[i]=newLiftMaster(numOfFloor);
10.upCalls=newint[numOfFloor+1];
11.downCalls=newint[numOfFloor+1];
12.for(inti=0;i<=numOfFloor;i++){
13.upCalls[i]=downCalls[i]=0;
14.upAlloateFail[i]=downAlloateFail[i]=0;
15.}
16.for(inti=1;i<=numOfLift;i++){
17.group[i].gateTimer=newTimer(gateCycle,this);
18.group[i].cageTimer=newTimer(cageCycle,this);
19.group[i].cageTimer.start();
20.}
21.for(inti=1;i<=numOfLift;i++){
22.for(intj=1;j<=numOfFloor;j++){
23.group[i].innerBtn.stopButton[j].addActionListener(this);
24.}
25.group[i].innerBtn.closeButton.addActionListener(this);
26.group[i].innerBtn.openButton.addActionListener(this);
27.}
28.for(intj=1;j<=numOfFloor;j++){
29.outBtn.UP[j].addActionListener(this);
30.outBtn.DOWN[j].addActionListener(this);
31.}
32.for(inti=1;i<=numOfLift;i++){
33.group[i].liftState.enterButton.addActionListener(this);
34.group[i].liftState.exitButton.addActionListener(this);
35.}
36.reassignTimer=newTimer(reassignCycle,this);
37.reassignTimer.start();
38.waitCloseGate=newTimer[numOfFloor+1];
39.for(inti=1;i<=numOfLift;i++)
40.waitCloseGate[i]=newTimer(gateWaitCycle,this);
41.LiftsHeight=group[1].PanelHeight+30;
42.LiftsWidth=numOfLift*(group[1].PanelWidth+20);
43.outBtnHeight=group[1].PanelHeight;
44.outBtnWidth=145;
45.}
B、LiftGroupMaster构造函数
1.LiftGroupMaster(intnumOfFloor,intnumOfLift,intnumofPerson){
2.this.numOfFloor=numOfFloor;
3.this.numOfLift=numOfLift;
4.this.numOfPerson=numofPerson;
5.init();
6.JPanelliftGroup=newJPanel();
7.liftGroup.setLayout(newGridLayout(1,numOfLift,10,8));
8.for(inti=1;i<=numOfLift;i++)
9.liftGroup.add(group[i]);
10.liftGroup.setBackground(Color.WHITE);
11.liftGroup.setBounds(1,1,LiftsWidth,LiftsHeight);
12.outBtn.setBounds(LiftsWidth+3,1,outBtnWidth,outBtnHeight);
13.setLayout(null);
14.add(liftGroup);
15.add(outBtn);
16.}
C、LiftMaster初始化各变量Init()
1.voidinit(intnumOfFloor){
2.this.numOfFloor=numOfFloor;
3.ifOpen=false;
4.state=FREE;
5.floor=1;
6.toppestCall=numOfFloor+1;
7.lowestCall=0;
8.upStop=newint[numOfFloor+1];
9.downStop=newint[numOfFloor+1];
10.for(inti=1;i<=numOfFloor;i++)
11.upStop[i]=downStop[i]=0;
12.stop=newint[numOfFloor+1];
13.for(inti=1;i<=numOfFloor;i++)
14.stop[i]=0;
15.liftWidth=70;
16.liftHeight=60*numOfFloor;
17.tagWidth=30;
18.tagHeight=liftHeight;
19.innerBtnWidth=120;
20.innerBtnHeight=liftHeight/3;
21.stateWidth=120;
22.stateHeight=2*liftHeight/9;
23.PanelWidth=tagWidth+innerBtnWidth+liftWidth;
24.PanelHeight=liftHeight+10;
25.}
26.}
D、LiftMaster构造函数
1.publicLiftMaster(intnumOfFloor){
2.setBackground(Color.lightGray);
3.init(numOfFloor);
4.innerBtn=newInnerButton(numOfFloor);
5.liftState=newLiftState();
6.cage=newLiftCage(numOfFloor);
7.tag=newLiftTage(numOfFloor);
8.setLayout(null);
9.tag.setBounds(liftWidth+9,3,tagWidth,tagHeight);
10.cage.setBounds(8,3,liftWidth,liftHeight);
11.innerBtn.setBounds(10+tagWidth+liftWidth,5,innerBtnWidth,
innerBtnHeight);
12.liftState.setBounds(10+tagWidth+liftWidth,30+innerBtnHeight,
stateWidth,stateHeight);
13.add(tag);
14.add(cage);
15.add(innerBtn);
16.add(liftState);
17.}
(二)控制流程图
A.LiftGroupMaster初始化各变量Init()
B.LiftGroupMaster构造函数:
C.LiftMaster初始化各变量Init():
D.LiftMaster构造函数:
(三)测试用例
1.语句覆盖:
A.LiftGroupMaster初始化各变量Init():
序号
输入数据
预计输出
覆盖对象
实际输出
测试
结果
楼层数
电梯数
最大载人数
1
11
2
13
初始化
电梯控制台
1—44
初始化
电梯控制台
Passed
B.LiftGroupMaster构造函数:
序号
输入数据
预计输出
覆盖对象
实际输出
测试
结果
楼层数
电梯数
最大载人数
1
11
2
13
初始化
电梯控制台
1—15
初始化
电梯控制台
Passed
C.LiftMaster初始化各变量Init():
序号
输入数据
预计输出
覆盖对象
实际输出
测试
结果
楼层数
电梯数
最大载人数
1
11
2
13
初始化
电梯控制台
1—24
初始化
电梯控制台
Passed
D.LiftMaster构造函数:
序号
输入数据
预计输出
覆盖对象
实