Rose與PowerDesigner:兩款建模工具的對比

shwenwen發表於2011-05-23

Rose和PowerDesigner雖然在專案分析設計領域已經成為被高度聚光的明星,但是在具體使用哪款工具的問題上,不同的公司,不同的人,出於成本,習慣抑或個人喜好,往往有自己的判斷。由於筆者在不同的公司中被分別要求使用Rose或PowerDesigner進行分析設計工作,所以對二者有著較為細緻的體驗。
Rose走大而全,一站式的策略,它沒有將資料庫設計和麵向物件設計清晰地分開,僅以不同的目錄來區分。而PowerDesigner將兩者劃分到獨立的模型檔案中,分別對應不同的設計環境,並透過模型之間的轉換工具建立各模型的關聯。即使對於資料庫設計模型,PowerDesigner也需要你選擇一個具體的資料庫產品及其版本,以便工作環境對具體資料庫敏感。所以Rose顯得大而化之,而PowerDesigner則比較精細和一體化。Rose的逆向工程,文件輸出,程式碼生成等輸入輸出功能上表現得比較生硬單調,PowerDesigner在逆向工程,特別是文件輸出和程式碼生成這些功能上提供了精細的控制,讓使用者擁有高度的自由度。
Rose在操作體驗上存在很多需要改進的地方,Rose偏向於讓使用者用滑鼠進行操作,對鍵盤操作支援不好。而PowerDesigner在使用者體驗上得分很高,大部分操作都可以透過鍵盤完成,在充分熟悉其快捷鍵的前提下,PowerDesigner將給設計者一種行雲流水的感覺,使用者互動上更加人性化。此外,Rose往往佔用更多的資源,容易異常退出,PowerDesigner則顯得輕便穩定。所以,我個人對兩者的體驗就是“Rose笨拙,PD利索”。下面將具體列出Rose和PowerDesigner的一系列的區別,相信大家可以藉由這些比較而見微知著,窺斑知豹,以資在選擇工具時,提供參考

[@more@]

一、二者的出身 作為世界最著名的兩大CASE工具,Rational Rose和PowerDesigner的名聲可謂如雷貫耳。Rose是當時全球最大的CASE工具提供商Rational的拳頭產品,UML建模語言就是由Rational公司的三位巨頭Booch、Rumbaugh和Jacobson發明的,後來Rational被IBM收購,所以Rose可謂出身名門,嫁入豪族。而PowerDesigner也有一段好玩的歷史,作者王曉昀是一位中國人,在法國SDP軟體公司工作時,由於苦覓一個好用的CASE工具未果,乾脆自由開搞,整了個AMC Designor出來,居然一炮打響,在法國賣得個“巴黎紙貴”,後來SDP被Powersoft公司收購,同年Sybase這隻大黃雀又吃下了Powersoft這隻螳螂,所以PowerDesigner也是驚豔出場,星光四射。
但兩者所走的明星路線卻很不相同,Rose出道是時,走的是UML物件導向建模,而後再向資料庫建模發展,而PowerDesigner則反其道而行之,它先是一個純粹的資料庫建模工具,後來才向物件導向建模,業務邏輯建模及需求分析建模進軍,最終變成“演視歌三棲”明星。
由於第一印象的影響,所以Rose常常給人的印象還是隻是物件導向分析設計的工具,而PowerDesigner給人的印象則還停留在資料庫建模工具上。其實,現在的Rose和PowerDesigner都即可以進行資料庫建模,也可以進行物件導向建模,只是存在支援上的偏重而已。
二、二者區別概述
Rose和PowerDesigner雖然在專案分析設計領域已經成為被高度聚光的明星,但是在具體使用哪款工具的問題上,不同的公司,不同的人,出於成本,習慣抑或個人喜好,往往有自己的判斷。由於筆者在不同的公司中被分別要求使用Rose或PowerDesigner進行分析設計工作,所以對二者有著較為細緻的體驗。
Rose走大而全,一站式的策略,它沒有將資料庫設計和麵向物件設計清晰地分開,僅以不同的目錄來區分。而PowerDesigner將兩者劃分到獨立的模型檔案中,分別對應不同的設計環境,並透過模型之間的轉換工具建立各模型的關聯。即使對於資料庫設計模型,PowerDesigner也需要你選擇一個具體的資料庫產品及其版本,以便工作環境對具體資料庫敏感。所以Rose顯得大而化之,而PowerDesigner則比較精細和一體化。Rose的逆向工程,文件輸出,程式碼生成等輸入輸出功能上表現得比較生硬單調,PowerDesigner在逆向工程,特別是文件輸出和程式碼生成這些功能上提供了精細的控制,讓使用者擁有高度的自由度。
Rose在操作體驗上存在很多需要改進的地方,Rose偏向於讓使用者用滑鼠進行操作,對鍵盤操作支援不好。而PowerDesigner在使用者體驗上得分很高,大部分操作都可以透過鍵盤完成,在充分熟悉其快捷鍵的前提下,PowerDesigner將給設計者一種行雲流水的感覺,使用者互動上更加人性化。此外,Rose往往佔用更多的資源,容易異常退出,PowerDesigner則顯得輕便穩定。所以,我個人對兩者的體驗就是“Rose笨拙,PD利索”。下面將具體列出Rose和PowerDesigner的一系列的區別,相信大家可以藉由這些比較而見微知著,窺斑知豹,以資在選擇工具時,提供參考。
三、模型組織和層次結構上的區別
1、模型組織Rose將資料庫模型和物件模型放在一起,在進行資料表模型設計時,沒有特性化的東西。而PowerDesigner將兩者分開,其模型組織層級關係是:工作空間->模型型別->具體語言/資料庫的模型->包->資料夾->Diagram->設計元素。在建立模型檔案時,會讓你選擇模型型別,選擇模型型別後,還可以選擇模型型別下語言及版本相關的細分類。不同設計模型對應軟體工程的不同階段,如業務模型和需求模型屬於專案需求階段,而物件模型屬於概要和詳細設計階段,資料庫模型屬於詳細設計階段。它們之間雖然有很強的內在聯絡,但差異性也很明顯,硬將兩者放到一起,就象把猴子和猩猩關進同一個籠子,為了兼顧和平衡兩者之間的考量,其結果是兩者都得不到很好的支援。
Rose與PowerDesigner:兩款建模工具的對比
 圖1:新建模型視窗(PD)
