《软件需求工程(第2版)》一2.2 软件开发过程模型

2.2 软件开发过程模型

软件开发过程模型是为获得高质量的软件系统所需完成的一系列任务的框架。它规定了完成各项任务的工作步骤。在软件工程的初期,软件生命期这一概念被提出。这是用标准的形式表示和定义了软件生存过程。所谓软件生命期是指软件从软件计划开始,经历需求分析和定义、设计、编码、测试、运行、维护直到废止为止的期间。由于软件生命期包括了软件的整个生存过程,与软件开发相关的企业和开发组织等都把软件生命期视为软件开发过程模型的依据,工程管理也以该模型为实施依据。当然,这也是模仿其他行业如机器制造业和建筑业等而得到的过程模型。

2.2.1 瀑布式模型

瀑布式开发模型是最早的、依据软件生命期而提出的软件开发模型,亦称软件生命期模型。瀑布式开发模型如图21所示,其中软件的开发过程分为六个阶段,每个阶段都有明确的分工和任务,并产生一定的书面结果。各阶段之间是紧密相关的,后一阶段的工作依据前一阶段的工作结果而开展。

《软件需求工程(第2版)》一2.2 软件开发过程模型_第1张图片

各个阶段的基本任务如下:
1)软件开发计划:确定软件开发项目必须完成的总目标,论证项目的可行性,给出软件的工作范围,估算所需资源、工作量、费用,安排开发进度,并产生计划任务书及可行性报告等。
2)需求分析与定义:软件开发人员与用户一起理解和表达用户需求,并产生需求规格说明。
3)设计:设计阶段又分为总体设计和详细设计两个子阶段。总体设计阶段就是根据软件需求规格说明建立软件系统的结构,描述软件系统的具体功能和接口;详细设计阶段产生编码阶段所需的一系列模块设计规格说明。
4)编码:根据设计要求,使用某种程序设计语言编写程序。
5)测试:对软件系统进行检查和测试,及时地发现和纠正软件系统中的故障和逻辑错误,并产生测试报告等。测试也可分为单元测试和综合测试。
6)维护:通过各种必要的维护活动保证软件系统正常运行,并能持久地满足用户的需求。
瀑布式模型的特点有很多,如:阶段间具有顺序性和依赖性,各阶段必须完成规定的文档,从而在审查文档的基础上保证软件的质量等。值得注意的是,瀑布式模型只是提供了一个完成软件开发和维护任务的指导性框架,缺乏具体的实施方法和技术,它也并非以线性方式进行,因为在实际的软件开发工作中还存在着反复。例如,如果在设计中发现需求比较含糊,则需回到需求分析与定义阶段重新进行处理。又如,如果在测试中发现设计存在问题,则需返回设计阶段进行修正,然后再进行编码和测试等(见图21)。
瀑布式模型在20世纪80年代之前一直是唯一广泛采用的生命期模型,现在仍然是软件工程中应用得最广泛的模型。然而,传统的瀑布式模型也存在诸多问题:
1)在实际开发工作中,用户不可能一开始就使自己的需求很清晰,通常是在开发过程中逐渐完善的。另外,当某些需求比较含糊时,如系统的友好用户界面等,将导致软件开发人员不一定能开发出使用户满意的软件系统,再加上在开发过程中用户的需求可能发生变化,也导致软件开发工作按瀑布式模型的步骤又得从头开始,这显然是不合理的。
2)由于模型各阶段的界线划分清晰,也比较独立,而且参加人员和开发人员也都相对独立,因此在阶段间移交信息(文档)的过程中,由于个人的理解不同,或者当事人不在时,容易产生误解。这容易导致开发出的软件系统与用户需求产生偏差。
3)用户的参与程度不够。因为软件的运行版本要等到测试后才能出现,用户也只能在需求分析与定义阶段和测试阶段的后期参与到开发工作中,因此,用户在相当长的一段时间内没有参与到软件开发中。
针对瀑布式模型的特点和存在的问题,人们又在软件生命期模型的基础上,推出了一些其他开发模型。

2.2.2 快速原型模型

