第一篇:软件工程实践报告(5个)
软件工程实践实验报告
姓名: 学号:
班级: 计算机科学与技术
实验一 软件需求分析
1软件需求分析
任务分析 ATM自动提款机系统。ATM自动取款机是由计算机控制的持卡人自我服务型的金融专用设备。ATM是英文Automatic Teller Machine的缩写。在ATM自动取款机上可以进行账户查询、修改密码和转账的业务。作为自助式金融服务终端,除了提供金融业务功能之外,ATM自动取款机还具有维护、测试、事件报告、监控和管理等多种功能。ATM自动取款机系统向用户提供一个方便、简单、及时、随时随地可以随心所欲存取款的互联的现代计算机化的网络系统。可以大大减少工作人员,节约人力资源的开销,同时由于手续程序减少也可以减轻业务员的工作负担,有效地提高了整体的工作效率和精确度。减少了用户办理业务的等待时间;用户可以随时随地可以随心所欲存取款,并且操作简单易懂。
我们所需要的是建立一个与后台用户数据信息数据库绑定的集查询,存款,取款,转账等功能为一体的ATM自助服务系统。实验目的
学习图形工具软件VISIO,掌握结构化需求分析方法,熟练绘制数据流图; 学习快速原型工具的使用。基本要求
(1)针对银行ATM系统进行需求分析工作,了解银行ATM系统的功能、流程;(2)安装VISIO2022以上版本软件,熟练应用Visio绘制DFD图,绘制银行ATM系统数据流图,完成系统的软件逻辑模型;
(3)安装Axure RP Pro 或者Balsamiq Mockups快速原型软件,学习绘制软件原型,完成银行ATM系统的软件原型。ATM自动柜员机业务系统需求分析
需求分析:由于科技发展迅速,几乎所有的银行都配备了简易的人工操作的ATM自动取款机。人们可以随时随地进行交易,不再受银行的服务时间的约束,取款也很方便快捷,可以减少排队等待时间。
ATM机系统的主要功能:1.取款2.存款3修改密码4..凭条打印5.转账6.余额查询7.交易明细查询。
⒈取款
持卡人在ATM机上提取现金。余额不足时不能取出取款所需的现金。ATM机可以提供指定取款金额的快速取款画面。ATM机取款成功后,要向银联系统写入操作,并对客户余额进行相应处理。⒉存款
ATM机要能清点现金,将相应操作信息写入银联系统,对客户余额进行 修改。⒊ 修改密码
若新密码1和新密码相同则修改密码成功,要修改客户密码表,并将操作 信息写入银联系统。否则,修改密码不成功。⒋ 打印凭条
对客户做的操作及用户基本信息进行打印。⒌转账
完成不同银行卡之间资金的转移。若客户余额不足则转账识别。转帐成 功,对客户和收账人的余额进行相应的修改,写入账户余额表,并向银 联系统写入操作。6.余额查询
客户查询银行卡,在屏幕上显示银行卡账户余额。⒎ 交易明细查询
完成银行卡账户的近十笔交易明细查询,在屏幕上显示。
ATM机工作流程:插入卡->输入密码->选择操作类型->交易流程->确定交易->写入账户信息和银联系统 ATM自动柜员机业务系统数据流图
3.1顶层数据流图
3.2一层数据流图
将银行卡从读卡器插入ATM机,输入密码登录,登陆成功,则在LCD显示屏 上显示无ATM机不提供的操作的功能选择界面,进行操作并显示信息、进行相关处理。三次错误输入密码则吞卡。ATM机钞箱缺钱时则通知加钞。
一层数据流图
3.3二层数据流图
客户插入银行卡后开始识别银行卡所属的银行和账户信息,识别后开始校验客 户输入的密码,判断是否和正确密码相符,若相符则进行ATM机自检,去掉暂时不能提供的操作,让用户选择操作。若不相符则提示错误,输入三次都不相符,则吞卡。
登录的第二层数据流图
成功登录后选择交易,并在交易过程中进行操作倒计时,以防用户忘记取卡 而丢失卡,交易完成可以选择打印凭条和退卡。
动作的第二层数据流图
超时或连输三次错误的密码都会吞卡,并自动冻结卡,显示吞卡信息并打印 吞卡凭条。
吞卡的第二层数据流图
ATM机缺钱时发送钞箱缺钱信息,进行清机对账,验钞点钞,打开金库,将钱放入钞箱。
加钞的第二层数据流图 3.4三层数据流图
ATM自查时查钞箱余额和凭条打印机的纸墨余量,以在功能选择界面上去掉 ATM暂时不能提供的操作。
ATM机自检的第三层数据流图
选择交易,进行存款、查询、取款、改密、转账等操作,同时对操作进行倒计时,并向后台银联系统提供信息,在LCD显示屏上显示信息。
交易的第三层数据流图
3.5四层数据流图
选择存款操作后,打开存款槽,存款后,关闭存款槽,点钞机点钞,将金额 和张数显示在LCD屏上,确定后向后台提供信息,修改余额信息。
存款的第四层数据流图
选择查询功能后,再在两个子功能下选择进行的是余额查询还是交易明细查 询,并在 LCD显示屏上显示提示信息。
查询的第四层数据流图
选择取款功能后,比较客户的余额是否大于取款金额,并修改客户的余额信 息,在LCD屏上显示提示信息,向后台系统提交信息。
取款的第四层数据流图
改密时先输入一遍新密码,再输入一遍新密码,若两次密码相符,则改密成功,对用户名密码表进行相关修改,在LCD屏上显示提示信息,向后台提供信息。否则显示改密失败。
转账时,先输入一遍收账人账户,再输入一遍,若相符,则比对客户余额是否大于转账金额,若是,则转账成功,修改两个账户的余额,在LCD显示屏上显示提示信息,向后台提供信息。若否,则显示转账失败。
改密的第四层数据流图
3.6五层数据流图
选择查询账户余额信息时,查客户余额表,显示在LCD显示屏上。
余额查询的第五层数据流图
选择查询账户交易明细后,查客户交易明细信息表,并在LCD显示屏上显示出信息。
转账的第四层数据流图
交易明细查询的第五层数据流图 ATM自动柜员机业务系统原型系统
1、待机欢迎界面
2、输入密码界面
3、服务选择界面
4、取款金额选择界面
5、取款结束界面
6、存款提示界面
7、存款信息界面
8、存款结束界面
9、查询选择界面。
10、查询余额界面
11、查询明细界面
12、转帐账户输入界面
13、账户错误界面
14、转帐金额输入界面
15、转帐成功界面
16、退卡提示界面
17、密码验证界面
18、新密码输入界面
19、新密码确认界面
20、修改成功界面
21、修改失败界面
实验二 面向对象的软件分析与设计
实验目的
学习UML和UML软件工具,掌握面向对象分析与设计方法
基本要求
1、学习面向对象分析与设计方法和UML;
2、安装StarUML 和Rational Rose软件,熟练使用UML软件工具,对目标系统进行分析,完成用例图、类图。
3、完成序列图、状态图、活动图等图形的绘制。
4、学习UML模型和源代码的双向工程,完善报告。前言
由于科技发展迅速,几乎所有的银行都配备了简易的人工操作的ATM自动取款机。人们可以随时随地进行交易,不再受银行的服务时间的约束,取款也很方便快捷,可以减少排队等待时间。问题说明
客户插入银行卡,要求ATM自动柜员机能识别卡,若能够识别出卡,则要求客户输入密码,若输入密码正确,让客户选择业务,若输入密码错误,则让客户再次输入密 码,输入三次错误的密码则执行吞卡操作。
选择的业务若是取款,则让客户输入取款金额,超过账户余额,则取款失败,否则取款成功,取款槽吐出现金,修改账户余额,并记录操作信息。
选择的业务若是存款,则打开存款槽,让客户放入现金,并能启动点钞机,清点客户放入的现金数目,修改账户余额,并记录操作信息。
选择的业务若是转账,则让客户输入两遍转账账号和转账金额,若两遍转账账号不一致,则不能转账,若输入转账金额超过账户余额,则转账失败,否则转账成功。
选择的业务若是查询,则从服务器中查找出客户的余额或交易明细信息,并显示出来。
选择的业务若是修改密码,则要求客户输入两遍新修改的密码,若两遍密码一致,则改密成功,并修改账户密码,密码不一致,则改密失败。选择打印凭条,则启动凭条打印机,打印凭条并吐出凭条。选择退卡,则让读卡器吐出银行卡。Use Case图
3.1账户用例图
3.2系统维护人员用例图
3.3设备管理人员用例图
3.4系统时钟用例图
3.5总的用例图 类图 序列图 5.1登录基本序列图
5.2登录备选序列图(密码错误)
5.3登录备选序列图(密码错误吞卡)
5.4 取款序列图
5.5取款备选序列图(余额不足)
5.6查询序列图
5.7 存款序列图
5.8 修改密码序列图
5.9 修改密码备选序列图(两次密码不一致)
5.10 转账序列图
5.11 转账备选序列图(两次输入账户不同)
5.14退卡序列图
6协作图
6-1协作图
7-1识别银行卡活动图
7-2登录活动图
7-3取款活动图
7-4存款活动图
7-5修改密码活动图
7-6转账活动图
7-7查询活动图
7-8打印凭条活动图
7-9退卡活动图
7-10吞卡活动图
7-11备份活动图
7-12加钞活动图
7-13维护活动图
8状态图
实验三 集成编程环境与编码规范
1.实验目的
学习PHP、.Net、JAVA集成编程环境,熟悉各语言的编码规范。
2.基本要求
(1)学习PHP语言基础,学习PHP集成编程环境EPP,了解常用插件,掌握Zend debuger PHP断点调试功能;
(2)学习.C#语言基础,学习.Net集成编程环境,掌握集成环境中的调试技术;
(3)学习JAVA集成编程环境Eclipse,参考《Java编码规范及实践》了解JAVA设计模式。
3.实验内容
选择JAVA集成编程环境Eclipse,了解JAVA语言以及Eclipse的安装与使用。
4.语言简介
JAVA是一种可以撰写跨平台应用程序的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
5. 开发环境介绍
本次实验,JAVA语言的开发环境选用集成开发环境Eclipse,Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。
6.准备工作
第二篇:软件工程实践实习报告大纲
软件工程、软件测试专业第七学期“软件工程实践”实习报告大纲(学生提交)
1、实习概要
实习时间(起始和结束)(按照学校的教学日历从第1周到第19周,2022年8月29日至2022年1月6日)
实习单位、单位的实习地点或者校内工作地点
实习岗位
实习指导老师姓名(校内)与校外指导老师姓名
2、实习内容
(培训内容(含入职教育、安全教育等)、学习课程、技术训练、实习内容、项目内容)(这一部分要写详细,可能每项都有,可能只有部分有,但项目环节应该每个同学都写)
3、项目情况
(按照软件工程过程:1)需求分析;2)概要设计;3)详细设计;4)代码编写;
5)系统测试;6)性能测试;7)验收测试;8)项目实施与部署;9)项目维护等内容进行组织,同学自己参加的阶段重点描写,其它软件项目阶段可以只做介绍。)
4、实习总结
(收获、心得体会等)
第三篇:软件工程实践
软件工程实践
实践总学时:20 面向专业和年级:计算机科学技术4年级
一、实践课程的性质、目的与任务
《软件工程》课程是本专业中实践性非常强的一门课程。本课程的目的是培养软件工程应用能力。软件工程实践是《软件工程》课程的后继教学环节,是一个重要的、不可或缺的实践环节。其目的是使学生能够针对具体软件工程项目,全面掌握软件工程管理、软件需求分析、软件设计、软件测试等阶段的方法和技术,通过该实践课程使学生进一步理解和掌握软件开发模型、软件生命周期、软件过程等理论在软件项目开发过程中的意义和作用,培养学生按照软件工程的原理、方法、技术、标准和规范,进行软件开发的能力,培养学生的合作意识和团队精神,培养学生对技术文档的编写能力,从而使学生提高软件工程的综合能力,提高软件项目的管理能力。
二、实践课程教学的基本要求
通过课程实践熟悉软件工程的原理、方法和技术,能全面、系统地应用所学的概念、原理和方法完成系统开发的规划、分析、设计和实施工作;掌握软件开发的过程和技术,以达到对本课程的综合知识的考察和基本技能技巧的运用,培养自己的独立操作能力和团队合作精神。
三、实践内容
××××软件系统的分析与设计
[实践类型]
综合设计型
[目的要求]
1、目的:将所学的软件工程理论知识应用于软件开发实践中去,做到学以致用。
2、要求:把小问题当作大任务来看待,一步一个脚印进行,从而积累开发大工程的经验和方法。各个阶段的文档完整、规范,建模工具使用得当。
[内容提要]
本课程的实践环节设计以实际应用中的小型题目为主(大纲后附有候选的项目列表供学生参考),要求学
生采用“项目小组”的形式,结合具体的开发项目进行设计。软件工程实践具体实施的要求如下:
1)每个班级按项目小组进行分组,每组人数在6人左右;
2)每个项目小组选出项目负责人或项目经理(项目经理适当加分),由项目经理召集项目组成员讨论、选定开发项目,项目的选定必须考虑“范围、期限、成本、人员、设备”等条件;项目经理负责完成“可行性研究报告”、制定“项目开发计划”、管理项目并根据项目进展情况对项目开发计划进行调整;对于调整的项目开发计划必须存档;
3)项目开发计划必须具备可行性,每项任务要落实到人且规定该任务的起止日期和时间;明确每个阶段提交文档的日期和时间;每个项目小组必须明确指定文档的审查小组和审查人员以及审查结果的返回日期;审查小组和审查人员不得是完成被审查内容的完成者;审查结果至少包括:存在的问题、出现问题的所在文档的位置及页码、具体建议等;每个阶段的审查结果不得少于6个问题;
4)每个项目小组必须按照给定的文档规范标准提供下列文档,文档中必须注明执笔者、完成者(签名)和完成日期,其中完成需求分析和设计工作的人员不能相同,完成编码和审查/测试的人员不能相同;文档包括:
1.可行性研究报告
2.项目开发计划(包括调整的项目开发计划)
3.需求分析规格说明
4.概要设计规格说明
5.详细设计规格说明
6.编码清单(部分或全部)
7.审查/测试问题清单
[主要仪器设备]
1.硬件设备:微机和打印机
2.操作系统:Windows 2k以上系统
3.图文排版:Microsoft Office 2K及其以上系统
4.软件开发工具:Microsoft Visual Studio、Borland Delphi 等
5.数据库系统:Microsoft SQL Server 等
6.建模工具软件:PowerDesigner或者ROSE
四、考核方法
软件工程实践环节的成绩不单独记分,仅作为《软件工程》课程成绩的20%--30%记入总成绩。实践环节结束,每个学生必须提交软件工程实践总结报告,教师根据每个同学的实践总结报告和在小组中提交的文档进行考核,时间允许的话可以加入实践报告的答辩环节。根据提交的实践报告和答辩的情况对每个同学划分为A、B、C、D、E五个等级。
五、主要参考资料
[1] 卢潇 等:《软件工程》 清华大学出版社/北京交通大学2022年1月
[2] 周苏 等 《软件工程学实验》 科学出版社 2022年4月
[3] 邓良松等 《软件工程》 西安电子科技大学出版社2022年6月
[4] 张海藩 《软件工程导论(第四版)》 清华大学出版社 2022年11月
[5] 吴洁明 袁山龙 《软件工程应用实践教程》 清华大学出版社 2022年7月
[6] 文斌 等《软件工程与软件文档写作》 清华大学出版社 2022年8月
六、实践教学建议
在实践环节的实施中,建议同学们选择熟悉的具有代表性的应用系统作为实践环节的软件项目选题。为方便起见,在此列出部分参考选题如下:
1.酒店餐饮管理系统
2.多媒体播放器
3.进销存管理系统
4.宾馆客房管理系统
5.人事管理系统
6.工资管理系统
7.KTV点歌系统
8.网上考试系统
9.考务管理系统
10.学生成绩管理系统
11.超市POS系统
12.学生综合测评系统
13.学生任选课管理系统
14.网上书店系统
15.音像租赁管理系统
16.图书借阅管理系统
17.学生学籍管理系统
18.门禁管理系统
第四篇:软件工程实践学习心得
软件工程实践学习心得
这学期学习了软件工程实践这门课,我觉得这是对上学期的软件工程课程学习的检验,上学期学习软件工程只是我们浅显的认识,相比之下,这学期就更加全面的说明了开发一个项目所需要的步骤以及开发项目过程中所需要注意的诸多细节。如果说上学期的课程注重理论基础的话,那么这学期的软工实践,顾名思义,就是侧重我们动手操作的能力。
原来我认为开发一个项目最重要的就是写代码,似乎整个软件都是编代码,因为自己动手能力不强所以就很排斥做项目。可是经过我们学习软工课程到团队做项目再到学习软件工程实践课程之后,我才真正意识到实施一个软件工程项目并不是说简单的会编码就能够解决问题的,因为一个软件的生命周期分为三个时期:软件定义时期、开发时期、维护时期,而这三个时期整体又分为七个阶段,他们分别是:问题定义、可行性研究、需求分析、总体设计、详细设计、编码和单元测试、综合测试,由此可看出,当我们开发一个项目时,更多的精力不是放在编码上,编码只是一个很小的模块,而是项目的整体结构上。
在写软工实践体会之前,我想在这里总结一下上学期三人团队做 项目的相关事宜。上学期我们三人团队根据软件开发的步骤开发一个名为“西大老乡‘荟’”的社交系统,主要是为西大学子提供一个找老乡的平台。虽然只进行到详细设计阶段,没有进一步实现,但是我还是从中学到很多东西的。首先要先确定项目主题,也就是这个项目用来做什么,可以解决什么问题。接着就是这个项目是否有研究的必要以及是否有解决的办法,针对我们的项目,我们对西大的一些学生做了问卷调查,并从调查中继续完善系统本身的做用户。第三步根据我们确定的项目主题进行需求分析,这一步骤当时做的不是很好,比如所画E-R图、数据流图等都有考虑不周的问题,导致接下来的概要设计、详细设计进行的很困难,有些步骤甚至还需要返工。
从我们在需求分析中出现的问题,使我们明白了软件定义阶段对于一个项目的开发是至关重要的,当软件定义阶段完成时必须要用正式的文档准确的地记录目标系统的需求。只有前期的准备工作做得好,后面的工作才能顺利进行。虽然项目最后没有完全实现,但是起码我们已经初步体会到软件项目开发的步骤,以及每一步所需要完成的文档等内容。
这学期的软件工程实践虽然不是亲自动手开发一个系统,但是张元平老师以“物联网物流仓储管理系统”为主给我们讲解了一个真实系统的开发过程,从计划到项目系统的发布实施,以及每一步必须生成的文档。我主要从以下五个方面谈一下我的心得体会。
第一、行业背景说明方面
对于一个软件系统的开发,第一步就是问题定义,了解所开发系统的行业背景,制定计划。当我们计划确定以后就要对项目系统本身进行可行性研究,主要从技术可行性、经济可行性和操作可行性三个方面着手。就比如《物联网物流仓库管理系统》的行业背景说明文档中非常详细地分析了当下物联网物流行业的整体业务说明、应用背景、未来发展趋势以及相关应用案例等四个方面,项目团队中系统分析员就可以根据这份文档以及相关的调查资料对将要开发系统的进行定义等工作。
原来我们写这类文档的时候就是草草了事,不会做得这么详细,而这次看到大型项目的行业背景说明也是这么详细,也让自己认识到不管是软件开发的那个阶段都要认真对待,这些琐碎的文档都是后期开发项目的支撑,只要它们做的透彻,后面的开发工作才能更顺利的进行。
第二、项目需求说明方面
这部分项目需求说明就是软件定义时期中需求分析阶段,而该阶段的主要目的就是了解用户的需要,根据用户的需要确定系统必须完成那些工作,并对目标系统提出完整、准确、清晰、具体的要求。在需求分析结束之前系统分析人员要写出一份需求规格说明,即为《物联网物流仓储管理系统》项目需求说明文档。我们可以看出该文档也是非常详细,相比之下我们之前做项目时写的需求规格说明书就非常 不合格,不仅格式不正确内容也是少之又少。
在这方面,这篇文档给我启发很大。首先就是文档的格式,要美观整齐,让人看着舒服方便。其次就是文档的内容,原来它不是很重要,写文档的时候也不知道怎么写就借鉴下网上的内容,结果根本就没有把自己项目的需求写明白,以至于自己最后都有些糊涂,所以根据以前的经验教训我会对这部分更加重视。
第三、系统概要设计方面
这部分内容分说的是软件设计时期的概要设计阶段,该阶段的主要目的就是实现系统的功能、设计软件的结构、模块组成以及模块之间的关系。在概要设计阶段,我们可以站在全局的高度上,花较少的成本,从抽象的层次上分析对比多种可能的系统实现方案和软件结构,从中选出最佳方案和最合理的结构。在这个阶段还会具体画出E-R图、数据流图等方面的设计。
比如《物联网物流仓库管理系统》的系统概要设计从项目概述、设计约束、功能单元与功能模块设计、数据E-R图设计、总体设计、界面设计等六个方面介绍,通过读这个文档,我觉得最重要的还是总体设计,分别从逻辑架构设计、物理架构设计、技术架构设计设计系统。在这个阶段中模块要做到高内聚低耦合,这样开发出来的系统才会具有更高的独立性。
在原来做项目时没有编写过这类文档,在该阶段只是画了结构图、层次图以及相关的模块划分,对该类文档尚未重视。通过张老师的讲解和自己的学习,我相信在以后做项目的时候一定会注意到这类文档的编写。
第四、详细设计与分析方面
详细设计阶段就是把概要设计阶段的每个模块进一步设计,确定每个模块所需要的算法和数据结构。在这个阶段还是需要我们设计出程序的详细规格说明,而不是编写程序。在详细设计阶段,系统设计人员可以通过使用程序流程图、盒图、PAD图等过程设计的工具和Jackson图等面向数据结构的设计工具进一步设计系统相关接口,主要包括界面设计接口、业务单设计接口、单元模块设计接口等,这些对于以后的编码工作都是极其重要的。
第五、编码和测试方案方面
关于编码,我认为编码要想做的完美必备条件就是前面的软件定义和软件设计时期要按部就班的做,文档一定要按要求书写,不能偷懒也不能草草书写。对于编码也要有相应的文档书写规范,要使源程序代码的逻辑简明清晰、易读易懂。这样尽管我们不是设计系统的人员,当看到源程序代码的时候也能容易读懂代码的意思。
其次就是测试的内容,从测试的文档中我们可以得出,其实测试在软件开发中同样占据了重要的地位,它主要就是尽可能多的找到问题并排除其中的潜藏的错误,最终把一个高质量的软件系统交给用户 使用。它要求测试人员也要有很高的技术水平。
第五篇:软件工程实践心得
软件工程(SE)
软件是计算机系统中与硬件相互依存的另一部分,它包括程序、相关数据及其说明文档。软件工程(Software Engineering,简称为SE)是针对软件这一具有特殊性质的产品的工程化方法。SE涵盖了软件生命周期的所有阶段,并提供了一整套工程化的方法,来指导软件人员的工作。任何事物都是从无到有的,软件当然也不例外。上世纪中期,软件产业从零开始起步,经过半个多世纪的发展,其大致经历的3个阶段:程序设计阶段、软件设计阶段和软件工程时代,现已成为推动人类社会发展的龙头产业,随着信息化时代的发展,软件对人类社会也将越看来越重要。人们对软件的认识自然经历了一个由浅入深的过程,在得到巨大需求的同时,也遇到了一系列严重问题,即软件危机。所谓软件危机,是指在计算机软件的开发和维护过程中所遇到的一些严重问题,其实质是软件产品的供应赶不上需求的增长。概括的说包含两方面的问题:
一、如何开发软件,以满足不断增长,日趋复杂的要求;
二、如何维护数量不断膨胀的软件产品。为研究和解决软件危机,一门新兴的学科——软件工程,应运而生。
软件工程的概念是为了有效地控制软件危机的发生而被提出来的,它的中心目标就是把软件作为一种物理的工业产品来开发,要求“采用工程化的原理与方法对软件进行计划、开发和维护”,它的主要对象是大型软件,它的最终目的是摆脱手工生产软件的现状,逐步实现软件开发和维护的自动化。软件工程的概念自提出来后,经过几
十年的发展,虽然软件危机没有得到彻底的解决,但在软件开发方法和技术方面已经有了很大的进步,提出了软件工程知识体系、软件工程三段论、软件工程生存期模型、服用原则等等。
软件开发过程大致经过7个阶段:可行性分析、需求分析、概要设计、详细设计、编码、测试、提交与维护。接下来逐一分析本人见解:
一、可行性分析:顾名思义,就是看项目究竟“能不能做”。有3个方面:技术可行性、经济可行性和操作可行性。要确定项目,首先要客观的、科学的了解项目的规模、难度和时间限制,才可以确定应该投入多少人力、物力和财力去做这个项目,必须准确的估计项目的规模与难度。看项目是否有价值去做,如果没有价值,就放弃;如果有价值,就要看目前的资源是否能满足项目的开发。如果项目有价值,且有必需的资源,那么就可以确定能做这个项目了。
二、需求分析阶段:解决“做什么、不做什么”的问题。围绕两个核心问题开展需求分析:应该了解什么?通过什么方式去了解?
一、了解什么:应该先了解宏观的问题,再了解细节的问题。最好为每个需求解释“为什么”,这样可以让程序员了解需求的本质,以便选用最合适的技术来实现此需求。同时,需求说明不可有额二义性,更不能前后矛盾,如果有二义性货前后相矛盾,则要重新分析此需求。然后,选择合适的生存周期,建立合适的需求模型;
二、通过什么方式去了解:直接与客户交谈;有些需求客户讲不清楚,分析人员又猜不透,这是就要请教行家。需求分析是非常重要的阶段,如果做不好 的话,后果很麻烦。
三、概要设计:解决“怎么做”的问题。将需求描述的“做什么”问题变为一个实施方案的创造性过程,使得整个项目在逻辑上和物理上能够得意实现。概要设计是第一个开发活动,也是最重要的活动,是软件项目实现的关键阶段。设计质量的高低直接决定了软件项目的成败,缺乏或者没有软件设计的过程会产生一个不稳定的、甚至是失败的软件系统。一个良好的软件设计是进行快速软件开发的根本,没有良好的设计,会将时间花在不断的调试上,无法添加新功能,修改时间越来越长,随着给程序打上一个有一个的补丁,新的功能需要更多的代码实现,就变成一个恶性循环了。概要设计是软件设计级别中的高级设计,是从需求出发,描述了总体上系统架构应该包含的要素。概要设计尽可能模块化,因此描述了各个模块之间的关联,主要是根据需求规格或规格定义,合理、有效地实现产品规格中定义的各项需求,完成软件模块的划分并描述模块之间的关系,并不断分解系统模块,从高层分解到低层分解。它注重框架设计、总体结构设计、数据库设计、接口设计、网络环境设计等,将产品分割成一些可以独立设计和实现的部分并保证各个部分可以和谐的工作。此过程中画数据流图、IPO图、E-R图、界面设计等。
四、详细设计:解决“具体做什么”的问题,将解决问题的办法进行具体化。软件设计的低级设计,亦即详细设计,主要描述实现各个模块的算法和数据结构以及用特定计算机语言实现的初步描述,是针对程序开发部分来说的,但这个阶段不是真正编写程序,而是设计
出程序的详细规格说明,这种规格说明类似于其他工程领域中工程师经常使用的工程蓝图,程序员根据其中所包含的必要的细节写出实际的程序代码。用另一种方式说就是,详细设计是将概要设计的框架内容具体化、明细化,将概要设计转化为 可以操作的软件模型,但在实际项目进行过程中,依据项目的具体情况和项目要求,这个过程可能可以省略(逻辑上没有省略,表现在概要设计阶段或者编码阶段),直接按照概要设计进行编码;不过,个人认为最好有,有详细设计可以更好的保证编码顺利的进行,可以预先扫清编码过程中的障碍,提高代码的质量和编码的效率。主要包括模块描述、算法描述、数据描述,可以采用图形、表格或者文字描述等方式表达出来。
五、编码:实现项目。由项目的概要设计和详细设计,将设计变为代码需要通过编码过程来完成。实现设计有很多种选择,有很多实现语言、工具等可供选择,但一般而言,在设计中会直接或间接地确定了实现语言。编码过程的一个主要标准时变成与设计的对应性和统一性。如果编码没有按设计的要求进行,设计就失去意义了。设计过程中的算法、功能、接口、数据结构都应该在编码过程中体现。如果需求发生变更,设计业对应地发生变更,同时代码也应该一致地发生变更,这可以通过配置管理配置控制。可见,如果编码和设计不一致,很容易“跑偏”,走火入魔。编码时要严格遵循编码标准和规范,并提供必要的程序解释,增加可读性。另一个就是重构的理解,所谓重构是对软件内部的一种调整,目的是在不改变软件基本功能和性能的前提下,提高其可理解性,降低成本,当添加功能、修改代码和复查
代码的时候,更不要错过重构,另外,重构可以和设计互补。还有一点值得注意,要在必要的时候部署编码文档。
六、测试:看软件是否符合标准。软件编码完成之后,将软件提交给用户之前,需要对软件进行测试,这是保证软件产品质量的一个重要标准,也是评估产品质量的主要手段。软件测试是从软件工程中演化出来的一个分支,有着非常广泛的内容,并且随着软件产业的发展,它已经变得越来越重要。软件与生俱来就可能存在缺陷,为了防止和减少这些可能存在的缺陷,进行软件测试是有必要的,测试是最有效的的排错和防止缺陷和故障的手段。最原始的测试莫过于直接运行软件了,后来测试手段逐渐多样化。测试手段有静态测试、动态测试面向对象的测试、自动化测试等等之分。静态测试或称静态分析是指一种不通过执行程序来进行测试的一种技术,主要是检查软件的表示和描述是否一致,覆盖程序的编码格式、程序语法、检查独立语句的结构和使用等,主要包括代码检查、静态结构分析、代码质量等等,可以通过人工进行,亦可借助工具(如:语法分析器)自动进行。动态测试是运行被测试的程序,通过输入测试用例,对其运行情况进行分析,以达到检测的目的,显然动态测试封像我们通常意义上的“测试”。动态测试主要包括白盒测试、黑盒测试、灰盒测试(介于黑盒和白盒之间)。其他测试不再一一介绍。
七、提交与维护:测试完之后,就要把软件交给用户使用了。提交不是剪裁,给人家就行了,还要教会客户怎么使用这个系统。如果用户不会使用系统,就会不满意系统的性能,那之前的努力就白费了,打水漂了。为了保证成功地将我们开发的软件提交给用户,我们需要对用户进行培训,同时提交必要的文档及用户手册软件。维护就不用多说了,就是售后服务了。维护需要分析人员、编码人员和设计人员等角色的参与,有纠错行维护、适应性维护、完善性维护、预防性维护等。维护后,要写软件维护过程文档,至少提交一个软件维护记录。
以上是软件工程及其几个阶段的介绍,知道怎样开发软件只是软件工程的一部分,搞好团队合作也是很重要的。项目是一个很大的工程,需要一个团队的统筹规划,团结协作,集思广益,举一反三,才能够按预期完成。