Rose與PowerDesigner:兩款建模工具的對比
 圖2:新建模型視窗(Rose)
PowerDesinger可以透過模型轉換工具進行資料庫建模和麵向物件模型的相互轉換。但Rose不能將物件轉換為表,也不能將錶轉換為物件。
2、工作空間PowerDesigner有工作空間的概念,一個工作空間下可以同時開啟多個設計模型檔案;而Rose同時僅能開啟一個設計檔案,如果在設計時,需要參考其他的Rose設計模型,則需要反覆關閉現有模型,開啟參考模型,顯得設計上比較欠考慮。這個問題上兩者的差異恰似Eclipse和JBuilder的區別,Eclipse可以同時開啟多個工程,而JBuilder只能同時開啟一個工程。
3、設計介面PowerDesigner的設計介面可以左右上下移動,而Rose只能向右,向下移動,此外,PowerDesigner可以將模型元素放大很多倍,而Rose只能放大到正常倍數,不過Rose的Overview工具可以使使用者快速定位到設計區中特定的區域,有點類似於遊戲介面中常用的小地圖,挺不錯;
 Rose與PowerDesigner:兩款建模工具的對比
 圖3:Overview工具(Rose)
而在PowerDesigner中,你可以透過F8快捷鍵檢視Diagram的總覽圖,不過只得透過放大操作定位到定位區域。
4、對模型和語言的支援
◆對設計模型的支援力度和廣度
PowerDesigner對物件模型和資料庫建模兩者的支援力度已經大抵相等,此外,還支援概念模型、業務模型、需求模型、XML模型、資訊流模型、自由模型的分析設計。不過對後面這幾個模型的支援比較初級,而且在實際的應用中,這些模型用得也比較少,PowerDesigner的突出亮點還是在資料庫建模和物件模型的設計上。
對於資料庫模型,PowerDesigner支援20餘種資料庫,對於同一資料庫的不同版本還提供單獨的支援,以便在設計資料庫模型時,提供資料庫和版本相關的設計。對於物件導向模型,PowerDesigner支援11種主流語言,為對Java 5.0提供單獨的支援。
Rose基本上可以說是一個物件模型設計工具,對資料庫模型的支援相對粗糙,內嵌的只支援Oracle 8資料庫,對其他資料庫設計的支援需要透過安裝外掛的方式獲得,且對資料庫物理儲存引數等較細粒度的內容支援得比較粗糙。Rose的物件模型主要支援Java、VC和VB三種語言。
◆對Java語言的支援

 Rose對Java語言的支援更好,不但為不同版本的JDK提供了支援(不過Rose 2003還不支援JDK 5.0),還為Java具體產品及設計模式(如EJB、Corba、Servlet,GOF設計模式等)提供了內嵌性的支援,這些支援直接反應在Rose的主選單上。正因為如此,使Rose背上的沉重的歷史負擔,如EJB和Corba這種語言級的東西是易變且不斷更新的,如何在這些具體產品的地位和影響已經降低時,對其作出割捨而又保證版本的相容性,是擺在設計者面前的難題。
