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

c) 配置該ANSI C++ component,設(shè)置好該component中包含的C++代碼文件,并進(jìn)行C++語(yǔ)言的詳細(xì)設(shè)置
①選中該component,點(diǎn)擊右鍵,選擇ANSI C++->Open ANSI C++ Specification

②把Source file root directory設(shè)定為你的C++源碼文件所在的路徑,并且將需要轉(zhuǎn)換的文件添加到Project Files中,視你的需要來做其它的設(shè)定,比如:頭文件擴(kuò)展名等等。

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

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

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

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

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

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

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

c) 填寫數(shù)據(jù)庫(kù)相關(guān)信息

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

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

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

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

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

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