利用Rational Rose进行C++代码和数据库逆向工程 结构分析

2006 年 6 月 08 日

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):描述关系数据结构。

参考资料

  • 统一建模语言介绍(Introduction to the Unified Modeling Language) ftp://ftp.software.ibm.com/software/rational/web/whitepapers/2003/intro_rdn.pdf

关于作者

申震杰,IBM 中国软件开发中心软件工程师,2002年获得清华大学计算机系硕士学位,2004年2月加入IBM 中国软件开发中心,2004年2月-2005年6月从事WCT Globalization开发工作,2004年至今从事Rational ClearQuest G11N的开发工作。

http://www.ibm.com/developerworks/cn/rational/r-shenzj/

利用Rational Rose进行C++代码和数据库逆向工程 结构分析相关推荐

  1. rational rose使用资料教程汇总

    http://blog.163.com/ljm1113@126/blog/static/57984452201191495046622/ 博客  发现 小组 风格 网易轻博客LOFTER 退出 反馈 ...

  2. Rational Rose正逆向工程(类图转Java代码,Java代码转类图)

     一,正向工程     1.设置默认语言为Java,Tools->Options->Notation->default:选择Java.         2.设置环境变量Class ...

  3. UML建模工具Visio、Rational Rose、PowerDesign,Visual Paradigm for UML

    UML建模工具Visio .Rational Rose.PowerDesign,Visual Paradigm for UML     ROSE是直接从UML发展而诞生的设计工具,它的出现就是为了对U ...

  4. 三大UML建模工具Visio、Rational Rose、PowerDesign的区别

    三大UML建模工具Visio.Rational Rose.PowerDesign的区别 本文源自http://developer.51cto.com/art/201006/207993.htm UML ...

  5. 如何用Rational rose创建类图

    UML中各种图形概要: 图名 对照 说明 用例图 use case diagram 用例图表明系统做什么,与谁交互.用例是系统提供的功能,参与者是系统与谁交互,参与者可以是人.系统或其他实体.一个系统 ...

  6. Rational Rose简明实用教程

    UML中各种图形概要: 图名 对照 说明 用例图 use case diagram 用例图表明系统做什么,与谁交互.用例是系统提供的功能,参与者是系统与谁交互,参与者可以是人.系统或其他实体.一个系统 ...

  7. Rational Rose

    Rational Rose是Rational公司出品的一种面向对象的统一建模语言的可视化建模工具.用于可视化建模和公司级水平软件应用的组件构造.就像一个戏剧导演设计一个剧本一样,一个软件设计师使用Ra ...

  8. 【ROSE】1. Rational Rose简介

    前面介绍了UML有9种视图,Rational Rose支持其中的大部分(7种)视图,包括: Use Case.Sequence.Collaboration.Class.State Transition ...

  9. Rational Rose和PowerDesigner建模工具比较

    Rose与PowerDesigner:两款建模工具对比分析比较 一. 二者的出身       作为世界最著名的两大CASE工具,Rational Rose和PowerDesigner的名声可谓如雷贯耳 ...

最新文章

  1. 上海大学c语言程序设计,【基础强化】2020-2021学年秋季学期程序设计C语言项目顺利开展...
  2. IJCAI 2018 基于主题信息的神经网络作文生成模型
  3. VC中TXT文件的存取
  4. 解决margin-top没有效果
  5. 文字阴影-CSS Text-Shadow
  6. 苹果再下一盘很大的棋?Metal优化作用及影响浅析
  7. activemq和kafka的区别
  8. ios ffmpeg h264 decode
  9. Transport level information does not match with SOAP Message namespace URI错误的理解
  10. web前端如何提升自我
  11. cocos Creator i18n 多语言
  12. 考研408.计算机网络.特殊IP地址的记忆方法
  13. 多渔:苦干执行,胜者为王!
  14. 好看的(动态)Jay迷自制动态专辑卡片(正面和背面不同)和歌词页面
  15. 趋势判研:基于Web3.0的智能生态体——保险科技生态建设...
  16. 面部表情识别3:Android实现表情识别(含源码,可实时检测)
  17. HTML 语法教学之连结标签
  18. 小波变换比傅里叶变换好在哪里_小波变换与傅里叶变换详解——代码下载——非平稳信号与平稳信号的滤波效果对比
  19. nrf52 iic使用
  20. cocos2d-x传智播客_Hanselminutes播客167-与Jeremy Miller进行的配置约定

热门文章

  1. ubuntu使用Xubuntu,XFCE,更轻量级的桌面环境
  2. android 获取手机屏幕的刷新频率
  3. BIM技术为什么广泛应用于地铁工程项目上?
  4. flash 怎么擦掉fpga_SPI FLASH学习笔记(三)擦除操作
  5. linux下限制CPU使用率的3种方法
  6. matlab系统解列模块,基于MATLAB准同期装置建模与仿真-毕设论文.doc
  7. 新年祝福页面html,2017年新年祝福页面模版
  8. 微信小程序wx.previewImage预览图片
  9. 邵奈一的技术博客导航
  10. 青莲晚报(第十四期)| 物联网安全多知道