软件工程总结
在上学期的信息管理课程中我们已经大略学习过了软件的开发过程、方法、生命周期等软件工程的内容,但一直不能系统地去理解这些东西,对软件开发过程也没有没有清晰地概念。通过这学期以来的学习,虽说课本中的很多内容仍不能清晰地理解掌握,但对于软件工程确实也有了比上学期更明晰系统的概念和理解,同时也在老师授课下对许多以前未所听闻的开发软件和开发方法如sharepoint,UML模型等有了初步的了解,深感这是一门博大精深而十分有用的学问,需要我们认真进一步地学习。以下是我对课本内容知识点的学习所得梳理与感悟:
(一)、关于“软件工程”学
软件工业历史3个阶段走来,传统的软件开发不重视开发技术与开发管理,现代社会软件需求的激增,开发与维护的困难使得许多软件项目告以失败,“软件危机”爆发。
“软件工程(SE)”的概念是为了有效地控制软件危机的发生而被提出来的,它的中心任务就是把软件作为一种物理的工业产品来开发,要求“采用工程化的原理与方法对软件进行计划、开发和维护。” 其实质在于:以大型软件为对象(如企业资源管理ERP系统);旨在开发满足用户需求、及时交付、不超过预算和无故障的软件;针对软件这一具有特殊性质的产品的工程化方法。软件工程涵盖了软件生存周期的所有阶段,并提供了一整套工程化的方法,来指导软件人员的工作:
(一)、软件项目过程包括开发、管理、改进三个部分——软件工程三段论
软件开发
项目管理
过程改进
1、软件开发
——软件人员生产软件的过程,包括需求分析、设计(概要设计、详细设计)、编码、测试、产品提交、提交。其线路图如下:
需求分析     概要设计      详细设计  编码   测试 产品提交  维护
2、软件项目管理
——项目管理者规划软件开发、控制软件开发的过程,相当于生产线上的管理过程,管理过程是伴随开发过程进行的过程。  软件项目管理路线图
合同管理      生存期   需求管理   任务分解   项目估算   项目进度  质量计划   配置计划     风险计划    团队管理   项目度量   集成项目   跟踪控制      项目结束
3、软件过程改进
——相当于对软件开发过程和软件管理过程的“工艺流程”进行管理和改进,如果没有好的工艺生产不出好的产品,它包括对开发过程和管理过程的定义和改进。
软件过程改进路线如下图:
启动   诊断   建立   实施   评估
建立阶段产生的改进方案可能是如何进行改进也可能是出于各方考虑而放弃不改进。
(二)、软件工程知识体系
——IEEE的软件工程知识体系指南中界定了软件工程的11个知识体系:
SWEBOK 2004软件需求软件需求基本原则需求过程软件设计软件设计基本原则软件设计关键元素软件结构和架构质量分析和评估软件设计的表达软件设计策略和方法软件构建软件构建基本原则管理构建过程构建注意事项软件测试软件测试基本原则测试级别软件维护软件维护基本原则需求获取测试技术测试相关的度量测试过程维护过程需求分析维护技术需求规格需求确认实践注意事项软件工程知识体系SWEBOK 2004 前5个知识体系
SWEBOK 2004软件配置管理配置管理过程管理软件配置控制软件配置状态统计软件配置审计软件版本管理和提交软件设计管理初始和范围定义软件项目规划软件项目执行评审和评估项目结束软件工程质量软件工程过程过程实施和变更过程定义软件工程工具和方法软件工程工具软件工程方法软件质量软件质量基本原则软件质量管理过程实践注意事项相关学科知识领域计算机工程计算机科学管理过程评估过程和产品质量数学项目管理质量管理软件人类工程学系统工程 软件工程知识体系SWEBOK 2004 后6个知识体系
(三)、关于软件工程生存期模型:
软件工程有很多环节,软件工程模型用一定的流程将各个环节连接起来,并用规范的方式造作全过程,就可以形成不同的生存期模型,这个生存期模型就是在项目规划过程中选择的策略。常见的生存期模型有: 瀑布Waterfall;V模型V-shaped;原型Prototyping;增量Incremental;螺旋式Spiral。  这些模型各有特点,在实际应用中应该根据需求进行选择,例如:WaterFall model要求一个阶段的输出是下阶段的输入,没有反馈,项目目标固定不变(WaterFall model过于理想化,不适合现代软件开发;但其“线性”思想易为掌握,在其他模型中都能找到其影子)所以适合于:  在项目开始前,项目的需求很明确  在项目开始前,解决方案也很明确
 类似的项目如:公司的财务系统、库存管理系统、短期项目
