一、 软件生命周期:
软件生命周期是指从软件定义、开发、使用、维护到淘汰的全过程。
1. 软件定义期
是软件项目的早期阶段,主要由软件系统分析人员和用户合作,针对有待开
发的软件系统进行分析、规划和规格描述,确定软件是什么,为今后的软件开发
做准备。这个时期往往需要分阶段地进行以下几项工作。
1) 软件任务立项
软件项目往往开始于任务立项,并需要以“立项申请报告”的形式针对项目
的名称、性质、目标、意义和规模等做出回答,以此获得对准备着手开发的软件
系统的最高层描述。
2) 项目可行性分析
软件任务立项报告批准后,接着需要进行项目可行性分析。可行性分析是针
对准备进行的软件项目进行的可行性风险评估。因此,需要对准备开发的软件系
统提出高层模型,并根据高层模型的特征,从技术可行性、经济可行性和操作可
行性这三个方面,以“可行性报告”的形式,决定项目是否继续进行下去。
3) 制定项目计划
确定项目可以进行后,需要针对项目的开展,从人员、组织、进度、资金、
设备等多个方面进行合理的规划,并以“项目计划”的形式提交书面报告。
4) 软件需求分析
软件规格描述的具体化与细节化,是软件定义时期需要达到的目标。需求分
析要求以用户需求为基本依据,从功能、性能、数据、操作等多个方面,对软件
系统给出完整、准确、具体的描述,用于确定软件规格。其结果将以“需求规格
说明书”的形式提交。
注:在软件项目进行过程中,需求分析是从软件定义到软件开发的最关键步
骤,其结论不仅是今后软件开发的基本依据,同时也是今后用户对软件产品进行
验收的基本依据。
2. 软件开发期
在对软件规格完成定义以后,可以按照“需求规格说明书”的要求对软件实
施开发,并由此制作出软件产品。这个时期需要分阶段地完成以下几项工作。
1) 软件概要设计
概要设计是针对软件系统的结构设计,用于从总体上对软件的构造、接口、
全局数据结构和数据环境等给出设计说明,并以“概要设计说明书”的形式提交
书面报告,其结果将成为详细设计与系统集成的基本依据。
注:模块是概要设计时构造软件的基本元素,因此,概要设计中软件也就主
要体现在模块的构成与模块接口两个方面。结构化设计中的函数、过程,面向对
象设计中的类、对象,都是模块。概要设计时并不需要说明模块的内部细节,但
需要进行全部的有关它们构造的定义,包括功能特征、数据特征和接口等。在进
行概要设计时,模块的独立性是一个有关质量的重要技术性指标,可以使用模块
的内聚、耦合这两个定性参数对模块独立性进行度量。
2) 软件详细设计
设计工作的第二步是详细设计,它以概要设计为依据,用于确定软件结构中
每个模块的内部细节,为编写程序提供最直接的依据。
详细设计需要从实现每个模块功能的程序算法和模块内部的局部数据结构
等细节内容上给出设计说明,并以“详细设计说明书”的形式提交书面报告。
3) 编码和单元测试
编码是对软件的实现,一般由程序员完成,并以获得源程序基本模块为目标。
编码必须按照“详细设计说明书”的要求逐个模块地实现。在基于软件工程
的软件开发过程中,编码往往只是一项语言转译工作,即把详细设计中的算法描
述语言转译成某种适当的高级程序设计语言或汇编语言。
为了方便程序调试,针对基本模块的单元测试也往往和编码结合在一起进行。
单元测试也以“详细设计说明书”为依据,用于检验每个基本模块在功能、算法
与数据结构上是否符合设计要求。
4) 系统集成测试
系统集成就是根据概要设计中的软件结构,把经过测试的模块,按照某种选
定的集成策略,例如渐增集成策略,将系统组装起来。
在组装过程中,需要对整个系统进行集成测试,以确保系统在技术上符合设
计要求,在应用上满足需求规格要求。
5) 系统确认验证
在完成对系统的集成之后,接着还要对系统进行确认验证。系统确认验证需
要以用户为主体,以需求规格说明书中对软件的定义为依据,由此对软件的各项
规格进行逐项地确认,以确保已经完成的软件系统与需求规格的一致性。为了方
便用户在系统确认期间能够积极参入,也为了系统在以后的运行过程中能够被用
户正确使用,这个时期往往还需要以一定的方式对用户进行必要的培训。
完成对软件的验收之后,软件系统可以交付用户使用,并以“项目总结报告”
的书面形式对项目进行总结。
3. 软件运行与维护期
软件系统的运行是一个比较长久的过程,跟软件开发机构有关的主要任务是
对系统进行经常性的有效维护。
软件的维护过程,也就是修正软件错误,完善软件功能,由此使软件不断进
化升级的过程,以使系统更加持久地满足用户的需要。因此,对软件的维护也可
以看成为对软件的再一次开发。在这个时期,对软件的维护主要涉及三个方面的
任务,即改正性维护、适应性维护和完善性维护。
二、 软件开发模型有几种?它们各自有何特点?
瀑布型开发方法:
“瀑布”是对这个模型的形象表达,即山顶倾泻下来的水,自顶向下、逐
层细化。按照软件生存周期的划分依次实施,每一个阶段有明确规定的任务。
(1)特点:线性化模型、阶段具有里程碑特征、基于文档的驱动、阶段评审
机制、各个阶段的顺序性和依赖性、划分逻辑设计与物理设计,尽可能推迟程序
的物理实现。
(2)作用:为软件项目按规程管理提供了便利,为其他过程模型的推出提供
了一个良好的拓展平台。
(3)局限性:主要适合于需求明确且无大的需求变更的软件开发,但不适合
分析初期需求模糊的项目。
增量型开发方法:
增量模型结合了瀑布模型与原型进化模型的优点。在整体上按照瀑布模型的
流程实施开发,以方便对项目的管理。但在软件的实际创建中,则将软件系
统按功能分解为许多增量构件逐个地创建与交付,直到全部构件创建完毕,
并都被集成到系统之中交付使用。
(1) 从部分需求出发,先建立一个不完全的系统,通过测试运行该系统取得
经验和信息反馈,加深对软件需求的理解,进一步使系统扩充和完善。如此反复,
直至软件人员和用户对所设计完成的软件系统满意为止。
(2) 在渐增型开发下的软件是随软件开发的过程而逐渐形成的。
(3) 渐增型开发方法适合于知识型软件的开发,设计系统时对用户需求的认
识开始不是很清楚的,需要在开发过程中不断认识、不断获得新的知识去丰富和
完善系统。多数研究性质的试验软件,一般采用此方法。
原形模型开发方法:
(1)快速原型方法:是原型模型在软件分析、设计阶段的应用,用来解决用
户对软件系统在需求上的模糊认识,或用来试探某种设计是否能够获得预期结果。
(2)原型进化模型:针对有待开发的软件系统,先开发一个原型给用户使用,
然后根据用户的使用意见,对原型不断修改,使它逐步接近,并最终到达开发目
标。
螺旋模型开发方法:
螺旋模型是一种引入了风险分析与规避机制的过程模型,是瀑布模型、快速
原型方法和风险分析方法的有机结合。其基本方法是,在各个阶段创建原型进行
项目试验,以降低各个阶段可能遇到的项目风险。
喷泉模型开发方法:
喷泉模型是专门针对面向对象软件开发方法而提出的。“喷泉”一词用于形
象地表达面向对象软件开发过程中的迭代和无缝过渡。
组件复用模型开发方法:
组件复用方法是最近几年发展起来的先进的软件复用技术,在基于组件复用
的软件开发中,软件由组件装配而成,这就如同用标准零件装配汽车一样。因此,
组件复用模型能够有效地提高软件生产率。
常用的办法是按开发阶段划分任务,典型环境下各个开发阶段需要使用的人力
百分比大致如下:
任务 人力(%)
可行性研究 5
需求分析 10
设计 25
编码与单元测试 20
综合测试 40
总计 100