软件开发模型综述
软件开发模型概述
最早出现的软件开发模型是1970年W·Royce提出的瀑布模型。
软件开发模型(Software
Development Model)是指软件开发全部过程、活动和任务的结构框架。软件开发包括需求、设计、编码和测试等阶段,有时也包括维护阶段。软件开发模型能清晰、直观地表达软件开发全过程,明确规定了要完成的主要活动和任务,用来作为软件项目工作的基础。
典型的开发模型有:1.瀑布模型(waterfall model);2.渐增模型/演化/迭代(incremental model);3.原型模型(prototype model);4.螺旋模型(spiral model);5.喷泉模型(fountain model);6.智能模型(intelligent model) ; 7. 混合模型(hybrid model)
1.
边做边改模型(Build-and-Fix Model)
遗憾的是,许多产品都是使用"边做边改"模型来开发的。在这种模型中,既没有规格说明,也没有经过设计,软件随着客户的需要一次又一次地不断被修改.
在这个模型中,开发人员拿到项目立即根据需求编写程序,调试通过后生成软件的第一个版本。在提供给用户使用后,如果程序出现错误,或者用户提出新的要求,开发人员重新修改代码,直到用户满意为止。
这是一种类似作坊的开发方式,对编写几百行的小程序来说还不错,但这种方法对任何规模的开发来说都是不能令人满意的,其主要问题在于:
(1) 缺少规划和设计环节,软件的结构随着不断的修改越来越糟,导致无法继续修改;
(2) 忽略需求环节,给软件开发带来很大的风险;
(3) 没有考虑测试和程序的可维护性,也没有任何文档,软件的维护十分困难。
2. 瀑布模型(Waterfall Model)
1970年Winston
Royce提出了著名的"瀑布模型",直到80年代早期,它一直是唯一被广泛采用的软件开发模型。
组成:瀑布模型将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。
过程:在瀑布模型中,软件开发的各项活动严格按照线性方式进行,当前活动接受上一项活动的工作结果,实施完成所需的工作内容。当前活动的工作结果需要进行验证,如果验证通过,则该结果作为下一项活动的输入,继续进行下一项活动,否则返回修改。
瀑布模型特征:
n
1.从上一项活动接收该项活动的工作对象,作为输入
n
2.利用这一输入实施该项活动应完成的内容;
n
3.给出该项活动的工作成果,作为输出传给下一项活动;
n
4.对该项活动实施的工作进行评审,若其工作得到确认,则继续下一项活动,
否则返回前项,甚至更前项的活动进行返工。
瀑布模型的优点:
n
1.通过设置里程碑,明确每阶段的任务与目标
n
2.可为每阶段制定开发计划,进行成本预算,组织开发力量
n
3.通过阶段评审,将开发过程纳入正确轨道
n
4.严格的计划性保证软件产品的按时交付
瀑布模型的缺点
n
1.缺乏灵活性,不能适应用户需求的改变
n
2.开始阶段的小错误被逐级放大,可能导致软件产品报废
n
3.返回上一级的开发需要十分高昂的代价
n
4.随着软件规模和复杂性的增加,软件产品成功的机率大幅下降
2. V模型
我们应该认识到,"线性"是人们最容易掌握并能熟练应用的思想方法。当人们碰到一个复杂的"非线性"问题时,总是千方百计地将其分解或转化为一系列简单的线性问题,然后逐个解决。一个软件系统的整体可能是复杂的,而单个子程序总是简单的,可以用线性的方式来实现,否则干活就太累了。线性是一种简洁,简洁就是美。当我们领会了线性的精神,就不要再呆板地套用线性模型的外表,而应该用活它。例如增量模型实质就是分段的线性模型,螺旋模型则是接连的弯曲了的线性模型,在其它模型中也能够找到线性模型的影子。
在该模型的基础上,还衍生出了强调测试活动的V模型。它把瀑布模型的测试阶段进行细分,并于前面的阶段进行对应。细分出来的这些阶段分别为:单元测试阶段、集成测试阶段和系统测试阶段。V模型的结构图如下。
3. 快速原型模型(Rapid Prototype Model)
快速原型模型的第一步是建造一个快速原型,实现客户或未来的用户与系统的交互,用户或客户对原型进行评价,进一步细化待开发软件的需求。通过逐步调整原型使其满足客户的要求,开发人员可以确定客户的真正需求是什么;第二步则在第一步的基础上开发客户满意的软件产品。
显然,快速原型方法可以克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险,具有显著的效果。
快速原型的关键在于尽可能快速地建造出软件原型,一旦确定了客户的真正需求,所建造的原型将被丢弃。因此,原型系统的内部结构并不重要,重要的是必须迅速建立原型,随之迅速修改原型,以反映客户的需求。
原型模型的特征
n
立项以后先提交原型给用户,在用户试用的基础上进行需求调查与原形修改
n
强调用户对软件功能和使用性能的评价
n
设计、修改原型与试用交替进行
一次迭代中的开发步骤:
1.了解用户/设计者的基本信息需求
2.开发初始原型系统
3.用户/设计者试用和评估原型系统
原型模型的优点
n
1.开发者与用户充分交流,可以澄清模糊需求,需求定义比其他模型好得多
n
2.开发过程与用户培训过程同步
n
3.为用户需求的改变提供了充分的余地
n
4.开发风险低,产品柔性好
n
5.开发费用低,时间短
n
5.系统易维护,对用户更友好
原型模型的缺点
n
1.开发者在不熟悉的领域中不易分清主次,原型不切题
n
2.产品原型在一定程度上限制了开发人员的创新
n
3.随着更改次数的增多,次要部分越来越大,“淹没”了主要部分
n
4.原型过快收敛于需求集合,而忽略了一些基本点
n
5.资源规划和管理较为困难,随时更新文档也带来麻烦
n
6.只注意原型是否满意,忽略了原型环境与用户环境的差异
4. 构件组装模型/增量模型(Incremental
Model)
与建造大厦相同,软件也是一步一步建造起来的。在增量模型中,软件被作为一系列的增量构件来设计、实现、集成和测试,每一个构件是由多种相互作用的模块所形成的提供特定功能的代码片段构成.
优点:
增量模型在各个阶段并不交付一个可运行的完整产品,而是交付满足客户需求的一个子集的可运行产品。
整个产品被分解成若干个构件,开发人员逐个构件地交付产品,这样做的好处是软件开发可以较好地适应变化,客户可以不断地看到所开发的软件,从而降低开发风险。
构件组装模型的特征:
n
1.应用软件可用预先编好的、功能明确的产品部件定制而成, 并可用不同版本的部件实现应用的扩展和更新。
n
2.利用模块化方法,将复杂的难以维护的系统分解为互相独立、协同工作的部件,并努力使这些部件可反复重用。
n
3.突破时间、空间及不同硬件设备的限制,利用客户和软件之间统一的接口实现跨平台的互操作。
构件组装模型的优点:
n
1.构件组装模型导致了软件的复用,提高了软件开发的效率,面向对象技术是软件工程的构件组装模型的基础。
n
2.构件可由一方定义其规格说明,被另一方实现,然后供给第三方使用。
n
3.构件组装模型允许多个项目同时开发,降低了费用,提高了可维护性。
n
4.可实现分步提交软件产品。
构件组装模型的缺点:
n
1.可重用性和软件高效性不易协调。
n
2.缺乏通用的组装结构标准,而自定义的组装结构标准引入较大的风险。
n
3.需要精干的有经验的分析和开发人员,一般的开发人员插不上手。
n
4.客户的满意度低。
5.螺旋模型(Spiral Model)
1988年,Barry Boehm正式发表了软件系统开发的"螺旋模型",它将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,特别适合于大型复杂的系统。
螺旋模型沿着螺线进行若干次迭代,图中的四个象限代表了以下活动:
(1) 制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条
(2) 风险分析:分析评估所选方案,考虑如何识别和消除风险;
(3) 实施工程:实施软件开发和验证;
(4) 客户评估:评价开发工作,提出修正建议,制定下一步计划。
螺旋模型的特征
n
每一圈是一个阶段,每个阶段里又有一些活动
n
阶段可分为:操作的概念、软件需求、产品设计、详细设计、编码、单元测试、集成和测试、验收测试、实现
n
活动有:需求与计划、风险分析、设计与制作、用户评价
螺旋模型的优点
n
风险分析可使一些极端困难的问题和可能导致费用过高的问题被更改或取消
n
用户评价为需求的变更带来柔性
螺旋模型的缺点
n
需要开发人员具有相当丰富的风险评估经验和专门知识
n
要求用户参与阶段评价,对用户来说比较困难,不易取得好的效果
6.演化模型(incremental model)
主要针对事先不能完整定义需求的软件开发。用户可以给出待开发系统的核心需求,并且当看到核心需求实现后,能够有效地提出反馈,以支持系统的最终设计和实现。软件开发人员根据用户的需求,首先开发核心系统。当该核心系统投入运行后,用户试用之,完成他们的工作,并提出精化系统、增强系统能力的需求。软件开发人员根据用户的反馈,实施开发的迭代过程。
第一迭代过程均由需求、设计、编码、测试、集成等阶段组成,为整个系统增加一个可定义的、可管理的子集。
在开发模式上采取分批循环开发的办法,每循环开发一部分的功能,它们成为这个产品的原型的新增功能。于是,设计就不断地演化出新的系统。 实际上,这个模型可看作是重复执行的多个“瀑布模型”。
特征:
“演化模型”要求开发人员有能力把项目的产品需求分解为不同组,以便分批循环开发。
这种分组并不是绝对随意性的,而是要根据功能的重要性及对总体设计的基础结构的影响而作出判断。
有经验指出,每个开发循环以六周到八周为适当的长度。
7.喷泉模型(fountain model, (面向对象的生存期模型, OO模型))
喷泉模型与传统的结构化生存期比较,具有更多的增量和迭代性质,生存期的各个阶段可以相互重叠和多次反复,而且在项目的整个生存期中还可以嵌入子生存期。就像水喷上去又可以落下来,可以落在中间,也可以落在最底部。
8.智能模型(四代技术(4GL))
智能模型拥有一组工具(如数据查询、报表生成、数据处理、屏幕定义、代码生成、高层图形功能及电子表格等),每个工具都能使开发人员在高层次上定义软件的某些特性,并把开发人员定义的这些软件自动地生成为源代码。这种方法需要四代语言(4GL)的支持。
特点:
1.其主要特征是用户界面极端友好,即使没有受过训练的非专业程序员,也能用它编写程序。
2.它是一种声明式、交互式和非过程性编程语言。4GL还具有高效的程序代码、智能缺省假设、完备的数据库和应用程序生成器。
3.目前市场上流行的4GL(如Foxpro等)都不同程度地具有上述特征。但4GL目前主要限于事务信息系统的中、小型应用程序的开发。
9.混合模型(hybrid model)
过程开发模型又叫混合模型(hybrid
model),或元模型(meta-model),把几种不同模型组合成一种混合模型,它允许一个项目能沿着最有效的路径发展,这就是过程开发模型(或混合模型)。实际上,一些软件开发单位都是使用几种不同的开发方法组成他们自己的混合模型。
10.RUP模型特征
n
RUP
可以用二维坐标来描述。横轴通过时间组织,是过程展开的生命周期特征,体现开发过程的动态结构,用来描述它的术语主要包括周期(Cycle)、阶段 (Phase)、迭代(Iteration)和里程碑(Milestone);纵轴以内容来组织为自然的逻辑活动,体现开发过程的静态结构,用来描述它的术语主要包括活动(Activity)、产物(Artifact)、工作者(Worker)和工作流(Workflow)。
RUP的时间轴
被分解为四个顺序的阶段,分别是:
n
初始阶段(Inception)、
n
细化阶段(Elaboration)、
n
构造阶段(Construction)和
n
交付阶段(Transition)
RUP中有9个核心工作流,分为6个核心过程工作流(Core Process Workflows)和3个核心支持工作流(Core Supporting Workflows)。尽管6个核心过程工作流可能使人想起传统瀑布模型中的几个阶段,但应注意迭代过程中的阶段是完全不同的,这些工作流在整个生命周期中一次又一次被访问。9个核心工作流在项目中轮流被使用,在每一次迭代中以不同的重点和强度重复。
核心过程工作流
RUP模型的优点
n
RUP
具有很多长处:提高了团队生产力,在迭代的开发过程、需求管理、基于组件的体系结构、可视化软件建模、验证软件质量及控制软件变更等方面,针对所有关键的开发活动为每个开发成员提供了必要的准则、模板和工具指导,并确保全体成员共享相同的知识基础。它建立了简洁和清晰的过程结构,为开发过程提供较大的通用性。
RUP模型的缺点
n
RUP缺点: RUP只是一个开发过程,并没有涵盖软件过程的全部内容,例如它缺少关于软件运行和支持等方面的内容;此外,它没有支持多项目的开发结构,这在一定程度上降低了在开发组织内大范围实现重用的可能性。