UML软件工程组织

 

 

理解 RUP 角色
 

2008-03-20 作者:Anthony Crain 来源: IBM

 
本文内容包括:
引自Rational Edge:本文提供了一个简单的方法以概念化并回顾多个在IBM Rational Unified Process, 或称作RUP中定义的角色。另外,它还对如何使用Myers-Briggs Type Indicator将角色分配匹配至人物类型提出了建议。

 你是否认为 IBM Rational Unified Process, 或称作 RUP, 定义了超出你可以记忆的角色数量?阅读下去!你将会发现一个可以使记忆这些任务变为一件很容易事情的隐藏模式。你还将发现使基于组员个人类型的任务分配获得成功的指导。

起初,努力使你的思维围绕于RUP中大量角色周围,看起来会是令人非常畏惧的。但是,存在一种记住 RUP 角色模式,这个模式是从迭代式开发中降低最重要的风险之一的方法中衍生出来的:在任意指定迭代中要清楚需要着重于什么。

包含于RUP中的软件开发迭代式解决方案促进从业者采用两种观点。首先,它促进团队理解整体解决方案,然后在每一次迭代中基于上一次迭代重新评估并调整整体解决方案。第二,在每次迭代中,它促进团队主要着重于解决方案的一个方面 ―― 每次后继迭代构建解决方案的一个方面,直至整体完成。

对应于这两个方面的两种视角通常被称为广度视角与深度视角。在一个迭代式项目中,你首先集中于广度视角,然后精选一个方面以集中于深度。分离的广度与深度,正如我们在迭代式开发中所做的那样,使得一个项目可以更灵活地被更改。不仅仅是广度视角可以更容易的建立,而且当更改来临时,我们可以微笑,耸肩,并且很轻易的调整广度视角。

相反,一个纯粹的瀑布式解决方案将同时集中于深度与广度视角,并且从不回退。但是,如果你想试图一次完成所有的广度与深度工作,这个工作将需要更多的时间来完成,它将更冗长并且以后难于更改,它也许将在很多地方被错误的导入。如果项目团队在工作后期被强制调整项目广度,那么许多深度工作将被废弃。

换句话说,对项目管理规程,一个瀑布式项目领导者会建立一个一或二年的,包括全部时间范围的计划,然后详述整个计划中所有的任务。这种计划当改变不可避免或需要对其做出调整时将很快的崩溃。

相反的,一个迭代式项目领导者将广度从深度中分离开,为广度视角建立一个粗颗粒度的计划以显示各个阶段,列出业务用例,并显示出当项目成熟时如何对评估进行更改。深度视角是对每个单一迭代更细节的计划,也许是在整个持续时间中的六个星期。这个计划将比试图猜测在一或二个星期内的所有项目细节的计划更准确且不容易导致错误。

这个迭代的广度及深度解决方案对所有九个RUP规程都有效,而不仅仅对项目管理而言。

RUP中的广度及深度角色

RUP角色定义与分离广度和深度的概念相一致。进行广度工作与进行深度工作的成员类型差异很大。广度工作速度快,不精确并且有弹性。深度工作任务需要更多的时间,关注于细节,并且需要能够得到更好的质量。

RUP九个规程中的每一个都有一个集中于此规程广度的角色,以及另一个不同的集中于此规程深度的角色。一旦你理解了基本原理,记住这些角色将变得非常容易。表1列出了每个RUP规程及其所对应的广度及深度角色,并粗略解释了角色的功能。我仅仅依照广度/深度模式就可以从记忆中构建几乎整个表格。

表1:RUP规程中的广度及深度任务

规程 广度角色 深度角色
业务建模 业务过程分析师
发掘所有的业务使用用例。
业务设计
细化一套单独的业务使用用例。
需求 系统分析师
发掘所有的需求使用用例。
需求定义
细化一套单独的需求使用用例。
分析和设计 软件架构师
决定整个解决方案的技术
设计师
为一套单独的使用用例进行分析和设计。
执行 集成人员
拥有哪些类会集成到一起的构建计划 。
执行人员
编制单独的一套类或一套单独的类操作。
测试 测试经理
保证完成测试和测试管理。

测试分析师
基于这个测试目的选择测试什么。

测试设计师
决定什么测试使用自动测试,对比手动测试,并且创建自动测试。
测试设计师
为集成自动执行测试设计的一部分。

测试员
运行一个特定的测试。
开发 开发经理
检查所有的开发单元。
技术文档作者,课程开发者,图形绘制者。
构建详细的资源保证成功的开发。
项目管理 项目经理
创建业务用例,以及简单的计划;制定做或不做的决定。
项目经理
计划,跟踪,以及管理单一迭代的风险。(注意这个规程只有一个角色。分配这个深度视觉到项目的沟通者,能够减轻项目经理的痛苦。。)
环境 过程工程师
掌握项目的过程。
工具专家
为使用特定工具创建方针。
配置变更管理
 
配置经理
设置配置环境,方针,和计划。

变更控制经理
建立一个变更控制过程。
配置经理
创建一个开发单元,报告配置状态,执行审计,等等。

变更控制经理
检查并管理变更请求

(此外,注意在这个规程里分配到相同人的广度和宽度角色;辅助或联系在这个深度角色里的经理将会是有帮助的。)

