UML软件工程组织 |
应用Rational 工具简化基于J2EE的项目 (三)转换到系统模型 | |||||||||||||||||||||||||||||
第 3 部分 :转换到系统模型 Steven Franklin 本文将继续通过这个全面的应用 RUP 和 其他 Rational 工具的样例项目来介绍创建项目的 Rational Rose 模型,本文中我们将开始创建代表“目前”业务情况的系统模型,并将此业务模型转换成为“将来”的系统模型。 这个第 3 部分文章重点的介绍了在 Rational Rose 中完成的早期建模活动。首先我们来对 ASDI 现有的(“as is”)系统进行建模,通过业务用例和业务对象可以显示当前事情是如何工作的。我们将从这个反映现有系统的模型创建出符合 ASDI 新的需求的系统模型,并且将这个系统模型作为建立软件的基础。
捕获“目前的”系统
创建一个业务模型以捕获“目前的”系统的情况可以是非常快速的任务并能够产生有用的分析线索,这些线索将简化对“将来的”系统的定义。在创建这个模型中能够对我们有帮助的一件事情是工作状态(SOW)。虽然 SOW 主要用来描述“将来的”系统的需求,但是它也提供了ASDI 的当前业务流程的有用的背景信息。 在 Rational 统一过程(RUP)初始阶段部分存在一系列的用于业务建模的方法(也是就在我们项目的第 1 阶段)。与 ASDI 一起创建一个 IT 系统,我们需要一个“目前的”模型以捕获文件的流转和他们的当前系统的交互活动。我们在 Rational Rose 中创建了下列 RUP 工作产物作为业务建模工作的部分:
注意在以前的一些项目中,我们跳过了业务建模的步骤,因为我们是建立一个全新的系统,或者是因为我们已经非常好的了解了已有的业务模型。但是因为我们对 ASDI 的业务是陌生的,因此我们觉得这一步是十分重要的。 我们也考虑到开发一个业务术语表(使用 RUP 提供的工作产物模板),但是我们发现我们的术语中的大多数是相当标准和明确的,而且这些术语在我们的业务对象模型中被充分的捕获了。更加复杂或者严格的项目将会从创建业务术语表中获益以确保在所有产物中的一致性。 当我们使用 Rational Rose 创建我们的模型时,我们感到仅仅简单的创建图是不够的。我们发现仅仅通过图的方式表达模型对图的创建者是容易理解的,但对图的阅读者来说却是很难读懂的,因此我们为每一个图附加了文档(通过在图上点击并在文档窗口输入文本)。我们也为图中的每一项提供了文档 — 用例、业务对象、用户或者其他项 — 用一到两行的文字来描述每一项的目的。 创建模型 我们对模板的结构做了一些改动以符合我们的需要和选择。例如,我们直接做了一下的修改:
接下来我们必须添加一个计划(schema)区域到模型中以使数据库架构师可以跟踪数据建模的工作。 管理模型 我们的团队虽然不是很大,但我们还是要考虑到在模型之上的协作问题。我有几个 Rational Rose 的浮动的许可证,这足够我们所有的人同时访问模型,但是我们也需要使我们能够并发的访问模型的某一部分。因此我们使用 Rose 的 “单元控制” 的特性以对模型进行适当的分解。 在我们的团队的组织结构中的角色(如在第 2 部分被描述的)这些角色所拥有的对模型各部分的输入和更新的指责被显示在表 1 中。因此,团队中的其他成员,比如初级的开发人员和项目工程师将只拥有对模型进行访问的权限以完成他们的开发工作。
我们对模型进行了分解,如图 2 中显示的 Rose 图。此时这个模型的结构服务于我们需要,因为我们有 3 个人直接的维护这个模型。将来,当团队和项目逐渐扩大时,这个模型结构可以被容易的分解为更多的 关于分解 Rose 模型的额外信息可以在 Robert Bretall 的演讲稿中找到。这里只指出来自于它的模型结构讨论中的几个有价值的事情:
使用 Rational Rose 分解模型成为分离的 建模用户和接口 图 4 显示了我们如何在 Rose 中将角色容入我们的业务模型当中 — 尤其是,在一个与客户服务相关的用例图中,这个用例图摘自我们的业务用例模型。两个特殊的原型类被使用:业务角色和业务用例。 Rose 可以基于原型分配自定义的图标,并且我们选择这个方法为用例和角色分配外表略有不同的图标 — 加了一条斜线 — 因为我们觉得区别用于构建软件的系统模型与业务模型是重要的。 当我们将业务用例模型充实起来时,对于业务对象模型来说将会出现一系列好的候选对象。虽然创建一个“目前的”系统的业务模型看起来要花费大量的工作(主要的工作量是生成图),但是我们觉得它是值得的。在我们过去的“目前的”模型中,已经包含了大量的在实验室工作簿中的注释和正式的技术注释。为了得到已有业务流程的更加清晰和完整的视图,应该在花费一些时间在 Rose 中捕获这个信息。 理解系统交互 在项目的早期我们关注的交互:
我们花费了一些时间在 Rose 中捕获我们对当前业务组织和过程的理解,结果是生成了对于我们理解现有系统非常有用的业务对象模型。在对象模型中的图(在图 5 中显示的是其中的一个)类似于标准的类图、除了他们使用了特殊的原型类:业务实体、业务控制和业务角色。业务实体表示被动的领域对象比如发票或者报告,而业务控制是执行功能的对象,可以表示报警或者机械的作用。(业务角色在之前已经被讨论了。) 我们在业务用例建模之后很快开始业务对象建模。业务用例的说明文字确定了一系列合适的业务对象。如果是跨越多个用例的对象,比如“购买请求”和“产品”、“产品队列”和“运输队列”是被识别的业务领域的关键对象。有时如果我们意识到它是不合适的或者已经被其他对象覆盖到了,我们将删除这个业务对象。通过这种方法,可以快速的在任务(用例)和 事物(业务对象)中筛选与 ASDI 业务相关的业务对象。 在某些情况下,业务对象模型将演化成系统类。这对于实体对象来说基本上是正确的,实体对象通常被映射为容器类或者是数据库表。在其他一些情况下,业务对象模型简单的作为一个为理解客户领域的引用的结合点来使用。我们确认客户已经完全理解了图形化的符号和每个图的内容,因为他们的检查和批准是关键的。 总而言之,我们花费了大量的时间在业务建模的工作上。这并不一定是一流的或者是完全的,但是对于我们来说应该是能够对当前的业务流程有一个足够的认识。在项目的第一个或者两个月后,我们将很少的提及业务模型,但是我们觉得它是值得花费时间的,因为它是形成“未来的”系统的系统模型的一个必要的步骤。当一个新成员加入到我们的团队时,我们可以通过浏览业务模型来帮助他们来理解新的领域;然而,一旦对它熟悉了,业务模型将很少再被查看,除非是阐明术语。 将 SOW 转换成用例 我们并不担心映射 SOW 需求到“目前的”系统业务用例的原因是 SOW 需求中的许多在当前的系统中是不存在的。我们早期所创建的业务模型只不过是一个临时的产物,它用于我们确保我们的团队理解 ASDI 的当前系统。 用例对文字说明 这里是一些开始创建用例时的误解:
结果,我们决定用例建模标准和指南需要被组长定义。这些包括下面的指南:
当决定什么应该包括在我们的用例中时,我们应该遵从在文章中指出的指南Fine Tuning Rose to Complement Your Process:
从“目前的”到“将来的”演进 在图 6 到 图 9 中显示了我们早期工作产生的对于“将来的”系统的用例模型的一部分。通过图形、协作图和时序图以及进一步的详细分析的帮助,它将随着时间推移而成熟。 就像 RUP 的描述,“用例建模的最重要的目的是与客户或者最终用户沟通系统的行为。”然而,增加复杂性可以导致我们的客户也许感觉不舒服的风险,我们发现当我们充实用例时,在用例中引入更高级的包含和扩展关系是很有价值的。在详细的检查我们的用例模型时,被包含和扩展的用例频繁的出现。我们发现甚至在我们理解了系统的(包括用户)外界接口视图,通过包含和扩展用例来分组功能产生在重要的计划、架构和测试中的好处。然而,在我们看到客户对检查这些高级的关系没有信心时,我们有时会将被包括和扩展的用例从检查的包中拿掉。 总结 不同项目之间的用例建模有着显著的不同;用例的定义、用例的关系、详细的程度等等都是经常被争论的。最后我们发现当我们向客户展示我们的用例模型时,一致的并频繁的检查是成功的关键。 计划未来 虽然我们还没有开始进入体系架构阶段,但是我们知道系统必须是基于 Web 的并且是跨平台的,同时从原型到企业级方案都要是可扩展的。我们已经学习了 J2EE ,并且 ASDI 雇用的 IT 经理也首选这个技术平台。因此,我们觉得开始探索 J2EE 的成本和能力是明智的。我们的团队在这个领域不需要太多的培训,这是另外一个因素。数据的存储应该被更多的考虑,然而,因为 IT 经理极力的推崇面向对象的数据库(OODB)方案。因为我们对关系型数据库更加在行,这对我们来说是一个艰难的路程,但是我们还是同意了考察 OODB 的方案。 我们非正式的与我们的客户审查了我们的所有工作产物,但是是时候进行正式的检查了。在接下来的几周中,我们将建立我们的 Rational SoDA 模板以便我们提供我们的第一个正式的交付:详细的软件需求。我们同意这个文档应该包括用例和非功能需求(可靠性、可用性等等)。 我们的用例开始稳定了,开始指明在对 SOW 合适的可跟踪的地点。我们需要用 Rational RequisitePro 来确保维护 SOW 与我们的用例之间的映射。 我们接下来的方向,应该是:
主要风险
|
版权所有:UML软件工程组织 |