《软件工程方法与实践》—— 3.3 传统的软件过程模型

本节书摘来自华章出版社《软件工程方法与实践》一 书中的第3章,第3.3节,作者窦万峰,更多章节内容可以访问“华章计算机”公众号查看。

3.3 传统的软件过程模型

3.3.1 瀑布模型

在20世纪80年代之前,瀑布模型是最早也是应用最广泛的软件过程模型,现在它仍然是软件工程中应用得最广泛的过程模型。瀑布模型提供了软件开发的基本框架,其过程是接收上一项活动的工作结果作为输入,然后实施该项活动应完成的工作,并将该项活动的工作结果作为输出传给下一项活动。同时,在开始下一个阶段的活动之前需要评审该项活动的实施,若确认,则继续下一项活动;否则返回前面,甚至更前面的活动。
瀑布模型将软件生存周期划分为软件计划、需求分析、软件设计、软件实现、软件测试、运行与维护这6个阶段,规定了它们自上而下、相互衔接的固定次序,如同瀑布流水逐级下落。
从本质来讲瀑布模型是一个软件开发架构,开发过程是通过一系列阶段顺序展开的,从系统需求分析开始直到产品发布及维护,每个阶段都会产生循环反馈,因此,如果有信息未被覆盖或者发现了问题,那么最好 “返回”上一个阶段并进行适当的修改,开发进程从一个阶段“流动”到下一个阶段,这也是“瀑布”模型名称的由来。瀑布模型的软件过程如图3-1所示。

瀑布模型各个阶段产生的文档是维护软件产品必不可少的,没有文档的软件几乎是不可能维护的。瀑布模型中的文档约束,使软件维护变得更加容易。由于绝大部分软件预算都花费在软件维护上,因此,使软件易于维护就能显著降低软件预算。按照传统的瀑布模型开发软件,有下述的几个特点。
顺序性和依赖性。瀑布模型的各个阶段之间存在着这样的关系:后一阶段的工作必须等前一阶段的工作完成之后才能开始。前一阶段的输出文档就是后一阶段的输入文档,因此,只有前一阶段的输出文档正确,后一阶段的工作才能获得正确的结果。
推迟实现。对于规模较大的软件项目来说,往往编码开始得越早,最终完成开发工作所需要的时间反而越长。主要原因是前面阶段的工作没做或做得不到位,过早地进行下一阶段的工作,往往导致大量返工,有时甚至发生无法弥补的问题,带来灾难性后果。瀑布模型在编码之前设置了系统分析与系统设计的各个阶段,分析与设计阶段的基本任务规定,在这两个阶段主要考虑目标系统的逻辑模型,不涉及软件的编程实现。清楚地区分逻辑设计与物理设计,尽可能推迟程序的编程实现,是按照瀑布模型开发软件的一条重要的指导思想。
质量保证。为保证软件的质量,瀑布模型的每个阶段都应完成规定的文档,只有交出合格的文档才算完成该阶段的任务。完整、准确的合格文档不仅是软件开发时期各类人员之间相互通信的媒介,也是运行时期对软件进行维护的重要依据。其次,在每个阶段结束前都要对所完成的文档进行评审,以便尽早发现问题、改正错误。事实上,越是早期阶段犯下的错误,暴露出来的时间就越晚,排除故障、改正错误所需付出的代价也越高。
瀑布模型着重强调文档的作用,并要求每个阶段都要仔细验证。但这种模型的线性过程太理想化,已不再适合现代化软件开发的模式,其主要问题在于:
各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。事实证明,一旦一个用户开始使用一个软件,在他的头脑中关于该软件应该做什么的想法就会或多或少地发生变化,这就使得最初提出的需求变得不完全适用了。
由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发的风险;客户要等到开发周期的晚期才能看到程序运行的测试版本,而在这时发现大的错误时,其后果可能是灾难性的;实际的项目大部分情况难以按照该模型给出的顺序进行,而且这种模型的迭代是间接的,这很容易由微小的变化造成大的混乱。

