2.5 迭代模型

针对瀑布模型的缺陷,人们提出了迭代模型(Iterative Model)。在多种迭代模型中,要算美国的I. Jacobson,G. Booch和J. Rumbaugh三位软件专家提出的RUP(Rational Unified Process)模型最成功。他们在1995年提出了统一建模语言UML(Unified Modeling Language)的雏型,随后使该语言在Rational Rose开发环境中得到了初步实现,而且在迭代模型的启发下,于1997年又提出了“统一软件开发过程”,即USDP(the United Software Development Process),以后又叫做RUP。RUP试图集中所有的生命周期开发模型的优点,用统一的建模语言UML加以实现。统一软件开发过程RUP模型的原型,如图2-3所示。

图2-3 统一软件开发过程RUP模型

所谓迭代,是指活动的多次重复。从这个意义上讲,原型不断完善,增量不断产生,都是迭代的过程。因此,快速原型法和增量模型都可以看成是局部迭代模型。但这里所讲的迭代模型是RUP推出的一种“逐步求精”的面向对象的软件开发过程模型,被认为是软件界迄今为止最完善、可实现商品化的开发过程模型。

图2-3看起来非常简单,其内涵却非常丰富。它表面上是一个二维图,实质上用一张二维图,表示了一个多维空间模型。从宏观上看,它是一个大的迭代过程:横坐标表示软件产品所处的4个阶段状态:先启、精化、构建、产品化(移交),纵坐标表示软件产品在每个阶段的工作流程。从微观上看,任何一个阶段本身,其内部工作流程也是一个小的迭代过程。

1.模型的本意

在计算方法(或数值分析)课程中,迭代是一种逼近真值的算法。例如,要寻求某个问题的真值,可以设计一种迭代算法,第1 次给定一个初值,这个初值离真值可能很远,误差很大,进行第1次计算,得到第2个值。第2个值,离真值会近一些,但误差还是不小,没关系,再把这个值当新的初值,再计算一次,又产生第3个值。第3个值,离真值更近了,误差更小了……这样循环迭代计算N次下去,直到第N个值与第N+1个值之间的误差足够小,完全满足预先设定的误差范围为止,就用第N+1个值当作真值的近似值。在许多问题中,没有误差的真值可能是求不出来的。这就是迭代模型思想的来源。

为使项目能够顺利地进行,一种较灵活(并且风险更小)的方法是:多次执行各个开发工作流程,从而更好地理解需求,设计出更为强壮的软件构架,逐步提高开发组织能力,最终交付一系列逐步完善的实施成果,这就是迭代生命周期模型。每次按顺序完成一系列工作流程就叫做一次迭代,每次迭代,均以次要里程碑(Minor Milestone)结束,按照特定的迭代成功标准,对迭代的结果进行评估。每个阶段都可以进一步细分为迭代。迭代是产生可执行的产品发布(内部的或外部的)的完整开发循环,所发布的产品是开发过程最终产品的子集,它将通过一次又一次的迭代,实现递增成长,最后形成最终的软件系统或产品。

2.模型的特点

迭代模型的特点是:迭代或迭代循环驱动,每一次迭代或迭代循环,均要走完初始(先启)、精化、构建、产品化(移交)这4个阶段。RUP的主要特征如下:

(1)采用迭代的、增量式的开发过程。

(2)采用UML语言描述软件开发过程。

(3)有功能强大的软件工具Rational Rose支撑。

面向对象的方法,尤其是面向对象的CASE工具Rational Rose,适用于迭代模型。或者说,迭代模型适用面向对象的Rational Rose工具。

3.模型的选取条件

根据软件开发的实际情况,建议以下类型的项目,可以考虑使用迭代生命周期模型。

(1)生命周期模型是以迭代为主要特征的。项目组的管理人员和核心成员,应对迭代的开发方式比较熟悉,并具有丰富的软件工程知识和实施经验。

(2)项目组的管理人员和核心成员应对软件工程的核心过程:系统建模、需求分析、系统设计、系统实现、项目管理、配置管理、测试等比较熟悉。

(3)面向对象技术比较适合采用迭代方式进行,采用面向对象技术(如OOA,OOD等)的项目组,建议使用迭代生命周期模型。

(4)该生命周期模型是以软件构架为中心的开发方式,项目组的核心设计人员,应具备一定程度的软件架构知识,并熟练掌握软件架构设计技能。