使用MBTI个性类型进行RUP角色分配

我的同事,Ruth Nantais,是一个杰出的项目经理,他将Myers-Briggs Type Indicator (MBTI)介绍给我。现在我鼓励我的客户和学生使用这个工具以发现他们自己的个性类型,并且应用这种知识去决定他们是否适合广度工作还是深度工作。他们也可以使用这个工具去理解如果他们被分配一个并不适合他们类型的角色,等待他们的将有什么问题。

MBTI的第二个方面对人们是直觉的(N)或是感觉的(S)提出建议。直觉类型的是大局观思考者,他们可以使用他们的“内部感观”迅速做出决定。这些人也许更适合进行广度工作。感觉类型,相反的,趋向于使用他们五种感观去收集能够做出决定判断的信息。他们的工作趋向于更精确,更适合于深度工作。

MBTI的第四个方面对人们是 判断者 (J) 还是 感知者 (P)提出建议。判断者趋向于通过进度表更好的工作,并且对闭合空间有非常强的需要。后一种对深度工作来说极为重要,它必须足够完备以为后续工作提供基础服务。感知者,相反的,喜欢更自由的区域,趋向于更有创造力,不需要同样的闭合区间。这些特征更适合于广度工作,它需要对大局更快浏览的能力,以及对其进行通信的能力(典型的使用UML),但是需要承认的是,这种描述并不完备,并且可能随着每一次迭代中深度工作的完成而需要进行更改。判断者趋向于建立更完备的,高质量的工作,而感知者许趋向于更快速地工作,并且在需求要变更时能够更有弹性地进行更改。

因此,基于上述观察,我们可以做出结论, 理想的广度工作者将是NP,同时理想的深度工作者将是SJ。一个NP将可以更快速而有效的建立广度视图,并且当有需要时可以更改这个视图。一个SJ将可以确保驱动后续工作的深度视图更为完备与精确。

现在,这并不意味着落入这些MBTI种类范畴内的人将被阻止从事特定的角色。如果他们具有强烈的从事这些任务的愿望,他们将能克服他们也许要面对的挑战。作为一个团队成员,意识到你的MBTI轮廓可以帮助你聚集能量,并且当你被分配至一个相反的角色时可以赔偿个性趋向。

但是,当你的团队分配人们至RUP角色时,意识到如果你分配NP去完成深度任务,他们也许会有不着重于细节的趋势。他们需要比SJ更努力的集中精力以得到同样的质量等级,而另一些也许会在他们正确完成之前数次拒绝他们的工作。

在不重要的方面,如果你分配SJ至广度工作,所带来的风险是他们将会花费更多的时间以完成任务,主要是因为他们难以保持抽象在一个足够高的级别上。当他们努力使他们的工作更“完备”时,他们也许会持续至错过截至日期,并且在他们的广度视图中包含了过多的细节内容,使其难以更改。

在最近几年中,为了使 UML(统一建模语言) 适合软件过程模型 (SPM) 的特定需求,研究人员已经做出了一个重要的研究成果。结果,已经形成了一些 UML Profiles 和像 SPEM 或 RUP 的元模型。在 IBM Rational Process Workbench (见 资源)中定义的过程建模语言(PML),仅使用完整的建模语言的一个小子集,如UML定义。RPW 在一个概念的框架 (RUP 元模型) 里执行过程建模;这个框架利用 UML(stereotypes)提供的轻量级扩展机制帮助进行编码,以定义RUP Profile。

作为一个Profile 的 RUP
: 作为一个Profile 的 RUP

值得一提的是,像SPEM 元模型一样,RUP 也被定义为 UML 元模型的一个外在扩展。然而,当重量级扩展在元模型层次确保适当的语言定义时,它转换成UML预定义包以确保和UML一致。 显示RUP预定义包中的描述性原型定义的一个例子。注意关联的特殊类型,它完整提供了被原型化类的参考及元类(metaclasses )的其它参考,因此 UML 元类(metaclasses) 可以适应特定的域,如 SPM。

RUP描述性原型的一个片段
: RUP描述性原型的一个片段

基于模型的过程工程

过程建模的目的是定义一个过程模型,以使它能为创建过程配置提供蓝图。用过程元件描述过程,而我们使用类的 UML 元件表示角色,以及在特定的过程中涉及到的产物;并且我们使用操作来表示它们的活动及协作。 举例说明在RPW 中用于详细说明过程模型概念的过程组件语义模型。

过程组件语义模型
: 过程组件语义模型

过程模型是所有过程元件的容器。每一个基本过程或者插件,正好对应一个过程模型。基本过程采用自我包含的过程模型,就是说不扩展任何其它过程模型,而自己表示一个完全的端对端过程。另一方面, 过程插件作为基础过程或可能的其它插件扩展来建模, 而且它们自己只详细说明了那些不同于它们的基本过程的元件。

一个过程组件由相关的过程元件组成,并且成为配置时的过程可选择单位。一般来说,过程组件中的元件都紧密相关。对于过程组件,要引用其它组件中的元件, 需要在它们之间建立稳定的UML 依赖关系。过程组件可以包含子组件以形成组件系统

过程元件 表示结构和过程定义的行为。它们使用 UML 类及操作定义,采用原型以保留它们的特定含义。除此之外,在元件间的多样化联系采用关联定义,也采用原型来记录特定类别。 说明由RPW验证的过程元件片段,及它们之间如何联系。
RUP元模型片段
: RUP元模型片段

