软件开发模型

①瀑布模型

②V模型

③W模型(双V)


一、瀑布模型

瀑布模型简介

这是一个软件生命周期模型,开发过程是通过设计一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,项目开发进程从一个阶段“流动”到下一个阶段,这也是瀑布模型名称的由来。

软件开发模型_瀑布模型

瀑布模型的优缺点

优点

严格的规定了每个阶段必须提交的文档,项目的推进必须按照一定的顺序来做

缺点

严重依赖项目文档,脱离用户真实需求,在可运行的软件产品交付给用户之前,用户只能通过文档来了解产品是什么样的,很可能导致最终开发出的软件产品不能真正满足用户的需要。也不适合需求模糊的系统。


二、V模型

V模型简介

一种传统软件开发模型,适用于一些传统信息系统应用的开发,由于其模型构图形似字母V,所以又称软件测试的V模型。

模型中明确的标注了测试过程中存在着那些不同的测试类型,并且清楚的表达了测试阶段和开发过程各阶段的对应关系。需要软件开发完了之后才开始测试活动。

软件开发模型_软件开发_02

V模型的优缺点

优点

包含了从底层(单元测试)到顶层的测试(验收测试)更清楚的标识了开发和测试的各个阶段自上而下逐步求精,每个阶段分工明确,便于整体项目的把控。

缺点

自上而下的顺序导致测试工作在编码后,不能及时的进行修改实际工作中,需求经常变化,导致V模型步骤反复执行,返工量很大,灵活度较低。

三、W模型(双V模型)

W模型简介

也是一种传统软件开发模型,由两个V字型模型组成,分别代表测试与开发过程,测试的活动与软件开发同步进行

测试的对象不仅仅是程序,还包括需求和设计,相对于V模型可尽早发现软件缺陷可降低软件开发的成本。

软件开发模型_迭代_03

W模型的优缺点

优点

开发伴随着整个开发周期,需求和设计同样要测试更早的介入测试,可以发现初期的缺陷,修复成本低分阶段工作,方便项目整体管理。

缺点

开发和测试依然是线性的关系,需求的变更和调整,依然不方便如果没有文档,无法执行w模型对于项目组成员的技术要求更高。


书本介绍:

下面以软件开发模型发展历史为顺序,介绍几个典型的开发模型。1. 瀑布模型瀑布模型是W.W.罗伊斯(W.W.Royce)于1970年提出的软件开发模型,由模型名称可知该模型遵循从上至下一次性完成整个软件产品的开发方式。瀑布模型将软件开发过程分为6个阶段:计划→需求分析→软件设计→编码→测试→运行维护,其开发过程如图1-2所示。

软件开发模型_迭代_04

图1-2

 瀑布模型在瀑布模型中,软件开发的各项活动严格按照这条线进行,只有当一个阶段任务完成之后才能开始下一个阶段。软件开发的每一个阶段都要有结果产出,结果经过审核验证之后作为下一个阶段的输入,下一个阶段才可以顺利进行。如果结果审核验证不通过,则需要返回修改。

瀑布模型为整个项目划分了清晰的检查点,当一个阶段完成之后,只需要把全部精力放置在后面的开发上即可,它有利于大型软件开发人员的组织管理及工具的使用与研究,可以提高开发的效率。

但是瀑布模型是严格按照线性方式进行的,无法适应用户需求变更,用户只能等到最后才能看到开发成果,增加了开发风险。如果开发人员与客户对需求理解有偏差,到最后开发完成后,最终成果与客户需求可能会差之千里。

使用瀑布模型开发软件时,如果早期犯的错误在项目完成后才发现,此时再修改原来的错误需要付出巨大的代价。瀑布模型要求每一个阶段必须有结果产出,这就势必增加了文档的数量,使软件开发的工作量变大。除此之外,对于现代软件来说,软件开发各阶段之间的关系大部分不会是线性的,很难使用瀑布模型开发软件,因此瀑布模型不再适合现代软件开发,已经被逐渐废弃。2. 快速原型模型快速原型模型与瀑布模型正好相反,它在最初确定用户需求时快速构造出一个可以运行的软件原型,这个软件原型向用户展示待开发软件的全部或部分功能和性能,客户对该原型进行审核评价,然后给出更具体的需求意见,这样逐步丰富细化需求,最后开发人员与客户达成最终共识,确定客户的真正需求。确定客户的真正需求之后,开始真正的软件开发。快速原型模型类似于建造房子,确定客户对房子的需求之后快速地搭建一个房子模型,由客户对房子模型进行评价,房子的样式、功能、布局等是否满足需求,哪里需要改进等,一旦最后确定了客户对房子的要求,就开始真正地建造房子。该模型的开发过程如图1-3所示。

软件开发模型_软件开发_05

与瀑布模型相比,快速原型模型克服了需求不明确带来的风险,适用于不能预先确定需求的软件项目。但快速原型模型关键在于快速构建软件原型,准确地设计出软件原型存在一定的难度。此外,这种开发模型也不利于开发人员对产品进行扩展。3. 迭代模型迭代模型又称为增量模型或演化模型,它将一个完整的软件拆分成不同的组件,然后逐个组件地开发测试,每完成一个组件就展现给客户,让客户确认这一部件功能和性能是否达到客户需求,最终确定无误,将组件集成到软件体系结构中。整个开发工作被组织为一系列短期、简单的小项目,称为一系列迭代,每一个迭代都需要经过需求分析→软件设计→编码→测试的过程,其开发过程如图1-4所示。

软件开发模型_迭代_06