3.3.2 增量模型

增量模型(incremental model)也称为渐增模型,是在项目的开发过程中以一系列的增量方式开发系统。在增量模型中,软件被作为一系列的增量构件来设计、实现、集成和测试,每一个构件由多种相互作用的模块所形成的提供特定功能的代码片段构成。
增量方式包括增量开发和增量提交。增量开发是指在项目开发周期内,在一定的时间间隔内开发部分工作软件;增量提交是指在项目开发周期内,在一定的时间间隔内以增量方式向用户提交工作软件和文档。
总体开发与增量构造模型
它在瀑布模型基础上,对一些阶段进行整体开发,如分析与设计阶段,对另一些阶段进行增量开发,如编码和测试阶段。前面的分析与设计阶段按瀑布模型进行整体开发,后面的编码与测试阶段按增量方式开发。
总体开发与增量构造模型融合了瀑布模型的基本成分和原型实现模型的迭代特征,采用随时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的“增量”,如图3-2所示。

当使用增量模型时,第一个增量往往是核心的产品,即第一个增量实现了基本的需求,但很多补充的特征还没有发布。客户对每一个增量的使用和评估作为下一个增量发布的新特征和功能,这个过程在每一个增量发布后不断重复,直到产生最终的完善产品。
总体开发与增量构造模型强调每一个增量均发布一个可操作的产品。
增量开发与增量提交模型
它在瀑布模型的基础上,所有阶段都进行增量开发,也就是说不仅是增量开发,也是增量提交。这种模型融合了线性顺序模型的基本成分和原型实现模型的迭代特征。
增量开发与增量提交模型采用随着日程时间的进展而交错的线性序列。每一个线性序列产生软件的一个可发布的“增量”。当使用演化增量提交模型时,第一个增量往往是核心的产品,也就是说第一个增量实现了基本的需求,但很多补充的特征还没有发布。客户对每一个增量的使用和评估,都作为下一个增量发布的新特征和功能。这个过程在每一个增量发布后不断重复,直到产生最终的完善产品。增量开发与增量提交模型强调每一个增量均要发布一个可运行的产品。
增量模型在各个阶段并不交付一个可运行的完整产品,而是交付满足客户需求的可运行产品的一个子集。整个产品被分解成若干个构件,开发人员逐个交付产品,这样软件开发可以很好地适应变化,客户可以不断地看到所开发的软件,从而降低开发风险。但是,增量模型也存在以下缺陷:
各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构。
在实际的软件开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型,但也很容易退化为边做边改模型,从而使软件过程的控制失去整体性。

3.3.3 螺旋模型

螺旋模型(spiral model)是由Barry Boehm正式提出的模型,它将瀑布模型和快速原型模型结合起来,不仅体现了两个模型的优点,而且还强调了其他模型均忽略的风险分析,特别适合于大型复杂的系统。
螺旋模型的每一个周期都包括需求定义、风险分析、工程实现和评审4个阶段,由这4个阶段进行迭代。软件开发过程每迭代一次,软件开发又前进一个层次。螺旋模型的软件过程如图3-3所示。

