4. 分配和跟踪任务
有一点在任何项目中都是重要的,即连续的分析来源于正在进行的活动和进化的产品的客观数据。在 RUP 中,定期的项目状态评估提供了讲述、交流和解决管理问题、技术问题以及项目风险的机制。团队一旦发现了这些障碍物(篱笆),他们把所有这些问题都指定一个负责人,并指定解决日期。进度应该定期跟踪,如有必要,更新应该被发布。

这些项目“快照”突出了需要引起管理注意的问题。随着时间的变化/虽然周期可能会变化,定期的评估使经理能捕获项目的历史,并且消除任何限制进度的障碍或瓶颈。

5. 检查商业理由
商业理由从商业的角度提供了必要的信息,以决定一个项目是否值得投资。商业理由还可以帮助开发一个实现项目前景所需的经济计划。它提供了进行项目的理由,并建立经济约束。当项目继续时,分析人员用商业理由来正确的估算投资回报率(ROI,即 return on investment)。

商业理由应该给项目创建一个简短但是引人注目的理由,而不是深入研究问题的细节,以使所有项目成员容易理解和记住它。在关键里程碑处,经理应该回顾商业理由,计算实际的花费、预计的回报,决定项目是否继续进行。

6. 设计组件构架
在 RUP 中,软件系统的构架是指一个系统关键部件的组织或结构,部件之间通过接口交互,而部件是由一些更小的部件和接口组成的。即主要的部分是什么?他们又是怎样结合在一起的?

RUP 提供了一种设计、开发、验证构架的很系统的方法。在分析和设计流程中包括以下步骤:定义候选构架、精化构架、分析行为(用例分析)、设计组件。

要陈述和讨论软件构架,你必须先创建一个构架表示方式,以便描述构架的重要方面。在 RUP 中,构架表示由软件构架文档捕获,它给构架提供了多个视图。每个视图都描述了某一组涉众所关心的正在进行的系统的某个方面。涉众有终用户、设计人员、经理、系统工程师、系统管理员,等等。这个文档使系统构架师和其他项目组成员能与构架相关的重大决策进行有效的交流。

7. 对产品进行增量式的构建和测试
在 RUP 中实现和测试流程的要点是在整个项目生命周期中增量的编码、构建、测试系统组件,在先启之后每个迭代结束时生成可执行版本。在精化阶段后期,已经有了一个可用于评估的构架原型;如有必要,它可以包括一个用户界面原型。然后,在构建阶段的每次迭代中,组件不断的被集成到可执行、经过测试的版本中,不断地向终产品进化。动态及时的配置管理和复审活动也是这个基本过程元素的关键。

8. 验证和评价结果
顾名思义,RUP 的迭代评估捕获了迭代的结果。评估决定了迭代满足评价标准的程度,还包括学到的教训和实施的过程改进。

根据项目的规模和风险以及迭代的特点,评估可以是对演示及其结果的一条简单的纪录,也可能是一个完整的、正式的测试复审记录。

这儿的关键是既关注过程问题又关注产品问题。越早发现问题,越没有问题。

9. 管理和控制变化
RUP 的配置和变更管理流程的要点是当变化发生时管理和控制项目的规模,并且贯穿整个生命周期。其目的是考虑所有的涉众需求,尽可能的满足,同时仍能及时的交付合格的产品。

用户拿到产品的第一个原型后(往往在这之前会要求变更),他们会要求变更。重要的是,变更的提出和管理过程始终保持一致。

在 RUP 中,变更请求通常用于记录和跟踪缺陷和增强功能的要求,或者对产品提出的任何其他类型的变更请求。变更请求提供了相应的手段来评估一个变更的潜在影响,同时记录这些变更所作出的决策。他们也帮助确保所有的项目组成员都能理解变更的潜在影响。

10. 提供用户支持
在RUP中,部署流程的要点是包装和交付产品,同时交付有助于终用户学习、使用和维护产品的任何必要的材料。

项目组至少要给用户提供一个用户指南(也许是通过联机帮助的方式提供),可能还有一个安装指南和版本发布说明。

根据产品的复杂度,用户也许还需要相应的培训材料。后,通过一个材料清单(BOM 表,即 Bill of Materials)清楚地记录应该和产品一起交付哪些材料。

