建模对每一位软件开发人员都不陌生。Rational ROSE建模工具的出现,使程序员从手工建模的工作中解脱出来,并使大型开发项目的分析,建模、设计更加规范化。我们曾经通过《ROSE 技术白皮书》对Rose的可视化建模有了了解,从今天开始,我们将循序渐进地指导您如何应用Roe工具完成建模。同时,我们还将提供一个使用Rational Rose UML CASE 工具创建完整的UML模型的范例。对那些想高效地使用和评估Rational Rose工具(而不是其他UML CASE 工具)的新用户,我们建议做下面的工作:
首先:创建使用Rational Rose CASE 工具(www.rational.com)的图表和报告,如下所示。
第二:使用Rational Rose——UML CASE 工具在你的问题领域创建一个类似的实例,如一个订单系统、产品系统,客户系统,等等。
第三(如果需要),使用其他 UML CASE 工具创建这些实例,以充分比较不同工具的性能。
我们的目标是创建一个系统的正确、可靠、可理解、可扩展、可复用、完整的UML模型。该模型应该混合了可复用的类、组件和模式。这里提供一个经简化的银行存款模型。
从Rational Rose开始
启动 Rose
选择菜单File-New,选择File-SaveAs,将文件另存为BusinessModel.然后选择File-New-SaveAs,另存为Requirements-AnalysisModel;
注意,当Requirements-Analysis(需求分析)完成后要另存为Design-ImplementationModel(设计-实现模型);
选择View(视图)选中Status Bar,Browser, Documentation, As Unified;
选择Tools-Options-Diagram 选中Stereotype Display(构造型显示)标签并选中Show/Display 的所有项目(Three-Tier Diagram除外);
可以在文档窗口(Documentation Window)为每个浏览器元素(Browser element)键入"文档信息";
可以在图上增加文本框(text boxes)"ABC"(译注:ABC 是文本框符号的标志);
可以在图上增加注释;也可以通过"File-Delete"(译注:似乎应是Edit-Delete)从模型中删除不正确的元素。Check Model后,选择Window-Log查看日志文件;
可以选择Report-Documentation Report;
选择Help,查看Rational Rose Help Topics(帮助主题)。
创建Rose 用例图:在浏览器窗口,选择Use Case View(用例视图),将"Main"重命名为"Use Case Diagram",在Use Case View双击可以显示用例图,在图上放置参与者(ACTOR)和用例,选择一种关系连接各元素。
参与者 用例
创建Rose 类图
在浏览器窗口选择Logical View(逻辑视图),将“Main”重命名为“class diagram”;在Class Diagram上双击以显示类图;
在图上放置"类";选择一个"类"然后按鼠标右键,选择New Attribute键入属性;
选择"类"然后按鼠标右键,再选择:"New Operation"键入操作;
从工具条中选择"泛化"(Generalization)关系箭头,从子类到超类拖曳,放置一个泛化关系;
从工具条中选择实现(Realize)箭头,由实现类向接口拖曳,放置一个实现关系;
从工具条中选择关联(Association)箭头从较大/上级类向较小/从属类拖曳,放置一个关联关系;
在离较小/从属类最近的关联线上单击鼠标右键,键入角色名及角色多重性;
从工具条中选择菱形的聚合符号,然后从较大/整体类向较小/部分类拖曳,放置一个聚合/组成关系;
在到部分类最近的关联线上单击鼠标右键,键入角色名称及角色多重性;
从工具条中选择依赖箭头,从源/客户类(source/client class)向目标/供应端(destination/supplier class)拖曳,放置一个依赖(dependency)关系;选择Tools-Check Model;
选择Report - Show Usage/Show Instances/Show Access Violations;
选择 File - Save。
创建Rose 顺序图
在浏览器窗口选择Logical View;
选择Browse-Interaction Diagram-Logical View-<View>;
选择Sequence Diagram;
键入图名;
在图上放置对象(object)以表示类的对象;
双击对象并且选择从下拉列表中选择类名;
选择Rose 对象消息(Object Message)符并在两个对象间拖曳;
双击消息,选择操作。
选择Tools - Check Model;
选择Report - Show Unresolved Objects/Show Unresolved Messages;
选择 File - Save。
-------------------
文章中,我们使用了“统一软件开发过程”。(参见《The Unified Software Development Process》(Ivar Jacobson,Grady Booch, James Rumbaugh 著)、《The Rational Unified Process An Introduction Second Edition》(Krutchen著))。统一过程生命周期阶段图示如下:
系统/子系统/组件 | 包/类/对象 |
Ⅰ-需求→→ | Ⅱ-分析 |
需求描述/产品性能 | 类图 |
所有用例的用例图 | 包图 |
每个用例场景(scenario)的顺序图 | 顺序图和/或写作图 |
每个用例所有场景的活动图 | 活动图和状态图 |
Ⅳ-实现 | ←←Ⅲ-设计 |
过程环境硬件&软件 组件图&部署图 |
过程环境硬件(HW)&软件(SW) 更新的类/包/顺序/协作/活动/状态图 |
---Ⅴ&Ⅵ 构建/测试
下表中总结了在统一过程中不同的模型:
业务模型 | 需求模型 | 分析模型 | 设计模型 | 实现模型; | 测试模型 | |
关键UML元素 | 业务过程(用例),业务域对象 | 系统,参与者,用例,交互 | 业务包,类,对象,消息 | 硬件&软件配置,包,类,对象,消息 | 组件,节点,编码 | 测试计划和测试实例 |
主要关注点 | 模型业务 | 黑盒模型系统 | 问题领域模型的业务元素(不含实现细节) | 更新特定实现的分析图/规约,例如硬件&软件配置 | 分布式环境模型物理元素;对应所有需求的编码 | 单元(类/操作)测试,集成,整个系统测试 |
目标:元素间弱耦合-强内聚 | 充分的业务/企业信息 | 所有用例/场景的充分信息,所有计划过的增量/迭代。 | 满足需要的最简业务/问题领域模型 | 生成最大量代码或手动编码需要的足够的信息 | 界面友好、最适当的组件架构-网络;满足所有需求的代码 | 编码可满足所有需求的充分测试 |
静态/结构性图 | 业务领域对象 | 显示参与者的块图和用例图 | 包/类图 | 包/类图 | 组件和部署图;逆向类图 | - |
动态的/基于时间的图 | 业务过程(用例) | 每个用例场景的用例图、顺序图,每个用例的活动图 | 每个用例场景的顺序图,基于状态的类的状态图,复杂操作的活动图 | 每个用例场景的顺序图,基于状态的类的状态图,复杂操作的活动图 | 可选地,显示分布式信息的更新顺序图 | - |
关键团队成员 | 业务分析员 | 业务分析员 | 业务分析员 | 开发人员 | 架构师,开发人员 | 开发人员/测试人员 |
模型签认 | 项目经理,架构师,客户 | 项目经理,架构师,客户 | 项目经理,架构师,客户 | 项目经理,架构师 | 项目经理,架构师 | 项目经理,架构师,客户(验收) |
建议的任务/练习:基于统一过程创建一个UML模型。
0 ——业务建模-企业级
评审业务模型:前景文档,组织结构图,业务事件和过程(用例),业务参与者,工作人员(worker),实体(域模型),业务规则目录,业务接口(操作集),业务模式,业务系统体系结构-组件图,术语表。参见《The Rational Unified Process An Introduction Second Edition》(Krutchen著)及《Business Modeling with UML》(Eriksson 和Penker 著)。
Ⅰ-需求-系统/子系统/组件级(与语言无关的)
1.需求-对需求描述、系统图(System Drawing),系统块图(客户提供)进行评审。创建系统协作图[环境图(Context Diagram)]以说明对象/数据的输入输出、设定系统的边界(可选)。创建需求可追踪性表,列出需求名、需求号、引用、用例、UML元素、测试实例、描述、职责,等等(可选)。评审管理计划、时间表、风险、命名/编码标准、方法设计-UML 过程/构造型/特征/约束(可选)。
2.所有用例-创建用例图说明所有用例。说明用例关系(包含,扩展、泛化)和/或分级用例(从高级到细节)(可选)。确定用例的增量和迭代。
3.每个用例-为每个用例创建用例规约描述:用例名、触发、输入、输出、前置条件/异常、后置条件/异常,基本的和替代性可选场景【从乐观到悲观】、业务规则。为每个用例场景创建顺序图(可选)。为每个用例创建输入/输出表和测试实例(可选)。
4.每个用例所有的场景-为每个用例创建活动图说明所有的用例场景(乐观到悲观)。用文本、流程图或其他图说明每个用例的场景/路径(可选)。
5.信息--创建产品性能(Product Capabilities)列出非功能性的需求:可用性(可靠性、性能、安全、人员因素),一般性(generality)、可移动性、兼容性,时间,空间,存储等等。创建一个语义数据模型(高级类/包图)(可选)。
Ⅱ-分析-类和对象级(与语言无关的)
6.类和包-创建候选类清单,CRC 卡,类图和包图。创建对象图显示属性值(可选)。
7.对象和消息-为每个用例-乐观场景创建顺序图。为所有其他用例场景创建顺序图(可选)。或者,为每个用例创建协作图。
8.状态和转移-为每个基于状态的类创建状态图,说明状态、事件、条件、动作。
9.操作-为每个复杂的操作创建一个操作规约,说明前置条件、转换,后置条件,以及异常。为每个复杂操作创建活动图,说明活动的顺序、状态、条件和动作(可选)。
III -设计-类和对象级(特定的过程环境下的)
10.过程环境-创建由已计划的"实现硬件和软件配置清单"组成的goig过程环境:操作系统,语言,类库,组件,GUI,分布--对象请求代理,永久数据存储,等等。可列出潜在的模式,组件标准((Active X, Java Bean, CORBA),命名约定,编码标准,代码生成脚本,工具(CASE, 编译器,配置管理,测试等等)(可选)。
11.更新的分析图及规约-更新所有图表和说明,为过程环境增加细节,包括数据类型,参数/返回值,支持类,操作细节(前置条件/异常)转换,后置条件/异常),等等。提供了实现模式,例如多态操作,异常(异常的超类/子类),线程,数据访问,事务,安全,消息队列等等。目标是:图和规约为手工编码或代码生成提供正确的信息(可选)。
Ⅳ 实现-系统/子系统/组件级(特定过程环境下的)
12.实施过程环境,组件标准和组件模式-更新过程环境,显示已提供的组件(GUI,数据访问,事务,分布,消息队列,安全等)、组件标准(ActiveX, Enterprise Java Bean,CORBA)、组件到组件模式,例如小的单个操作组件、基于组件的类、每一用户-实体组件,基于组件的包,大的多包组件。
13.实施组件-创建组件图显示所有需要的带有依赖关系的组件和文件,例如.EXE, DLL, .OCX, .LIB, .TXT, .HLP等等。显示接口(棒棒糖)、创建接口图显示公有操作(exposed operation)(可选)。显示IDL 代码(Interface Definition Language,接口定义语言)例如 CORBA IDL, Microsoft IDL, Java(可选)。
14.实施节点(处理器和设备)- 创建部署图,显示所有需要的处理器、设备和其他器材,例如客户网络计算机(NC),Windows PC, NT Server,事务服务器,WEB 服务器,邮件服务器,传真,打印机,网络等。
V -构建
15.编码标准和代码生成脚本-更新编码标准和代码生成脚本.编码标准为所有主要UML元素编码列出了样本代码、关系以及继承策略、接口、异常、线程等。
16.每个组件的编码、图表逆向工程
VI - 测试
17.测试计划-更新测试计划,列出测试实例(名称,输入,输出,条件),测试步骤(每一个测试用例的每一步用法),测试组件【驱动器(driver),测试装置(harnesses),脚本】
18.测试-引导测试(conduct tests),例如类/操作测试(单元测试),个体组件测试(基于用例的),全范围系统-多组件测试(基于用例的集成/验收测试)。
VII - 模型和构建其他需要的组件
19.图形用户接口/用户/外部接口组件-可选的-创建GUI 组件(窗口,菜单,对话框,面板)
20.永久存储组件的-可选的-数据存储表/存储过程/触发器。
小结
当我们开始一项工作时,并不知道接下来会发生什么。我们关心的只是如何能出色地完成这项工作。现在,我们已经安装了Rational Rose,并从头开始创建了类图,下面的工作将是“使用Rational CASE”,这才是重点。
『引自 UMLCHINA』