西安交通大学20xx级研究生课程专题作业
软 件 工 程 心 得
专 业:
班 级:
学 号:
姓 名:
电 话:
二xxx年十月
体 会
一、 软件生命周期各阶段任务目的和主要方法
在分阶段总结之前,首先要明确以下三个问题:
1、什么是软件生存周期?
软件生存周期是指从软件定义、开发、使用、维护到淘汰的全过程。 主要包括:
(1)问题定义;
(2)可行性研究;
(3)需求分析;
(4)概要设计;
(5)详细设计;
(6)编码;
(7)测试;
(8)软件维护 。
2、软件生存周期为什么划分成阶段?
(1) 任何一个阶段的具体任务不仅独立,而且简单,便于不同人员分工协作,从而降低整个软件开发工作的困难程度。
(2) 可以降低每个阶段任务的复杂程度,简化不同阶段的联系,有利于工程的组织管理,也便于采用良好的技术方法。
(3) 使软件开发的全过程以一种有条不紊的方式进行,保证软件的质量,特别是提高了软件的可维护性。
3、应该怎样来划分阶段?
(1)每一个阶段的任务尽可能独立;
(2)同一阶段内的任务性质尽可能相同;
(3)每一个阶段任务的开始和结束有严格的标准。
下面分别对各阶段进行讨论:
1、问题定义
目的是将用户提出的要求具体化、定量化,任务是确定研制系统的范围,明确研制的边界。
方法步骤:
(1)通过调查研究,了解系统要求;
(2)需求方与开发方讨论确定系统的功能、性能、可靠性、安全保密性等方面的要求,以及费用、进度等方面的要求。
2、可行性研究
可行性研究说明该软件开发项目的实现在技术上、经济上和社会条件上的可行性,评述为合理地达到开发目的可能选择的各种方案,目标是用最小的代价在尽可能短的时间内确定问题是否能够解决。
可行性研究的方法是首先需要进一步分析和澄清问题定义;然后分析员导出系统的逻辑模型;最后对未来的行动方针提出建议。
在导出逻辑模型的过程中,具体要根据以下四个方面分析可行性:
(1)经济可行性:进行成本效益分析,评估项目的开发成本,估算开发成本是否会超过项目预期的全部利润.分析系统开发对其它产品或利润的影响。
(2)技术可行性:根据客户提出的系统功能,性能及实现系统的各项约束条件,从技术的角度研究实现系统的可行性。
(3)法律可行性:研究在系统开发过程中可能涉及的各种合同,侵权,责任以及各种于法律相抵触的问题。
(4)开发方案的选择性:提出并评价实现系统的各种看法方案.从中选出一种用于软件项目开发。
3、需求分析
需求分析是为了有效解决用户的需要而进行的一项工程活动,要考虑的问题是功能需求、数据需求、性能需求和接口需求,开发者承担分析任务,核心是用户。
软件项目的失败大半源于需求分析没有做好,软件开发人员首先应该明确用户的意图和要求,正确获取用户的需求,然后形成一个软件需求规格说明,它是软件开发的重要基础。
需求分析的方法:
(1)需求获取:获取客户需求,客户泛指某个人或机构部门等,一般方法是调查,包括访谈座谈、问卷、跟班和收集资料,需求规约可表达用户的软件价值。
(2)需求分析与规格说明:建立需求模型,它是用户需求的图解,一些常用的模型有:业务树图、用例图、活动图。分别用于结构化需求建模、系统业务举例和反映系统工作流程。
(3)需求验证:要验证的主要内容有:有效性验证、一致性验证、完整性验证、现实性验证和可检验性验证。
需求建模的方法:
(1)关联模型
(2)面向对象模型
(3)原型方法
4、系统设计
此阶段主要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计,数据库设计等,一般分为概要设计和详细设计,好的软件设计将为软件程序编写打下良好的基础。
概要设计是对需求规格说明书中提供的软件系统逻辑模型进行进一步的分解,从而建立软件系统的总体结构和各个子系统间及各个模块间的关系,定义各子系统接口界面和各模块的功能描述,并根据设计结果产生概
要设计文档。 概要设计在早期有模块化方法、功能分解方法;在
60年代后期提出了面向数据流和面向数据结构的设计方法;近年来又提出面向对象的设计方法等。
详细设计过程根据概要设计形成的结果对各个模块的内部实现进行规划设计,并根据设计结果产生详细设计文档。 详细设计主要方法是通过采用结构化和面向对象的方法从视图、控制、模型三层模型上细化概要设计的各个模块,并完成伪代码为编码阶段做准备。
5、编码和测试
编码是将软件设计的结果转换成计算机可执行的程序代码。 主要方法是依据详细设计文档实现设计中的算法、功能、接口、数据结构,采用结构化和面向对象化的方法编写代码。
编码过程中要制定统一,符合标准的编写规范,以保证程序的可读性,易维护性,提高程序的运行效率。
软件设计完成后要经过严密的测试,以发现软件在整个设计过程中存在的问题并加以纠正。整个测试过程分单元测试、组装测试以及系统测试三个阶段进行。
测试的方法主要有白盒测试和黑盒测试两种。在测试过程中需要建立详细的测试计划并严格按照测试计划进行测试,以减少测试的随
意性。
6、软件维护
软件维护是软件生命周期中持续时间最长的阶段。在软件开发完成并投入使用后,由于多方面的原因,软件不能继续适应用户的要求。要延续软件的使用寿命,就必须对软件进行维护。
软件的维护包括纠错性维护和改进性维护两个方面。
二、 课程主要收获
《软件工程》课程强调概念和知识的理解和掌握,侧重软件项目的分析、设计、实现和维护的基本技能。比较注意“点”和“面”的结合,是一门理论性和实践性都较强的学科。作为一名已经在IT领域工作十年之后又重返校园的大龄学生,虽然已经不是第一次学习这门课程了,去年也刚在单位取得了信息系统项目管理高级工程师资格,从另一个侧面对软件开发过程有了更深层次的理解。不过温故而知新,这次仍然选修这门课,我还是得到了一些新的启示。最大的收获就是在我看来,软件工程与其说是一门课程,不如说是一门思想,是一个如何去分析和处理问题的过程,应该说其范畴已经远远不止局限于该门课程,它已经成为了一个综合的能够解决问题的思想集合。
此外,通过对软件开发过程的重学习,并结合之前在软件开发管理工作中的经验,我对自己在软件开发主要阶段管理工作中的不足有了更进一步的认识,总结了相应的管理要点,具体阐述如下:
1、 概要设计
主要任务:系统应该怎样做,或概括地说,系统应该如何实现 。 本阶段特点:将用户的具体要求转为抽象的计算机软件设计 。 管理要点:
通过分析对比,从多种可能的实现方案和软件结构中选出最佳方案及最合理的,即:
1 设想供选择的方案→推荐最佳方案→选取合理的方案
2 功能分解→ 软件设计结构 → 数据库设计
3 确定测试要求并确定测试计划
作为项目管理者必须从概要设计开始就应该从全局角度开始把握整个系统的进展,并必须从此阶段开始,时刻从全局观的问题来发现问题,解决问题。
2、详细设计
主要任务:系统应该怎样具体地做,或概括地说,系统应该如何具体地去实现所有的要求 。
本阶段特点:将抽象的计算机软件设计转为形象的,具体的,面向用户的计算机界面设计 。
管理要点:
本阶段尚未涉及具体编写程序,而是要设计出程序的“蓝图”,所以详细设计的结果基本上决定了最终的程序代码的质量。
1 逻辑是否正确
2 性能是否满足要求
3 是否容易阅读和理解