关于需求
有人看了我的要素清单后,可能会非常不同意我的选择。例如,他会问,需求在哪儿呢?他们不重要吗?我会告诉他我为什么没有把它们包括进来。有时,我会问一个项目组(特别是内部项目的项目组):“你们的需求是什么?”,而得到的回答却是:“我们的确没有什么需求。”

刚开始我对此非常惊讶(我有军方的宇航开发背景)。他们怎么会没有需求呢?当我进一步询问时,我发现,对他们来说,需求意味着一套外部提出的强制性的陈述,要求他们必须怎么样,否则项目验收不能通过。但是他们的确没有得到这样的陈述。尤其是当项目组陷入了边研究边开发的境地时,产品需求从头到尾都在演化。

因此,我接着问他们另外一个问题:“好的,那么你们的产品的前景是什么呢?”。这时他们的眼睛亮了起来。然后,我们非常顺利的第一个要素(“开发一个前景”)中列出的问题进行了沟通,需求也自然而然的流动着

也许只有对于按照有明确需求的合同工作的项目组,在要素列表中加入“满足需求”才是有用的。请记住,我的清单仅仅意味着进行进一步讨论的一个起点。

总结:十大要素的应用
那么,发现了 RUP 的十大要素之后,怎样才能让它给我的职业生涯带来根本的变化呢?这儿有一些建议,能帮助我们对付各种规模的项目。

对于非常小的项目
首先,如果谁来问我,在一个非常小的、没有经验的项目组(才学了 RUP )中,如何使用RUP和Rational开发工具来构造一个简单的产品,我会与他分享十大要素列表,以使项目组不被 RUP 的细节和 Rational Suites 的功能压垮。

实际上,即使没有任何自动化工具也可以实施十大要素。管理一个小项目,一个项目笔记本,已经是一个非常好的起点,可以把它分成十个部分,每一部分专用于十大要素中的一个要素。(我还发现及时贴对于小项目变更请求的管理和跟踪以及确定变更的优先级非常有用。)

对于增长的项目
当然,当一个项目的规模和复杂度增长时,以上这些应用十大要素的简单方法很快变得不可操作,而对自动化工具的需求变得比较明显了。然而,我还是愿意鼓励项目的刚开始时应用十大要素和RUP的“佳实践”,需要时再逐步增加支持工具,而不是一下子尝试使用全套 Rational Suites 。

对于成熟的项目团队
对成熟的项目团队而言,可能已经在采用某种软件过程和使用 CASE 工具,十大要素可以提供一种快速评估方法,用来评估关键过程元素的平衡性,标识他们并确定改进的优先级。

对于所有的项目
当然,各个项目都不太一样,有些项目似乎并不真正需要所有的要素。在这些情况下,重要的是考虑:如果你的团队忽视某个要素后会发生什么问题。举例如下:

没有前景?你会迷失方向,走很多弯路,把力气浪费在毫无结果的努力上。
没有计划?你将无法跟踪进度。
没有风险列表?你的项目会陷入“专注于错误的问题上”的危险里面,可能一下子被一个没有检测的地雷击倒,并为此付出五个月的代价。
没有问题列表?没有定期的问题分析和解决,小问题会演变成大问题。
没有商业理由?你在冒浪费时间和金钱的风险。项目终要么超支,要么被取消。
没有构架?在出现交流、同步和数据存取问题时,你可能无法处理。你也可能在伸缩性和性能上有问题。
没有产品(原型)?你将不能有效的测试,并且会失去客户的信任。
没有评估?你将没有办法掌握实际情况与项目目标、预算和后期限之间的距离。
没有变更请求?你将无法估计变更的潜在影响,无法互相冲突的需求确定优先级,无法在实施变更时通知整个项目组。
没有用户支持?用户将不能有效的使用产品,技术支持人员也会淹没在大量支持请求中。

现在你知道了,不懂得十大要素是一件非常冒险的事情。我鼓励你把它们作为项目组的一个起点。决定哪些是你们想要的,哪些是不要的,哪些是要修改的。然后,再决定还有哪些其他因素是你们项目(无论项目大小)成功(保证项目组及时的、不超预算的交付产品,并且真正满足涉众的真正需求)的关键因素。