软件开发比较经典的过程模型有:

  1. 瀑布模型:该模型将基本的过程活动、描述、开发、有效性验证和进化,看成是一些界限分明的独立的过程阶段,例如,需求描述阶段、软件设计阶段、实现阶段、测试阶段等。
  2. 增量式开发:该方法使得描述活动、开发活动和有效性验证活动交织在一起。系统的开发是建立一系列的版本(增量),每个版本添加部分功能到先前的版本中。
  3. 面向复用的软件工程:该方法是基于已存在的大量可复用的组件。系统开发过程着重于集成这些组件到新系统中,而非从头开发。

三个模型相互不排斥,而且经常一起使用,尤其是对大型系统的开发。对大型系统,综合瀑布模型和增量开发模型的优点是有意义的。

瀑布模型

也可以看成是软件的生命周期模型。

主要阶段直接映射基本的开发活动:

  1. 需求分析和定义:通过咨询系统用户建立系统的服务、约束和目标。并对其详细定义形成系统描述。
  2. 系统和软件设计:系统设计过程通过建立系统的总体体系结构将需求区分为硬件需求和软件需求。软件设计包括识别和描述一些基本的软件系统抽象及其之间的关系。
  3. 实现和单元测试:在此阶段,将软件设计实现为一组程序或程序单元。单元测试就是检验每个单元是否符合其描述。
  4. 集成和系统测试:集成单个的程序单元或一组程序,并对系统整体进行测试以确保其满足了软件的需求。在测试之后,软件系统将交付给客户使用。
  5. 运行和维护:正常情况下(不是必须的),这是一个具有最长生命周期的阶段。系统被安装并投入实际的使用中。维护包括改正那些在早期各阶段末被发现的错误,改善系统各个单元的实现,并当新的需求出现时提高系统的服务能力。

主要问题在于它将项目生硬地分解成这些清晰的阶段。因此只有在对需求了解得好,而且在系统开发过程中不太可能发生重大改变的时候,适合使用瀑布模型。

增量式开发

思想是先开发出一个初始的实现,给用户使用并听取用户的使用意见和建议,通过对多个版本的不断修改直到产生一个充分的系统。描述、开发和有效性验证等活动不是分离的而是交织在一起。同时让这些活动之间都能得到快速的反馈信息传递。


增量式开发反映了我们解决问题的方法,系统的每一个增量或版本包括用户需要的一部分功能。通常,系统的早期增量包括最重要或最紧急的功能需求。这就意味着在早期开发阶段,用户可以相对早地评估系统,看它是否满足需要。若不满足需要,就只需要改变当前的增量即可,又或许有新的功能被发现并为下个增量做准备,因此可以大幅度地减少成本。

增量式开发相比于瀑布模型的一些重要优点:

  • 降低了适应用户需求变更的成本。重新分析和修改文档的工作量较之瀑布模型要少很多。
  • 在开发过程中更容易得到用户对于已做的开发工作的反馈意见。用户可以评价软件的现实版本,并可以看到已经实现了多少。这比让用户从软件设计文档中判断工程进度要好很多。
  • 使更快地交付和部署有用的软件到客户方变成了可能,虽然不是所有的功能都已经包含在内。相比于瀑布模型,用户可以更早地使用软件并创造商业价值。

从管理的角度看,增量式方法存在的问题:

  • 过程不可见。管理者需要通过经常性的可交付文档来把握进度,若系统开发速度太快,要产生反映系统每个版本的文档就很不划算。
  • 伴随着新的增量的添加,系统结构在逐渐退化。除非投入时间和金钱用在重构系统结构上以改善软件,否则定期的变更会损坏系统的结构。随着时间的推移,越往后变更系统越困难,而且成本也将逐渐上升。

增量开发与迭代开发的区别

增量开发

每个阶段都完成一个高质量的发布版本,后一阶段不对前一阶段的内容进行任何修改,只在前一阶段的基础上增加新的业务功能实现,称为增量,直至最后一个阶段,形成最终的软件产品。

增量开发只是在原有的基础上增加新的东西。

迭代开发

第一个阶段就覆盖了项目整体范围,以后每个阶段都是在前一阶段的基础上改进、完善,没有业务范围的扩展。

迭代开发每一次都是在原有的基础上进行改进和完善。

面向复用的软件工程

在大多数的软件项目中,都存在一定程度的软件复用。

主要阶段:

  1. 组件分析:给出需求描述,然后搜寻能满足需求的组件。通常情况是,没有正好合适的组件以供选择,能得到的组件往往只提供所需要的部分功能。
  2. 需求修改:在这个阶段,根据得到的组件信息分析需求,然后修改需求以反映可得到的组件。当需求修改无法做到的时候,就需要重新进入组件分析活动以搜索其他可能的替代方案。
  3. 使用复用的系统设计:在这个阶段,设计系统的框架或重复使用一个已存在的框架。设计者分析那些将被重复使用的组件,并组织框架使之适应这些组件。当某些可复用的组件不能得到时,必须重新设计一些新的软件。
  4. 开发和集成:当组件不能买到时就需要自己开发,然后集成这些自己开发的组件和现货组件,使之成为一个整体。在这个模型中,系统集成与其说是一个独立的活动,不如说已经成为开发过程的一个部分。


