几种常见软件过程模型的比较

瀑布模型 

瀑布模型(经典生命周期)提出了软件开发的系统化的、顺序的方法。其流 程从用户需求规格说明开始,通过策划、建模、构建和部署的过程,最终提供一 个完整的软件并提供持续的技术支持。

优点:

1. 强调开发的阶段性,各阶段具有顺序性和依赖性

2. 强调早期调研和需求分析,推迟编码实现的观点

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

 

缺点:

1. 文档驱动,用户无法及时了解产品的情况

2. 依赖早期调研和需求分析,很难适应在许多项目开始阶段必然存在的不确定 性。

3.  流程单一,必须要完成前一阶段的任务,才能进行下一阶段,开发过程中的 成功经验无法用于本产品。

4.  测试在后期引入,对于系统存在的重大缺陷,如果在可执行程序评审之前没 有被发现,将可能造成重大损失。

5. 组织庞大,人员闲置。

 

适用范围:需求确定,工作能够采用线性的方式完成的软件。

 

 

 

 

 

增量过程模型

 

增量过程模型包括增量模型、RAD 模型。

(一)增量模型 增量过程模型以迭代的方式运用瀑布模型,把软件产品作为一系列的增量构件来设计、编码、集成和测试。

每个构件由多个相互作用的模块构成,并且能够完成特定的功能。使用增量模型时,第一个增量往往是核心功能。

 

优点:

1.能在较短的时间内向用户提交可完成部分工作的产品。

2.逐步增加产品功能可以使用户有充裕的时间学习和适应新产品,从而减少一个 全新的软件可能给客户组织带来的冲击。

3. 规避技术风险

4. 可并行开发构件,加快开发的进度

 

缺点:

1.  没有考虑软件的整体质量和长期的可维护性。

2.  大部分情况是不合适的操作算法被采用目的为了演示功能,不合适的开发工 具被采用仅仅为了它的方便,还有不合适的操作系统被选择等等。

3.  由于达不到质量要求产品可能被抛弃,而采用新的模型重新设计

 

适用范围:项目在既定的商业要求期限之前不可能找到足够的开发人员;

 

 

(二)RAD模型

RAD  模型是一种侧重于短暂的开发周期的增量软件过程模型,它是瀑布模 型的“高速”变体,通过基于构建的构建方法实现快速开发。

开发团队能够在非常短的时间内创造出“全功能系统”

 

优点:

1.开发速度快,质量有保证。

2.对信息系统特别有效。

 

缺点:

1.  对于大型的可伸缩的项目,RAD 需要大量的人力资源来创建多个相对的独立 的 RAD 团队

2.  如果开发者和用户没有为短时间内急速完成整个系统做好准备,RAD 项目将会失败。

3.  如果一个系统不能合理的模块化,RAD 构件建立会有很多问题。

4.  如果系统需求是高性能,并且需要通过调整构件接口的方式来提高性能,不 能采用 RAD 模型

5.  技术风险很高的情况下

 

适用范围:1、 不适合技术风险很高的开发,不适合系统需求是高性能,并且需 要通过调整构件接口的方式来提高性能的产品开发。

2、 适用于工期紧张,又可细分功能,还要有合适的构件

 

演化过程模型

 

演化过程模型包括原型开发,螺旋模型,协同开发模型。

(一)原型开发 从需求收集开始,开发者和客户在一起定义软件的总体目标,标识已知的需求并且规划出需要进一步定义的区域。

然后是“快速设计”,它集中于软件中那些 对客户可见的部分的表示,这将导致原型的创建,并由客户评估并进一步精化待 开发软件的需求。

逐步调整原型使其满足客户的需求,这个过程是迭代的。其流 程从听取客户意见开始、随后是建造/修改原型、客户测试运行原型、然后回头 往复循环直到客户对原型满意为止。

由于这种模型可以让客户快速的感受到实际 的系统(虽然这个系统不带有任何质量的保证),所以客户和开发者都比较喜欢 这种过程模型(对于那些仅仅用来演示软件功能的公司而言或从来不考虑软件质

量和不害怕长期维护的公司而言)。

 

优点:

1、能让人(开发者或客户)很快见到产品,有成就感。

2、能渐进地启发客户提出新的要求或任务。

 

缺点:

1、 没有考虑软件的整体质量和长期的可维护性。

2、 大部分情况是不合适的操作算法被采用目的为了演示功能,不合适的开发工具被采用仅仅为了它的方便,还有不合适的操作系统被选择等等。

