瀑布、V、W、快速原型模型、增量、螺旋模型

瀑布模型(Waterfall Model) 

是最早出现的软件开发模型,它提供了软件开发的基本框架,开发过程是通过设计一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈,因此,如果有信息未被覆盖或者发现了问题,那么最好 “返回”上一个阶段并进行适当的修改,项目开发进程从一个阶段“流动”到下一个阶段,这也是瀑布模型名称的由来。包括软件工程开发、企业项目开发、产品生产以及市场销售等构造瀑布模型。

0b59580f8f7277235d84f390513797ff.png

核心思想

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

优点:

1)为项目提供了按阶段划分的检瀑布模型

查点。

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

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

增量迭代应用于瀑布模型。迭代1解决最大的问题。每次迭代产生一个可运行的版本,同时增加更多的功能。每次迭代必须经过质量和集成测试。

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

缺点:

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

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

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

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

V模型

是瀑布模型的进阶,是软件开发过程中的一个重要模型,由于其模型构图形似字母V,所以又称软件测试的V模型。

c9b5fdf1d49eb73652dcec9d2628d666.png

单元测试:是否满足详细设计的要求

集成测试:验证已测试过的部分是否可以很好地结合在一起

系统测试:检验系统功能、性能是否达到系统的要求。

验收测试:确定软件的时限是否满足用户需求或合同需求

优点:

1、包含了底层测试(单元测试)和高层测试(系统测试);

2、清楚的标识了开发和测试的各个阶段;

3、自上而下逐步求精,每个阶段分工明确,便于整体项目的把控。

缺点:

1、自上而下的顺序导致了,测试工作在编码之后,就导致错误不能及时的进行修改;

2、实际工作中,需求经常变化,导致v模型步骤,反复执行,返工量很大,灵活度较低。

W模型

又叫双v模型,相对于V模型,W模型增加了软件开发各阶段中同步进行的验证和确认活动,分别代表测试与开发过程,明确表示出了测试与开发的并行关系,有利于尽早地全面的发现问题。例如,需求分析完成后,测试人员就应该参与到对需求文档的验证和确认活动中,以尽早地找出缺陷所在。同时,对需求的测试也有利于及时了解项目难度和测试风险,及早制定应对措施,这将显著减少总体测试时间,加快项目进度。

91f6864623ebdd6908741ef62572a3cc.png

优点:

1、开发伴随着整个开发周期,需求和设计同样要测试;

2、更早的介入测试,可以发现初期的缺陷,修复成本低;

3、分阶段工作,方便项目整体管理。

缺点:

1、开发和测试依然是线性的关系,需求的变更和调整,依然不方便;

2、如果没有文档,根本无法执行w模型;

3、对于项目组成员的技术要求更高!

快速原型模型

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

快速原型模型是增量模型的另一种形式,在开发真实系统之前,迅速建造一个可以运行的软件原型 ,以便理解和澄清问题,在该原型的基础上,逐渐完成整个系统的开发工作;

它允许在需求分析阶段对软件的需求进行初步而非完全的分析和定义,快速设计开发出软件系统的原型,该原型向用户展示待开发软件的全部或部分功能和性能;用户对该原型进行测试评定,给出具体改进意见以丰富细化软件需求;开发人员据此对软件进行修改完善,直至用户满意认可之后,进行软件的完整实现及测试、维护

7dabe9c650019183a4ea5dd7b6611cc1.png

优点:

克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险

适合预先不能确切定义需求的软件系统的开发

缺点:

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

使用前提是要有一个展示性的产品原型,一定程度上可能会限制开发人员的创新

增量模型

增量模型也称渐增模型。使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能,使用增量模型时,第一个增量构件往往实现软件的基本需求,提供最核心的功能

4d1e951a859553ab8edc17e96da5427f.png

优点:

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

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

3、以组件为单位进行开发降低了软件开发的风险。一个开发周期内的错误不会影响到整个软件系统

4、开发顺序灵活。开发人员可以对组件的实现顺序进行优先级排序,先完成需求稳定的核心组件。当组件的优先级发生变化时,还能及时地对实现顺序进行调整

缺点:

1、由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构

2、在开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性

3、如果增量包之间存在相交的情况且未很好处理,则必须做全盘系统分析,这种模型将功能细化后分别开发的方法较适应于需求经常改变的软件开发过程

螺旋模型

