前言
软件开发模型是指软件开发全部过程、活动和任务的结构框架。一般包括需求、设计、编码和测试等阶段,甚至包括维护阶段。软件开发模型明确规定了软件开发过程中要完成的主要活动和任务,用来指导整个开发过程中的工作。对于不同的系统,可依据软件的特点、项目成员的参与方式选择不同的软件开发模型。作为测试工程师,测试的工作内容与软件开发模型紧密相关,不同的开发模型中,测试的任务和作用也会不同。以下,给大家介绍几种常见的开发模型。
1、瀑布模型
瀑布模型作为最早出现的软件开发模型,提供了软件开发的基本框架,为后续出现的开发模型奠定了基础。从1970年被温斯顿·罗伊斯(Winston Royce)提出后,直到80年代早期,一直是被广泛采用。
这种模式有明确的阶段活动,分为6个阶段:计划→需求分析→软件设计→编码→测试→运行维护。阶段顺序固定,自上而下、相互衔接,形如瀑布流水逐级下落。这也是瀑布模型名称的由来。
瀑布模型的本质是一次通过,即每个活动只执行一次,最后得到软件产品,也称为“线性顺序模型”或者“传统生命周期模型”。其过程是上一个阶段的工作完成输出结果并通过审核,才能“流动”到下一个阶段;否则返回前面,甚至更前的阶段活动。
缺点:
1)各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。
2)由于开发模型是线性的,单一流程,不可逆,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发风险。
3)测试只是其中一个阶段,缺乏全过程测试思想。早期的错误可能要等到开发后期的测试阶段才能发现,发现问题越晚造成代价越高
4)在软件需求分析阶段,完全确定用户的所有需求是比较困难的,不能应对需求不断变更的项目。
优点:
1)为项目提供了按阶段划分的检查点。
2)当前一阶段完成后,您只需要去关注后续阶段。
适用项目范围:
1)需求很明确的软件开发项目;
2)在开发时间内需求没有或很少变化;
3)分析设计人员应对应用领域很熟悉;
4)低风险项目(对目标、环境很熟悉);
5)用户使用环境很稳定;
2、快速原型模型
快速原型模型与瀑布模型相反,项目初期根据用户的需求快速构建一个可以运行的系统原型,之后向用户展示,由用户进行审核,提出意见,然后逐步丰富项目需求。当需求真正确定后,才正式进行项目开发。
优点:
有助于满足用户的真实需求;原型系统已经通过与用户的交互而得到验证,据此产生的规格说明文档能够正确地描述用户需求。
缺点:
要求开发人员快速建立原型。
适用项目范围:
适用于需求不明确的软件项目。
3、增量模型
又称为迭代模型或演化模型,它将一个完整的软件拆分成不同的组件,然后逐个组件地开发测试,每完成一个组件就展现给客户,让客户确认这一部件功能和性能是否达到客户需求,最终确定无误,将组件集成到软件体系结构中。整个开发工作被组织为一系列短期、简单的小项目,称为一系列迭代,每一个迭代都需要经过需求分析→软件设计→编码→测试的过程。
优点:
1)第一个可交付版本的软件所需的成本与时间较小
2)能够适应客户的需求变更,当需求变化时,只需要修改某一个组件即可。
缺点:
1)如果对用户需求的变更没有整体的规划,可能会变化为"边做边开发"的模式。
2)最终集成各个组件时,可能会出现集成失败的风险。
适用项目范围:
适用于工期紧张、功能可以划分、比较复杂的软件项目。软件工程师必须有较高的技术水平,能够设计出开放的软件体系结构。
4、螺旋模型
该模型融合了瀑布模型、快速原型模型,由巴利·玻姆(Barry Boehm)于1988年提岀,该模型最大的特点就是引入了其他模型所没有的风险分析。螺旋模型将开发过程分为几个螺旋周期,每个螺旋周期大致和瀑布模型相符合,在每个周期开始之前都会进行风险分析。在每个阶段,首先构建软件原型,根据快速原型模型完成这个迭代过程,产出最终完善的产品,然后进入下一个阶段,同样下一个阶段开始之前也要进行风险评估,这样循环往复直到完成所有阶段的任务。
该模型共有四个象限,每个象限的含义如下:
1、制订计划:确定软件目标,制订实施方案,并且列出项目开发的限制条件。
2、风险分析:评价所制订的实施方案,识别风险并消除风险。
3、实施工程:开发产品并进行验证。
4、客户评估:客户对产品进行审核评估,提出修正建议,制订下一步计划。
优点:
1)对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标;
2)减少了过多测试或测试不足所带来的风险;
3)在螺旋模型中维护只是模型的另一个周期,在维护和开发之间并没有本质区别。
缺点:
螺旋模型是风险驱动的,因此要求软件开发人员必须具有丰富的风险评估经验和这方面的专门知识
适用项目范围:
适用于内部开发的大型软件(开发周期长、比较容易受到社会因素影响的软件项目),软件开发人员具有丰富的风险评估知识和经验。
5、V模型
V模型也叫RAD(Rapid Application Development,快速应用开发)模型,是软件开发过程中的一个重要模型,由于其模型构图形似字母V,所以称为软件测试的V模型。V模型大体可以划分为以下几个不同的阶段步骤:客户需求分析、软件需求分析、概要设计、详细设计、软件编码、单元测试、集成测试、系统测试、验收测试。
优点:
开发阶段包含了底层测试(单元测试)和高层测试(系统测试);清楚的标识了开发和测试的各个阶段;每个阶段分工明确,便于整体项目的把控。
缺点:
自上而下的顺序导致了,测试工作要在编码之后进行,就导致错误不可以及时进行修改;实际工作中,经常变更需求,导致v模型步骤反复执行,返工量大,灵活度低。
适用 项目范围:
一般适用于一些传统信息系统应用的开发,而一些高性能高风险的系统、互联网软件,或一个系统难以被具体模块化的时候,就比较难做成V模式所需的各种构件,需要更强调迭代的开发模型或者敏捷开发模型。
6、敏捷模型
敏捷模型是20世纪90年代兴起的一种软件开发模型。在现代社会的开发中,由于业务会经常快速的变化,因此会导致在软件开发之前经常是无法得到详细完整的开发需求,没有完整的开发需求,传统的软件开发模型也就无法适用。敏捷开发模型的提出就是为了解决该问题。该模型以客户的需求为核心,采用迭代,循序渐进的方法进行开发。
软件项目在构建初期会被拆分为多个相互联系而又独立运行的子项目,然后迭代完成各个子项目。当客户有需求变更时,敏捷模型能够迅速地对某个子项目做出修改以满足客户的需求。在这个过程中,软件一直处于可使用状态。
优点:
1、用户很快可以看到一个基线架构版的产品
2、敏捷注重市场快速反应能力,与客户面对面的交流
3、随时可以接受更改
缺点:
1、注重人员的沟通,需要较好的团队协作
2、忽略文档的重要性,需要项目中存在经验较强的人
3、如果项目人员流动大太,会增加项目维护难度
适用项目范围:
适用于产品复杂,需求多变,难预测、实现周期长的产品。