流程图
结束
查找
输入编号
没有改信息
输出结果
5实现与调试分析
实现环境
系统WindowsXP系统
操作平台MicrosoftVisualC++
语言c++
调试分析:
通过对系统的调试,完成了最初的设计要求,
使各个模块的功能得以实现;
6测试分析
编写目的
软件测试是为了发现程序中的问题。
本系统技术不很成熟,存在不少问题,测试变得非常重要。
软件测试的过程也是程序运行的过程,程序运行需要数据,为测试设计的数据称测试用例,设计测试用例的原则自然是尽可能暴露错误。
由于测试涉及问题很多,工作量又大,所以测试之前必须制订一个计划。
背景
由物流配送管理系统开发者开发出的系统进行测试。
测试内容
软件测试主要工作内容是验证和确认,下面分别给出其概念:
验证是保证软件正确地实现了一些特定功能的一系列活动,即保证软件做了你所期望的事情。
1)确定软件生存周期中的一个给定阶段的产品是否达到前阶段确立的需求的过程;
2)程序正确性的形式证明,即采用形式理论证明程序符号设一计规约规定的过程;
3)评市、审查、测试、检查、审计等各类活动,或对某些项处理、服务或文件等是否和规定的需求相一致进行判断和提出报告。
确认是一系列的活动和过程,目的是想证实在一个给定的外部环境中软件的逻辑正确性。
即保证软件以正确的方式来做了这个事件。
1)静态确认,不在计算机上实际执行程序,通过人工或程序分析来证明软件的正确性;
2)动态确认,通过执行程序做分析,测试程序的动态行为,以证实软件是否存在问题。
软件测试的对象不仅仅是程序测试,软件测试应该包括整个软件开发期问各个阶段所产生的文档,如需求规格说明、概要设计文档、详细设计文档,当然软件测试的主要对象还是源程序。
软件测试的分类
黑盒测试
黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,
在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数锯而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。
黑盒测试方法主要有等价类划分、边值分析、因—果图、错误推测等,主要用于软件确认测试。
“黑盒”法着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功能进行测试。
“黑盒”法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。
实际上测试情况有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。
白盒测试
白盒测试也称结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能,白盒测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证。
“白盒”法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。
“白盒”法是穷举路径测试。
在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。
贯穿程序的独立路径数是天文数字。
但即使每条路径都测试了仍然可能有错误。
第一,穷举路径测试决不能查出程序违反了设计规范,即程序本身是个错误的程序。
第二,穷举路径测试不可能查出程序中因遗漏路径而出错。
第三,穷举路径测试可能发现不了一些与数据相关的错误。
单元测试又称模块测试,是针对软件设计的最小单位─程序模块,进行正确性检验的测试工作。
其目的在于发现各模块内部可能存在的各种差错。
单元测试需要从程序的内部结构出发设计测试用例。
多个模块可以平行地独立进行单元测试。
在单元测试时,测试者需要依据详细设计说明书和源程序清单,了解该模块的I/O条件和模块的逻辑结构,主要采用白盒测试的测试用例,辅之以黑盒测试的测试用例,使之对任何合理的输入和不合理的输入,都能鉴别和响应。
通常,在单元测试的基础上,需要将所有模块按照设计要求组装成为系统。
这时需要考虑的问题是:
1)在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失;
2)一个模块的功能是否会对另一个模块的功能产生不利的影响;
3)各个子功能组合起来,能否达到预期要求的父功能;
4)全局数据结构是否有问题;
5)单个模块的误差累积起来,是否会放大,从而达到不能接受的程度。
确认测试又称有效性测试。
任务是验证软件的功能和性能及其它特性是否与用户的要求一致。
对软件的功能和性能要求在软件需求规格说明书中已经明确规定。
它包含的信息就是软件确认测试的基础。
1)在通过了系统的有效性测试及软件配置审查之后,就应开始系统的验收测试。
2)验收测试是以用户为主的测试。
软件开发人员和QA(质量保证)人员也应参加。
3)由用户参加设计测试用例,使用生产中的实际数据进行测试。
4)在测试过程中,除了考虑软件的功能和性能外,还应对软件的可移植性、兼容性、可维护性、错误的恢复功能等进行确认。
5)确认测试应交付的文档有:
确认测试分析报告,最终的用户手册和操作手册,项目开发总结报告。
系统测试,是将通过确认测试的软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其它系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列的组装测试和确认测试。
系统测试的目的在于通过与系统的需求定义作比较,发现软件与系统的定义不符合或与之矛盾的地方
7用户手册
1.进入前管理员验证
2简洁的功能选择界面
3.入库操作
4配送操作
5.费率设置
6.人员信息处理
总结
本次实验可以说是毕业设计的模板,以往的课程设计和这相比只是一个小程序。
实验中对于系统的整体框架和功能,我们有过争论也有了共识。
经过多天团队的图书馆的资料查阅,网上资源的查找,遇到不能下载的例文不得不一页一页的截图,一切付出和努力终于有了成果。
本实验中我完成了概要设计部分,为了能够有效完成任务,参考了课本和相关资料中有关这一内容的部分;也在完成层次图和模块图的时候遇到了困难,不过经过不懈的努力最终完成。
在概要设计中,由于系统未成形,对于一些部分没有深入设计,只对其进行了文字描述。
这是我第一次做有整体性的系统性课程设计:
要考虑系统的整体功能,要配合团队的思想,对系统改进要配合队友的整体设计。
同时我也学到了很多:
对课程的设计要有我们自己的观点,要学会主动思考,不能局限于例文。
在系统功能设计时要多听取他人意见,要保证系统能带给使用者优越感和实用性,这些对将来毕业设计都有很大帮助。
经过本次设计,对毕业设计有了了解,我知道毕业设计比这次的要求更高,更严谨,系统设计的要更完善;不过,我有信心能够做的更好。
这次软件工程的课程设计持续的时间很长,让我们有足够多的时间去完成,但前期准备不足,没花多少时间在课程设计上,以至于到最后一周都还没做完,还好,能够如期完成本次课程设计。
通过本次课程设计学到了不少东西,能够将课堂上学到的知识用到本次课程设计中,但同时也发现了自己的不足,虽然上课都听了,笔记也记了,但做课程设计的过程中发现自己还有很多不会,不能灵活运用上课学到的知识,通过问其他同学,冰河本小组成员之间相互讨论,把问题解决了。
感谢老师,感谢同学,能够有这次机会做本课程设计,而学到一些东西。
在需求分析,详细设计,概率统计中,有很多地方是要画图,本小组以以人为主,互相之间讨论,得出结果,其他可行性分析,界面设计等因为比较简单,都由个人自主完成。
本课程设计由全体小组全部完成,都是不是认为自己能做好的,但我们做完了,很有成就感。
懂得,做事不投机取巧,尽量自己认真去完成。
这次的软件工程课程实验用时颇长,但我从这次的课程设计中得到了宝贵的经验和一些实验心得。
首先先说说作课程设计的一些经验。
在选择课程设计的题目时,首先先要和小组成员探讨一下哪些课题比较适合我们小组成员喜欢作的,然后大家在集体研究下该课题需要完成哪些功能,也就是说需要哪些知识,然后小组组长安排小组成员分别做哪些部分,这样就可以做到分工明确,每个小组成员都能做到一部分课程设计,以免个别成员偷懒。
接着,每个小组成员根据多分到的课程设计中的一部分,上网或者图书馆找相关的资料已完成所需的设计。
最后,各个小组成员然后在一起把所有的资料集中到一起分享,这样就可以得到关于课程设计的知识,以便更好的完成设计。
其次再说说自己的感想。
通过近1个月的课程设计,我发现了我在做课程设计这块上经验的缺乏,以及一些知识的匮乏,导致我前期做起来感到费劲。
通过仔细的看完和研究下《软件工程及软件开发应用》中的相关知识,我以前没学好的知识,如:
需求分析中的数据流程图和数据字典,总体设计中的结构图,尤其是我所做的那课程设计中的详细设计,让我更加的对程序流程图,N-S图,PAD图等构成设计的工具的了解和熟悉。
总的来说,课程设计是让我们更好的在学习和巩固一下我们所学的知识,俗话说:
学而致用,读万卷书不如行万里路就是这个道理。
参考文献
毕硕本、卢桂香编着《软件工程案例教程》北京大学出版2007年8月第一版
陈明编着《软件工程课程实践》清华大学出版社2009年8月第一版
施一萍编着《软件工程及软件开发应用》清华大学出版社2009年9月第一版
郑阿奇编着《VisualC++.NET程序设计教程》机械工程出版社2007年6月第一版
许家珆、白忠建、吴磊编着《软件工程——理论与实践》高等教育出版社2009年10月第二版
王珊编着《数据库系统概论》高等教育出版社2006年5月第四版
附录源代码
#include<>
#include<>
#include<>
#include<>
#include<>
classdata{
public:
intprice;
intnum;
};
classdata2:
publicdata
{
public:
intclientnum;
intxprice;
char*date;
};
classman{
charnum[10];
charname[10];
charsex[10];
public:
man(char*nu="",char*na="",char*se="")
{
strcpy(num,nu);
strcpy(name,na);
strcpy(sex,se);
}
friendostream&operator<<(ostream&out,constman&s)
{
out<<<<""<<<<""<<<returnout;
}
};
voidapp()
{
system("cls");
cout<<"1.即时业务办理"<cout<<"2.查询汇总处理"<cout<<"3.数据更改操作"<cout<<"4.人员信息处理"<cout<<"请输入你需要的操作:
";
intq=0;
cin>>q;
switch(q)
{
case1:
{
cout<<"1.入库"<cout<<"2.配送"<cout<<"请输入你需要的操作:
";
intw=0;
cin>>w;
if(w=1)
{
dataone;
cout<<"请输入此货物的价格:
";
cin>>;
cout<<"请输入此货物的货号:
";
cin>>;
app();
}
else{
data2two;
cout<<"请输入要配送的物品的货号:
";
cin>>;
cout<";
cin>>;
cout<";
cin>>;
cout<