在迭代模型中,第一个迭代(即第一个组件)往往是软件基本需求的核心部分,第一个组件完成之后,经过客户审核评价形成下一个组件的开发计划,包括对核心产品的修改和新功能的发布,这样重复迭代步骤直到实现最终完善的产品。迭代模型可以很好地适应客户需求变更,它逐个组件地交付产品,客户可以经常看到产品,如果某个组件没有满足客户需求,则只需要更改这一个组件,降低了软件开发的成本与风险。但是迭代模型需要将开发完成的组件集成到软件体系结构中,这样会有集成失败的风险,因此要求软件必须有开放式的体系结构。此外,迭代模型逐个组件地开发修改,很容易退化为“边做边改”的开发形式,从而失去对软件开发过程的整体控制。

4.螺旋模型

螺旋模型由巴利·玻姆(Barry Boehm)于1988年提出,该模型融合了瀑布模型、快速原型模型,它最大的特点是引入了其他模型所忽略的风险分析,如果项目不能排除重大风险,就停止项目从而减小损失。这种模型比较适合开发复杂的大型软件。螺旋模型将整个项目开发过程划分为几个不同的阶段,每个阶段按部就班地执行,这种划分方式采用了瀑布模型。每个阶段在开始之前都要进行风险评估,如果能消除重大风险则可以开始该阶段任务。在每个阶段,首先构建软件原型,根据快速原型模型完成这个迭代过程,产出最终完善的产品,然后进入下一个阶段,同样下一个阶段开始之前也要进行风险评估,这样循环往复直到完成所有阶段的任务。螺旋模型的若干个阶段是沿着螺线方式进行的,如图1-5所示。

软件开发模型_软件开发_07

图1-5有4个象限:制订计划、风险分析、实施工程、客户评估,各象限含义如下。(1)制订计划:确定软件目标,制订实施方案,并且列出项目开发的限制条件。(2)风险分析:评价所制订的实施方案,识别风险并消除风险。(3)实施工程:开发产品并进行验证。(4)客户评估:客户对产品进行审核评估,提出修正建议,制订下一步计划。在螺旋模型中,每一个迭代都需要经过这4个步骤,直到最后得到完善的产品,可以进行提交。螺旋模型强调了风险分析,这意味着对可选方案和限制条件都进行了评估,更有助于将软件质量作为特殊目标融入产品开发之中。它以小分段构建大型软件,使成本计算变得简单容易,而且客户始终参与每个阶段的开发,保证了项目不偏离正确方向,也保证了项目的可控制性。

5. 敏捷模型敏捷模型是20世纪90年代兴起的一种软件开发模型。在现代社会,技术发展非常快,软件开发也是在快节奏的环境中进行的。在业务快速变换的环境下,往往无法在软件开发之前收集到完整而详尽的软件需求。没有完整的软件需求,传统的软件开发模型就难以展开工作。为了解决这个问题,人们提出了敏捷开发模型。敏捷模型以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷模型中,软件项目在构建初期被拆分为多个相互联系而又独立运行的子项目,然后迭代完成各个子项目,开发过程中,各个子项目都要经过开发测试。当客户有需求变更时,敏捷模型能够迅速地对某个子项目做出修改以满足客户的需求。在这个过程中,软件一直处于可使用状态。除了响应需求,敏捷模型还有一个重要的概念——迭代,就是不断对产品进行细微、渐进式的改进,每次改进一小部分,如果可行再逐步扩大改进范围。在敏捷模型中,软件开发不再是线性的,开发的同时也会进行测试工作,甚至可以提前写好测试代码,因此在敏捷模型中,有“开发未动,测试先行”的说法。

另外,相比于传统的软件开发模型,敏捷模型更注重“人”在软件开发中的作用,项目的各部门应该紧密合作、快速有效地沟通(如面对面沟通),提出需求的客户可以全程参与到开发过程,以适应软件频繁的需求变更。为此,敏捷模型描述了一套软件开发的价值和原则,具体如下所示。(1)个体和交互重于过程和工具。(2)可用软件重于完备文档。(3)客户协作重于合同谈判。(4)响应变化重于遵循计划。对于敏捷模型来说,并不是工具、文档等不重要,而是更注重人与人之间的交流沟通。敏捷模型可以及时响应客户需求变更,不断适应新的趋势,但是在开发灵活的同时也带来了一定程度的混乱。例如,缺乏文档资料;软件之前版本的可重现性、可回溯性较低;对于较大的项目,人员越多,面对面的有效沟通越困难。因此敏捷模型比较适用于小型项目的开发,而不太适用于大型项目。

多学一招:敏捷模型的开发方式敏捷模型主要有2种开发方式:Scrum与Kanban,下面分别对这两种开发方式进行简单的介绍。

1. Scrum

在Scrum开发方式的团队中,会选出一个Scrum Master(产品负责人)全面负责产品的开发过程。Scrum Master把团队划分成不同的小组,把整个项目划分成细小的可交付成果的子项目,分别由不同的小组完成,并对各小组的工作划分优先级,估算每个小组的工作量。在开发过程中,每个小组的工作都是一个固定时长的短周期迭代,开发短周期一般为1~4周。开发完成之后,经过一系列的测试、优化等,将产品集成,交付最终成果。2. KanbanKanban(看板)源于丰田的生产模式,它将工作细分成任务,将工作流程显示在“看板卡”上,每个人都能及时了解自己的工作任务及工作进度。这种生产理念后来被引入到软件开发中,利用可视化软件将开发的软件项目细分成小任务,并分配给团队成员,每个成员都可以在“看板”上了解自己的工作任务及整个团队的工作进度。项目开始之后,从目前执行的任务和过程开始,团队会针对每个成员的工作做出持续、增量、渐进式的改变。