上面的图表乍看起来可能觉得复杂,现在说明如何看懂它: 图的 " things " 是用来建立我们的过程模型的过程元件类型。在一定程度上,这些是过程建模语言的术语。 每个过程元件类型定义它如何建模(操作或分类) 并如何与其它的过程元件类型相关联。举例来说,角色元件作为分类器被建模,它们定义操作以表示它们的行为及步骤。

所举例,RUP 架构被结构化以支持过程组件化。松散的让过程工程师可以通过域和使用特定方针来扩充RUP框架,从而配置他们在给定项目或项目类型中需要的过程集。在 RUP 中,创建这样配置的基础是 RUP 插件技术。RPW 定义了下面二种主要工具,以共同支持在开发过程插件中涉及到的行为。

RUP Modeler,IBM Rational XDE的附加项,允许过程工程师采用UML 标记图形化建模。这一工具认可且强制实行RUP元模型,并支持 SPEM 规约以定义过程建模的概念。

RUP Organizer,一个独立应用程序,为满足过程模型元件的关联过程提供工作空间。RUP Organizer 的关键功能是过程元件的树形表示,称为布局,以及支持拖放定位及该结构的文件关联组织。

过程插件建模

新的过程模型的开发总是从分析行为开始。一般来说,最初分析的输入是那些人们正在使用的过程知识。该知识可以由用例图记录,每个用例表示进程中的行为及这些行为运行时涉及到的操作。依据这种方法,用例成为过程片段的半正式的描述,稍后将会作为过程定义的基础。

中的剪裁规范,为项目和采用RUP组织的PEP基础描述,提供了一个高层次的视图。 它显示在工作流细节(WFDs)之间的数据流依赖关系。然而,并非这里所有的控制流都被严格指定,可能有所差异。例如,过程建模者可能认识到分析结果是不足或矛盾的,并要求过程工程师立刻返回这个工作区。

剪裁规范
: 剪裁规范

我们的案例研究的要求是尝试半正式地定义结构方面的一套原型COTS-based system (CBS)。这里提议的CBS模型基于那些在文献中发现的,描述一组有限的概念。目的是扩展 RUP 并提供一个基于风险的螺旋形框架来适应CBS概念。

显示在插件建模扩展RUP过程中涉及到的最普遍行为的简短概览。当你建立结构化的插件模型时,你或者创建当前 RUP没有覆盖的新元件,或者定义已经存在于RUP过程模型的元件的扩展。

RUP 插件建模中涉及的行为
: RUP 插件建模中涉及的行为

安装插件环境

既然这第一部分主要关注过程结构方面的建模,我们在大多数时间通过练习课程来使用 RUP Modeler 工具。现在, 在你能够开始结构化插件建模之前,你必须确认所有的必需的应用程序都已经安装。先决条件是:

  • IBM Rational Process Workbench (RPW)
  • IBM Rational Unified Process (RUP)
  • IBM Rational XDE

激活 RUP Modeler 附加功能:

  1. 启动 XDE
  2. 选择 Windows > Preferences 菜单选择项
  3. 在列表中找到Rational XDE并选择附加项
  4. Add-in Manager... 按钮
  5. 在软件包下,高亮度显示 Rational XDE ,启用 RUP Modeler 扩展插件,如所示
    使 RUP Modeler 允许扩展插件
    : 使 RUP Modeler 允许扩展插件
  6. 点击OK关闭对话框

现在,你的 RUP Modeler 已经激活了附加功能,让我们创建XDE 项目来容纳插件模型:

  1. 在文件菜单上, 选择 New > Project...
  2. 关于项目类型,选择 Modeling > Basic Modeling Project > Next
  3. 所示, 命名项目 (如 RPW) ,指定项目内容目录指向 rpw 文件夹 (默认是 C:\program file\ rational\rpw)
  4. 点击Finish。
    XDE 导航栏中的项目
    : XDE 导航栏中的项目
  5. XDE 将会创建一个默认模型: XDE Model.mdx 并在模型资源浏览器面板中显示。 右键点击项目入口并选择Close。
  6. 回到导航栏面板,你可以删除XDE Model.mdx 文件。

为你的插件创建一个新的模型文件。我们推荐储存位置是rup 文件夹的平级(同一层次)文件夹:

  1. 在导航视图中,右键点击项目条目 (RPW) 并选择 New > Folder
  2. 命名文件夹为 epic (epic代表Evolutionary Process for Integrating COTS-Based Systems)
  3. 右键点击新的文件夹并选择 New > Model
  4. 从创建新模型向导中, 选择空白模型模板并取名为 epic ,如所示。
    XDE 模型向导
    : XDE 模型向导
  5. 点击Finish( 注意模型资源浏览器视图中的新模型已经打开)。

