`

常见软件开发管理模型及分析比较

 
阅读更多

     软件开发模型(Software Development Model)是指软件开发全部过程、活动和任务的结构框架。软件开发包括需求、设计、编码和测试等阶段,有时也包括维护阶段。

  软件开发模型能清晰、直观地表达软件开发全过程,明确规定了要完成的主要活动和任务,用来作为软件项目工作的基础。对于不同的软件系统,可以采用不同的开发方法、使用不同的程序设计语言以及各种不同技能的人员参与工作、运用不同的管理方法和手段等,以及允许采用不同的软件工具和不同的软件工程环境。

  最早出现的软件开发模型是1970年W•Royce提出的瀑布模型。该模型给出了固定的顺序,将生存期活动从上一个阶段向下一个阶段逐级过渡,如同流水下泻,最终得到所开发的软件产品,投入使用。但计算拓广到统计分析、商业事务等领域时,大多数程序采用高级语言(如FORTRAN、COBOL等)编写。瀑布模式模型也存在着缺乏灵活性、无法通过并发活动澄清本来不够确切的需求等缺点。

  常见的软件开发模型还有:演化模型、螺旋模型、喷泉模型、智能模型等。

  软件开发模型(Software Development Model)是指软件开发全部过程、活动和任务的结构框架。软件开发包括需求、设计、编码和测试等阶段,有时也包括维护阶段。

  软件开发模型能清晰、直观地表达软件开发全过程,明确规定了要完成的主要活动和任务,用来作为软件项目工作的基础。

  最早出现的软件开发模型是1970年W•Royce提出的瀑布模型。该模型给出了固定的顺序,将生存期活动从上一个阶段向下一个阶段逐级过渡,如同流水下泻,最终得到所开发的软件产品,投入使用。但计算拓广到统计分析、商业事务等领域时,大多数程序采用高级语言(如FORTRAN、COBOL等)编写。瀑布模式模型也存在着缺乏灵活性、无法通过并发活动澄清本来不够确切的需求等缺点。

  典型的开发模型有:①瀑布模型(waterfall model);②渐增模型/演化/迭代(incremental model);③原型模型(prototype model);④螺旋模型(spiral model);⑤喷泉模型(fountain model);⑥智能模型(intelligent model) ; 7. 混合模型(hybrid model)

  1. 边做边改模型(Build-and-Fix Model)

  遗憾的是,许多产品都是使用"边做边改"模型来开发的。在这种模型中,既没有规格说明,也没有经过设计,软件随着客户的需要一次又一次地不断被修改.

  在这个模型中,开发人员拿到项目立即根据需求编写程序,调试通过后生成软件的第一个版本。在提供给用户使用后,如果程序出现错误,或者用户提出新的要求,开发人员重新修改代码,直到用户满意为止。 

  这是一种类似作坊的开发方式,对编写几百行的小程序来说还不错,但这种方法对任何规模的开发来说都是不能令人满意的,其主要问题在于:
  (1) 缺少规划和设计环节,软件的结构随着不断的修改越来越糟,导致无法继续修改;
  (2) 忽略需求环节,给软件开发带来很大的风险;
  (3) 没有考虑测试和程序的可维护性,也没有任何文档,软件的维护十分困难。

  2. 瀑布模型(Waterfall Model)

  1970年Winston Royce提出了著名的"瀑布模型",直到80年代早期,它一直是唯一被广泛采用的软件开发模型。

  瀑布模型将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。

  在瀑布模型中,软件开发的各项活动严格按照线性方式进行,当前活动接受上一项活动的工作结果,实施完成所需的工作内容。当前活动的工作结果需要进行验证,如果验证通过,则该结果作为下一项活动的输入,继续进行下一项活动,否则返回修改。

  瀑布模型强调文档的作用,并要求每个阶段都要仔细验证。但是,这种模型的线性过程太理想化,已不再适合现代的软件开发模式,几乎被业界抛弃,其主要问题在于:

  (1) 各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量;
  (2) 由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发的风险;
  (3) 早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果。

  我们应该认识到,"线性"是人们最容易掌握并能熟练应用的思想方法。当人们碰到一个复杂的"非线性"问题时,总是千方百计地将其分解或转化为一系列简单的线性问题,然后逐个解决。一个软件系统的整体可能是复杂的,而单个子程序总是简单的,可以用线性的方式来实现,否则干活就太累了。线性是一种简洁,简洁就是美。当我们领会了线性的精神,就不要再呆板地套用线性模型的外表,而应该用活它。例如增量模型实质就是分段的线性模型,螺旋模型则是接连的弯曲了的线性模型,在其它模型中也能够找到线性模型的影子。

  3. 快速原型模型(Rapid Prototype Model)

  快速原型模型的第一步是建造一个快速原型,实现客户或未来的用户与系统的交互,用户或客户对原型进行评价,进一步细化待开发软件的需求。通过逐步调整原型使其满足客户的要求,开发人员可以确定客户的真正需求是什么;第二步则在第一步的基础上开发客户满意的软件产品。

  显然,快速原型方法可以克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险,具有显著的效果。

  快速原型的关键在于尽可能快速地建造出软件原型,一旦确定了客户的真正需求,所建造的原型将被丢弃。因此,原型系统的内部结构并不重要,重要的是必须迅速建立原型,随之迅速修改原型,以反映客户的需求。 

  4. 增量模型(Incremental Model)

  与建造大厦相同,软件也是一步一步建造起来的。在增量模型中,软件被作为一系列的增量构件来设计、实现、集成和测试,每一个构件是由多种相互作用的模块所形成的提供特定功能的代码片段构成.

  增量模型在各个阶段并不交付一个可运行的完整产品,而是交付满足客户需求的一个子集的可运行产品。整个产品被分解成若干个构件,开发人员逐个构件地交付产品,这样做的好处是软件开发可以较好地适应变化,客户可以不断地看到所开发的软件,从而降低开发风险。但是,增量模型也存在以下缺陷:

  (1) 由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构。
  (2) 在开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性。

  在使用增量模型时,第一个增量往往是实现基本需求的核心产品。核心产品交付用户使用后,经过评价形成下一个增量的开发计划,它包括对核心产品的修改和一些新功能的发布。这个过程在每个增量发布后不断重复,直到产生最终的完善产品。

  例如,使用增量模型开发字处理软件。可以考虑,第一个增量发布基本的文件管理、编辑和文档生成功能,第二个增量发布更加完善的编辑和文档生成功能,第三个增量实现拼写和文法检查功能,第四个增量完成高级的页面布局功能。

  5.螺旋模型(Spiral Model)

  1988年,Barry Boehm正式发表了软件系统开发的"螺旋模型",它将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,特别适合于大型复杂的系统。

  螺旋模型沿着螺线进行若干次迭代,图中的四个象限代表了以下活动:

  (1) 制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件;
  (2) 风险分析:分析评估所选方案,考虑如何识别和消除风险;
  (3) 实施工程:实施软件开发和验证;
  (4) 客户评估:评价开发工作,提出修正建议,制定下一步计划。

  螺旋模型由风险驱动,强调可选方案和约束条件从而支持软件的重用,有助于将软件质量作为特殊目标融入产品开发之中。但是,螺旋模型也有一定的限制条件,具体如下:

  (1) 螺旋模型强调风险分析,但要求许多客户接受和相信这种分析,并做出相关反应是不容易的,因此,这种模型往往适应于内部的大规模软件开发。
  (2) 如果执行风险分析将大大影响项目的利润,那么进行风险分析毫无意义,因此,螺旋模型只适合于大规模软件项目。
  (3) 软件开发人员应该擅长寻找可能的风险,准确地分析风险,否则将会带来更大的风险

  一个阶段首先是确定该阶段的目标,完成这些目标的选择方案及其约束条件,然后从风险角度分析方案的开发策略,努力排除各种潜在的风险,有时需要通过建造原型来完成。如果某些风险不能排除,该方案立即终止,否则启动下一个开发步骤。最后,评价该阶段的结果,并设计下一个阶段。

  6.演化模型(incremental model)

  主要针对事先不能完整定义需求的软件开发。用户可以给出待开发系统的核心需求,并且当看到核心需求实现后,能够有效地提出反馈,以支持系统的最终设计和实现。软件开发人员根据用户的需求,首先开发核心系统。当该核心系统投入运行后,用户试用之,完成他们的工作,并提出精化系统、增强系统能力的需求。软件开发人员根据用户的反馈,实施开发的迭代过程。第一迭代过程均由需求、设计、编码、测试、集成等阶段组成,为整个系统增加一个可定义的、可管理的子集。

  在开发模式上采取分批循环开发的办法,每循环开发一部分的功能,它们成为这个产品的原型的新增功能。于是,设计就不断地演化出新的系统。 实际上,这个模型可看作是重复执行的多个“瀑布模型”。 

  “演化模型”要求开发人员有能力把项目的产品需求分解为不同组,以便分批循环开发。这种分组并不是绝对随意性的,而是要根据功能的重要性及对总体设计的基础结构的影响而作出判断。有经验指出,每个开发循环以六周到八周为适当的长度。

  7.喷泉模型(fountain model, (面向对象的生存期模型, OO模型))

  喷泉模型与传统的结构化生存期比较,具有更多的增量和迭代性质,生存期的各个阶段可以相互重叠和多次反复,而且在项目的整个生存期中还可以嵌入子生存期。就像水喷上去又可以落下来,可以落在中间,也可以落在最底部。

  8.智能模型(四代技术(4GL))

  智能模型拥有一组工具(如数据查询、报表生成、数据处理、屏幕定义、代码生成、高层图形功能及电子表格等),每个工具都能使开发人员在高层次上定义软件的某些特性,并把开发人员定义的这些软件自动地生成为源代码。这种方法需要四代语言(4GL)的支持。4GL不同于三代语言,其主要特征是用户界面极端友好,即使没有受过训练的非专业程序员,也能用它编写程序;它是一种声明式、交互式和非过程性编程语言。4GL还具有高效的程序代码、智能缺省假设、完备的数据库和应用程序生成器。目前市场上流行的4GL(如Foxpro等)都不同程度地具有上述特征。但4GL目前主要限于事务信息系统的中、小型应用程序的开发。 

  9.混合模型(hybrid model)

  过程开发模型又叫混合模型(hybrid model),或元模型(meta-model),把几种不同模型组合成一种混合模型,它允许一个项目能沿着最有效的路径发展,这就是过程开发模型(或混合模型)。实际上,一些软件开发单位都是使用几种不同的开发方法组成他们自己的混合模型。

  各种模型的比较

  每个软件开发组织应该选择适合于该组织的软件开发模型,并且应该随着当前正在开发的特定产品特性而变化,以减小所选模型的缺点,充分利用其优点,下表列出了几种常见模型的优缺点。

  模型 优点 缺点 

  瀑布模型 文档驱动 系统可能不满足客户的需求 
  快速原型模型 关注满足客户需求 可能导致系统设计差、效率低,难于维护 
  增量模型 开发早期反馈及时,易于维护 需要开放式体系结构,可能会设计差、效率低 
  螺旋模型 风险驱动 风险分析人员需要有经验且经过充分训练 
分享到:
评论

相关推荐

    软件工程案例学习-图书管理系统.doc

    软件工程案例学习-图书管理系统是图书馆管理系统的需求分析规格说明书,旨在确定图书管理系统的功能及有效性需求,以供软件开发人员参考。该系统的主要功能包括图书信息管理、借阅管理、读者管理、查询统计和打印等...

    敏捷软件开发方法与实践

    第2章介绍了常见的敏捷软件开发方法及其相互间的简单比较;在第3章至第5章中,作者结合自己的敏捷项目开发经验,融合其他方法,介绍了敏捷软件交付模型以及部分敏捷项目管理和开发实践;第6章从组织变革实施模型的...

    银行业务介绍与软件开发培训教材

    银行业务介绍与软件开发培训教材 培训讲师:寂寞的银行分析师 培训材料页数:69页 ========================== ...第二章 软件开发模型与过程 63 第一节 软件开发模型 63 第二节 软件开发过程 64

    软件工程期末整理.docx

    6、软件可维护性差 软件工程方法学的要素 四大要素:方法、语言、工具、过程 常见的软件开发模型有哪些? 模型:瀑布模型、增量模型、螺旋模型、喷泉模型、四代技术、变换模型、基于知识的模型、过程开发模型。 结构...

    专题七:软件工程专题

    常见的软件开发模型有瀑布模型、演化模型、螺旋模型和喷泉模型等。 阶段 任务 参与人员 产生文档 软件定义阶段——待开发软件要“做什么” 系统分析 确定待开发软件的总体要求和适用范围,以及与之有关的硬件、...

    专题七:软件工程专题.doc

    常见的软件开发模型有瀑布模型、演化模型、螺旋模型和喷泉模型等。 软件工程包括三个要素:方法、工具和过程。主要的软件开发方法有生命周期法、原型法等。生命周期法认为:每一个软件系统都有一定的生命周期。软件...

    软件项目管理面试题_项目经理面试必看PMP知识

    迭代和增量模型是软件开发中的两种常见模型。增量模型描述软件产品的不同阶段是按产品所具有的功能进行划分,而迭代模型描述软件产品的不同阶段是按产品深度或细化的程度来划分。 最后,风险管理是项目管理中的一项...

    学习软件工程,必须要知道的基本问题

    需求分析是软件开发的基础阶段,其主要任务是确定对系统的综合要求、分析系统的数据要求、导出系统的逻辑模型、修正系统开发计划。需求分析的目的是为了开发出真正满足用户需求的软件产品。 六、设计 设计是软件...

    软件工程的数据结构与算法.pptx

    瀑布模型、快速构建原型、原型模型、螺旋模型等都是软件开发过程中的重要模型。 数据结构基础 数据结构是指数据对象在计算机中的组织方式,可以分为线性结构、树形结构和图形结构等。线性表、链表、栈、队列、树、...

    软件工程之专题七:软件工程专题

    常见的软件开发模型有瀑布模型、演化模型、螺旋模型和喷泉模型等。 阶段 任务 参与人员 产生文档 软件定义阶段——待开发软件要“做什么” 系统分析 确定待开发软件的总体要求和适用范围,以及与之有关的硬件、...

    网上购票系系统展开详细的需求分析,软件需求规格说明书

    问题描述:某航空公司要开发一个网上购票系统,以方便用户进行线上购票。对于未注 ...票操作(包括查询机票、购买机票、...描述、软件功能需求、软件质量需求以及软件开发约束需求等部分,为开发团队提供全 面的参考依据。

    软件测试常见面试题.pdf

    它在软件开发过程中的作用是什么? - 11. 请解释一下测试驱动开发(TDD)的概念以及如何实施。 - 12. 什么是负载测试和压力测试?它们的目的和区别是什么? - 13. 请描述一下持续集成(CI)和持续交付(CD)对软件...

    毕业设JAVA Smart系统-题库及试卷管理模块的设计与开发(源代码+论文)

    该项目适合于计算机科学、软件工程以及相关专业的大学生,特别是那些对Java编程和软件开发感兴趣的学生。不论是初学者还是有一定基础的学生,都可以通过本项目深化对软件开发的理解,并提升自己的实践能力。

    现代风格java工程师求职简历word简历模板.docx

    * 数据库原理是软件开发中的一门重要课程,涵盖了数据库的基本概念、数据模型、数据库设计、数据库管理等方面。 * 数据库性能优化是软件开发中的一种常见技术,能够提高数据库的执行效率和响应速度。 * NoSQL 和 ...

    GIS ArcGIS 常见 名词 专业 术语 解释

    ArcGIS 是 ESRI 公司开发的 GIS 软件平台,提供了强大的 GIS 功能和工具,以下是 ArcGIS 中的一些常见名词专业术语解释: 1. AML 宏语言:AML 是在 ARC 环境中用于编程和创建应用的语言。AML 提供完整的编程能力和...

    推荐系统架构师考试全套视频教程合集.zip

    第十五部分 开发管理 15.1 范围管理 15.2 时间管理 15.3 成本管理 15.4 文档管理 15.4.1 软件文档管理指南 15.4.2 计算机软件文档编制规范 15.5 软件配置管理 15.6 软件质量管理 15.6.1 质量管理的概念 15.6.2 质量...

    库博静态代码分析工具v4.3-用户操作手册.docx

    本资源适用于软件开发人员、测试人员、项目管理人员等需要使用静态代码分析工具进行代码质量分析、错误排查和性能优化的专业人士。无论您是初学者还是经验丰富的专业人士,都能从这份手册中获得有用的信息和帮助。

    微信公众号管理软件

    微小宝客户端是一款公众号管理软件,多...登录软件后,可以在多台电脑上管理公众号(开发中)更新日志 - 1.【公众号】后台网页可保存为图片; - 2.【数据分析】文章数据报表支持导出; - 3.【其他】粉丝查重优化等

    软件工程黑书考研一轮复习笔记.docx

    2、常见的软件过程模型:瀑布、增量、原型、螺旋、喷泉等,比较各自优缺点 5 1、瀑布模型(经典生命周期模型) 6 2、增量过程模型(增量模型+RAD模型) 6 3、演化过程模型(原型模型+螺旋模型) 7 4、喷泉模型(Water ...

    全国2018年4月自考软件工程试卷(真题+解析).pdf

    14. 在常见的软件开发模型中,能体现软件创建所固有的迭代和无间隙特征的是螺旋模型。 15. CMMl 能力等级中的 4 级是已定量管理级。 填空题部分 16. 软件开发的本质概括为不同抽象层术语之间以及不同抽象层处理...

Global site tag (gtag.js) - Google Analytics