3种类型的软件组件可能用于面向复用的过程:

  1. 通过标准服务开发的Web服务,可用于远程调用
  2. 对象的集合,作为一个包和组件框架,如.NET或者J2EE等集成在一起
  3. 独立的软件系统,通过配置在特定的环境下使用

优势:

  • 减少了需要开发的软件数量,从而降低了软件开发成本,也降低了开发中的风险
  • 可使软件快速地交付

一文搞定软件过程模型——瀑布模型、增量式开发/增量开发与迭代开发的区别相关推荐

  1. 一文搞定MAVLINK软件协议

    转载:https://mp.weixin.qq.com/s/iGURlSS7V-5iBCEtgpzT7w 一文搞定MAVLINK软件协议 原创 L君 TBUS社区 2019-11-06 本文纯属资深程 ...

  2. 【嵌入式开发-AD19】六文搞定Altium Designer-第一章:AD介绍及原理图库的创建

    [嵌入式开发-AD19]六文搞定Altium Designer-第一章:AD介绍及原理图库的创建 在文章的开头我想首先简单介绍一下国产全免费EDA软件,嘉立创EDA.嘉立创EDA拥有网页版和安装版两种 ...

  3. php带参数单元测试_一文搞定单元测试核心概念

    基础概念 单元测试(unittesting),是指对软件中的最小可测试单元进行检查和验证,这里的最小可测试单元通常是指函数或者类.单元测试是即所谓的白盒测试,一般由开发人员负责测试,因为开发人员知道被 ...

  4. 一文搞定Qt读写excel以及qt读写xml数据

    一文搞定Qt读写excel以及qt读写xml数据 最终的实现效果图 RC_ICONS = logo.ico .pro文件同级目录下加入 logo.ico 图标文件,运行文件,文件的图标就被写入软件 u ...

  5. 【量化交易行情不够快?】一文搞定通过Win10 wsl2 +Ubuntu+redis+pickle实现股票行情极速读写

    一文搞定通过Win10 wsl2 +Ubuntu+redis+pickle实现股票行情极速读写 前言 一.准备环境分四步 1.1 给Win10装wsl2 硬件开启虚拟化 软件开启虚拟化及安装适用于Li ...

  6. 【Python基础】一文搞定pandas的数据合并

    作者:来源于读者投稿 出品:Python数据之道 一文搞定pandas的数据合并 在实际处理数据业务需求中,我们经常会遇到这样的需求:将多个表连接起来再进行数据的处理和分析,类似SQL中的连接查询功能 ...

  7. 一文搞定Swing和Qt按钮和文本框的创建

    一文搞定Swing和Qt按钮和文本框的创建 Qt的截图 java的 源码 package com.lujun;import java.awt.Container;import javax.swing. ...

  8. 一文搞定C#关于NPOI类库的使用读写Excel以及io流文件的写出

    一文搞定C#关于NPOI类库的使用读写Excel以及io流文件的写出 今天我们使用NPOI类库读写xlsx文件, 最终实现的效果如图所示 从太平洋官网下载相应的类库,大概4~5MB,不要从github ...

  9. 一文搞定 Spring Data Redis 详解及实战

    转载自  一文搞定 Spring Data Redis 详解及实战 SDR - Spring Data Redis的简称. Spring Data Redis提供了从Spring应用程序轻松配置和访问 ...

最新文章

  1. type=radio增加onclick没有效果_张启东:如何有效增强KTV音响效果的立体感?
  2. ubuntu 运行c++_06_Linux下VSCode简单编程(远程开发WSL_Ubuntu_18.04) | C语言入门
  3. solr源码分析之searchComponent
  4. 承受海量访问建站方案
  5. GDCM:gdcm::Coder的测试程序
  6. webshpere缓存--web.xml
  7. 批量生成100万张小程序码?了解一下。
  8. 回文自动机:从入门到只会打板
  9. 上海电力大学c语言程序设计章测试,上海电力学院c语言报告:实验8 指针.doc
  10. html设置边框dw,dreamweaver
  11. JavaMail(2)——给多人发送、抄送
  12. 操作xml文档的常用方式
  13. CSS3 filter属性学习
  14. 【Java基础教程】用Java实现猜数字小游戏
  15. python pygame实战1: 小球碰撞balls collision
  16. 银盛支付银账通进件接口php demo 签名 上传图片 进件 获取token 超简洁sdk
  17. 如何查看局域网络计算机资料,怎么查看局域网内所有电脑的信息
  18. XlsxWriter的使用
  19. dnf手游找不到服务器,DNF手游无法连接服务器怎么办 无法连接服务器解决详解...
  20. JAVA将多个PDF文件合并成一个PDF

热门文章

  1. neo4j图形数据库简介,基本查询(cypher基本语法)
  2. hive中的 lateral view
  3. js 年月日时间转换
  4. [zz from byhh]完整的腾讯面试经过
  5. 使用python ORM来操作MySQL
  6. Mac Pro M1测试PyTorch GPU
  7. 16.3 NEC协议红外遥控器
  8. linux mp4转h264工具,在Ubuntu下批量转换视频为H.264编码的mp4格式
  9. HttpClient4.x中GET方式发送请求参数中文乱码处理
  10. Vue中使用Sortable