PowerDesigner僅提供語言級物件設計的支援,不涉及語言內部的具體產品。其次因為它的設計工作區是和具體的模型型別及語言細分類相關的,而非在主選單中直接提供支援,所以PowerDesigner在升級時顯得更加從容一些。
這也是為什麼PowerDesigner能以每年一個版本的速度升級,而Rose在2003版本後,新版本還遲遲投入市場的內在原因,否則以IBM的財力,研發能力不至於對市場反應如果緩慢。
5、輸入和輸出功能的比較
◆反向工程
從將程式程式碼轉換為設計模型的逆向工程功能上看,Rose更象一個IDE,它會對需要逆向工程操作的程式程式碼進行深度語義檢查,如果存在諸如程式程式碼引用了類庫之外的類,反向工程將失敗,而且在報告失敗之前,視窗會陷入長時間無響應狀態。
PowerDesigner僅對需逆向工程的程式程式碼進行淺度語法檢查,這種淺度語法檢查不涉及包,類之間的關聯,僅對諸如類名是否和類檔名匹配,是否少了“}” 等語法性的內容進行檢查。即便存在錯誤,PowerDesigner也允許你忽略錯誤,繼續進行逆向工程操作,這種寬鬆的限制帶來了很大的便利。
Rose與PowerDesigner:兩款建模工具的對比
 圖4:逆向工程失敗選擇三種選擇(PD)
忽略錯誤後,PowerDesigner會盡量修補錯誤,例如程式碼中少了對應的“}”,它將會補上,類名和檔名不一致,將忽略類檔名保持類名不變。
Rose一直宣揚的理念是IDE和設計工程進行雙向互通:在Rose中完成模型設計後匯出為IDE所用的程式碼,IDE編碼調整後又逆向工程到Rose。理念很美,深具吸引力,但是在實現中,往往很少有開發團隊會這樣做。一般CASE工具只是在分析設計階段使用,甚至很大比例的設計師僅把它當成畫圖的工具。
真正進入編碼開發階段後,將加入大量設計時不涉及的類和方法,如果將這些非骨架性的東西Reverse到CASE工具中,反而會使原來清晰的設計變得霧裡花,水中月。所以即使編碼時,需要對原分析模型進行調整,一般也是手工去調整設計模型,而不是透過逆向工程去同步,畢竟分析設計是骨架性的,而編碼是血肉性的,兩者有屬性上的區別。如果真的需要頻繁進行的程式碼和UML轉換,最好使用類似於Together一樣的工具,它嵌入到IDE中,使程式碼和模型轉換方便快捷。

 ◆文件匯出功能
PowerDesigner對文件匯出提供了精細的控制,你不但可以對文件所包含的內容項進行設定,還可以對內容項的格式進行設定。如匯出的表結構是否包括名稱、資料型別、備註等專案,這些專案在表欄中的寬度佔比,顏色,字號等等,不一而足。
PowerDesinger 12.0 還新增了一個多模型文件整合匯出的Milti-Model Report模型,允許你以多個模型作為輸入生成為統一文件,實現模型設計按階段分開,文件又統一整合的目的。
由於PowerDesigner文件匯出的設定非常精細,所以要設定好一個文件匯出模式實非不易。有鑑於此,PowerDesinger提供了三種常用的匯出模板,使用者也可以自己定義模板。透過模板可以迅速完成設計模型文件的匯出工作。
而Rose沒有匯出模板的概念,更不能對匯出項和格式進行設定,你只能按Rose的系統內建的方式進行模型文件的釋出。
◆程式碼匯出
在匯出設計模型的程式碼時,PowerDesigner提供了精細的控制,不但可以進行物件級別,還可以進行程式碼級別的控制(如是否要生成欄位備註的程式碼,外來鍵程式碼在表體程式碼內宣告還是在表體外部宣告等),而Rose沒有提供程式碼匯出的控制,也只能按其系統內部設定的方式匯出程式碼。
Rose與PowerDesigner:兩款建模工具的對比
 圖5:資料庫模型匯出設定(PD)
