原文網址:http://tb.blog.csdn.net/TrackBack.aspx?PostId=1588518java
筆者在多年的軟件開發過程當中,閱讀過很多成熟軟件的源碼,經過參考借鑑先進軟件的設計理念,少走了不少彎路。多年的經驗告訴我要想在軟件架構設計上有快速進步,惟有站在巨人的肩膀上,逆向工程即是通向巨人肩膀的一條捷徑。然而作過逆向工程的人都知道,要想對源碼進行逆向工程,發掘設計者的設計理念和意圖實在是一件不容易的事情。可是,只要掌握了必定的方法和技巧,逆向工程也不是不可能的任務。本文重點針對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交流探討: abstractid@gmail.com
架構