螺旋模型是一种演化软件开发过程模型,它兼顾了快速原型的迭代特征以及瀑布模型的系统化与严格监控。螺旋模型最大的特点在于引入了其他模型不具备的风险分析,使软件在无法排除重大风险时有机会停止,以减小损失。同时,在每个迭代阶段构建原型是螺旋模型用以减小风险的途径

螺旋模型是快速原型模型以进化的开发方式为中心,在每个项目阶段使用瀑布模型法。该模型的每一个周期都包括需求定义、风险分析、工程实现和评审4个阶段,由这4个阶段进行迭代。软件开发过程每迭代一次,软件开发又前进一个层次。

4e09a8943fa83bb50a023ce817cbdaac.png

图中带箭头的点划线的长度代表当前累计的开发费用,螺旋线的角度值代表开发进度,螺旋线的每个周期对应于一个开发阶段

图中的四个象限代表了以下活动

制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件

风险分析:分析评估所选方案,考虑如何识别和消除风险

实施工程:实施软件开发和验证

客户评估:评价开发工作,提出修正建议,制定下一步计划

优点:

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

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

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

缺点:

1、采用螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能够及时标识风险,势必造成重大损失

2、过多的迭代次数会增加开发成本,延迟提交时间

480b38c8a94a54bc4c533db68fb2d71b.png

524dbc352976a5ae9bd333722ec1cc7f.png

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

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

相关文章

opencv Hog学习总结

一、方向梯度 梯度:在向量微积分中,标量场的梯度是一个向量场。标量场中某一点上的梯度指向标量场增长最快的方向,梯度的长度是这个最大的变化率。更严格的说,从欧几里得空间Rn到R的函数的梯度是在Rn某一点最佳的线性近似。在这个…

深入浅出理解HOG特征---梯度方向直方图

梯度方向直方图 原文路径:https://www.learnopencv.com/histogram-of-oriented-gradients/ 最近在搞车牌识别的时候,训练样本去识别车牌的时候用到HOG特征。国外一篇文章让我受益良多 什么是特征描述符? 特征描述符是指通过提取有用的信息并…

陕西居民医保微信缴纳教程来了,太方便了

2022年居民医保交费步骤如下:1、进入微信,我的页面,点支付进入—点城市服务2、城市服务页面,顶部可切换所在城市,输入框搜索“陕西省社保”,选第一个 “陕西省社保缴纳”进入3、选城乡居民医疗保险&#xf…

SVM理论学习记忆

转载自https://blog.csdn.net/chaipp0607/article/details/73662441 SVM算法在在1995年正式发表,在针对中小型数据规模的分类任务上有着卓越的效果,同时有着完整的理论证明,在20世纪末的几年和21世纪初的10年完胜神经网络,吴恩达…

Python中jmespath解析提取json数据