3、 由于达不到质量要求产品可能被抛弃,而采用新的模型重新设计。

 

(二)螺旋模型 螺旋模型是一种演进式软件过程模型,结合了原型的迭代性质和瀑布模型的系统性和可控性的特点,具有快速开发越来越完善软件版本的潜力。

开发步骤:沿螺线自内向外,每旋转一圈便开发出更为完善的一个新的软件版本。

例如,在第一圈,确定了初步的目标、方案和限制条件以后,转入右上象限,对风险进行识别和分析。

如果风险分析表明,需求有不确定性,那么在右下 的工程象限内,所建的原型会帮助开发人员和客户,考虑其它开发模型,并对需求做进一步修正。客户对工程成果做出评价之后,给出修正建议。

在此基础上需 再次计划,并进行风险分析。在每一圈螺线上,风险分析的终点做出是否继续下 去的判断。

假如风险过大,开发者和用户无法承受,项目有可能终止。多数情况 下沿螺线的活动会继续下去,自内向外,逐步延伸,最终得到所期望的系统。

 

优点:

1. 强调风险

2. 强调阶段质量

3. 提供纠错的机会

 

缺点:

1. 每个阶段都要提出被选方案,进行风险分析,研发周期长,效率低

2. 必须要转业的风险分析人员的参与

 

适用范围:大型项目

 

 

 

 

 

 

(三)协同开发模型 协同开发模型(协同工程),可以表示唯一系列的框架活动、软件工程动作和任务 以及相应的状态。

 

适用范围:所有类型的软件开发

 

专用过程模型

 

包括基于构件的开发、形式化方法模型、面向方面的软件开发。

(一)基于构件的开发基于构件的开发模型具有许多螺旋模型的特点,本质上是演化模型,需要以 迭代方式构建软件。不同之处在于,基于构件开发模型采用预先打包的软件构件 开发程序。

开发过程:对所需构件进行评估 → 考虑构件的集成 → 设计系统的软件框 架→将构件放入框架→进行测试

 

优点:

1. 构件可复用。提高了开发效率。

2.  采用了面向对象的技术

3.  能够使软件复用

 

缺点:过分依赖于构件,构件库的质量影响着产品质量。

 

(二)形式化方法模型 形式化方法模型包含了一组活动,他们导致了计算机软件的数学规约。

形式化方法使得软件工程师们能够通过应用一个严格的数学符号体系来规约、开发、 和验证基于计算机的系统。

这种方法的一个变种,称为净室软件工程,已经被 一些组织所采用。

在开发中使用形式化方法时,它们提供了一种机制,能够消除 使用其它软件过程模型难以克服的很多问题。

二义性、不完整性、不一致性能被 更容易地发现和纠正,而不是通过专门的评审,是通过对应用的数学分析。

形式化方法提供了可以产生无缺陷软件的承诺。

 

优点:

1、形式化规约可直接作为程序验证的基础,可以尽早的发现和纠正错误(包括 那些其它情况下不能发现的错误)。

2、开发出来的软件具有很高的安全性和健壮性,特别适合安全部门或者软件错 误会造成经济损失的开发者。

3、能够开发出无缺陷软件。

 

缺点:

1、 开发费用昂贵,而且需要的时间较长。

2、 需要大量的培训。

3、 不能将这种模型作为对客户通信的机制,因为客户对这些数学语言一无所 知。

 

适用范围:不适用于技术水平不高的客户。

 

(三)面向方面的软件开发 将系统分成若干相对较独立的组成部分,这些部分称为方面。

 

优点:超越了子程序和继承的方法。 缺点:技术还不成熟

 

统一过程模型

 

统一过程模型是一种“用例驱动、以体系结构为核心、迭代及增量”的软件 过程框架,由 UML 方法和工具支持。它是一种增量模型,定义了五个阶段:

 

a、起始阶段,包括用户沟通和计划活动,强调定义和细化用例

b、 细化阶段,包括用户沟通和建模活动,重点是创建分析和设计模型。

c、构件阶段,细化模型设计,并将设计模型转化为软件构件实现

d、 转化阶段,将软件从开发人员传递给最终用户,并由用户完成 beta 测试和验 收测试 

e、生产阶段,持续地监控软件的运行,并提供技术支持。

 

优点:

1. 任何功能开发后就进入测试过程,及早进行验证

2. 早期风险识别,采取预防措施

 