应用 RUP 预定义包到新的模型。如前面所述,RUP 预定义包是一套机制,使UML元模型生成的元类可以扩展,从而它们能适应SPM 域 , 如 RUP:

  1. 在模型资源浏览器中选择新的(和空的)模型。
  2. 在属性视图中,选择属性 AppliedProfiles并点击更多按钮 [...]
  3. 在出现的对话框中,检查 RUPModeler 预定义包,如 所示。
    属性预定义包
    : 属性预定义包
  4. 点击OK,保存模型。
  5. 在导航栏视图中,在模型资源浏览器中双击RUP 模型 (位于rup >rup.mdx)以打开它。

    你的过程模型和 RUP 过程模型现在都在模型资源浏览器面板中的树形浏览器中列出。这让你定义这两个模型间的依赖关系,例如,你的过程模型中的分类器和RUP过程模型中分类器的继承关系。稍后,我们将会创建这样的UML 依赖关系 。

随着RUP预定义包的应用,现在,我们可以使用由它扩展的类实例来定义插件模型的过程元件:
  1. 在模型资源浏览器视图上、你的新项目中,创建一个顶层的 UML包,命名为epic_plugin epic_plugin
  2. 选择 epic_plugin 包,并通过点击Properties 视图里属性Stereotype的更多 [...] 按钮指派为<<rupProcessModel>> 原型,如 所示。
    Stereotype属性
    : Stereotype属性
  3. 在默认的依据过程模型包创建的图表中,拖曳和释放EPIC过程模型包和RUP过程模型包。然后,定义从插件到 RUP过程模型的UML 依赖关系,如 所示。
    插件过程模型扩展 RUP 过程模型
    : 插件过程模型扩展 RUP 过程模型

结构过程模型

让我们创建一个新的过程组件 (UML包) ,以容纳我们将为CBS实现过程定义的过程元件:

  1. 在模型浏览器面版中,右键点击插件过程模型包并选择 Add UML > Package。命名它为 cbs_implementation
  2. 在属性视图中,分配 <<rupProcessComponent>> stereotype。
  3. 右键点击过程组件包并选择 Add Diagram > Class。命名类图表为 process_elements

创建两个新的产物

  1. 在新的类图表上,创建一个UML 类。 命名它 cbs_selected_products
  2. 在属性视图中,分配它 <<rupArtifactDocument>> stereotype.
  3. 重复前两个部骤定义第二个产物。 命名它为 cbs_integration_mechanisms 并且分配 <<rupArtifactSpecification>> stereotype.

注意这里给出的模型元件名称对于过程用户(开业者)是不可见的。相反的,它实际是在创作者活动中由RUP组织者给出的代表名字,对发布进程确认进行表面处理。

定义一个可靠的角色

  1. 从 process_elements 类图表,创建一个新的 UML 类。命名为 cbs_integrator 并且使用套用它为 <<rupRole>>
  2. 接下来,通过建立从角中到每个产物UML定向关联,使该角色负责两个新产物(cbs_selected_products 和 cbs_integration_mechanisms)。
  3. 在属性视图中,分配 <<rupResponsible>> stereotype 到两个指定好的定向关联。

创建一个行为以产生新的CBS产物

  1. 右键点击新角色,选择 Add UML > Operation 创建行为。 命名它为 evaluateSystemComponents
  2. 在属性视图中,分配 <<rupActivity>> stereotype.

定义行为语境

行为用来定义细致的工作,可以分配到可以为其行为负责的特殊角色。行为的目的通常根据创建或修正产物下定义;声明为从行为上下文的输出参数。为了支持行为,它也可能指定一个产物集作为输入。在我们为新的行为指定输入输出产物之前,先让我们建立对两个RUP 过程组件的可见性,这将检查哪个产物可以用作选择的参数。

  1. 创建一个新的类图表。命名它为 component_dependencies
  2. 拖动 cbs_implementation 包和 RUP 架构和实施包到新的图表上。
  3. 从工具箱视图中选择UML 依赖关系,建立从插件包到两个RUP过程组件的可见性依赖关系,如 所示。
    过程组件可见性
    : 过程组件可见性
  4. 在模型资源浏览器视窗中,右键点击新的行为, 选择 RUP Modeler > Overview 并定义如下输入输出产物: rup_implementation_element and rup_software_architecture_document
  5. 选择来自输入列表 (右边面板的上部) 的 rup_software_architecture_document 元件并点击 Mandatory 按钮(这个按钮切换托管指定,因此再点一次将解除托管指定)
  6. 然后,定义cbs_integration_mechanisms 和 cbs_selected_products 为输出产物,如 所示。
    行为输入和输出
    : 行为输入和输出

    为了配置正确,托管输入产物必须存在于过程配置的结尾。另一方面,可选择的产物 (不明确标志为托管的那些),不能出现,而且过程配置仍被认为是正确的。所有的输出产物隐式地被定义为托管的。而且,候选输出是执行角色有权更新产物。(使用定向关联定义的特权)

  7. 按OK退出行为规范对话框并保存模型。此时,你的acquisition_process 类图表看起来将如 所示。
    结构化的过程模型
    : 结构化的过程模型

创建内容库及布局

  1. 在模型浏览器视图中, 右键点击epic_plugin过程模型包并选择 RUP Modeler > Associate Content Library
  2. 在新插件目录的主目录下建立一个新的目录并命名为 content_library ,如 所示。
关联内容库
: 关联内容库
  1. 右键点击epic_plugin 过程模型包并选择 RUP Modeler > Organize Process Content 以启动 RUP Organizer。
  2. Refresh from Model 按钮来同步模型和生成的插件布局。
  3. 保存布局并关闭/退出 RUP 组织者。

