模型 核心思想 优点 缺点
瀑布模型

按工序将问题化简,将功能的实现与设计分开,便于分工协作,即采用结构化的分析与设计方法将逻辑实现与物理实现分开。将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序。

1为项目提供了按阶段划分的检查点。

2当前一阶段完成后,您只需要去关注后续阶段。

3可在迭代模型中应用瀑布模型。

4它提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导。

1各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。

2由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发风险。

3通过过多的强制完成日期和里程碑来跟踪各个项目阶段。

4瀑布模型的突出缺点是不适应用户需求的变化。

螺旋模型 螺旋模型基本做法是在“瀑布模型”的每一个开发阶段前引入一个非常严格的风险识别、风险分析和风险控制,它把软件项目分解成一个个小项目。每个小项目都标识一个或多个主要风险,直到所有的主要风险因素都被确定。

1设计上的灵活性,可以在项目的各个阶段进行变更。

2以小的分段来构建大型系统,使成本计算变得简单容易。

3客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性。

4随着项目推进,客户始终掌握项目的最新信息 , 从而他或她能够和管理层有效地交互。

5客户认可这种公司内部的开发方式带来的良好的沟通和高质量的产品。

1很难让用户确信这种演化方法的结果是可以控制的。建设周期长,而软件技术发展比较快,所以经常出现软件开发完毕后,和当前的技术水平有了较大的差距,无法满足当前用户需求。

2螺旋模型的项目适用:对于新近开发,需求不明确的情况下,适合用螺旋模型进行开发,便于风险控制和需求变更。

增量模型 增量模型是把待开发的软件系统模块化,将每个模块作为一个增量组件,从而分批次地分析、设计、编码和测试这些增量组件。运用增量模型的软件开发过程是递增式的过程。相对于瀑布模型而言,采用增量模型进行开发,开发人员不需要一次性地把整个软件产品提交给用户,而是可以分批次进行提交。

1将待开发的软件系统模块化,可以分批次地提交软件产品,使用户可以及时了解软件项目的进展。

2以组件为单位进行开发降低了软件开发的风险。

3开发顺序灵活。

1软件产品可以分批次地进行交付。

2待开发的软件系统能够被模块化。

3软件开发人员对应用领域不熟悉,难以一次性地进行系统开发。

4项目管理人员把握全局的水平较高。

快速原型模型 增量模型的另一种形式;在开发真实系统之前,构造一个原型,在该原型的基础上,逐渐完成整个系统的开发工作。 克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险。

所选用的开发技术和工具不一定符合主流的发展;快速建立起来的系统结构加上连续的修改可能会导致产品质量低下。

迭代模型 迭代包括产生产品发布(稳定、可执行的产品版本)的全部开发活动和要使用该发布必需的所有其他外围元素。实质上,它类似小型的瀑布式项目。

1降低了在一个增量上的开支风险。

2降低了产品无法按照既定进度进入市场的风险。

3加快了整个开发工作的进度。

4迭代过程这种模式使适应需求的变化会更容易些

项目风险高
喷泉模型

喷泉模型主要用于采用对象技术的软件开发项目。该模型认为软件开发过程自下而上周期的各阶段是相互迭代和无间隙的特性。软件的某个部分常常被重复工作多次,相关对象在每次迭代中随之加入渐进的软件成分。

该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。

由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。

V模型 通过开发和测试同时进行的方式来缩短开发周期,提高开发效率。 适用于功能很明确的项目,先有测试案例,开发出的程序通过测试案例进行验证

V模型仅仅把测试过程作为在需求分析、系统设计及编码之后的一个阶段,忽视了测试对需求分析,系统设计的验证,需求的满足情况一直到后期的验收测试才被验证。

敏捷开发方法 敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。

1个体和交互胜过过程和工具

2可以工作的软件胜过面面俱到的文档

3客户合作胜过合同谈判

4响应变化胜过遵循计划

敏捷注重人员的沟通,忽略文档的重要性,若项目人员流动大太,又给维护带来不少难度,特别项目存在新手比较多时,老员工比较累
RUP 又称为统一过程,这是一种基于构件开发的方法。具有用例驱动、以基本架构为中心、迭代和增量的特点;在时间上分为四个连续的阶段,即初始阶段、细化阶段、构建阶段和交付阶段。

1RUP是建立在非常优秀的软件工程原则基础上的,基于结构化的过程开发。

2RUP提供了几个方法,,这些方法提供了对开发过程的非常直观的管理。

1RUP仅仅包含了开发过程,它没有完全覆盖软件过程。

2RUP不支持组织内的多项目开发,导致组织内的大范围的重用无法实现。

3RUP缺少开发商的支持。

演化模型 根据用户的基本需求,通过快速分析构造出该软件的一个初始可运行版本,这个初始的软件通常称之为原型,然后根据用户在使用原型的过程中提出的意见和建议对原型进行改进,获得原型的新版本。重复这一过程,最终可得到令用户满意的软件产品。

1任何功能一经开发就能进入测试以便验证是否符合产品需求。

2帮助导引出高质量的产品要求。

3提供机会去采取早期预防措施,增加项目成功的机率。

4大大有助于早期建立产品开发的配置管理,均衡整个开发过程的负荷。

5提高质量与效率。