◆生成測試資料
PowerDesigner可為資料表生成批次的測試資料,而且你還可以制定測試資料的生成規則。這個功能給初期專案的開發測試帶來很大的便利。Rose中沒有提供類似的功能。
六、易用性上的比較
6.1、元素顯示屬性調整
Rose調整元素的顯示屬性(如類圖的顯示樣式,方法入參是否顯示等內容)的設定時,新設定僅對新建立的元素起作用,如需調整已有元素的顯示屬性,只得在設計Diagram中,逐一透過右鍵的方式一個個調整,做法有點刀耕火種的味道。 PowerDesigner在這點上顯得很人性化,在調整完元素顯示設定後,PowerDesigner彈出一個視窗,提供三個應用新設定的選擇:
Rose與PowerDesigner:兩款建模工具的對比
 圖6:元素顯示設定調整後應用範圍(PD)
其一,應用到所有元素;其二,應用到當前選擇的元素,其三,應用到新建立的元素。此外,PowerDesigner對每一類元素(如類圖,序列圖,表圖,引用等)的構成項(如表名,欄位名,主鍵列,索引列等)均可以提供單獨的顯示屬性設定,比Rose的控制要精細很多。
6.2、Undo操作
Rose的Undo操作只能回退一步,有時甚至連一步都不能回退,假設你不小心刪除了一個精心設計的模型元素,如果不及時Undo,就只得重頭再來了。Rose不給設計者後悔的機會,這種一廂情願的呆瓜式設計有時真讓人捶胸跺足,所以你在刪除或調整元素時,往往得戰戰兢兢,如履薄冰。相比之下,PowerDesigner則顯得寬宏大量,允許你Undo幾十步,自動地進行工作場景的回溯,所以在PowerDesigner下工作,會比較輕鬆自如,因為你不用為誤操作而付出代價。
6.3、查詢功能
PowerDesigner的查詢功能比較強大,可以按模型型別,元素型別限定查詢範圍;還可以使用複合條件進行精確搜尋。
Rose與PowerDesigner:兩款建模工具的對比
 圖7:高階搜尋視窗(PD)
在元素查詢結果列表中,可以選擇定位到導航樹,Diagram或者屬性設計視窗,非常方便;而Rose只能按名稱進行搜尋,且從搜尋結果列表只能定位到元素所在的Diagram中。
Rose與PowerDesigner:兩款建模工具的對比
 圖8:搜尋視窗(Rose)

 6.4、預設字型的問題
PowerDesigner有一個比較讓人討厭的東西,就是字型大小的系統預設值是8號字,對於中文來說這個字號太小了,需要9號字才比較適合。所以在設計元素時,需要分別調整字型的大小,或者去改變每種元素的預設字型設定,相對來說比較麻煩。而Rose在這點中做得不錯,系統預設的中文字型大小的預設值剛好適合。
6.5、元素佈局調整
PowerDesigner對Diagram中元素的佈局提供了更多的支援,如元素對齊排列,元素的上下圖層關係等,並提供了相應的快捷鍵,操作起來很順手。而Rose僅支援自動佈局(Auto Layout)功能,毫無二致地將選擇的元素水平中心對齊,也沒有圖層前後移動的功能。
6.6、用滑鼠進行元素選取的策略
在Diagram中選擇模型元素時,PowerDesigner採取“完全包含選取策略”,而Rose採取“部分包含選取策略”。在“完全包含選取策略”下,Diagram中的元素需要完全被滑鼠選擇的矩形區域包含後,才被選中;而在“部分包含選取策略”下,只要元素的部分割槽域被滑鼠選擇的矩形區域包含,就被選中。依個人的使用經驗,覺得“完全包含選取策略”是更適合些,Microsoft的產品也採用這種策略。因為在“部分包含選取策略”下,只要一擦邊,元素就被選擇了,其結果往往是選擇了很多不希望選取的東西,如連線,周邊元素圖形等。
6.7、程式碼預覽功能
PowerDesigner可以在屬性視窗中預覽模型元素(如類、介面、表、檢視等)對應的程式碼。在類圖的屬性視窗中,甚至還可以直接編輯預覽的程式碼來進行模型元素的設計,就象Together一樣。在設計諸如類,介面的模型元素的方法時,對於有著豐富程式設計經驗的設計師來說,有時與其透過一個又一個彈出對話方塊,還不如直接透過編寫程式碼來得方便,PowerDesigner的這種設計充分地考慮到了分析設計人員同時也是開發人員出身的特點,由此帶來很大的便利,提高了效率。
Rose與PowerDesigner:兩款建模工具的對比
圖9:類設計屬性視窗(PD)
而在Rose中,模型元素沒有程式碼預覽功能,更不能透過程式碼進行反向設計,只有透過匯出程式碼的功能才能看到模型元素的程式碼。
6.8、同型別元素統一管理視窗
PowerDesigner為每一型別元素(如欄位,表,物件,索引,主鍵等)提供了集中管理視窗,可以在該列表中對同類元素進行統一管理。如在設計資料庫模型時,希望將所有的索引儲存到一個指定的表空間中,你可以開啟索引的集中管理視窗:
Rose與PowerDesigner:兩款建模工具的對比
 圖10:索引屬性列表框(PD)
