软件开发模型综述

标签: 软件开发 模型 综述 | 发表时间:2012-09-13 16:22 | 作者:hellobabygogo3
出处:http://blog.csdn.net

                     软件开发模型概述

最早出现的软件开发模型是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只是一个开发过程,并没有涵盖软件过程的全部内容,例如它缺少关于软件运行和支持等方面的内容;此外,它没有支持多项目的开发结构,这在一定程度上降低了在开发组织内大范围实现重用的可能性。

  

作者:hellobabygogo3 发表于2012-9-13 16:22:34 原文链接
阅读:0 评论:0 查看评论

相关 [软件开发 模型 综述] 推荐:

软件开发模型综述

- - CSDN博客推荐文章
                     软件开发模型概述. 最早出现的软件开发模型是1970年W·Royce提出的瀑布模型. 软件开发模型(Software Development Model)是指软件开发全部过程、活动和任务的结构框架. 软件开发包括需求、设计、编码和测试等阶段,有时也包括维护阶段.

软件开发的4种模型和4种方法

- - CSDN博客推荐文章
1.瀑布模型:适合需求明确的软件开发. 2.演化模型:获取一组基本需求,快速给出版本,成为原型,用于对软件需求缺乏准认知的情况. 3.螺旋模型:结合瀑布模型和演化模型,综合两者优点,并增加风险分析,螺旋模型包括四个方面活动:制定计划,风险分析,实施工程,客户评估. 4.喷泉模型:面向对象的开发过程,具有迭代和无间隙特性,开发活动重复多次,再迭代中不断完善软件系统,无间隙指在开发活动之间不存在明显的界限,允许开发活动交互,迭代进行.

Libjingle库 综述

- - C++博客_首页
   国内现在很多语音聊天工具都是基于TURN方式实现的,包括YY、AK等等,这种方式对于服务器的性能要求很高,而且在用户量增大的时候,服务器压力也会越来越大,用户的语音质量也会受到很大影响. 而基于P2P方式实现的语聊服务器,就可以极大的避免这种情况的发生,而且用户的语音体验也会非常好.    通过上文( P2P的原理和常见的实现方式(为libjingle开路))我们知道,因为NAT设备没有固定标准的原因,导致并不能100%的实现P2P,但是根据现在通用的ICE&STUN的方式,P2P的成功率可以达到90%多.

RBAC综述(转)

- - 企业架构 - ITeye博客
摘要 基于角色的访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注. 在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限. 在一个组织中,角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,用户可以很容易地从一个角色被指派到另一个角色.

软件开发的核心

- - 博客园_知识库
  「我们一直这样做开发,时间做久了,便忘了当初的本意.   有关软件系统开发,我们谈些什么.   我们谈过程,编码规范、开发流程、同行评审、结对编程、持续集成,从瀑布到敏捷再到极限编程.   我们谈架构,企业级、J2EE、容器化、SOA(面向服务架构)、Microservices(微服务化).   我们谈规模,大容量、高并发、大数据.

Big Data技术综述

- Ben - 《程序员》杂志官网
Big Data是近来的一个技术热点,但从名字就能判断它并不是什么新词. 历史上,数据库、数据仓库、数据集市等信息管理领域的技术,很大程度上也是为了解决大规模数据的问题. 被誉为数据仓库之父的Bill Inmon早在20世纪90年代就经常将Big Data挂在嘴边了. 然而,Big Data作为一个专有名词成为热点,主要应归功于近年来互联网、云计算、移动和物联网的迅猛发展.

[原]异常检测--综述

- - 工作笔记
异常点检测,有时也叫离群点检测,英文一般叫做Novelty Detection或者Outlier Detection,这里就对异常点检测算法做一个总结. 1. 异常点检测算法使用场景.     什么时候我们需要异常点检测算法呢. 一是在做特征工程的时候需要对异常的数据做过滤,防止对归一化等处理的结果产生影响.

软件开发的“三重门”

- - 酷壳 - CoolShell.cn
自从上次写了“ 程序员技术练级攻略” 以来,就觉得似乎还有很多东西没有谈到,但当时没有继续思考了. 而春节前有人问我,是做底层技术,还是做业务. 这问题让我思考了很多,不由自主地回顾了一 下我这十多年的软件开发经历,并顺着整理分类了一下自己解决过的若干问题,还发散想了很多,经过了一个春节假期的发酵,产生了下面这篇文章.

软件开发的人文关怀

- - 博客园_知识库
  几年前,我从温伯格的《技术领导之路》中学到一点:技术人员往往更喜欢和机器打交道,因为他们“认为”自己更适合和机器打交道;但是,优秀的技术人员必须(也必然)具备好的沟通能力. 所以,温伯格鼓励各位技术人员多加练习和其他人打交道的能力. 温伯格的这个观点我是非常赞成的,好的技术人员一定需要“勇敢”面对他人,不能被“自实现的预言”局限在机器的世界里.

软件吞噬软件开发

- - PingWest中文网
软件蚕食世界,自互联网特别是移动互联网连接线上线下服务后,已成为不可逆的趋势. 每一项实用的服务可以由小团队来完成. 以WhatsApp为例,这款被高调收购的IM应用,拥有4.5亿月活跃用户,70%的日活跃率,至今还保持每天新增用户1000万的速度. 但这些服务居然由32名工程师支撑下来了,所以有了业界八卦“每位员工价值20亿”的说法.