UML软件工程组织

利用Rational Rose进行C++代码和数据库结构分析
申 震杰, IBM 中国软件开发中心软件工程师

本文内容包括:
 一.Rational Rose逆向工程介绍
 二.如何用Rational Rose进行C++代码分析
 三.如何用Rational Rose进行数据库结构分析
 四.如何得到逆向工程的模型图
 五.总结
 注释

 Rational Rose是利用UML(统一建模语言)进行分析和设计面向对象软件系统的强大的可视化工具,可以进行项目需求分析、结构规划和生成框架代码,还可以支持从现有系统逆向转出工程代码,生成Rose模型的功能。
2004年10月,IBM推出了支持最新的UML2.0的可视化建模工具 Rational Software Architect(见注释①) 和IBM Rational Software Modeler(见注释②)。虽然它们支持在建模功能上有了更好的改进、支持了更新的标准,但是RSA的精彩功能主要是集中在对Java应用的支持,而IBM Rational Software Modeler则是主要关注系统的模型设计,如果要从结构上分析C++编写的系统的代码,Rational Rose还是首选的工具。

接下来的文章将会对如何利用Rational Rose 的逆向转出工程来进行系统分析进行更加详细地阐述。

一.Rational Rose逆向工程介绍

逆向工程(Reverse Engineer)就是从现有系统的代码来生成模型的功能。分析已有的代码其主要的目的就是了解代码结构和数据结构,这些对应到模型图就是类图、数据模型图和组件图(对UML各种模型图的描述见注释③),也就是通过Rational Rose的逆向工程所得到的结果。Rational Rose所支持的逆向工程功能很强大,包括的编程语言有C++, VB, VC, Java, CORBA,以及数据库DDL脚本等等,并且可以直接连接DB2, SQLServer, Oracle和Sybase等数据库导入Schema并生成数据模型。

很多大型的C++开发的产品都涉及到数据库的使用,对这种大型系统的开发,尤其是做二次开发的情况下,主要的难点就是对源码和数据库结构的分析。而利用Rose的逆向工程这一功能,就可以完成代码'类图以及数据库Schema->数据模型图的转换,解决这两大难点,可以使开发和设计人员在对这种大型系统的升级、分析和开发中,更为方便、快捷、有条理地掌握系统结构,不用再为分析庞大的系统结构而头疼。

二.如何用Rational Rose进行C++代码分析

这一节主要介绍用户如何使用Rose的逆向工程生成UML模型,并用来进行C++代码的结构分析。

Rational Rose可以支持标准C++和Visual C++的模型到代码的转换以及逆向工程。下面将详细地说明这两种C++ project的逆向工程的步骤和具体操作。

1. ANSI C++(标准C++)逆向工程(Reverse Engineer)使用标准C++逆向工程,需要在组件图(component view)中创建一个组件(component),设置好需要进行转换的组件的信息,也就是该组件的语言、所包含的文件、文件所在的路径、文件后缀等等信息,然后Reverse Engineer就可以根据给定的信息将代码转换成类图了。

a) 右键点击组件视图(Component View),选择New->Component,创建一个新的组件
 

 b) 将component的language属性设定为ANSI C++

①选中创建的component,点击右键,选中Open Specification
 

②在这个对话框中将该component的language设定为ANSI C++


c) 配置该ANSI C++ component,设置好该component中包含的C++代码文件,并进行C++语言的详细设置

①选中该component,点击右键,选择ANSI C++->Open ANSI C++ Specification


②把Source file root directory设定为你的C++源码文件所在的路径,并且将需要转换的文件添加到Project Files中,视你的需要来做其它的设定,比如:头文件扩展名等等。

d) 将设置好的component转换成模型图

①选中设置好的component,点击右键,选中ANSI C++->Reverse Engineer



 ②选中需要转换的class,点击ok,一个component的逆向转换就完成了。



 2. Visual C++ 在使用这个功能的时候,要求用户的机器上同时安装Visual Studio。Visual C++的逆向工程也需要首先创建一个component,并将该component的language属性设置为VC++。Rational Rose对VC++模型的转换是通过读取VC++ Project File的信息来实现的,用户只需要将对应的project file信息指定给component就可以了。

a) 将VC++ Project的信息赋给刚刚创建好的component。

①选择该component,点击右键,选择Assign To Project


②在对话框中找到刚刚创建的component,右键点击并选择Properties。


③在下面对话框中选中需要进行转换的Project,点击ok,该component就与需要转换的project关联上了。



 b) 将设置好的component转换成模型图

