根据Rational(
Rational Rose
和
统一建模语言
的开发者)的说法,好像一个在线的指导者,它可以为所有方面和层次的程序开发提供指导方针,模版以及事例支持。RUP和类似的产品--例如面向对象的
软件过程
(OOSP),以及OPEN Process都是理解性的
软件工程
工具--把开发中
面向过程
的方面(例如定义的阶段,技术和实践)和其他开发的组件(例如文档,模型,手册以及代码等等)整合在一个统一的框架内。
六大经验
1、迭代式开发
在
软件开发
的早期阶段就想完全、准确的捕获用户的
需求
几乎是不可能的。实际上,我们经常遇到的问题是
需求
在整个
软件开发
工程中经常会改变。迭代式开发允许在每次迭代过程中
需求
可能有变化,通过不断细化来加深对问题的理解。迭代式开发不仅可以降低项目的风险,而且每个迭代过程都可以执行版本结束,可以鼓舞开发人员。
2、管理需求
确定系统的
需求
是一个连续的过程,开发人员在开发系统之前不可能完全详细的说明一个系统的真正需求。RUP描述了如何提取、组织系统的功能和约束条件并将其文档化,
用例
和
脚本
的使用已被证明是捕获功能性
需求
的有效方法。
3、体系结构
组件使重用成为可能,系统可以由组件组成。基于独立的、可替换的、模块化组件的体系结构有助于降低管理复杂性,提高重用率。RUP描述了如何设计一个有弹性的、能适应变化的、易于理解的、有助于重用的
软件体系结构
。
4、可视化建模
RUP往往和UML联系在一起,对
软件系统
建立可视化模型帮助人们提供管理软件复杂性的能力。RUP告诉我们如何可视化的对
软件系统
建模,获取有关
体系结构
于组件的结构和行为信息。
5、验证软件质量
在RUP中
软件
质量评估不再是事后进行或单独小组进行的分离活动,而是内建于过程中的所有活动,这样可以及早发现软件中的缺陷。
6、控制软件变更
迭代式开发
中如果没有严格的控制和协调,整个
软件开发
过程很快就陷入混乱之中,RUP描述了如何控制、跟踪、监控、修改以确保成功的迭代开发。RUP通过
软件开发
过程中的制品,隔离来自其他工作空间的变更,以此为每个开发人员建立安全的工作空间。
二维开发模型
RUP
软件开发
生命
周期
是一个二维的
软件开发模型
。横轴通过时间组织,是过程展开的生命
周期
特征,体现开发过程的动态结构,用来描述它的术语主要包括周期(Cycle)、阶段(Phase)、
迭代
(Iteration)和
里程碑
(Milestone);纵轴以内容来组织为自然的逻辑活动,体现开发过程的静态结构,用来描述它的术语主要包括活动(Activity)、产物(Artifact)、工作者(Worker)和
工作流
(
Workflow
)。如图1:
RUP核心概念
RUP中定义了一些核心概念,如下图:
角色:描述某个人或者一个小组的行为与职责。RUP预先定义了很多角色。
活动:是一个有明确目的的独立工作单元。
工件:是活动生成、创建或修改的一段信息。
RUP裁剪
RUP是一个通用的过程模板,包含了很多开发指南、制品、开发过程所涉及到的角色说明,由于它非常庞大所以对具体的开发机构和项目,用RUP时还要做裁剪,也就是要对RUP进行配置。RUP就像一个元过程,通过对RUP进行裁剪可以得到很多不同的开发过程,这些
软件开发
过程可以看作RUP的具体
实例
。RUP裁剪可以分为以下几步:
1) 确定本项目需要哪些
工作流
。RUP的9个核心
工作流
并不总是需要的,可以取舍。
2) 确定每个
工作流
需要哪些制品。
3) 确定4个阶段之间如何演进。确定阶段间演进要以风险控制为原则,决定每个阶段要哪些
工作流
,每个工作流执行到什么程度,制品有哪些,每个制品完成到什么程度。
4) 确定每个阶段内的迭代计划。规划RUP的4个阶段中每次
迭代
开发的内容。
5) 规划
工作流
内部结构。
工作流
涉及角色、活动及制品,他的复杂程度与项目规模即角色多少有关。最后规划
工作流
的内部结构,通常用
活动图
的形式给出。
开发过程
RUP中的
软件生命周期
在时间上被分解为四个顺序的阶段,分别是:初始阶段(Inception)、细化阶段(Elaboration)、构造阶段(Construction)和交付阶段(Transition)。每个阶段结束于一个主要的
里程碑
(Major Milestones);每个阶段本质上是两个里程碑之间的时间跨度。在每个阶段的结尾执行一次评估以确定这个阶段的目标是否已经满足。如果评估结果令人满意的话,可以允许项目进入下一个阶段。
1. 初始阶段
初始阶段的目标是为系统建立商业案例并确定项目的边界。为了达到该目的必须识别所有与系统交互的外部实体,在较高层次上定义交互的特性。本阶段具有非常重要的意义,在这个阶段中所关注的是整个项目进行中的业务和
需求
方面的主要风险。对于建立在原有系统基础上的开发项目来讲,初始阶段可能很短。初始阶段结束时是第一个重要的
里程碑
:生命
周期
目标(Lifecycle Objective)
里程碑
。生命
周期
目标
里程碑
评价项目基本的生存能力。
2. 细化阶段
细化阶段的目标是分析问题领域,建立健全的
体系结构
基础,编制
项目计划
,淘汰项目中最高风险的元素。为了达到该目的,必须在理解整个系统的基础上,对
体系结构
作出决策,包括其范围、主要功能和诸如性能等非功能
需求
。同时为项目建立支持环境,包括创建开发案例,创建模板、准则并准备工具。细化阶段结束时第二个重要的里程碑:生命
周期
结构(Lifecycle Architecture)里程碑。生命
周期
结构
里程碑
为系统的结构建立了管理基准并使项目小组能够在构建阶段中进行衡量。此刻,要检验详细的系统目标和范围、结构的选择以及主要风险的解决方案。
3. 构造阶段
在构建阶段,所有剩余的
构件
和
应用程序
功能被开发并集成为产品,所有的功能被详细测试。从某种意义上说,构建阶段是一个制造过程,其重点放在管理资源及控制运作以优化成本、进度和质量。构建阶段结束时是第三个重要的
里程碑
:初始功能(Initial Operational)里程碑。初始功能
里程碑
决定了产品是否可以在
测试环境
中进行部署。此刻,要确定
软件
、环境、用户是否可以开始系统的运作。此时的产品版本也常被称为“beta”版。
4. 交付阶段
交付阶段的重点是确保
软件
对最终用户是可用的。交付阶段可以跨越几次迭代,包括为发布做准备的产品测试,基于用户反馈的少量的调整。在生命
周期
的这一点上,用户反馈应主要集中在产品调整,设置、安装和可用性问题,所有主要的结构问题应该已经在
项目生命周期
的早期阶段解决了。在交付阶段的终点是第四个
里程碑
:产品发布(Product Release)里程碑。此时,要确定目标是否实现,是否应该开始另一个开发
周期
。在一些情况下这个
里程碑
可能与下一个
周期
的初始阶段的结束重合。
核心工作流
RUP中有9个核心工作流,分为6个核心过程工作流(Core Process Workflows)和3个核心支持工作流(Core Supporting Workflows)。尽管6个核心过程工作流可能使人想起传统
瀑布模型
中的几个阶段,但应注意迭代过程中的阶段是完全不同的,这些工作流在整个生命
周期
中一次又一次被访问。9个核心工作流在项目中轮流被使用,在每一次迭代中以不同的重点和强度重复。
1. 商业建模
商业建模(Business Modeling)
工作流
描述了如何为新的目标组织开发一个构想,并基于这个构想在商业
用例模型
和商业对象模型中定义组织的过程,角色和责任。
2. 需求
需求
(Requirement)
工作流
的目标是描述系统应该做什么,并使开发人员和用户就这一描述达成共识。为了达到该目标,要对需要的功能和约束进行提取、组织、文档化;最重要的是理解系统所解决问题的定义和范围。
3. 分析和设计
分析和设计(Analysis & Design)
工作流
将
需求
转化成未来系统的设计,为系统开发一个健壮的结构并调整设计使其与实现环境相匹配,优化其性能。分析设计的结果是一个设计模型和一个可选的分析模型。设计模型是
源代码
的抽象,由设计类和一些描述组成。设计类被组织成具有良好接口的设计包(Package)和设计子系统(Subsystem),而描述则体现了类的对象如何
协同工作
实现
用例
的功能。设计活动以
体系结构设计
为中心,体系结构由若干结构视图来表达,结构视图是整个设计的抽象和简化,该视图中省略了一些细节,使重要的特点体现得更加清晰。体系结构不仅仅是良好设计模型的承载媒介,而且在系统的开发中能提高被创建模型的质量。
4. 实现
实现(Implementation)
工作流
的目的包括以层次化的子系统形式定义代码的组织结构;以组件的形式(
源文件
、
二进制文件
、
可执行文件
)实现
类和对象
;将开发出的组件作为单元进行测试以及集成由单个开发者(或小组)所产生的结果,使其成为可执行的系统。
5. 测试
测试(Test)
工作流
要验证对象间的交互作用,验证
软件
中所有组件的正确集成,检验所有的
需求
已被正确的实现,识别并确认缺陷在软件部署之前被提出并处理。RUP提出了迭代的方法,意味着在整个项目中进行测试,从而尽可能早地发现缺陷,从根本上降低了修改缺陷的成本。测试类似于三维模型,分别从可靠性、功能性和系统性能来进行。
6. 部署
部署(Deployment)
工作流
的目的是成功的生成版本并将
软件
分发给最终用户。部署
工作流
描述了那些与确保
软件
产品对最终用户具有可用性相关的活动,包括:软件打包、生成软件本身以外的产品、安装软件、为用户提供帮助。在有些情况下,还可能包括计划和进行beta测试版、移植现有的
软件
和数据以及正式验收。
7. 配置和变更管理
配置和变更管理
工作流
描绘了如何在多个成员组成的项目中控制大量的产物。配置和变更管理
工作流
提供了准则来管理演化系统中的多个变体,跟踪
软件
创建过程中的版本。工作流描述了如何管理并行开发、
分布式开发
、如何自动化创建工程。同时也阐述了对产品修改原因、时间、人员保持审计记录。
8. 项目管理
软件项目管理
(Project Management)平衡各种可能产生冲突的目标,管理风险,克服各种约束并成功交付使用户满意的产品。其目标包括:为项目的管理提供框架,为计划、人员配备、执行和监控项目提供实用的准则,为管理风险提供框架等。
9. 环境
环境(Environment)工作流的目的是向
软件开发
组织提供
软件开发环境
,包括过程和工具。环境
工作流
集中于配置项目过程中所需要的活动,同样也支持开发项目规范的活动,提供了逐步的指导手册并介绍了如何在组织中实现过程。
迭代开发模式
RUP中的每个阶段可以进一步分解为迭代。一个迭代是一个完整的开发循环,产生一个可执行的产品版本,是最终产品的一个子集,它增量式地发展,从一个迭代过程到另一个迭代过程到成为最终的系统。传统上的
项目组织
是顺序通过每个
工作流
,每个工作流只有一次,也就是我们熟悉的瀑布生命
周期
(见图2)。这样做的结果是到实现末期产品完成并开始测试,在分析、设计和实现阶段所遗留的隐藏问题会大量出现,项目可能要停止并开始一个漫长的错误修正
周期
。
一种更灵活,风险更小的方法是多次通过不同的开发
工作流
,这样可以更好的理解
需求
,构造一个健壮的
体系结构
,并最终交付一系列逐步完成的版本。这叫做一个迭代生命
周期
。在
工作流
中的每一次顺序的通过称为一次迭代。
软件生命周期
是迭代的连续,通过它,软件是增量的开发。一次迭代包括了生成一个可执行版本的开发活动,还有使用这个版本所必需的其他辅助成分,如版本描述、
用户文档
等。因此一个开发迭代在某种意义上是在所有
工作流
中的一次完整的经过,这些工作流至少包括:
需求
工作流、分析和设计工作流、实现工作流、测试工作流。其本身就像一个小型的瀑布项目(见图3)。
图3 RUP的
迭代模型
与传统的
瀑布模型
相比较,迭代过程具有以下优点:
降低了在一个增量上的开支风险。如果开发人员重复某个迭代,那么损失只是这一个开发有误的迭代的花费。
降低了产品无法按照既定进度进入市场的风险。通过在开发早期就确定风险,可以尽早来解决而不至于在开发后期匆匆忙忙。
加快了整个开发工作的进度。因为开发人员清楚问题的焦点所在,他们的工作会更有
效率
。
由于用户的
需求
并不能在一开始就作出完全的界定,它们通常是在后续阶段中不断细化的。因此,迭代过程这种模式使适应
需求
的变化会更容易些。