高级建模技术

从 RPW 观点,为了描述在过程建模中涉及的元件,有两个主要的相关概念: 组合关系和类一般化。这一节关注这二个方面;也是静态模型定义的一部分。

组合关系

产物可能是原子的或组合的。组合产物由较小的 (不那么复杂的) 次产物构成。在 RPW 里可以通过组合聚集体建模。 让我们把组合应用到我们的EPIC过程模型中,并使cbs_integration_build_plan 元件有助于 rup_integration_build_plan 产物,以此来表达组合产物:

  1. 创建一个将成为捐助者 (一个占位符号)的类, 命名它 cbs_integration_build_plan 并分配stereotype <<rupArtifactPlan>> 到新类。
  2. 定义从 cbs_integration_build_plan 产物到每一个子产物的UML 组合关系。
  3. 拖曳来自 RUP 实施过程组件的 rup_integration_build_plan 产物并在图表上释放。
  4. 选择来自工具箱视图的 UML 一般化关系并建立从 cbs_integration_build_plan 产物到 RUP 产物的 <<rupContributes>> 一般化关系,如 所示。
    包含产物组合的过程结构
    : 包含产物组合的过程结构

类的一般化

在类之间的另外一个有趣的关系是细分,在 RPW 中能通过继承来模仿。 举例说明你能在 RUP 塑告者里面定义的三种继承关系。

RPW 中支持的一般化
: RPW 中支持的一般化

<<rupExtends>>继承建立了一个从子类到它的超类的关系。结果,当过程配置生成时, 两个元件将在发布的web站点显示出来,并生成从子类到超类的链接。 当你想要的时候,使用一个存在的元件扩展:

  • 增加行为到一个已存在的要求额外个人技能集角色的角色。

使用 <<rupContributes>> 继承意谓着把特性及/或行为加入基本的组件中。多等级捐助被累加到最终接收的类( 继承结构的的根) 。当你想要的时候,使用对存在的组件的贡献:

  • 增加存在的角色的行为。
  • 增加存在的规程的工作流明细。
  • 增加一个阶段到已存在的生命周期。
  • 增加一个存在的工具的指导。
  • 增加子产物到存在的产物。
  • 增加输入/输出产物到存在的行为。

<<rupReplaces>> 继承关系准许你给基本的元件下一个专门化的定义,以替换一般化的元件。当你想要的时候,使用一个存在的元件进行替换:

  • 提供元件的一个不同描写。
  • 经由 <<rupNoop>> stereotype抑制一个存在的行为,工作流明细,或工具指导。

推荐使用 <<rupContributes>> 关系,因为它为附加的建模方法提供了最好的支持。由于 <<rupReplaces>> 的闯入本性和对其它邻接的关系的强制限制,它成为最 “危险”的关系。 下列的规则提供了指导以帮助你决定替换一般化的影响:

  • 替换总是发生在捐助被考虑之前。结果,如果一个捐助接收者 (超类) 被替换, 对它的捐助将被禁止 (取消)。
  • 如果一个捐助者(子类) 被另外一个类替换,替换首先重现, 然后是捐助。如此,应际结果是更换类导致捐助。
  • 多级替换 (例如一个被替换的类替换了另一个类, 依次也替换其它类) 使最后一个子类有效。

这些规则意谓着,尽管特定元件的模型状态图可能在建模过程中被呈现,但只有被上述的限制因素指定的条件存在时,这些数值才是有效的。

现在让我们实施刚刚描述的概念,并使一个已存在的 RUP 角色成为负责CBS产物代替CBS Integrator 。 RUP Integrator 现在将会对两个产物负责,但是由于我们将不直接地修改一个 RUP 元件,我们将不得不再一次使用捐助:

  1. 从RUP 实施过程组件拖曳rup_integrator角色,并在 process_elements 类图表上释放。
  2. 从工具箱视窗中选择UML 一般化并创建从 cbs_integrator 到 rup_integrator 角色的一个 <<rupContributes>> 一般化。 概述我们已经建立的模型和具体表达它们的元件。
    CBS实施结构化过程
    : CBS实施结构化过程

    注意,组合范例也准许我们为顶层角色定义一个同名的行为,有如下作用:它的产物参数,工具指导关联,及工作流明细指定有助于附加活动的结果行为。除此之外,任何的文件关联到捐助行为,如指导方针,概念等等,这有助于接收行为。

规定的工作流明细

  1. 右键点击evaluateSystemComponents, 选择 RUP Modeler > Overview。到工作流明细页。
  2. 选择规范rup_implementation_discipline_impl 和 plan_integration_wfd 工作流明细。
  3. OK 并保存模型。
关联存在的 WFD 的行为
0: 关联存在的 WFD 的行为

位于选择列表的符合条件的工作流明细是那些常驻于执行角色的可见范围内的那些。而且,在行为和 WFD 之间的关联是“双方向的”, 可以在任一边上被建立。呈现的 WFD 列表包括“ inbound” 和“outbound”两种 WFD 关联。

Conclusion

