VSTS 2010新的架構工具可以讓我們了解應用程序和功能設計,並幫助驗證設計和執行不偏離。它除了支持一般系統分析設計流程(需求→實體)外,也支持
另一類的流程—逆向工程(Reverse Engineering)。
通過逆向工程可以理解應用程序之間的部分是重要的相互依賴關系,以確定可能會出現的問題。此外,直觀圖可以幫助我們找到最佳位置來執行新的功能。
DGML文件可以使解決方案產生依賴矩陣和布局,每個視圖可以在項目結構中提供一個不同的視圖,如圖1所示。
圖1 程序集關系分析圖
通過高級的視圖功能可以來分析模型的整體結構。在一個區域中,可以根據需要修改15分鐘到一個小時之間的變化差異的依賴關系,如圖2所示。
圖2 類關系分析圖
單擊相應的類,在出現方向箭頭處單擊可放大局部類之間的關系圖,如圖3所示。
圖3 類關系局部放大分析圖
VSTS 2010逆向工程類型可分為靜態與動態:靜態指的是整個程序代碼的靜態結構,如組件或類間的關系;動態則是程序代碼執行的順序,如某個程序代碼區段的相關方法引用與響應順序。
1.靜態逆向工程(Static Reverse Engineering)
VSTS 2010提供針對不同功能層面的分析工具來輔助程序代碼進行逆向工程:Layer Diagram可從高階面看架構;Architecture Explorer能從特定點切入,只探索我們所關心的部分;.net Class Diagram則可分析最細節的Class結構。它支持靜態的逆向工程,主要有三個工具:Architecture Explorer、Layer Diagram和Class Diagram。
應用&實踐
靜態逆向工程—Web應用代碼分析范例
(1)層圖(Layer Diagram)
Layer Diagram可以讓我們以高層的角度來分析整個軟件結構,細膩程度可以自由選擇,從項目、Namespace、Class、到方法皆可。
①首先打開一個Web Application工程,打開VS新增一個Modeling Project,命名為“DemoReverseEngineering”,新增空白Layer Diagram,命名為“MainLayerDiagram” (Architecture|New Diagram|Layer Diagram),然後從Solution Explorer中拖曳ClassLibrary1、WebApplication1到MainLayerDiagram,然後可以看到兩個方塊(Layer),單擊方塊並單擊鼠標右鍵,選“Generate Dependencies”命令,VSTS 2010會自動生成之間的關系,如圖4所示。
圖4 關系層圖
②我們可以定義每個Layer包含的工作產品(Artifact),並可以直接用相關文件對應到Layer,然後在Layer上單擊鼠標右鍵選擇“View Links”命令,
即可檢視此Layer的相關工作產品,如圖5所示。
圖5 層浏覽器
Layer Diagram基本上為快照(Snapshot)圖形,後續即使程序代碼有了變動,該圖形也並不會自動跟著更新,所以必須定期執行Validate Architecture。
(2)架構浏覽器(Architecture Explorer)
架構浏覽器可以讓我們從特定點開始分析相關類(Class)、方法(Method)、成員(Member)間的關系。打開VS IDE,選擇“View”|“Architecture Explorer”或者“Architecture”|“Windows”|“Architecture Explorer”命令可打開架構浏覽器,如圖6所示。
圖6 架構浏覽器類視圖
打開架構浏覽器窗口,單擊左上角的“Create a new graph”圖標,顯示類關系視圖,如圖7所示。
圖7 類關系視圖
外,解決方案視圖(Solution View):從項目角度出發到程序、類等。選擇文件(Select Files):可以選擇多個程序文件,如.exe、.dll等,此將由實體程序展
開到類、方法等。當沒有原始代碼時,可以用此功能來分析動態鏈接庫。
(3)類圖(Class Diagram)
VS.Net類圖不同於UMl Class Diagram,它提供了圖形與程序代碼雙向實時同步功能,若修改程序代碼,視圖會自動更新。可在Solution Explorer下選擇目標項目,
單擊工具欄的“View Class Diagram”按鈕,即可自動生成.Net Class Diagram,如圖8所示。
圖8 類關系圖
2.動態逆向工程(Dynamic Reverse Engineering)
VSTS 2010新增架構工具支持動態逆向工程,主要有兩個工具:依賴圖(Dependency Graph)和Sequence Diagram(時序圖)。以前的程序開發人員,當分析程序代碼
完全沒有頭緒時,需要從程序代碼中直接理解程序流程是一件很困難且痛苦的事,新增的兩個工具會大大提高代碼分析的效率。
應用&實踐
動態逆向工程—Web應用代碼分析范例
(1)依賴圖(Dependency Graph)
依賴圖可以協助理解程序代碼的結構與關系,可以透過架構浏覽器(Architecture Explore)來生成依賴圖。
首先在Architecture Explorer中選擇“Class View”|“WebApplication1”|“_Default”|“Button1_Click1”,按“Ctrl +”包含的所有方法鍵,並選擇其所包含所有方法,然後單擊“Create a new graph…”按鈕,即可將剛才類(Class)階層與方法(Method)關系繪制成依賴圖(Dependency Graph),如圖9所示。
圖9 展現依賴圖
(2)順序圖(Sequence Diagram)
順序圖是用來表現程序流程的圖像工具,在VSTS 2010中也用於對象導入系統的設計,可以手工直接繪制Sequence Diagram功能,也能通過
逆向工程選擇代碼段自動生成圖形。
①在VS 2010中,打開Default.cs程序文件,找到Button1_Click1()方法,單擊鼠標右鍵,在彈出菜單中選擇“Generate Sequence Diagram”命令。
設置順序圖,如圖10所示。
圖10 設置生成順序圖
l Maximum call depth:決定掃描程序調用層數來產生順序圖,默認值為3,意指超過3層的呼叫不納入Sequence Diagram。
l Include calls in:決定哪些范圍的方法調用要納入順序圖,默認值為當前解決方案(Current solution)。
l Exclude calls to:決定哪些方法調用要略過,不納入順序圖。
②單擊“OK”按鈕,生成順序圖,將可以幫助分析了解程序流程,如圖11所示。
圖11 從程序代碼生成順序圖
對於生成後的順序圖可以手工修改方法名稱,但它不會反映到程序代碼中(它只是時間點的快照(Snapshot)。不支持圖形與程序代碼雙向互動。
(3)分組生命線(Lifeline Grouping)
在VSTS 2010中,順序圖具有合並功能,可以通過Group功能把Lifeline合並起來,按“Ctrl ”鍵選擇多個Lifeline後,用鼠標右鍵單擊選擇“Collapse”,
即可合並成LifelineGroup。例如,可以將兩個Class1合並起來,若要展開,用鼠標右鍵單擊選擇“Expand”即可,如圖12所示。
圖12 合並分組生命線順序圖