6使用户可以在新的一批功能开发测试后,立即参加验证,以便提供非常有价值的反馈。

1如果所有的产品需求在一开始并不完全弄清楚的话,会给总体设计带来困难及削弱产品设计的完整性,并因而影响产品性能的优化及产品的可维护性。

2如果缺乏严格的过程管理的话,这个生命周期模型很可能退化为一种原始的无计划的“试-错-改”模式。

常见软件开发模型对比相关推荐

  1. 软件测试常见概念(软件生命周期、软件开发模型、软件质量模型、软件缺陷管理、软件测试概述、软件测试分类、软件测试与软件开发、软件测试原则、黑盒测试方法、白盒测试方法、性能测试)

    文章目录 1. 软件概述 1.1 软件生命周期 1.2 软件开发模型 1.2.1 瀑布模型 1.2.2 快速原型模型 1.2.3 迭代模型(增量模型或演化模型) 1.2.4 螺旋模型 1.2.5 敏捷 ...

  2. 软件开发模式对比(瀑布、迭代、螺旋、敏捷)

    软件开发模式对比(瀑布.迭代.螺旋.敏捷) 1.瀑布模型是由W.W.Royce在1970年最初提出的软件开发模型, 瀑布式开发是一种老旧的计算机软件开发方法. 瀑布模型式是最典型的预见性的方法,严格遵 ...

  3. 一、软件/软件工程/软件开发模型概述

    文章目录 一.软件 1.软件的定义 2.软件的分类 3.软件危机 3.1软件危机的主要问题 3.2软件危机产生原因(6点) 二.软件工程 1.软件工程定义 2.软件工程目标(6点) 3.软件工程研究的 ...

  4. 软件工程与软件开发模型、软件开发方法

    什么是软件工程? 软件工程一直以来都缺乏一个统一的定义. IEEE给出的定义是:软件工程是:1.将系统化的.严格约束的.可质量化的方法应用于软件的开发.运行和维护,即将工程化应用于软件:2.在1中所述 ...

  5. 软件开发模型/原型法/瀑布模型/螺旋模型

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

  6. 常见NoSQL的对比及使用场景(Redis,memcached,mongodb)

    转自:https://my.oschina.net/liyurong/blog/1921898 1. NoSQL NoSQL(Not Only SQL),泛指非关系型的数据库(mysql.oracle ...

  7. 软件开发模型介绍、总结归纳

    软件开发模型(SoftwareDevelopmentModel)是指软件开发全部过程.活动和任务的结构框架.软件开发包括需求.设计.编码和测试等阶段,有时也包括维护阶段. 软件开发模型能清晰.直观地表 ...

  8. 敏捷软件开发模型--SCRUM

    一 什么是Scrum? Scrum (英式橄榄球争球队), 软件开发模型是敏捷开发的一种,在最近的一两年内逐渐流行起来. Scrum的基本假设是: 开发软件就像开发新产品,无法一开始就能定义软件产品最 ...

  9. 软件开发模型与过程改进

    从过去软件开发模型, 我们有很多的反思与借鉴. 笔者曾看到国内三线城市的一些公司的软件开发过程, 项目的成功依赖个人能力. 对于每一个软件系统研发过程, 只是拍脑袋定个Dead Line. 规定时间2 ...

最新文章

  1. python使用matplotlib可视化折线图、在可视化图像中同时绘制多条折线图
  2. 手把手教你解析Resources.arsc
  3. 给IDEA给类和方法添加注解
  4. lambda java_Java Lambdas简介
  5. win10改成ubundu主题_如何将ubuntu引导win10,修改为win10引导ubuntu
  6. 论文浅尝 | 一种用于新闻推荐的深度知识感知网络
  7. 简单程序所需要的简单 asp.net通用数据库访问类
  8. 巧技拾遗 | JavaScript 中 Array.every 和 Array.map 的巧妙结合
  9. SAP中英文转换--中文转英文
  10. 通过PS修出自然的大长腿
  11. 消息队列(MQ)之生产者-消费者 | 一文搞定
  12. c语言中可以用什么对任何部分进行注释,C语言程序中可以对程序进行注释,注释部分必须用什么符号括起来?...
  13. Java读写gif格式图片,解决ImageIO读取gif文件只读取第一帧的问题(read and write gif format pictures in Java)
  14. 数据结构作业(校园导航系统)
  15. 吴恩达 - 神经网络与深度学习 学习笔记
  16. 计算机专业的,颜值很高是一种怎样的赶脚?
  17. (实测可用)STM32CubeMX教程-STM32L431RCT6开发板(定时器Timer2)
  18. java推算日期后天_分别用C++和Java写的计算后天的日期code
  19. QLineEdit setFocus失效问题
  20. “互联网” 的群星闪耀时

热门文章

  1. 于众目睽睽之下隐藏图像:深度隐写术
  2. 单片机洗衣机控制系统电路理解
  3. 百度深陷点击欺诈纠纷 当事各方说法不一
  4. 【STC89C52】点阵屏显示爱心
  5. 星历表、历书、GPS三种启动方式
  6. Canvas画板涂鸦生成图片
  7. 关于开始时间和结束时间
  8. Ubuntu18.04个人常用工具软件
  9. 软件破解初级实例教程(附工具附图)
  10. 4399曹政:中国互联网