瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型

一、瀑布模型

1、按照传统的瀑布模型开发软件,有下述几个特点。

①阶段间具有顺序性和依赖性

阶段间具有顺序性和依赖性,这个特点有两重含义:

1,必须等前一阶段的工作完成之后,才能开始后一阶段的工作;

2,前一阶段的输出文档介绍后一阶段的输入文档;

因此,只有前一阶段的输出文档正确,后一阶段的工作才能获得正确的结果。

②推迟实现的观点

对于规模较大的软件项目来说,往往编程开始得越早,最终完成开发工作所需要的时间反而越长。

③质量保证的观点

软件工程的基本目标是优质,高产。为了保证所开发的软件的质量,在瀑布模型的每个阶段都坚持两个重要的做法。

(1)每个阶段都必须完成规定的文档,没有交出合格的文档介绍没有完成该阶段的任务。完整、准确的合格文档不仅是软件开发时期各类人员相互通信的媒介,也是运行时期进行维护的重要依据。

(2)每个阶段结束前都要对所完成的文档进行评审,以便尽早发现问题,改正错误。

         事实上,越是早期阶段犯下的错误,暴露出来的时间越晚,排除故障改正错误所需付出的代价也越高。因此,及时审查,是保证软件质量、降低软件成本的重要措施。

2、传统的瀑布模型过于理想化

事实上,人在工作过程中不可能不犯错误。在设计阶段可能发现规格说明文档的错误,而设计上的缺陷或错误可能在实现过程中显现出来,在综合测试阶段发现需求分析、设计或编码阶段的许多错误。因此,实践的瀑布模型是带“反馈环”的。

3、瀑布模型有许多优点:

可强迫开发人员采用规范的方法(如结构化技术)

严格地规定了每个阶段必须提交的文档

要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。

缺点:

1.只能通过文档了解产品,不经过实践是不切实际的;

2.实际项目很少按照该模型给出的顺序进行;

3.用户常常难以清楚地给出所有需求

4.用户必须要耐心,等到系统开发完成

瀑布模型的成功在很的程度上是由于它基本上是一种文档驱动的模型。

但是,“瀑布模型是文档驱动的”这个事实也是它的一个主要的缺点。

        在可运行的软件产品交付给用户之前,用户只能通过文档来了解产品是什么样的。但是仅仅通过写在纸上的静态的规格说明,很难全面正确地认识动态的软件产品。而且事实证明,一旦一个用户开始使用一个软件,在他的头脑中关于该软件应该做说明的想法就会或多或少地发生变化,这就使得最初提出的需求变得不完全适用了。事实上,要求用户不经过实践就提出完整准确的需求,在很多情况下都是不切实际的。总之,由于瀑布模型几乎完全依赖于书面的规格说明,很有可能导致最终开发出的软件产品不能真正满足用户的需要。

4、瀑布模型适用于:

(1)需求是预知的

(2)软件实现方法是成熟的

(3)项目周期短

二、快速原型模型

所谓快速原型模型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。

快速原型模型是不带反馈环的,这正是这种模型的主要优点

软件产品的开发基本上线性顺序进行的

1,能基本上做到线性顺序开发的主要原因如下:

①原型系统已经通过与用户交互而得到验证,据此产生的规格说明文档正确地描述了用户的需求,因此,在开发过程的后续阶段不会因为发现了规格说明文档的错误而进行较大的返工。

②开发人员通过建立原型系统已经学到了许多东西,因此,在设计和编码阶段发生错误的可能性也比较小,这自然减少了在后续阶段需要改正前面阶段所犯错误的可能性。

快速原型的本质是“快速”。

按照原型的目的对原型分类:

·  抛弃式,目的到达即可抛弃,原型不做为最终产品

·  演化式,系统的形成和发展是逐步完成的,是高度动态迭代和高度动态的,每次迭代都要对系统重新进行规格说明,重新设计和重新评价,所以是对付变化最为有效的方法,这也是与瀑布开发的主要不同点;

·  增量式,系统是一次一段地增量构造,与演化式原型的最大区别在于增量式开发是在软件总体设计基础上进行的。很显然,其对付变化比演化差;

快速原型模型的优点:

①尽早揭示软件可能存在的风险和不确定因素,尤其是关于用户需求一致性方面的风险。

②用户参与,降低风险,节省后期变更成本,提高项目成功率。