选中设置好的component,点击右键,Update Model…,将会弹出确认对话框,选中需要转换的class,点击finish就可以了。


三.如何用Rational Rose进行数据库结构分析

利用Rational Rose可以进行关系数据库的数据模型设计并导出DDL语言脚本,相反还可以导入已有的DDL脚本生成数据模型以及连接SQLServer, DB2, Oracle等数据库并导入数据库的schema生成数据模型。

下面以SQL Server为例说明一下逆向转换工程的步骤。

a) 首先,选择Tools->Data Modeler-> Reverse Engineer


 
 b) 在进行逆向工程转换的过程中可以选择是从数据库还是DDL脚本进行转换,如果是DDL脚本转换,就直接给定DDL脚本文件位置就可以了。本例子给出的是连接SQLServer数据库将schema导入生成数据模型的过程,所以选中Database,进入下一步。



 c) 填写数据库相关信息



 d) 选中所有需要转换的schema



 e) 选择需要将哪些数据库中的元素导入到数据模型中

转换操作会自动在组件图(Component View)中添加数据库组件,并在逻辑图(Logical View)中生成以《Schema》作为命名开头的数据模型。



 打开数据模型,可以看到从数据库中转换过来的各个表和视图。



 从数据模型图中可以看到表的结构以及各个表和视图之间的逻辑关系。

四.如何得到逆向工程的模型图

在Rational Rose中,有些模型图是不会自动生成的,很多时候这个工作需要用户手工来完成。也就是说,Rational Rose只负责生成模型,包括模型中的元素、元素的属性以及各个元素之间的关系,但是需要用户做一些额外的工作来得到视图。

首先,通过逆向工程,用户已经得到了UML模型或者数据模型的各个组件以及它们之间的关系。 下一步需要在该模型上创建一个视图,它们可以是类图(class diagram,描述系统的静态结构)或者数据模型图(Data model digram,描述关系数据结构)。然后,手动从左边的explorer中将各个元素拖进视图中,在这个过程中,各个元素之间的关联关系会自动在图中表示出来,而不需要用户再做其他工作。

例如:生成一个数据模型的数据模型图的过程

从左边将数据模型中的数据元素拖到右边的数据模型图中,表CustomerCustomerDemo和表CustomerDemographics之间的依赖关系的菱形箭头是自动生成的,无需手工操作。


一般来说,一个系统中所涉及的数据元素非常多,导致视图很拥挤,排版也非常困难。Rational Rose提供的自动排版功能可以很方便地帮助用户解决这个问题。

选择Format->Layout Diagram,系统会将图中的所有元素用最优方式重新排列,给用户一个清晰的视图。



 五.总结

了解了Rational Rose的逆向工程功能,用户就可以方便地利用这一工具进行大型数据库相关的C++系统的分析和研究了。

注释

①IBM Rational Software Architect是一个集成式设计和开发工具,使用户可以用UML模型驱动的开发方式开发出结构清晰的应用程序和服务。

②IBM Rational Software Modeler是基于UML2.0的可定制的可视化建模和设计工具,遵循它所提供的工作流程,可以使得系统设计师,系统分析师,设计人员等写出更为清晰的文档,更为有效地进行沟通和设计工作。

③UML提供的各种类型的模型描述图

用例图(Use Case Diagram):描述系统提供的一个功能单元,主要目的是帮助开发团队以一种可视化的方式理解系统的功能需求,包括基于基本流程的"角色"(actors,也就是与系统交互的其他实体)关系,以及系统内用例之间的关系。

序列图(Sequence Diagram):显示具体用例(或者是用例的一部分)的详细流程。

状态图(Statechart Diagram):表示某个类所处的不同状态和该类的状态转换信息。

活动图(Activity Diagram):表示在处理某个活动时,两个或者更多类对象之间的过程控制流。

类图(Class Diagram):表示不同的实体(人、事物和数据)如何彼此相关;换句话说,它显示了系统的静态结构。

组件图(Component Diagram):提供系统的物理视图。组件(Component)表示模型代码库、执行库和其它组件的信息。组件是代码的实际模块,组件图主要用户是负责控制代码和编译部署应用程序的人。有些组件是代码库,有些组件是运行组件,如执行文件或动态链接库(DLL)文件。)

部署图(Deployment View):表示该软件系统如何部署到硬件环境中。

数据模型图(Data Model Diagram):描述关系数据结构。


版权所有:UML软件工程组织