螺旋模型在“瀑布模型”的每一个开发阶段前引入一个非常严格的风险识别、风险分析和风险控制,它把软件项目分解成一个个小项目。每个小项目都标识一个或多个主要风险,直到所有的主要风险因素都被确定。该模型沿着螺旋线进行若干次迭代,图3-3中的4个象限分别代表了以下活动:
制订计划:确定软件目标,选定实施方案,确定项目开发的限制条件。
风险分析:评估所选方案,考虑如何识别和消除风险。
实施工程:实施软件开发和验证。
客户评估:评价开发工作,提出修正建议,制订下一步计划。
螺旋模型有许多优点:
对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标。
减少了过多测试(浪费资金)或测试不足(产品故障多)所带来的风险。
在螺旋模型中维护只是模型的另一个周期,在维护和开发之间并没有本质区别。
与瀑布模型相比,螺旋模型支持用户需求的动态变化,为用户参与软件开发的所有关键决策提供了方便,有助于提高目标软件的适应能力,为项目管理人员及时调整管理决策提供了便利,从而降低了软件开发风险。
螺旋模型由风险驱动,强调可选方案和约束条件从而支持软件的重用,帮助我们将软件质量作为特殊目标融入产品开发之中。但螺旋模型也有一定的限制条件:螺旋模型强调风险分析,使得开发人员和用户对每个演化层出现的风险有所了解,继而做出应有的反应,因此特别适用于复杂并具有高风险的系统。对于这些系统,风险是软件开发不可忽视且潜在的不利因素,它可能在不同程度上损害软件开发过程,影响软件产品的质量。减小软件风险的目标是在造成危害之前,及时对风险进行识别及分析,决定采取何种对策,进而减少或消除风险的损害。风险驱动是螺旋模型的主要优势,但在一定情况下这也可能是它的一个弱点。软件开发人员应该擅长寻找可能的风险,准确地分析风险,否则将会带来更大的风险。
另一方面,如果执行风险分析将明显影响项目的利润,那么进行风险分析就需要慎重,因此,螺旋模型只适合于大规模软件项目。事实上,项目越大,风险也越大,因此,进行风险分析的必要性也越大。此外,只有内部开发的项目,才能在风险过大时中止项目。

时间: 2024-11-01 00:12:54

《软件工程方法与实践》—— 3.3 传统的软件过程模型的相关文章

《软件工程方法与实践》—— 第3章 软件过程模型 3.1 引言

    本节书摘来自华章出版社<软件工程方法与实践>一 书中的第3章,第3.1节,作者窦万峰,更多章节内容可以访问"华章计算机"公众号查看. 第3章     软件过程模型 3.1 引言     软件是逻辑的和复杂的,完全依靠开发者的智力思维活动.软件开发过程涉及人员的有效组织与管理,以充分发挥开发人员的能动性.因而,软件开发过程是非常复杂的.然而,软件开发过程中的各种活动具有一般性的规律,可以对软件开发过程进行定量度量和优化,人们总结了这些规律,提出了软件过程模型.    

《系统分析与设计方法及实践》一2.4 软件过程模型

2.4 软件过程模型 软件过程是整个软件生命周期中一系列有序的软件生产活动的流程.为了能高效地开发一个高质量的软件产品,通常把软件生命周期中各项开发活动的流程用一个合理的框架--开发模型来规范描述,这就是软件过程模型,或者称为软件生命周期模型.所以,软件过程模型是一种软件过程的抽象表示法,"建模"是软件过程中最常使用的技术手段之一.软件过程模型是从一个特定的角度表现一个过程,一般使用直观的图形标识软件开发的过程,主要根据软件的类型.规模,特别是软件的开发方法.开发环境等多种因素确立过程

《软件工程方法与实践》—— 导读

前 言 软件工程包含一系列软件开发的基本原理.方法和实践经验,用来指导人们进行正确的软件开发.软件工程强调从工程化的原理出发,按照标准化规程和软件开发实践来引导软件开发人员进行软件开发和实践活动,并进行过程改进,促进软件企业向标准化和成熟化的方向发展.软件工程是一门理论与实践相结合的学科,更注重通过实践来理解原理和方法.为此,我们结合多年的软件工程教学和项目开发经验,通过5个项目实例,从不同的角度.利用不同的方法学来循序渐进地介绍软件开发过程中所涉及的原理.方法和技术.本书的另一个特色是从问题的

《软件工程方法与实践》—— 1.5 软件工程开发方法学