在此管理視窗中調整所有索引的Options設定就可以了。如果沒有這樣的集中管理視窗,就需要在每個表的屬性視窗中分別獨自地設定表索引的Options屬性,操作繁瑣暫且不提,如何去保證每個索引都得到正確的設定就夠讓人傷腦筋了。而在Rose下,你就得逐門逐戶查戶口式的一個個去設定,沒有捷徑可走。
PowerDesigner的這種分散設計,集中管理的設計思路體現對立統一的哲學思想的完好運用,因為事物有其獨特性,也有其統一性,需要兼顧兩者而不可偏廢。
6.9、批次編輯操作

 PowerDesigner的批次編輯操作能夠大大提高的工作效率,這些批次編輯操作包括同時選中多個元素專案,同時編輯選中項的相同屬性值,調整順序等。
Rose與PowerDesigner:兩款建模工具的對比
 圖11:批次編輯操作(PD)
Rose不支援批次編輯和批次順序調整等操作,需要逐一編輯:
Rose與PowerDesigner:兩款建模工具的對比
 圖12:不支援批次編輯(Rose)
元素快捷圖示
PowerDesigner可以建立模型元素的快捷圖示,它相當於是元素檢視層上的多份複製,使同一個物理元素對應多個邏輯的圖示。這對於大型複雜系統的分析設計特別有好處,因為一個模型元素會在多個地方被引用,這時你就可以透過Ctrl+C和Ctrl+K的方式來建立模型元素的快捷圖示,在多個地方使用它,甚至在同一個Diagram中使一個元素在不同的地方出現多次,防止大距離的關係連線導致蜘蛛網式的設計圖。
Rose也可以建立快捷圖示,即透過Ctrl+C和Ctrl+V建立,但卻不能複製一個現有的元素,Ctrl+C和Ctrl+V在PowerDesigner中是建立一個複製的元素。此外,在同一個Diagram中,同一元素的不同快捷圖示,Rose是表現為相同的名字,而PowerDesigner則會新增數字字尾,以示區分。
屬性視窗大小調整
Rose的編輯屬性視窗沒有放大,縮小按鈕,需要手工拖動滑鼠調整大小,一直不明白為什麼如此簡單的功能,Rose也要吝嗇不提供。PowerDesinger的屬性視窗則沒有這個限制。
Rose與PowerDesigner:兩款建模工具的對比
 圖13:屬性視窗(Rose)

 7、資源佔用和執行穩定性
資源佔用
Rose在進行物件導向的設計時,由於要載入大量的類庫,導致記憶體資源佔用很大,往往達300M以上,PowerDesinger的資源的佔用則小得多。
Rose與PowerDesigner:兩款建模工具的對比
 圖14:資源佔用率
穩定性上
Rose常有視窗“抽筋”的反應(視窗變白,不接受任何響應),甚至毫無徵兆地異常退出,容錯性也不太好。如在逆向工程時,如果程式碼存在錯誤,甚至僅僅對一個存在錯誤的類進行逆向工程,視窗也會出現“抽筋”現象。
PowerDesigner顯得靈活快捷,很少出現視窗“抽筋”和意外退出的現象。

轉自:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/143526/viewspace-1050251/,如需轉載,請註明出處,否則將追究法律責任。

相關文章