幾個開發工具的java逆向工程(java reverse engineering)功能比較

原文網址:http://tb.blog.csdn.net/TrackBack.aspx?PostId=1588518

筆者在多年的軟件開發過程中,閱讀過不少成熟軟件的源碼,通過參考借鑑先進軟件的設計理念,少走了很多彎路。多年的經驗告訴我要想在軟件架構設計上有快速進步,唯有站在巨人的肩膀上,逆向工程便是通向巨人肩膀的一條捷徑。然而做過逆向工程的人都知道,要想對源碼進行逆向工程,發掘設計者的設計理念和意圖實在是一件不容易的事情。但是,只要掌握了一定的方法和技巧,逆向工程也不是不可能的任務。本文重點針對java語言的逆向工程,並不完全適用於其他語言。

逆向工程的基本方法和步驟:
1. 軟件功能性試用。
輸入:用戶手冊(user manual),功能列表(feature list),軟件的release版本。
輸出:用例(use case)
方法:軟件試用。

2. 代碼動態結構剖析,又叫功能流(flow)的剖析。
目的: 功能流的是軟件的核心,它代表了軟件實現該功能的方法,決定了軟件的基本架構。
輸入:源代碼,用例
輸出: 活動圖,順序圖。
方法:可以用的手段有動態和靜態兩種。動態手段包括設置斷點(break point), 查看調用棧(call stack);靜態手段包括通過集成開發環境(IDE)直接對函數調用進行跟蹤,包括正向跟蹤(直接查看被調函數)和反向跟蹤(查找函數的調用者 (reference)),或者使用UML reverse engineering工具直接從代碼逆向生成順序圖(sequence diagram)

3. 代碼靜態結構剖析,又叫模塊結構剖析。
目的:靜態結構的主要作用是增強代碼的複用性,可維護性和擴展性。通過分析代碼的靜態結構,我們可以得出代碼的複用模式。
輸入:軟件設計文檔(design document), 類似於java doc的代碼結構文檔,源代碼。
輸出:模塊結構圖,類圖。
方法:通過UML reverse engineering工具直接從代碼生成類圖(class diagram)。通過觀察代碼的組織方式(目錄結構)。

1. eclipse
eclipse是我最喜歡的java開發工具,優秀的人機交互界面給開發人員帶來了不盡的便捷,豐富的插件讓eclipse更易於擴展和定製。在源碼逆向工程方面,它也提供了最簡潔豐富的功能。
針對源碼的動態剖析,eclipse的JDT提供了函數直接跳轉,調用樹(call hierarchy),引用搜索(reference search),變量的讀操作搜索(read access search), 變量的寫操作搜索(write access search),函數或變量的申明搜索(declaration search)。最重要的還有eclipse提供了功能強大的java集成調試環境。
針對源碼的靜態剖析,JDT提供了,類型樹(type hierarchy),接口實現搜索(implementor search).

如果您想把這些信息用UML圖表示出來,可以使用together eclipse, 它可以把源碼和模型動態關聯起來。並提供了豐富的UML逆向生成的功能。但是together eclipse對PC配置要求較高,在筆者的AMD sempron 2200/512M/80G的配置下,勉強能夠使用。如果要分析源碼規模在百萬行的項目,該軟件對PC資源的消耗太大,個人並不推薦。

eclipse已經提供了完整的逆向工程功能,雖然與UML的結合方面並不是很理想,但是筆者還是強烈推薦eclipse。原因很簡單,將軟件設計圖形化的工作還是交給大腦直接做比較簡單,我們最需要的功能是隨時可以得到我們想要的源碼信息。eclipse在這方面可以說已經是登峯造極。

2. Java studio enterprise 8.1
非常棒的java IDE, 由Sun主導開發,功能堪比eclipse。但是個人感覺易用性方面略迅與eclipse。本身就支持java源碼到UML的轉換,但是與 together eclipse存在同樣的問題——佔用了大量的PC資源。可以根據個人喜好在java studio與eclipse之間做出選擇,個人還是推崇eclipse.

3. rational rose
功能強大的建模工具,以UML爲核心,支持多種語言的逆向工程。在圖形顯示方面,性能較together eclipse和java studio優異。目前只支類圖的逆向工程,不支持從源碼直接生成順序圖。

4. staruml
只能算是個畫圖工具,以UML爲核心,不支持逆向工程。

5. sourceinsight
功能完整的逆向工程工具,支持多種語言,C/C++開發人員尤其偏愛。支持調用樹(call hierarchy),引用搜索(reference search),類型樹(type hierarchy),函數或變量的申明搜索(declaration search)。簡單的函數調用關係的圖形化顯示。
不支持源碼調試功能。

6. rhapsody7.0
功能強大的UML建模工具,堪比rational rose, 支持多種語言逆向工程,嵌入式開發人員尤其偏愛。相比rational rose, rhapsody提供了更爲嚴格的UML規範,支持更爲精確的代碼生成,甚至可以生成makefile. 針對不同的開發平臺有不同的配置。

上面的介紹僅供參考,筆者還是最喜歡eclipse作爲java的逆向工程工具。eclipse可以完全勝任,基本可以不再依賴其他的工具。如果您有更好的見解,歡迎email交流探討: [email protected]
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章