本节书摘来自华章出版社<软件工程方法与实践>一 书中的第1章,第1.5节,作者窦万峰,更多章节内容可以访问"华章计算机"公众号查看. 1.5 软件工程开发方法学 在软件工程学科中,方法学用来表示一套涵盖整个软件生产过程的技术的集合.目前使用得较广泛的软件工程开发方法学,分别是结构化开发方法学和面向对象开发方法学. 1.5.1 结构化开发方法学 结构化开发方法学自1968年提出后,经过几十年的发展,形成了一套完整的规范.构成结构化开发方法学的技术包括结构化分析.结构化设计.结

《软件工程方法与实践》—— 1.2 什么是软件

本节书摘来自华章出版社<软件工程方法与实践>一 书中的第1章,第1.2节,作者窦万峰,更多章节内容可以访问"华章计算机"公众号查看. 1.2 什么是软件 既然软件工程的主角是软件开发,那么在现代社会中,软件担任的究竟是一种什么样的角色呢?我们使用的大部分软件同时担任着两个角色,既是软件产品,又是软件工具.软件产品是指为最终用户使用并带来益处的具有商业价值的软件系统.软件工具是指开发其他软件的软件系统.我们可以利用这些软件系统存储信息或进行信息的变换等. 1.2.1 软件的定

《软件工程方法与实践》—— 2.5 软件工程活动

本节书摘来自华章出版社<软件工程方法与实践>一 书中的第2章,第2.5节,作者窦万峰,更多章节内容可以访问"华章计算机"公众号查看. 2.5 软件工程活动 在软件工程的概念被提出来之前,开发人员错误地认为,软件就是开发活动,或者极端地认为其就是编码,至于分析和设计等都是次要的.随着软件规模的不断增大,软件开发活动中暴露出很多问题.软件工程是为克服这些问题而被提出,并在实践中不断地探索它的原理.技术和方法.软件工程的工程化思想让开发人员看到,软件工程活动包括沟通活动.计划活动

《软件工程方法与实践》—— 3.4 面向对象模型

本节书摘来自华章出版社<软件工程方法与实践>一 书中的第3章,第3.4节,作者窦万峰,更多章节内容可以访问"华章计算机"公众号查看. 3.4 面向对象模型 3.4.1 构件集成模型 构件集成模型利用模块化方法将整个系统模块化,并在一定构件模型的支持下重用构件库中的软件构件,通过组合手段提高应用软件系统过程的效率和质量.构建集成模型融合了螺旋模型的许多特征,本质上是演化型的,开发过程是迭代的.基于构件的开发模型由软件的需求分析和定义.体系结构设计.构件库建立.应用软件构建及测

《软件工程方法与实践》—— 2.2 什么是软件过程

本节书摘来自华章出版社<软件工程方法与实践>一 书中的第2章,第2.2节,作者窦万峰,更多章节内容可以访问"华章计算机"公众号查看. 2.2 什么是软件过程 2.2.1 软件过程的定义 软件的诞生及其生命周期是一个过程,我们总体上称这个过程为软件过程.软件过程是为了开发出软件产品,或者是为了完成软件工程项目而需要完成的有关软件工程的活动,每一项活动又可以分为一系列的工程任务.任何一个软件开发组织,都可以规定自己的软件活动,所有这些活动共同构成了软件过程. 必须有科学.有效的

《软件工程方法与实践》—— 3.2 什么是软件过程模型

    本节书摘来自华章出版社<软件工程方法与实践>一 书中的第3章,第3.2节,作者窦万峰,更多章节内容可以访问"华章计算机"公众号查看. 3.2 什么是软件过程模型     为了能高效地开发一个高质量的软件产品,通常把软件生存周期中各项开发活动的流程用一个合理的框架-开发模型来规范描述,这就是软件过程模型,或者称为软件生存周期模型.所以,软件过程模型是一种软件过程的抽象表示法,"建模"是软件过程中常使用的技术手段之一.     软件过程模型是从一个特