快速原型模型是针对瀑布式模型存在的不足而提出的改进模型。所谓“原型”通常是指一种与原物的结构、大小和一般功能接近的形式或设计,如航天飞船模型和建筑物模型等。软件原型是指待开发的软件系统的部分实现。而快速原型是在完成最终可运行软件系统之前快速建立实验性的、可在计算机上运行的程序(原型),然后给予评价的过程。快速原型模型的基本思想是快速建立一个实现了若干功能(不要求完全)的可运行模型来启发、揭示和不断完善用户需求,直到满足用户的全部需求为止。图22表示了快速原型模型的基本过程。

《软件需求工程(第2版)》一2.2 软件开发过程模型_第2张图片

从图2-2可以看出,快速原型模型首先是快速建立一个能反映用户主要需求的原型系统,然后提供给用户在计算机上使用。用户在试用原型后会提出许多修改意见,开发人员根据用户提出的意见快速修改原型系统,然后再交给用户试用。重复上述过程,直到用户认为这个原型系统能达到他们的要求为止。开发人员便根据原型系统编写需求规格说明,因此,根据这份需求规格说明开发出的软件应能满足用户的真正需求。
对于开发出的原型来说,由于原型的用途是获知用户的真正需求,一旦需求确定了,原型将被抛弃,因此,原型系统的内部结构并不重要,重要的是,必须迅速地构建原型,然后根据用户意见迅速地修改原型。Unix Shell和超文本都是广泛使用的快速原型语言。最近的趋势是使用第四代语言(4GL)来构建快速原型。
当快速原型的某个部分是利用软件工具由计算机自动生成的时候,也可以将这部分用到最终的软件产品中。例如,用户界面通常是快速原型的一个关键部分,当使用屏幕生成程序和报表生成程序自动生成用户界面时,实际上可以把得到的用户界面用于最终的软件产品中。
使用快速原型模型的目的是:
明确并完善需求。作为一种需求工具,原型初步实现系统的一部分。用户对原型的评价可以指出需求中的许多问题,这样在真正开发系统之前可以用最低的费用来解决这些问题。
探索设计选择方案。作为一种设计工具,原型可以探索不同的界面技术,使系统达到最佳的状态,用于评价以后的技术方案。
可以发展为最终的产品。作为一种构造工具,原型是产品最初若干基本功能的实现。通过一系列小规模的开发和完善,逐步完成整个产品的开发。
快速原型模型的特点是:
开发过程虽然仍与瀑布式模型相同,但在具体实施细节方面有所不同,从而弥补了瀑布式模型的一些不足,如用户参与程度不够等。
通过原型系统能使用户的需求明确化,也可减少用户需求的遗漏或用户频繁修改需求的可能性,特别是在软件开发的后期阶段。
用户可以充分地参与到软件开发中。因为通过试用原型系统,用户能及时提出一些反馈意见和建议,从而使开发人员在开发工作中,如设计与实现阶段,能尽量减少错误。
快速原型模型的本质是“快速”。开发人员应尽可能快地构造原型系统,从而能加速软件开发过程,减少开发周期,节约软件开发成本。
但快速原型模型也存在着某些不足:
用户易于视原型为正式产品。用户看到的是软件系统的可执行版本,他们并不知道某些原型是临时拼凑出来的,并且也不知道为尽快让系统运行而没有保证软件系统的总体质量和可维护性。故当他们知道软件系统要重建时,往往认为只要稍作修改就可获得最终的软件系统。
快速原型系统对于软件系统的开发环境要求较多,这也在一定程度上影响了其使用的范围和实用价值。

2.2.3 渐增式模型

渐增式模型亦称增量模型。渐增式模型的基本思想是从核心功能开始,通过不断地改进和扩充,使得软件系统能适应用户需求的变动和扩充,从而获得柔性较高的软件系统。
图23表示了渐增式模型的开发过程。渐增式模型表明,必须在实现各个构件之前就全部完成需求分析和概要设计工作。

《软件需求工程(第2版)》一2.2 软件开发过程模型_第3张图片