恭喜! 如果你已经做到这一步,你已经成功地利用 RPW 工具定义了一个结构化的过程模型。在这一部分中我们已经见到如何使用 UML 记号和描述,使用在RUP metamodel中定义的类实例来表示经简单类和操作更高层的概念,来建立我们的过程模型。使用 RPW 为不同的过程概念定义的 stereotype 图标,我们指定了对它们的特殊种类的过程元件。基本上,当我们应用 stereotype 时,我们是对建模工具说话 " 我有一个几乎是类( 或操作,关联,等等),但是更专业的概念 " 。面向对象范例的表达和UML提供的生成系统,已经证明适用于对过程的结构方面建模 (举例来说: 支持元件元件及其关系)。

我们已经看见 RUP 过程模型本质上是自由形式的设计,并被 RPW 强加入一些额外的限制因素的模型。然而,RPW 并不强迫一般面向对象的建模使用表达来定义过程元件的变量。正相反,这样的元件的使用是受鼓励的,并且它也在过程模型推导被要求。因此,一个过程模型可以包含超出RPW认证的附加的模型元件。例如,为了要提供一个模型的全面产物,定义产物的依赖关系是必要的。

最后, 注意你应该避免通过修改RUP底层来定制RUP,因为你可能不得不在新版本的RUP产品发布的任何时候重建这些定制。通过由插件的方法来定制,你可以减弱从RUP的实现,这样两方面都能独立地改变。

RUP Organizer是IBM Rational过程工作平台产品的一个组件,可以作为一个单独的模块进行工作,也可以嵌入到RUP Modeler/XDE中工作(参见资源)。它为关联过程内容提供了工作平台,使得它们能够按照目标来处理模块从而创建过程资料,这些过程资料能够和下游过程结构合为一体。RUP Organizer最关键的特点在于它能将过程元素按照树状结构展现,这种展现叫做 Layout , 下面的图表说明了过程描述领域内的核心概念的概念性关系。

图1. 过程描述概念
. 过程描述概念

我们注意到,层次性展现事实上能够在它们相应的内容库中得到体现,从而能够保持它们很强的耦合性。这说明每一个过程都能由它的内容库和层次性展现表示。这样,过程插件只能在它的基础过程的环境下,创立一个完全的端到端过程。

关于操作性的全面评述

RUP 的基础下部组织支持很多使用案例,主要能够认可三种不同的应用场景。过程授权不是RUP基础下部组织职责的一部分,从本质上看,它在这里的出现只是为了根据该过程支持的应用案例来给它定位。图2 提供了一个该结构所支持的使用场景的简单全面的介绍:

. 用例模型概述
. 用例模型概述

那些 过程工程师负责定义过程模块,组织过程,并使得过程可进行配置。 项目经理负责创建在他们的项目中可以部署的过程实例。 参与者就是一个用户,浏览一个RUP配置来查看各个过程,考虑各方面综合最优,这些方面包括与查找他或她的任务、当前工件以及当前执行的活动相关的指南。

描述一个结构化插件

在组织和描述一个程序插件内容时,会有很多相关活动。但是,图3 显示的是我们会在这个部分中会执行的一些活动。

图3. 组织插件内容的活动
. 组织插件内容的活动

准备工作空间

  1. 如果需要,启动 XDE
  2. 点击 EPIC 插件过程模块 ,选择 RUP Modeler > Organize Process Content,正如图4所显示的那样。
    图4. 从XDE启动RUP Organizer
    . 从XDE启动RUP Organizer

定义那些你需要用来查看和编辑内容文档的应用程序:

  1. Options 菜单中选择 Editor Options
  2. 取消Use System Default,选择你所喜好的HTML编辑器,来开发内容,正如图5显示的那样。
    . 工作空间配置

    . 工作空间配置
     
  3. 按 OK键。
  4. Options菜单选择 Preview Options,并应用如下设置:
    1. 使用现有的图形来预览规则迭代工作流
    2. 运用生成的表格来预览 工作流明细角色
    3. 确认选中 Process Relative Hyperlinks选项。
  5. 按 OK键。

同步模块

如果过程模块从上一次层次化展开文件下载后,有一些更改,RUP Organizer不会被自动选中。它只会读上次保存的层次化展开文件。因此,当层次化展开接受了过程模块的一些变化后,你必须明确地调用Refresh from Model命令。

  1. 1. 在RUP Organizer工具栏中按 Refresh from Model按钮,使得层次化展现的变化和过程模块同步,正如图6显示的那样。

    如果自上次层次化展现同步化之后,过程模块中的一个元素被移走,一个错误信息将被插入树状层次化展开中原结点的位置。在这种情况下,拖放原来层次化展开中的旧结点到新的位置。这样一来,所有原来和旧结点相关的文档将被重新分配给新的结点。然后,从树状层级展开图中删除旧的结点。

    . 树状层级展开面
    . 树状层级展开面

最初的层次化展开的组织直接反映了RUP建模者定义的根本的过程模块。这些过程元素的缺省排列基本按照该元素在过程模块中名字的字母顺序排列,同时考虑这些元素在层次化展开中被创造或者出现的顺序。然而,一旦在层次化展开中出现,这些元素的顺序可以被重新排列,保存,只要简单地将结点在同类列表中上移或下移即可。同样,注意那些基础RUP层次化展开中,视觉效果上被暗化的结点,这说明这些结点是只读的。同样,我们EPIC插件层次化展开中的平常元素是可读,可被编辑的。

建立新的内容文件