在做接口自动化,测试断言时,我们经常需要提取接口的的响应数据字段,以前用过jsonpath,有几篇相关文章,可以参考下(Python深层解析json数据之JsonPath、【Jmeter篇】后置处理器之正则提取器、Json提取器 、J…

SVM学习记录

第一个min:先在数据中找离决策边界距离最近的样本点 第二个max:寻找w和b使得刚才找到的点离决策边界最远的平面(平面方程:) 求解出后即可求出w和b。 例如: 如果等于0.根据上面的公式,得到w就为…

缺陷定位 | 测试发现了Bug,还要分析定位Bug?(一)

hello今天分享的内容,可能会有很多朋友持不同观点,或被很多同行朋友diss,不过没关系,即使被喷被diss,我依然会坚持我的观点,把最真实的干货分享给大家,希望得到支持。测试工程师在互联网行业里&…

opencv glob 内存溢出异常

先贴代码(非常简单的代码&#xff09; #include "opencv2/imgproc.hpp" #include "opencv2/highgui.hpp" #include "opencv2/ml.hpp" #include "opencv2/objdetect.hpp" #include <iostream> #include <time.h> using na…

白盒测试 | 用例设计方法之条件组合覆盖

往期关联文章回顾&#xff1a;白盒测试 | 用例设计方法之条件覆盖白盒测试 | 用例设计方法之判定覆盖白盒测试 | 用例设计方法之语句覆盖条件组合覆盖&#xff1a;列出所有判定条件中可能的取值组合&#xff0c;使得每个判定条件结果的所有可能组合至少出现一次程序流程图&…

npm安装教程

一、使用之前&#xff0c;我们先来掌握3个东西是用来干什么的。 npm: Nodejs下的包管理器。 webpack: 它主要的用途是通过CommonJS的语法把所有浏览器端需要发布的静态资源做相应的准备&#xff0c;比如资源的合并和打包。 vue-cli: 用户生成Vue工程模板。&#xff08;帮你快…

测试管理 | 测试经理定义和实施测试度量

往期关联文章回顾&#xff1a;瀑布、V、W、快速原型模型、增量、螺旋模型测试管理 | 4种优先级排序方法一定要掌握测试管理 | 基于风险的测试管理上有这样一句名言&#xff0c;进行度量的工作才会得到有效的执行。反之&#xff0c;因为很容易忽略那些不进行度量的工作&#xff…

Python核心场景自动化测试项目实战(二)

往期关联文章回顾&#xff1a;PytestAllureJenkins接口自动化项目实战&#xff08;一&#xff09;【Python篇】核心场景接口自动化方案&#xff08;一&#xff09;以前我们用pythonunittestHTMLTestRunnerjenkins结合实际项目写过一个核心场景自动化测试&#xff0c;也在实际工…

opencv图像切割1-KMeans方法

kMeans随机数据分类&#xff1a; #include<opencv2\opencv.hpp> #include<iostream> using namespace cv; using namespace std; int main1() {Mat img(500, 500, CV_8UC3);RNG rng(12345);Scalar colorTab[] {Scalar(0,0,255),Scalar(0,255,0),Scalar(255,0,0),…

mitmproxy抓包 | Python疑难测试场景mock

往期经典文章回顾&#xff1a;抓包工具mitmproxy环境配置使用&#xff08;一&#xff09;抓包工具mitmproxy | mitmweb基本用法&#xff08;二&#xff09;mitmproxy抓包 | Python实时生成接口自动化用例mitmproxy抓包 | Python实时生成接口自动化用例&#xff08;三&#xff0…

opencv图像分割2-GMM

GMM随机数分类&#xff1a; #include<opencv2\opencv.hpp> #include<iostream> using namespace cv; using namespace std; using namespace cv::ml; int main() {Mat imgMat::zeros(500, 500, CV_8UC3);RNG rng(12345);Scalar colorTab[] {Scalar(0,0,255),Scal…

mitmproxy抓包 | Python疑难测试场景mock实战(四)

往期经典文章回顾&#xff1a;抓包工具mitmproxy环境配置使用&#xff08;一&#xff09;抓包工具mitmproxy | mitmweb基本用法&#xff08;二&#xff09;mitmproxy抓包 | Python实时生成接口自动化用例mitmproxy抓包 | Python实时生成接口自动化用例&#xff08;三&#xff0…

mitmproxy抓包 | Python篡改请求参数实战(五)

抓包工具mitmproxy环境配置使用&#xff08;一&#xff09;抓包工具mitmproxy | mitmweb基本用法&#xff08;二&#xff09;mitmproxy抓包 | Python实时生成接口自动化用例&#xff08;三&#xff09;mitmproxy抓包 | Python实时生成接口自动化用例mitmproxy抓包 | Python疑难…

数据结构-链表1-顺序存储

DynamicArray.h #ifndef DYNAMIC_ARRAY_H #define DYNAMIC_ARRAY_H #define _CRT_SECURE_NO_WARNINGS #include<stdlib.h> #include<stdio.h> #include<string.h>//动态数组结构体 typedef struct DYNAMICARRAY {int* pAddr; //具体存放数据的地址int size…

全网都在用的超全【面试刷题小程序】,最新版激活教程

前几天&#xff0c;我的一个粉丝留言给我说&#xff0c;他在面试美团的自动化测试岗的时候&#xff0c;不幸挂掉了。越想越觉得可惜&#xff0c;回想面试经过&#xff0c;好好总结了几个点&#xff0c;发现面试没过的主要原因是在几个关键的问题没有给到面试官想要的答案。从而…

数据结构-链表2-链式存储

LinkList.h #ifndef LINKLIST_H #define LINKLIST_H #define _CRT_SECURE_NO_WARNINGS #include<stdlib.h> #include<stdio.h> #include<string.h>//链表结点 typedef struct LINKNODE {void* data; //无类型指针&#xff0c;指向任何类型的数据struct LIN…