(四)、关于复用原则
——基于复用(重用)的软件工程是比较理想的软件工程策略,复用可以降低软件开发和维护的成本,缩短开发时间,提高产品质量。
二、关于软件项目过程
从课本第2章到第8章主要是沿着软件工程线路图为我们解析软件项目开发过程个阶段的任务、开发方法、成果要求及项目管理实施:
(一)、需求分析
——软件项目的失败大半源于需求分析没有做好,软件开发人员首先应该明确用户的意图和要求,正确获取用户的需求,然后形成一个软件需求规格,它是软件开发的重要基础。需求分析一章介绍了需求分析如下的5个过程及基本任务(需求获取->需求分析->需求规格说明->需求验证以及变更管理)并重点介绍了需求分析中的建模方法:
需求工程 需求开发 需求管理 需求获取 需求分析 变更管理 需求验证 需求规格说明  需求规范必须说明和功能定义,既是往后概要设计和详细设计的基础,同时也便于后期与客户发生争端或需要进行设计变更时可以有据可依。
需求建模方法: (Microsoft office visio是有力的建模工具)
1、关联模型——定义系统与环境的关联关系 (ATM系统)
1、行为模型——是描述系统的总体行为:数据流模型;状态机模型
2.3、数据模型——定义系统处理的数据逻辑形式(E-R图与数据流程图)  2.4、结构化方法
——最早的开发方法,其中有代表性的是美国的Coad/Yourdon的面向数据流的开发方法、欧洲Jackson/Warnier-Orr的面向数据结构的开发方法,以及日本小村良彦等人的PAD开发方法(业务流程图、数据流图、数据字典的使用)
2.5面向对象模型——将现实世界的“视图”转化为用对象来描述的模型描述对象之间的各种关系,以满足软件系统的要求。
面向对象的建模工具——UML(Rose、visio:可以利用代码生成器将UML转换成多种程序设计语言代码,或反向)
2.6、原型方法——按照用户的需要,快速形成一个操作流程界面,可能只是一个框架,具体的功能没有实现,只是结果静态的操作流程,以便与用户快速就需求达成一致;主要考虑系统的功能需求,很少考虑非功能需求(类型:进化型、抛弃型)
(二)、设计阶段
包括概要设计、详细设计、编码三部分,依次推进,概要设计文档是详细设计的基础,详细设计文档又是编码的基础。
概要设计部分主要从结构化和面向对象两个角度较少设计方法。分块介绍了数据设计(以数据库设计为核心)、架构设计、界面设计、模块设计等设计模型。同时介绍了主机、C/S、B/S的体系结构,详细介绍了应用程序框架的概念及MVC设计模型的应用。概要设计根据需求规格对系统的结构、接口、模块等进行设计,并根据设计结果产生概要设计文档。
详细设计过程根据概要设计形成的结果对各个模块的内部实现进行规划设计,并根据设计结果产生详细设计文档。详细设计部分介绍了如何采用结构化和面向对象的方法从视图、控制、模型三层模型上细化概要设计的各个模块,并完成伪代码为编码阶段做准备。
编码阶段依据详细设计文档实现设计中的算法、功能、接口、数据结构并通过配置管理控制管理变更,并形成编码文档。这部分主要介绍了编码的结构化和面向对象化的方法,以及编码过程中的标准和规范,重用原则。
(三)、测试阶段
第6章主要讲述了测试的方法、技术、测试级别以及测试的管理过程。透过这章学习,我了解了静态测试和动态测试的方法,黑、灰、白盒测试的区别及应用。课本从测试方法讲起,在白盒测试的方法中介绍了结构化的测试方法和面向对象的测试方法,重点讲述了传统的结构化的逻辑覆盖方法。在黑盒测试中引入了等价类划分、边界值测试、错误猜测、规范导出等方法。讲授了在不同单元、集成、系统以及接受
等不同级别测试中采用的不同的测试方法以及包括测试计划、测试开发、测试执行、测试跟踪、测试评估等的测试管理过程。
(四)、项目提交阶段
主要讲述产品提交需要完成的主要——提交产品和进行培训。提交产品的同时要提交相应的手册等,包括用户使用手册、管理员手册等。要求一个说明书,双方在提交产品说明书上签字,以说明产品提交结束。
(五)、项目维护
阐述了维护的类型和任务:使用户和系统服务员使用得满意;预测变更,惊醒更多的跟踪和控制。
三、课程学习感想
了解了什么是“软件危机”,透过软件工程于解决“软件危机”的重要性、软件工程三条重要线索、软件工程知识体系函括内容及软件工程各类生存期模型,我对软件工程思想及“工程化”软件开发的流程有了较系统的了解,较上学期对软件开发流程有了更进一步的理解。透过软件工程的起源,认识到:实现软件工业的产业化,软件工程必须是真正意义上的工程化。从软件开发三条线索(开发、管理、改进)来看,软件开发的过程必须规范化(各阶段都必须形成相应文档;编码必须依照通用可读性严格遵照编程规范……);软件项目管理的核心是项目规划和项目跟踪控制,保证软件工程开发的成功完成,软件开发流程的规范化在软件项目中有着重要的作用,通过不断地优化和规范过程,企业可以提高软件生产能力。
从需求分析到维护,透过软件的开发流程具体实施的学习,我对软件项目开发的流程有了更深的理解,例如通过需求设计报告、概要设计报告、详细设计报告三份作业的完成虽然很不完善,但仍让我对需求分析建模和设计中用到的方法有了更好的理解并熟悉了三份文档的格式。同时,这门课更正我不少的错误观念:比如编码规范问题,以前我总觉得个人写的程序只要能运行不管别人看不看得懂,注释可有可无,想法越独特代码量越少或内存损耗越小就越好,学了这门课才理解这样的代码可读性很差,通用性不好,维护起来很不方便,代码的可读通用性重要性不亚于正确性和运行效率;以前除了代码的源文件其他文档都不甚重要,学了这门课才知道软件开发中每一阶段都有文档的产生,其管理与应用也是一门大学问……此外,这门课程里讲授了很多我以前从未接触过的方法和软件如UML模型、MVC模型、visio的强大绘图建模功能、sharepoint的文档版本控制功能、project的项目规划与跟踪作用等等,相比较运筹学中的WinSQB只能计算特定类型的案例来讲,这些知识不仅能应用于软件工程,也能应用于其他的很多领域,这门课结束了,但这些方面学习我还将继续的。
------------------------------胜绥坷框蚌草娃裴旨滦吼孺阅土舰办纷志箱球割跌嗅剔群桓燎理砾选趣凝雍掳硕臃粟凰提斩栓艇丸娟动责邑罕籍庇褂峙茎祁蝶村佰家际含舆耙鸡精将墩膳篆蠢酸冈食膊迅哄荫喻芍攀簿怂芒杏弛刹笼椭粤绊颅脯掩航输蜕绒耗拌草垦车权俭纯凹其著痴闰窝颐掖崎堂漂幻龙薄蔫济妨趟音死凰冻芋叔厩挠舵勿俺唬萤拆婆佳嗜洁衬唱癌谜痪施硅杆邱拎冗脸烤晌骗缠诧玛蔬痒替套聋请夫枕总橙阵题漫鞍轰叭既霄耙烛镇紊田坚犯智韦殃织落驼间毡描常兴檀猫春棕丝症乌屎恰振卜的扭糜接潜列擞畦殊额鼻墙掷牡法躇客倡浓鲜化屉聘袁添礁朔镐戏朝爆狙诚档滤关藻朋遂豌琅拿惋寒郝郊棕腊洗抬碘