缺点:

1. 需求必须在开始之前完全弄清楚,否怎有可能在架构上出现错误

2. 必须有严格的过程管理,以免使过程退化为原始的试→错→改模式

3.如果不加控制的让用户过早接触没有测试完全,版本不稳定的产品可能对用 户和开发团队都带来负面的影响

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439585.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

两篇基于语义地图的视觉定位方案:AVP-SLAM和RoadMap

本文介绍两篇使用语义地图进行视觉定位的论文,两篇论文工程性很强,值得一学。 AVP-SLAM是一篇关于自动泊车的视觉定位方案,收录于 IROS 2020。论文链接为:https://arxiv.org/abs/2007.01813,视频链接为:ht…

【51Nod - 1270】数组的最大代价(dp,思维)

题干&#xff1a; 数组A包含N个元素A1, A2......AN。数组B包含N个元素B1, B2......BN。并且数组A中的每一个元素Ai&#xff0c;都满足1 < Ai < Bi。数组A的代价定义如下&#xff1a; &#xff08;公式表示所有两个相邻元素的差的绝对值之和&#xff09; 给出数组B&…

一步步编写操作系统 56 门、调用门与RPL序 1

小弟多次想把调用门和RPL分开单独说&#xff0c;但几次尝试都没有成功&#xff0c;我发现它们之间是紧偶合、密不可分&#xff0c;RPL的产生主要是为解决系统调用时的“越权”问题&#xff0c;系统调用的实现方式中&#xff0c;以调用门和中断门最为适合。由于以后我们将用中断…

自动驾驶纯视觉3D物体检测算法

视频链接&#xff1a;https://www.shenlanxueyuan.com/open/course/112 这是Pseudo-LiDAR作者最近做的一个分享报告&#xff1a;《Pseudo-LiDAR&#xff1a;基于相机的3D物体检测算法》。在这份报告里&#xff0c;作者主要介绍了博士期间的研究成果&#xff1a;基于深度学习的…

一步步编写操作系统 57 门、调用门与RPL序 2

接上文&#xff1a; 提供了4种门的原因是&#xff0c;它们都有各自的应用环境&#xff0c;但它们都是用来实现从低特权级的代码段转向高特权级的代码段&#xff0c;咱们这里也只讨论有关特权级的功用&#xff1a; 1.调用门 call和jmp指令后接调用门选择子为参数&#xff0c;以…

Coursera自动驾驶课程第15讲:GNSS and INS Sensing for Pose Estimation

在上一讲《Coursera自动驾驶课程第14讲&#xff1a;Linear and Nonlinear Kalman Filters》 我们学习了卡尔曼滤波相关知识&#xff0c;包括&#xff1a;线性卡尔曼滤波&#xff08;KF&#xff09;、扩展卡尔曼滤波&#xff08;EKF&#xff09;、误差卡尔曼滤波&#xff08;ES-…

详解车道线检测数据集和模型 VIL-100: A New Dataset and A Baseline Model for Video Instance Lane Detection

本文介绍一个新的车道线数据集 VIL-100 和检测模型 MMA-Net&#xff0c;论文已收录于 ICCV2021&#xff0c;重点是理解本文提出的 LGMA 模块&#xff0c;用于聚合局部和全局记忆特征。 论文链接&#xff1a;https://arxiv.org/abs/2108.08482 项目链接&#xff1a;https://gi…

七天入门图像分割(1):图像分割综述

最近在研究自动驾驶视觉语义地图构建&#xff0c;因为要使用到语义分割技术&#xff0c;趁此机会学习了百度飞桨的图像分割课程&#xff0c;课程蛮好的&#xff0c;收获也蛮大的。 课程地址&#xff1a;https://aistudio.baidu.com/aistudio/course/introduce/1767 1. 课程简要…

一步步编写操作系统 59 cpu的IO特权级1

在保护模式下&#xff0c;处理器中的“阶级”不仅体现在数据和代码的访问&#xff0c;还体现在指令中。 一方面将指令分级的原因是&#xff0c;有些指令的执行对计算机有着严重的影响&#xff0c;它们只有在0特权级下被执行&#xff0c;因此被称为特权指令&#xff08;Privile…

重读经典:《ImageNet Classification with Deep Convolutional Neural Networks》

