本文內(nèi)容包括: 一.Rational Rose逆向工程介紹 二.如何用Rational Rose進行C++代碼分析 三.如何用Rational Rose進行數(shù)據(jù)庫結(jié)構分析 四.如何得到逆向工程的模型圖 五.總結(jié) 注釋
Rational Rose是利用UML(統(tǒng)一建模語言)進行分析和設計面向?qū)ο筌浖到y(tǒng)的強大的可視化工具,可以進行項目需求分析、結(jié)構規(guī)劃和生成框架代碼,還可以支持從現(xiàn)有系統(tǒng)逆向轉(zhuǎn)出工程代碼,生成Rose模型的功能。 2004年10月,IBM推出了支持最新的UML2.0的可視化建模工具 Rational Software Architect(見注釋①) 和IBM Rational Software Modeler(見注釋②)。雖然它們支持在建模功能上有了更好的改進、支持了更新的標準,但是RSA的精彩功能主要是集中在對Java應用的支持,而IBM Rational Software Modeler則是主要關注系統(tǒng)的模型設計,如果要從結(jié)構上分析C++編寫的系統(tǒng)的代碼,Rational Rose還是首選的工具。
接下來的文章將會對如何利用Rational Rose 的逆向轉(zhuǎn)出工程來進行系統(tǒng)分析進行更加詳細地闡述。
一.Rational Rose逆向工程介紹
逆向工程(Reverse Engineer)就是從現(xiàn)有系統(tǒng)的代碼來生成模型的功能。分析已有的代碼其主要的目的就是了解代碼結(jié)構和數(shù)據(jù)結(jié)構,這些對應到模型圖就是類圖、數(shù)據(jù)模型圖和組件圖(對UML各種模型圖的描述見注釋③),也就是通過Rational Rose的逆向工程所得到的結(jié)果。Rational Rose所支持的逆向工程功能很強大,包括的編程語言有C++, VB, VC, Java, CORBA,以及數(shù)據(jù)庫DDL腳本等等,并且可以直接連接DB2, SQLServer, Oracle和Sybase等數(shù)據(jù)庫導入Schema并生成數(shù)據(jù)模型。
很多大型的C++開發(fā)的產(chǎn)品都涉及到數(shù)據(jù)庫的使用,對這種大型系統(tǒng)的開發(fā),尤其是做二次開發(fā)的情況下,主要的難點就是對源碼和數(shù)據(jù)庫結(jié)構的分析。而利用Rose的逆向工程這一功能,就可以完成代碼'類圖以及數(shù)據(jù)庫Schema->數(shù)據(jù)模型圖的轉(zhuǎn)換,解決這兩大難點,可以使開發(fā)和設計人員在對這種大型系統(tǒng)的升級、分析和開發(fā)中,更為方便、快捷、有條理地掌握系統(tǒng)結(jié)構,不用再為分析龐大的系統(tǒng)結(jié)構而頭疼。
二.如何用Rational Rose進行C++代碼分析
這一節(jié)主要介紹用戶如何使用Rose的逆向工程生成UML模型,并用來進行C++代碼的結(jié)構分析。
Rational Rose可以支持標準C++和Visual C++的模型到代碼的轉(zhuǎn)換以及逆向工程。下面將詳細地說明這兩種C++ project的逆向工程的步驟和具體操作。
1. ANSI C++(標準C++)逆向工程(Reverse Engineer)使用標準C++逆向工程,需要在組件圖(component view)中創(chuàng)建一個組件(component),設置好需要進行轉(zhuǎn)換的組件的信息,也就是該組件的語言、所包含的文件、文件所在的路徑、文件后綴等等信息,然后Reverse Engineer就可以根據(jù)給定的信息將代碼轉(zhuǎn)換成類圖了。
a) 右鍵點擊組件視圖(Component View),選擇New->Component,創(chuàng)建一個新的組件
b) 將component的language屬性設定為ANSI C++
①選中創(chuàng)建的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++源碼文件所在的路徑,并且將需要轉(zhuǎn)換的文件添加到Project Files中,視你的需要來做其它的設定,比如:頭文件擴展名等等。

d) 將設置好的component轉(zhuǎn)換成模型圖
①選中設置好的component,點擊右鍵,選中ANSI C++->Reverse Engineer

②選中需要轉(zhuǎn)換的class,點擊ok,一個component的逆向轉(zhuǎn)換就完成了。

2. Visual C++ 在使用這個功能的時候,要求用戶的機器上同時安裝Visual Studio。Visual C++的逆向工程也需要首先創(chuàng)建一個component,并將該component的language屬性設置為VC++。Rational Rose對VC++模型的轉(zhuǎn)換是通過讀取VC++ Project File的信息來實現(xiàn)的,用戶只需要將對應的project file信息指定給component就可以了。
a) 將VC++ Project的信息賦給剛剛創(chuàng)建好的component。
①選擇該component,點擊右鍵,選擇Assign To Project

②在對話框中找到剛剛創(chuàng)建的component,右鍵點擊并選擇Properties。

③在下面對話框中選中需要進行轉(zhuǎn)換的Project,點擊ok,該component就與需要轉(zhuǎn)換的project關聯(lián)上了。

b) 將設置好的component轉(zhuǎn)換成模型圖
選中設置好的component,點擊右鍵,Update Model…,將會彈出確認對話框,選中需要轉(zhuǎn)換的class,點擊finish就可以了。