③不带反馈环,基本上做到线性顺序开发。

④开发过程与用户培训过程同步,系统易维护,对用户更友好,产品柔性好。

三、增量模型

增量模型也称渐增模型

增量模型属于非整体开发思想的产物

 

使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计,编码,集成和测试。

每个构件由多个相互作用的模块构成,并且能够完成特定的功能。

使用增量模型时,第一个增量构建往往实现软件的基本需求,提供最核心的功能。

采用瀑布模型或快速原型模型开发软件时,目标都是一次就把一个满足所有需求的产品提交给用户。增量模型与之相反,它是分批逐步向用户提交产品,使得整个软件被分解成许多增量构件,开发人员一个构件接一个构件地向用户提交产品。

优点:

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

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

缺点:

风险大,必须保证新增构件不破坏原来已开发出来的产品

                                       风险更大的增量模型

 

四、螺旋模型

螺旋模型的基本思想是:使用原型及其他方法来尽量降低风险。

理解这种模型的一个简便方法,是把它看作在每个阶段之前都增加了风险分析过程的快速原型模型。

螺旋模型有许多优点:

①对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标

②减少了过多的测试(浪费资金)或者测试不足(产品故障多)所带来的风险。

③在螺线模型中维护只是模型的另一个周期,在维护和开发之间并没有本质区别。

螺旋模型的主要优势在于,它是风险驱动的,但是这也可能是它的一个弱点。除非软件开发人员具有丰富的风险评估经验和这方面的专门知识,否则将会出现真正的风险:当项目实际上正在走向灾难时,开发人员可能还认为一切正常。

五、喷泉模型

迭代是软件开发过程中普遍存在的一种内在属性。

“喷泉”这个词体现了面向对象软件开发过程迭代和无缝的特性。

图中代表不同阶段的圆圈相互重叠,这说明表示两个活动之间存在交迭;而面向对象的方法在概念和表示方式上的一致性,保证了在各项开发活动之间的无缝过渡

事实上,用面向对象方法开发软件时,在分析、设计和编码等项开发活动之间并不存在明显的边界。

图中较小的圆圈代表维护,圆圈较小象征着采用了面向对象范型之后维护时间缩短了。

为避免使用喷泉模型开发软件时开发过程过分无序,应该把应该线性过程(例如,快速原型模型)作为总目标。但是,同时也应该记住,面向对象范型本身要求经常对开发活动进行迭代或求精。

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

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

相关文章

Linux基础命令(1)

1.强大好用的Shell Shell是一个命令工具。Shell(也称终端或壳)充当的是人与内核(硬件)之间的翻译官,用户把一些命令“告诉”终端,它会调用相应的程序服务去完成某些工作。 现在红帽系统在内的许多主流Lin…

软件工程(Rational统一过程)