当你开始组织你的插件程序模块时,可能你有一个空的内容库。这样,你会发现,在开始的时候,你将会在RUP Organizer中用相当多的时间来例示已有的RPW模板。

要根据RPW模块来创建新的内容文件:

  1. 在层次展开框中,选中 cbs_integration_mechanism 结点,并选择 Create New > Description
  2. 在目的对话框中,查到 EPIC plug-in \content_library 文件夹 (%RPW_CONTENT_HOME%\epic\content_library\) 建立一个新的文件夹。将该文件夹命名为过程 process
  3. 在新的 \process 文件夹下, 再建立一个新的文件夹,将之命名为 artifacts
  4. 然后,浏览选定新的 \artifacts 文件夹,并将描述文件保存为 ar_intmech.htm
  5. 当有提示出现时, 将表述类型命名为 CBS Integration Mechanism
  6. 回到树型层次图,选择 evaluateSystemComponents 结点,选择建立Create New > Description
  7. 在目的对话框中,查到 \process 文件夹 (%RPW_CONTENT_HOME%\epic\content_library\process\) 建立一个新的文件夹。将该文件夹命名为 activities
  8. 浏览选定新的 \activities 文件夹,将描述文件命名为ac_esyscomp.htm, 保存在这里。正如图7所示。
  9. 当提示出现, 表述中的类型命名为 Evaluate System Components
  10. 保存层次展开, File > Save
    图7. 新文件夹结构和表示名
    图7. 新文件夹结构和表示名

表示名 是文档在发布的过程结构中所采用的名字,它可在任何时间做改动。而且,如果有可能最好直接使用内容文件夹中的表示名,而不要使用其它的,直接在层次展开结点中说明的名字。同样的,尽量用最简单的名词来命名结构方面,和一个动词——名词的组合来命名一行为或者事件。

开发内容

开发 (事实上是写下) 过程内容,就目前而言是最花时间的活。然而,如果你已经写下了某种形式的内容。比如白皮书或者技术笔记,那你将可以节约很多时间。你最好一开始的时候创建一个该组过程的简单大纲,在创建详细的描述之前最好能将大纲浏览一遍。这是因为在你创建这样一个大纲的时候,你对于这些元素会有进一步的理解,会让你舍弃一些旧的印象和意见,让新的印象和意见能够取而代之。

使用你所偏好的HTML 编辑器 (参见 ), 选择 CBS Integration Mechanism 结点,从树状层级展开的内容菜单中选择 编辑 选项。 观察示例HTML 模板文件如何注意其授权时间, 正如图8所示.

. 出版前的描述页面
. 出版前的描述页面

特殊化的 HTML 命令(在这里指的是 RPW 命令) 已经作为RUP Organizer提供的模板的一部分,被定义为默认值,在你的过程授权中通常不必考虑。他们只是用于在出版的时候,收集根本过程元素的相关信息。

对上面所说的新内容文件夹,尝试用括号去除原文 (见 )以你自己的内容取而代之,从而写入描述。让这些内容尽量简捷明了,避免在你的描述中引入一些不确定的模糊的东西。除了在示例RPW模板中直接写入过程内容之外,你同时也可以从你现有的过程集中复制粘贴一些信息。或者,如果你喜欢,你可以从附件中 (见 下载) 提取预先授权文件夹,将这些文件和文件夹解压缩到 %RPW_CONTENT_HOME% 文件夹。

建立文件和元素的联系

除了在层次展开中创建新的内容文件之外,你同时也可以用现有的文件夹组建。在你的层次展开中使用现有的文件的先决条件是:该文件存在于插件的内容库或者它基础过程内容库中。比如,你可以将你客户化的浏览图标(通常是小的16 x 16象素的GIF文件)和在层次展开中的可读写结点相联系,而将这些结点和RUP Organizer给定的默认图标解除联系。

现在让我们将一个客户化浏览图标和CBS 综合机制工件建立联系。:

  1. 如果有需要,提取附件 (参见下载) 中的文件和文件夹到 %RPW_CONTENT_HOME% 文件夹
  2. 在内容浏览器中,选择 \browser_icons 文件夹,选择个性化GIF文件 (ar_im_icon.gif), 将它拖入 CBS Integration Mechanism结点。当你将该文件放到目的结点的时候,你将看到一个选择单,提示你以何种方式和该文件建立关系,正如图9所示。
  3. 选择 browserIcon类型。
    . 建立文件和过程元素的联系
    . 建立文件和过程元素的联系

为了保持树状浏览中展示的图标和描述文件中的图标一致性,我们同样需要建立个性化图表和相应的工件的联系。

  1. 浏览到 \diagram_images 文件夹,将GIF文件(ar_im _image.gif) from the C从内容浏览条拖入到层次化展开中的 CBS Integration Mechanism 结点。
  2. 有提示的时候,选择 图表形式 类型。
  3. 选择 CBS Integration Mechanism 结点,从内容菜单选择 Preview 从左上角观察图表形式类型。

RUP元模型定义了一系列的二级过程元素,即支持文件类型,以附加过程指南来补充一级元素。这些元素和一级元素不同,因为他们不像一级元素那样被定义为过程模型的一部分,因此他们不像一级元素一样拥有一个UML 表现 一个重要的区别是,他们在过程设置中没有以使用案例示例,因为他们被视为指南,所有使用案例都可以指定使用他们 (和创立和修改不同)来支持他们的工作。以下是一个很常见的文件类型到元素映射的示例。