三.如何用Rational Rose進行數(shù)據(jù)庫結(jié)構分析
利用Rational Rose可以進行關系數(shù)據(jù)庫的數(shù)據(jù)模型設計并導出DDL語言腳本,相反還可以導入已有的DDL腳本生成數(shù)據(jù)模型以及連接SQLServer, DB2, Oracle等數(shù)據(jù)庫并導入數(shù)據(jù)庫的schema生成數(shù)據(jù)模型。
下面以SQL Server為例說明一下逆向轉(zhuǎn)換工程的步驟。
a) 首先,選擇Tools->Data Modeler-> Reverse Engineer
 b) 在進行逆向工程轉(zhuǎn)換的過程中可以選擇是從數(shù)據(jù)庫還是DDL腳本進行轉(zhuǎn)換,如果是DDL腳本轉(zhuǎn)換,就直接給定DDL腳本文件位置就可以了。本例子給出的是連接SQLServer數(shù)據(jù)庫將schema導入生成數(shù)據(jù)模型的過程,所以選中Database,進入下一步。

c) 填寫數(shù)據(jù)庫相關信息

d) 選中所有需要轉(zhuǎn)換的schema

e) 選擇需要將哪些數(shù)據(jù)庫中的元素導入到數(shù)據(jù)模型中
轉(zhuǎn)換操作會自動在組件圖(Component View)中添加數(shù)據(jù)庫組件,并在邏輯圖(Logical View)中生成以《Schema》作為命名開頭的數(shù)據(jù)模型。

打開數(shù)據(jù)模型,可以看到從數(shù)據(jù)庫中轉(zhuǎn)換過來的各個表和視圖。

從數(shù)據(jù)模型圖中可以看到表的結(jié)構以及各個表和視圖之間的邏輯關系。
四.如何得到逆向工程的模型圖
在Rational Rose中,有些模型圖是不會自動生成的,很多時候這個工作需要用戶手工來完成。也就是說,Rational Rose只負責生成模型,包括模型中的元素、元素的屬性以及各個元素之間的關系,但是需要用戶做一些額外的工作來得到視圖。
首先,通過逆向工程,用戶已經(jīng)得到了UML模型或者數(shù)據(jù)模型的各個組件以及它們之間的關系。 下一步需要在該模型上創(chuàng)建一個視圖,它們可以是類圖(class diagram,描述系統(tǒng)的靜態(tài)結(jié)構)或者數(shù)據(jù)模型圖(Data model digram,描述關系數(shù)據(jù)結(jié)構)。然后,手動從左邊的explorer中將各個元素拖進視圖中,在這個過程中,各個元素之間的關聯(lián)關系會自動在圖中表示出來,而不需要用戶再做其他工作。
例如:生成一個數(shù)據(jù)模型的數(shù)據(jù)模型圖的過程
從左邊將數(shù)據(jù)模型中的數(shù)據(jù)元素拖到右邊的數(shù)據(jù)模型圖中,表CustomerCustomerDemo和表CustomerDemographics之間的依賴關系的菱形箭頭是自動生成的,無需手工操作。

一般來說,一個系統(tǒng)中所涉及的數(shù)據(jù)元素非常多,導致視圖很擁擠,排版也非常困難。Rational Rose提供的自動排版功能可以很方便地幫助用戶解決這個問題。
選擇Format->Layout Diagram,系統(tǒng)會將圖中的所有元素用最優(yōu)方式重新排列,給用戶一個清晰的視圖。

五.總結(jié)
了解了Rational Rose的逆向工程功能,用戶就可以方便地利用這一工具進行大型數(shù)據(jù)庫相關的C++系統(tǒng)的分析和研究了。
注釋
①IBM Rational Software Architect是一個集成式設計和開發(fā)工具,使用戶可以用UML模型驅(qū)動的開發(fā)方式開發(fā)出結(jié)構清晰的應用程序和服務。
②IBM Rational Software Modeler是基于UML2.0的可定制的可視化建模和設計工具,遵循它所提供的工作流程,可以使得系統(tǒng)設計師,系統(tǒng)分析師,設計人員等寫出更為清晰的文檔,更為有效地進行溝通和設計工作。
③UML提供的各種類型的模型描述圖
用例圖(Use Case Diagram):描述系統(tǒng)提供的一個功能單元,主要目的是幫助開發(fā)團隊以一種可視化的方式理解系統(tǒng)的功能需求,包括基于基本流程的"角色"(actors,也就是與系統(tǒng)交互的其他實體)關系,以及系統(tǒng)內(nèi)用例之間的關系。
序列圖(Sequence Diagram):顯示具體用例(或者是用例的一部分)的詳細流程。
狀態(tài)圖(Statechart Diagram):表示某個類所處的不同狀態(tài)和該類的狀態(tài)轉(zhuǎn)換信息。
活動圖(Activity Diagram):表示在處理某個活動時,兩個或者更多類對象之間的過程控制流。
類圖(Class Diagram):表示不同的實體(人、事物和數(shù)據(jù))如何彼此相關;換句話說,它顯示了系統(tǒng)的靜態(tài)結(jié)構。
組件圖(Component Diagram):提供系統(tǒng)的物理視圖。組件(Component)表示模型代碼庫、執(zhí)行庫和其它組件的信息。組件是代碼的實際模塊,組件圖主要用戶是負責控制代碼和編譯部署應用程序的人。有些組件是代碼庫,有些組件是運行組件,如執(zhí)行文件或動態(tài)鏈接庫(DLL)文件。)
部署圖(Deployment View):表示該軟件系統(tǒng)如何部署到硬件環(huán)境中。
數(shù)據(jù)模型圖(Data Model Diagram):描述關系數(shù)據(jù)結(jié)構。
|