在尽早向用户提供可运行的软件系统方面,渐增式模型类似快速原型模型。但快速原型模型在考虑优先开发什么功能或部分系统方面与渐增式模型有所不同。快速原型模型主要根据用户需求较为模糊的部分优先开发原型;而渐增式模型则从功能明确、设计技术上不确定因素很少的核心功能优先开发,并且分批地逐步向用户提交产品。
渐增式模型的特点是:
能在短时间向用户提交可完成部分功能的产品。
能逐步增强产品功能,以使用户有较充裕的时间学习和适应新的软件系统。
但是渐增式模型存在如下一些不足:
在把每个新增的构件或功能集成到现有的软件系统中时,必须不破坏该软件系统。
在设计软件系统的体系结构时,要充分考虑其开放性,加入新构件的过程必须简单和方便。例如,在使用渐增式开发模型开发字处理系统时,首先可实现基本的文件处理、编辑和文档生成功能,然后再实现拼写与语法检查功能,最后完成高级的页面排版功能等。

2.2.4 螺旋式模型

在制定软件开发计划时,软件开发人员要准确回答出诸如软件的需求是什么、需要投入多少资源(人力,经费)以及如何安排开发进度等一系列问题是十分不容易的,但他们又回避不了这些问题,于是只能凭经验和以往的数据进行估算,这便带来一定的风险。实践表明,项目的规模越大,问题越复杂,资源、进度、成本等因素的不确定性越大,承担项目所冒的风险也就越大。软件风险普遍存在于任何软件开发项目,对不同的项目其差别只是风险有大有小而已。因此,在软件的开发过程中应该考虑风险问题。螺旋式模型的基本思想是:将瀑布式模型与快速原型模型结合到一起,加上风险分析。理解这种模型的一个简便方法是把它看作在每个阶段之前都增加风险分析。
螺旋式模型的开发过程为依螺旋方式旋转,其4个方面的活动分布在简称为坐标系的4个象限上,这些活动如图24所示。
《软件需求工程(第2版)》一2.2 软件开发过程模型_第4张图片

完整的螺旋式模型如图25所示。图中带箭头的点划线的长度代表当前累计的开发费用,螺旋线的角度值代表开发进度。螺旋线每个周期对应于一个开发过程。

《软件需求工程(第2版)》一2.2 软件开发过程模型_第5张图片

螺旋式模型的特点如下:
适用于软件开发机构内部开发大规模软件项目。
对于可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标。
减少过多测试或测试不足所带来的风险。
螺旋式模型存在的问题是要求软件开发人员具有丰富的风险评估经验和专门知识,这往往是大部分软件开发人员所不具备的。

2.2.5 面向对象的开发模型

近年来,面向对象作为软件开发的一种方法已经广泛地应用于许多应用领域。所谓面向对象就是应用对象、类、继承、封装、消息、对象或类之间的关系等面向对象的概念,对问题进行分析和求解的软件开发技术,或者说,是以对象(类)为数据中心、对象之间的动态行为模式作为运行机制的一种问题求解方法。
面向对象的开发模型依据瀑布式模型可表示为如图26所示。

image

其中,面向对象分析的任务是构造可理解的现实世界的问题分析模型,如对象模型、动态模型和功能模型。面向对象设计的任务是确定对象的内部细节,包括定义对象的界面、数据结构、算法和操作等。面向对象实现和测试的任务是用面向对象的程序设计语言和工具实现类和对象,以及它们之间的静态和动态关系,其中包括面向对象程序设计和组装测试等。
面向对象开发模型的特点是:
虽然各个阶段像瀑布式模型一样顺序排列,但在实际开发中,这些阶段之间呈现一种过程交替、工作循环和信息反馈的复杂关系。有一部分分析工作必须在设计之前进行,另外一些分析工作则需与其他部分的设计和实现工作并行地进行,因而呈现出非线性的工作方式。
软件系统的表达形式在整个开发模型中都是相同的,即面向对象方法中把类及其结构作为系统的表达单元,无论哪一个阶段都以渐增的方式不断地进化或细化这些表达单元。例如,在分析阶段“类及结构”反映的是问题空间中实体的抽象关系,而在设计阶段它反映的是求解空间中技术实现方案,实现阶段反映的是计算机的数据结构及其控制逻辑。
开发模型支持软件的重用。这主要是面向对象的开发过程中采用了概念封装和实现的隐藏技术等。

你可能感兴趣的:(《软件需求工程(第2版)》一2.2 软件开发过程模型)