Rational统一过程(Rational Unified Process,RUP)是由Rational软件公司推出的一种完整而且完美的软件过程。 RUP总结了经过多年商业化验证的六条最有效软件开发经验,这些经验被称为“最佳实践”。 1,最佳实践 (1&am…

软件工程(敏捷过程和极限编程)

1,敏捷过程 为了使软件开发团队具有高效工作和快速响应变化的能力,17位著名的软件专家于2001年2月联合起草了敏捷软件开发宣言。 敏捷软件开发宣言由下述4个简单的价值观声明组成。 (1)个体和交互胜过过程和工具 优秀的团队成…

软件工程(可行性研究讲解)

可行性研究 可行性研究的目的,就是用最小的代价在尽可能短的时间内确定问题是否能够解决。(只是寻找客户所提需求的解决方案,能干还是不能干的问题。) 可行性研究实质上是要进行一次大大压缩简化了的系统分析和设计的过程。 GB…

软件工程(系统流程图讲解)

系统流程图是概括地模型物理系统的工具。 基本符号 系统符号 系统流程图的习惯画法是使信息在图中从顶向下或从左到右流动。 例子 某装配厂有一座存放零件的仓库,仓库中现有的各种零件的数量以及每种零件的库存量临界值等数据记录在库存清单主文件中。当仓库中零…

软件工程(数据流图)

数据流图有4种基本符号: 正方形或(立方体)表示数据的源点或者终点; 圆角矩形(或圆形)代表变换数据的处理; 开口矩形(或两条平行横县)代表数据存储; 箭头表…

Python二级笔记(10)

知识点: 1,线性表的链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以一般要多于顺序存储结构。 2,软件测试是为了发现错误而执行程序的过程,测试要以查找错误为中心。 3&#x…

Qt图形界面编程入门(6)

类的私有继承方式 ①基类公有成员和保护成员都作为私有成员被派生类继承,派生类自身的函数可直接访问他们,但是派生类对象则只能通过本类的公有函数间接地访问它们。 ②基类的私有成员成为派生类中更加封闭的私有成员,派生类内部成员函数也…

Qt图形界面编程入门(7)

派生类的构造函数和析构函数 基类的构造函数和析构函数不能被继承。 在派生类中,如果派生类新增的成员进行初始化,就必须加入新的构造函数。与此同时,对所有从基类继承下来的成员的初始化工作还是由基类的构造函数完成,必须在派…

Python二级笔记(11)

知识点: 1,在栈中,栈顶指针top动态反映了栈中元素的变化情况,在循环队列中,队尾指针和队头指针的动态变化决定队列的长度,在链式存储结构中.无论是循环链表还是线性链表,插入和删除元素时&…

Python二级笔记(12)

知识点: 1,机器周期的同步标准是指CPU访问存储器一次所需要的时间 2,int()函数可以将整数字符串转换成整数,也可以将浮点数转化为整数,但是不能将其他字符串转换成整数。 3,当max(函数的参数是字典时&am…

Python二级笔记(13)

知识点: 1,机器数,不管是正数还是负数,其补码的符号位取反即是偏移码。 2,循环队列是队列的一种顺序存储结构 3, break语句会跳出break所在的最内层循环; try中 的语句出错时会被捕获异常,执行except下的…

Python二级笔记(14)

知识点: 1,在循环链表中,只要指出表中任何一个结点的位置,就可以从它出发不重复地访问到表中其他所有的结点。 单向链表只有从头指针开始,沿各结点的指针扫描链表中的所有结点。 双向链表从任何一一个结点位置出发就可以访问到表中其他所有结…

Python二级笔记(15)

知识点: 1,数据流图(DFD)的作用是支持系统功能建模 2,一个数据库可以有多个外模型(也称子模式或用户模型),但概念模型和内模式(物理模式)只能有一个。 3&a…

Linux基础(管道符、重定向、转义字符与环境变量)

1、输入输出重定向 简而言之,输入重定向是指把文件导入到命令中,而输出重定向则是指把原本要输出到屏幕的数据信息写入到指定文件中。 标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也…

软件工程(数据流图例题详解)

假设一家工厂的采购部每天需要一张订货报表,报表按零件编号排序,表中列出所有需要再次订货的零件。对于每个需要再次订货的零件应该列出下述的数据:零件编号,零件名称,订货数量,目前价格,主要供…

软件工程(数据流图的命名、用途和自动化边界)

数据流图中每个成分的命名是否恰当,直接影响数据流图的可理解性。因此,给这些成分起名字时应该仔细推敲。 命名 1.为数据流(或数据存储)命名 (1)名字应代表整个数据流(或数据存储)的内容,而不是仅仅反映它的某些成分。 (2)不要使用空洞的…

Qt图形界面编程入门(Qt的历史、Qt安装资源链接、Qt Creator简介)

Qt的历史渊源 Qt是1991年由挪威的奇趣科技(Trolltech)公司开发的跨平台C图形用户界面(GUI)用程序开发框架,2008年,奇趣科技公司被诺基亚公可收购,Qt也因此成为诺基亚公司旗下的编程语言工具,曾称霸一时的Symbian手机操作系统就是…

Qt图形界面编程入门(创建一个简单的程序)

1,手工编码方式 利用手工编码方式建立“Hello Qt!”程序 第一步: 得到界面 2,无UI的向导方式 从图中,我们发现向导为窗口程序提供了3个基类,分别外QMainWindow、QWidget、QDialog,3个基类的区…

Linux基础(Vim编辑器与Shell命令脚本)

1、Vim文本编辑器 Vim文本编辑器有三种模式 命令模型:控制光标移动,可对文本进行复制、粘贴、删除和查找得等工作。 输入模式:正常的文本录入 末行模式:保存或退出文档,以及设置编辑环境。 在每次运行Vim编辑器时&…