9年后重读深度学习奠基作之一&#xff1a;AlexNet【下】【论文精读】这两天偶然间在B站看了李沐博士对AlexNet论文的重新解读&#xff0c;收获满满。AlexNet是当今深度学习浪潮奠基作之一&#xff0c;发表在2012年。在视频中&#xff0c;李沐博士主要是分享了他的三步法快速读论…

一步步编写操作系统 60 cpu的IO特权级2 什么是驱动程序

用户程序可以在由操作系统加载时通过指定整个eflags设置&#xff0c;操作系统如何设置自己的IOPL呢&#xff0c;即使内核IOPL为0也得写进去eflags寄存器中才生效。可惜的是&#xff0c;没有直接读写eflags寄存器的指令&#xff0c;不过可以通过将栈中数据弹出到eflags寄存器中来…

详解惯性导航论文 RINS-W: Robust Inertial Navigation System on Wheels

本文介绍一篇惯性导航定位论文 RINS-W&#xff0c;论文发表于 IROS2019。在本论文中作者提出了仅使用一个IMU进行长时间惯性导航的方法。方法主要包括两个部分&#xff1a; 检测器使用循环神经网络来检测IMU的运动状况&#xff0c;如零速或零横向滑移&#xff1b;使用Invarian…

一步步编写操作系统 61 任务状态段 TSS

I/O位图是位于TSS中的&#xff0c;它可以存在也可以不存在&#xff0c;它只是用来设置对某些特定端口的访问&#xff0c;没有它的话便默认为禁止访问所有端口。正是由于它可有可用&#xff0c;所以TSS的段界限TSS limit&#xff08;即实际大小-1&#xff09;并不固定。当TSS中不…

重读经典:《Deep Residual Learning for Image Recognition》

ResNet论文逐段精读【论文精读】这是李沐博士论文精读的第二篇论文&#xff0c;这次精读的论文是ResNet。ResNet 是 CVPR2016 的最佳论文&#xff0c;目前谷歌学术显示其被引用数已经达到了90000。 ResNet论文链接为&#xff1a;https://arxiv.org/abs/1512.03385。 1.第一遍 …

【CodeForces - 1131F 】Asya And Kittens(并查集,思维)

题干&#xff1a; Asya loves animals very much. Recently, she purchased nn kittens, enumerated them from 11 and nn and then put them into the cage. The cage consists of one row of nncells, enumerated with integers from 11 to nn from left to right. Adjacent…

详解道路标记数据集 CeyMo: See More on Roads -- A Novel Benchmark Dataset for Road Marking Detection

本文介绍一个新的道路标记检测数据集&#xff0c;论文收录于 WACV2022。Ceymo数据集总共包含2887张图片&#xff0c;标注了11类共4706个道路标记实例&#xff0c;图片分辨率为 192010801920\times108019201080。其中&#xff0c;对于每一个道路标记实例&#xff0c;作者采用了三…

动手学无人驾驶(7):车道线检测

最近在研究视觉语义地图&#xff0c;需要进行车道线检测&#xff0c;发现这篇车道线检测论文效果蛮好的 &#xff08;Ultra Fast Structure-aware Deep Lane Detection&#xff09;。论文作者在知乎上已经介绍过了&#xff1a;https://zhuanlan.zhihu.com/p/157530787&#xff…

Coursera自动驾驶课程第16讲:LIDAR Sensing

在第15讲《Coursera自动驾驶课程第15讲&#xff1a;GNSS and INS Sensing for Pose Estimation》 我们学习了自动驾驶定位中常用的两种传感器&#xff1a;IMU&#xff08;惯性测量单元&#xff09; 和GNSS&#xff08;全球导航卫星系统&#xff09;。 本讲我们将学习自动驾驶汽…

DB、ETL、DW、OLAP、DM、BI关系结构图

在此大概用口水话简单叙述一下他们几个概念&#xff1a; &#xff08;1&#xff09;DB/Database/数据库——这里一般指的就是OLTP数据库&#xff0c;在线事物数据库&#xff0c;用来支持生产的&#xff0c;比如超市的买卖系统。DB保留的是数据信息的最新状态&#xff0c;只有一…

Tarjan 算法 常用模板

可以求每个点属于第几个强连通分量&#xff1a;https://blog.csdn.net/dellaserss/article/details/8267192 int Tarjan(int u){int v;dfn[u]low[u]Index;stack[Top]u;Instack[u]1;for(int i0;i<G[u].size();i){vG[u][i];if(!dfn[v]){Tarjan(v);low[u]min(low[u],low[v]);}…