(5)项目组全体成员应熟悉UML,并能利用建模工具(如Rational Rose等)进行分析、策划、设计、测试等。

(6)该生命周期模型是以风险管理为驱动的开发方式,项目组的管理人员应具备风险管理的知识和技能。

(7)拥有实施软件产品开发、组装的软件组织。

迭代模型要求的条件是最苛刻的,初学者不宜随便使用。该模型一般用在中小型应用软件的开发上,系统软件的开发很少采用迭代模型。

4.模型的4个阶段

迭代生命周期模型分为以下4个阶段:

(1)初始阶段。本阶段主要工作是确定系统的业务用例(Use Case,许多书上翻译为用况)和定义项目的范围。为此,需要标识系统要交互的外部实体,定义高层次的交互规律,定义所有的用例并对个别重要的用例进行描述和实现。业务用例包括成功的评估、风险确认、资源需求和以阶段里程碑表示的阶段计划。

(2)精化阶段。本阶段主要工作是分析问题域,细化产品定义,定义系统的构架并建立基线,为构建阶段的设计和实施提供一个稳定的基础。为验证构架,可能要实现系统的原型,执行重要的用况。

(3)构建阶段。本阶段主要工作是反复地开发,以完善产品,达到用户的要求。这包括了用例的描述、完成设计、完成实现和对软件进行测试等工作。

(4)产品化(移交)阶段。本阶段主要工作是将产品交付给用户,包括安装、培训、交付、维护等工作。

5.模型的9个核心流程

迭代生命周期模型包含9 个核心流程(需要指出,采用迭代模型,事先要有一个初始业务模型,以便进行迭代。这就是为什么将“业务建模”作为9个核心流程之首的道理):

(1)业务建模。目的在于,了解目标组织(将要在其中部署系统的组织)的结构及机制;了解目标组织中当前存在的问题,并确定改进的可能性;确保客户、最终用户和开发人员就目标组织达成共识;导出支持目标组织所需的系统需求。通俗地讲,业务建模就是用户业务流程的重新规划与合理改进,即业务流程的优化,目的是使开发出来的系统能反映最优化的业务流程。

(2)需求获取。目的在于,与客户在系统的工作内容方面达成并保持一致;使系统开发人员能够更清楚地了解系统需求;定义系统边界;为计划迭代的内容提供基础;为估算开发系统所需成本和时间提供基础;定义系统的用户界面,重点是用户的需要和目标。

(3)分析设计。目的在于,将需求转换为未来系统的设计;逐步开发强壮的系统构架;使设计适合实施环境,为提高性能而进行设计。

(4)实施。目的在于,对照实施子系统的分层结构定义代码结构;以构件(源文件、二进制文件、可执行文件以及其他文件等)方式实施类和对象;对已开发的构件按单元进行测试;将各实施成员(或团队)完成的结果集成到可执行系统中。

(5)测试。目的在于,核实对象之间的交互;核实软件的所有构件是否正确集成;核实所有需求是否已经正确实施;确定缺陷并确保在部署软件之前将缺陷解决。

(6)部署。目的在于,将构件部署到网络的各个节点上,使最终用户可以使用该软件产品。

(7)配置与变更管理,目的在于,始终保持工作产品的完整性和一致性。

(8)项目管理。目的在于,为软件密集型项目的管理提供框架;为项目计划、人员配备、执行和监测提供实用准则;为风险管理提供框架。

(9)环境。目的在于,为软件开发组织提供软件开发环境(流程和工具),该环境将支持开发团队。

6.模型的优点

迭代模型的优点是:在开发的早期或中期,用户需求可以变化;在迭代之初,不要求有一个相近的产品原型;模型的适用范围很广,几乎适用于所有项目的开发。

7.模型的缺点

迭代模型的缺点是:传统的组织方法是按顺序(一次且仅一次)完成每个工作流程,即瀑布式生命周期。迭代模型采取循环工作方式,每次循环均使工作产品更靠近目标产品,这要求项目组成员具有很高的水平并掌握先进的开发工具。反之,存在较大的技术和技能风险。

对于统一软件开发过程RUP的提出,也存在不同的声音。理由是:方法与模型越通用,实用性可能越差。因此,反对者甚至提出:开发模型的最佳选择,是为用户定制开发过程。这就是矛盾的普遍性与特殊性的关系,即共性与个性的关系。不管怎样,UML和RUP的提出,确实是软件工程发展史上一个新的里程碑。