guo餐馆订餐系统的UML设计文档系统测试报告.docx
- 文档编号:6004576
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:14
- 大小:333.88KB
guo餐馆订餐系统的UML设计文档系统测试报告.docx
《guo餐馆订餐系统的UML设计文档系统测试报告.docx》由会员分享,可在线阅读,更多相关《guo餐馆订餐系统的UML设计文档系统测试报告.docx(14页珍藏版)》请在冰豆网上搜索。
guo餐馆订餐系统的UML设计文档系统测试报告
《软件工程》
软件测试报告
报告名称餐厅订餐系统测试报告
专业软件工程
班级1
姓名郭玉峰
学号20102344008
指导教师毕硕本
目录
1软件测试概念3
2软件测试目的3
3软件测试原则4
4软件测试方法5
4.1黑盒测试5
4.2白盒测试5
4.3单元测试6
4.4集成测试7
5测试引言11
5.1编写目的11
5.2项目背景11
5.3定义11
5.4参考资料11
6测试计划执行情况11
6.1JE_Table类:
12
6.2JE_TableState类:
12
6.3JE_WelcomeDialog类:
13
6.4JE_OrderList类:
14
6.5Database类:
14
6.6JE_Customer类:
15
6.7JE_mainFrame_AboutBox类:
16
6.8JE_Member类:
17
6.9JE_Restaurant类:
17
6.10其他类的测试18
1软件测试概念
软件测试是软件开发过程的重要组成部分,是用来确认一个程序的品质或性能是否符合开发之前所提出的一些要求。
软件测试就是在软件投入运行前,对软件需求分析、设计规格说明和编码的最终复审,是软件质量保证的关键步骤。
软件测试是为了发现错误而执行程序的过程。
软件测试在软件生存期中横跨两个阶段:
通常在编写出每一个模块之后就对它做必要的测试(称为单元测试)。
编码和单元测试属于软件生存期中的同一个阶段。
在结束这个阶段后对软件系统还要进行各种综合测试,这是软件生存期的另一个独立阶段,即测试阶段。
2软件测试目的
在谈到软件测试目的时,许多人都引用GrenfordJ.Myers在《TheArtofSoftwareTesting》一书中的观点:
1软件测试是为了发现错误而执行程序的过程;
2测试是为了证明程序有错,而不是证明程序无错误。
3一个好的测试用例是在于它能发现至今未发现的错误;
4一个成功的测试是发现了至今未发现的错误的测试。
这是对软件测试目的最精辟的解析了
这种观点可以提醒人们测试要以查找错误为中心,而不是为了演示软件的正确功能。
但是仅凭字面意思理解这一观点可能会产生误导,认为发现错误是软件测试的唯一目的,查找不出错误的测试就是没有价值的,事实并非如此。
首先,测试并不仅仅是为了要找出错误。
通过分析错误产生的原因和错误的分布特征,可以帮助项目管理者发现当前所采用的软件过程的缺陷,以便改进。
同时,这种分析也能帮助我们设计出有针对性地检测方法,改善测试的有效性。
其次,没有发现错误的测试也是有价值的,完整的测试是评定测试质量的一种方法。
详细而严谨的可靠性增长模型可以证明这一点。
3软件测试原则
软件测试从不同的角度出发会派生出两种不同的测试原则,从用户的角度出发,就是希望通过软件测试能充分暴露软件中存在的问题和缺陷,从而考虑是否可以接受该产品,从开发者的角度出发,就是希望测试能表明软件产品不存在错误,已经正确地实现了用户的需求,确立人们对软件质量的信心。
为了达到上述的原则,那么需要注意以下几点:
1.应当把“尽早和不断的测试”作为开发者的座右铭
2.程序员应该避免检查自己的程序,测试工作应该由独立的专业的软件测试机构来完。
3.设计测试用例时应该考虑到合法的输入和不合法的输入以及各种边界条件,特殊情况要制造极端状态和意外状态,比如网络异常中断、电源断电等情况。
4.一定要注意测试中的错误集中发生现象,这和程序员的编程水平和习惯有很大的关系。
5.对测试错误结果一定要有一个确认的过程,一般有A测试出来的错误,一定要有一个B来确认,严重的错误可以召开评审会进行讨论和分析。
6.制定严格的测试计划,并把测试时间安排的尽量宽松,不要希望在极短的时间内完成一个高水平的测试。
7.回归测试的关联性一定要引起充分的注意,修改一个错误而引起更多的错误出现的现象并不少见。
8.妥善保存一切测试过程文档,意义是不言而喻的,测试的重现性往往要靠测试文档。
4软件测试方法
软件测试的方法和技术是多种多样的。
对于软件测试技术,可以从不同的角度加以分类:
1.从是否需要执行被测软件的角度,可分为静态测试和动态测试。
2.从测试是否针对系统的内部结构和具体实现算法的角度来看,可分为
白盒测试和黑盒测试;
4.1黑盒测试
黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数锯而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。
黑盒测试方法主要有等价类划分、边值分析、因果图、错误推测等,主要用于软件确认测试。
“黑盒”法着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功能进行测试。
“黑盒”法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。
实际上测试情况有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。
4.2白盒测试
白盒测试也称结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能,白盒测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证。
“白盒”法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。
“白盒”法是穷举路径测试。
在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。
贯穿程序的独立路径数是天文数字。
但即使每条路径都测试了仍然可能有错误。
第一,穷举路径测试决不能查出程序违反了设计规范,即程序本身是个错误的程序。
第二,穷举路径测试不可能查出程序中因遗漏路径而出错。
第三,穷举路径测试可能发现不了一些与数据相关的错误。
4.3单元测试
单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。
通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。
例如,你可能把一个很大的值放入一个有序list中去,然后确认该值出现在list的尾部。
或者,你可能会从字符串中删除匹配某种模式的字符,然后确认字符串确实不再包含这些字符了。
单元测试是由程序员自己来完成,最终受益的也是程序员自己。
可以这么说,程序员有责任编写功能代码,同时也就有责任为自己的代码编写单元测试。
执行单元测试,就是为了证明这段代码的行为和我们期望的一致。
单元测试不仅仅是作为无错编码一种辅助手段在一次性的开发过程中使用,单元测试必须是可重复的,无论是在软件修改,或是移植到新的运行环境的过程中。
因此,所有的测试都必须在整个软件系统的生命周期中进行维护。
经常与单元测试联系起来的另外一些开发活动包括代码走读(Codereview),静态分析(Staticanalysis)和动态分析(Dynamicanalysis)。
静态分析就是对软件的源代码进行研读,查找错误或收集一些度量数据,并不需要对代码进行编译和执行。
动态分析就是通过观察软件运行时的动作,来提供执行跟踪,时间分析,以及测试覆盖度方面的信息。
单元测试工作内容及其流程
有了单元测试不远远不够的,在单元测试的基础上还要建立集成测试
4.4集成测试
集成测试(也叫组装测试,联合测试)是单元测试的逻辑扩展。
它的最简单的形式是:
两个已经测试过的单元组合成一个组件,并且测试它们之间的接口。
从这一层意义上讲,组件是指多个单元的集成聚合。
在现实方案中,许多单元组合成组件,而这些组件又聚合成程序的更大部分。
方法是测试片段的组合,并最终扩展进程,将您的模块与其他组的模块一起测试。
最后,将构成进程的所有模块一起测试。
此外,如果程序由多个进程组成,应该成对测试它们,而不是同时测试所有进程。
集成测试识别组合单元时出现的问题。
通过使用要求在组合单元前测试每个单元并确保每个单元的生存能力的测试计划,可以知道在组合单元时所发现的任何错误很可能与单元之间的接口有关。
这种方法将可能发生的情况数量减少到更简单的分析级别。
集成测试是在单元测试的基础上,测试在将所有的软件单元按照概要设计规格说明的要求组装成模块、子系统或系统的过程中各部分工作是否达到或实现相应技术指标及要求的活动。
也就是说,在集成测试之前,单元测试应该已经完成,集成测试中所使用的对象应该是已经经过单元测试的软件单元。
这一点很重要,因为如果不经过单元测试,那么集成测试的效果将会受到很大影响,并且会大幅增加软件单元代码纠错的代价。
集成测试是单元测试的逻辑扩展。
在现实方案中,集成是指多个单元的聚合,许多单元组合成模块,而这些模块又聚合成程序的更大部分,如分系统或系统。
集成测试采用的方法是测试软件单元的组合能否正常工作,以及与其他组的模块能否集成起来工作。
最后,还要测试构成系统的所有模块组合能否正常工作。
集成测试所持的主要标准是《软件概要设计规格说明》,任何不符合该说明的程序模块行为都应该加以记载并上报。
集成测试过程:
集成测试工作机制
软件集成测试工作由产品评测部担任。
需要项目组相关角色配合完成。
如图示:
软件评测部:
软件项目组:
集成测试工作内容及其流程工作流程:
集成测试常用方案选型:
集成测试的实施方案有很多种,如自底向上集成测试、自顶向下集成测试、三明治集成测试、核心集成测试、分层集成测试、基于使用的集成测试等。
在此,笔者将重点讨论其中一些经实践检验和一些证实有效的集成测试方案。
这些数据显示单元测试的成本效率大约是集成测试的两倍,系统测试的三倍
5测试引言
5.1编写目的
本报告是JustEnjoy小组对完成的订餐系统进行测试需求分析和系统设计后制作测试计划和系统完成时进行测试后完成的测试报告。
目的在于为系统的正确性和有效性提供保证,同时为日后的系统维护提供文档依据。
5.2项目背景
本系统为一个餐馆的定餐系统,主要提供记录订餐和提醒的功能。
5.3定义
系统中所有以“JE_”开头的类和变量均为“JustEnjoy”——我们小组名称的缩写,也用以和系统或者其他人开发的变量和函数相区别。
SQLServer2000:
Microsoft公司的关系型数据库。
JDK1.4:
版本为号1.4的JAVA虚拟机
5.4参考资料
《系统分析设计》(美)JohnW.Satzinger
《SQLServer开发精髓》(美)RoberB.Jackson
《软件工程(第二版)》张海潘
《面向对象设计UML实践》(英)MarkPriestley
6测试计划执行情况
我们在完成的每一个JAVA类中都使用main函数进行测试,他们的代码和测试结果如下所列:
6.1JE_Table类:
publicstaticvoidmain(String[]args){
try{
DBOperator.getConnection();
System.out.println("oye!
!
");
}catch(SQLExceptionex){
System.out.println("数据库尝试连接失败。
");
}
JE_Memberb=newJE_Member("10001");
b.JE_register();
DBOperator.close();
}
测试结果:
数据库连接成功,输出”oye!
!
”。
6.2JE_TableState类:
publicstaticvoidmain(String[]args){
JE_TableStatea=newJE_TableState();
a.setVisible(true);
}
测试结果:
正常运行,可以更改日期,时段,桌号,就餐人数的信息,但不能更改客户,会员信息,客户电话和菜单的信息。
JE_mainFrame.java中:
publicstaticvoidmain(String[]args){
try{
UIManager.setLookAndFeel(UIManager.
getSystemLookAndFeelClassName());
}catch(Exceptionexception){
exception.printStackTrace();
}
JE_mainFrameframe=newJE_mainFrame();
DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();
DimensionframeSize=frame.getSize();
if(frameSize.height>screenSize.height){
frameSize.height=screenSize.height;
}
if(frameSize.width>screenSize.width){
frameSize.width=screenSize.width;
}
frame.setLocation((screenSize.width-frameSize.width)/2,
(screenSize.height-frameSize.height)/2);
frame.setVisible(true);
}
测试结果:
可以正常运行,并正常退出。
6.3JE_WelcomeDialog类:
publicstaticvoidmain(String[]args){
JE_WelcomeDialoga=newJE_WelcomeDialog();
a.setVisible(true);
}
测试结果:
可以正常运行,并正常退出。
TestFrame.java中:
publicstaticvoidmain(String[]args){
TestFrametestframe=newTestFrame();
testframe.setVisible(true);
}
测试结果:
本函数是为了测试JE_MenuPanel.java中的函数,正常运行,并可以插入,修改,删除菜名。
6.4JE_OrderList类:
publicstaticvoidmain(String[]args){
ArrayListtemp=JE_GetOrderList
(1);
for(inti=0;i System.out.println(((JE_Menu)temp.get(i)).getName()+"? ? "+ ((JE_Menu)temp.get(i)).getDescription()); } if(JE_SetOrderList(78,temp,"sss")){ System.out.println("插入成功! "); } ArrayListt=newArrayList(); t=JE_GetOrderList(78); for(inti=0;i System.out.println(((JE_Menu)t.get(i)).getName()+"? ? "+ ((JE_Menu)t.get(i)).getDescription()); } } 测试结果: 正常运行,并结果正确。 6.5Database类: publicstaticvoidmain(String[]args){ Databasea=newDatabase(); try{ if(a.connectToDatabase()){ ResultSetb=a.getResult("SELECT[tableNumber],[customerID],[covers],[bookDate],[eatDate],[eatTime]FROM[Reservation]WHERE[eatTime]='1'AND[state]='1'AND[eatDate]='2007-12-25'"); b.next(); b.next(); System.out.print(b.getString (1)); } } catch(SQLExceptionsqle){ sqle.printStackTrace(); } } 测试结果: 正常运行,并结果正确。 6.6JE_Customer类: publicstaticvoidmain(String[]args){ JE_Customera=newJE_Customer("jiaweihao","12345"); try{ DBOperator.getConnection(); System.out.println("oye! ! "); }catch(SQLExceptionex){ System.out.println("数据库尝试连接失败。 "); } if(! a.JE_isRecorded()){ a.JE_save(); } } 测试结果: 正常运行,但结果出现异常: java.sql.SQLException: [Microsoft][SQLServer2000DriverforJDBC][SQLServer]列'Customer.CID'在选择列表中无效,因为该列未包含在聚合函数中,并且没有GROUPBY子句。 atcom.microsoft.jdbc.base.BaseExceptions.createException(UnknownSource) atcom.microsoft.jdbc.base.BaseExceptions.getException(UnknownSource) atcom.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(UnknownSource) atcom.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(UnknownSource) atcom.microsoft.jdbc.sqlserver.tds.TDSExecuteRequest.processReplyToken(UnknownSource) atcom.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(UnknownSource) atcom.microsoft.jdbc.sqlserver.SQLServerImplStatement.getNextResultType(UnknownSource) atcom.microsoft.jdbc.base.BaseSmonTransitionToState(UnknownSource) atcom.microsoft.jdbc.base.BaseStatement.postImplExecute(UnknownSource) atcom.microsoft.jdbc.base.BaseSmonExecute(UnknownSource) atcom.microsoft.jdbc.base.BaseStatement.executeQueryInternal(UnknownSource) atcom.microsoft.jdbc.base.BaseStatement.executeQuery(UnknownSource) atje_ordersystem.DB.DBOperator.execSelect(DBOperator.java: 75) atje_ordersystem.JE_Customer.JE_isRecorded(JE_Customer.java: 80) atje_ordersystem.JE_Customer.main(JE_Customer.java: 103)通过修改,正常得到结果。 6.7JE_mainFrame_AboutBox类: publicstaticvoidmain(String[]args){ JE_mainFrame_AboutBoxa=newJE_mainFrame_AboutBox(); a.setVisible(true); } 测试结果: 正常运行,并可以正常退出。 6.8JE_Member类: publicstaticvoidmain(String[]args){ JE_Memberje_member=newJE_Member("10001"); if(je_member.JE_getmemNumber()=="0"){ System.out.println("fuck! "); } } 测试结果: 正常运行,并结果正确。 JE_RemindTime.java中: publicstaticvoidmain(String[]args){ JE_RemindTimeremindtime=newJE_RemindTime(); remindtime.setVisible(true); } 测试结果: 正常运行,并运行正确。 6.9JE_Restaurant类: publicstaticvoidmain(String[]args){ JE_Restaurantje_restaurant=newJE_Restaurant(); System.out.print("sdfsdf"); DatetestDate=Date.valueOf("2007-12-12"); System.out.println("WWWW"+testDate.toString()); ArrayListtestA=je_restaurant.JE_searchEmptyTable(testDate,1); for(inti=0;i System.out.println(((JE_Tabl
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- guo 餐馆 系统 UML 设计 文档 测试报告