. 将二级元素映射到一级元素
. 将二级元素映射到一级元素
 
一级过程元素 分类 操作
工件,任务,规定,工具,生命周期 活动,工作流细节,工具指南, 定相
二级过程元素 描述, 概念, 白皮书, 路标,报告, 模板, 示例, 清单, 指南

支持文件能够在层次展开的任何地方展开,也可以与多于一个的一级元素建立联系,(白皮书和路标文件通常会横跨多个元素,甚至有时候并不指定确切的一级元素)。一个插件可以通过在它的层次化展开,或者像基础RUP或者其他插件的上级层次化展开中,以附件形式覆盖现有的元素,来增加它的支持文件。比如,你可能想加入指南和概念到RUP元素中用以提供基础RUP之外的额外信息。为了在RUP单元中加入二级元素,你可以将你的支持文件从内容浏览单中拖到他们在目标层次展开中的相应结点。

因此,如果你希望修正/改变某一页的一级元素的介绍描述, RUP Organizer接受描述性文件在后台结点的放入,从而这些结点能改变前台表现。 (见 ). 在这种情况下,可以获得 移动描述文件 的环境菜单选项,这使得你能够移走最重要的描述文件夹,归还原先的文件夹,结点能够展示这种向后台的回归。

. 使描述文件和后台元素建立联系
. 使描述文件和后台元素建立联系

另外,如果你发现一些现有的,存在在基础RUP中的二次元素和你的插件的环境毫无联系,那么当你的插件包括在过程结构中时,在他们发布之前你可以压缩这些二次元素。为了压缩RUP单元中的二次元素,点击基础RUP结点来压缩他们,选择内容菜单中的压缩选项,被压缩的文件将呈现跟压缩前不同的状态来指示他们的状态。如所示。

. 压缩了的基础支持文件
. 压缩了的基础支持文件

检查文件

描述文件是必须的文件, 检查文件 的功能是指明你的层次展开中,目前还哪些元素没有和描述文件建立联系。尽管如果你进入RUP Organizer,一些文件可能已经存在于内容库中,但他们可能还没有和任何过程元素建立联系。

  1. 按工具栏中的 文件检查按钮,用以确认所有需要的进入都有其相关联的文件,而且这些相关联的文件是有效正确的。
  2. 观察那些没有描述文件的过程元素,如图13所示。
    . 层次展开的确认
    . 层次展开的确认

让我们将附件 (见 下载) 中的预定义文件和缺少描述文件的结点建立联系。或者,如果你愿意,你可以遵从 Create new content file 单元的步骤,从一个新的示例RPW模板建立新的文件。

  1. 使用附件(见 下载) 中的文件和文件夹预组装 EPIC 内容库,如果需要,将附件中的文件和文件夹提取到以下路径:%RPW_CONTENT_HOME% 文件夹
  2. 浏览到 \artifacts 文件夹,将 ar_sprod.htm file fr文件从内容浏览板拖到树状层次展开中的 cbs_product_selection 结点。注意观察,当你放入该文件时,树状结点会被重命名来反应文件表示名和警告信息的消失。
  3. 点击被描述的结点,从内容菜单中选择 预览 来浏览内容。
  4. 保存该层次展开。

注意,我们没有为有作用的cbs_integration_build_plan工件创造或者联系相关的描述文件。因为该工件只是一个占位符,不会在过程结构中出现。

导出插件

为了让RUP 建立者能够使用,你需要导出你的过程插件。你的插件文件在导出时是一个压缩文件,放在你所选择的系统位置,在该处,它可以被导入到RUP建立者的工作空间,并纳入RUP结构中。

  1. 按工具栏中的 导出插件 按钮,如图14所示。
    . 导出插件
    . 导出插件
     
  2. 当弹出保存提示的时候,进入你希望该插件结构单元(.cfu)文件所保存的系统文件的位置,选择该位置的文件名。这个位置可以是你当地系统中的任意正确位置,或者网络结点上某一个文件系统。然而该目的位置不能在RUP建立者仓库之内。
  3. 保存 & 退出

下面的简单略图是一个预览,显示了我们努力想达成的目标,以及在完成该系列后RUP过程结构(经由 EPIC 插件扩展)会是什么样子。

. 经由插件的过程元素扩展的RUP WFD
. 经由插件的过程元素扩展的RUP WFD

结论

如果你意识到每个规程都有其自身的广度角色与深度角色,记忆这些RUP角色以及他们的功能是很容易完成的事情。这部分反应了一个在迭代式开发中减轻重要风险的一个解决方案:在每一次特定迭代中选择什么系统组件应该工作于细节。并且,某些个性类型更适合进行广度工作,而另一些则更适合于深度工作。了解你的Myers-Briggs个性轮廓可以帮助你预测当被分配置一个并不适合于你的个性类型的工作时所需要面对的挑战。虽然NP是自然适合于深度工作的,SJ更适合于广度工作,如果你有足够的根据,你也许也可以学习执行任何一种工作。

 

组织简介 | 联系我们 |   Copyright 2002 ®  UML软件工程组织 京ICP备10020922号

京公海网安备110108001071号