VSTS2010逆向工程—靜態篇
1 前言
VSTS2010除了支援一般系統分析設計流程—從需求到實作外,在本文,我們將談一下另類的流程—逆向工程 (Reverse Engineering)。很多時候,我們可能需接手別人的專案,但可能缺乏部份或甚至根本無法取得相關系統文件,但透過逆向工程,我們就能夠從一堆程式碼中找出系統的主要結構,反向產出部份的系統分析設計文件,協助我們了解系統架構。
VSTS2010能應用的Reverse Engineering類型可分為靜態與動態,靜態指的是整個程式碼的靜態結構,如組件或類別間的關係;動態則是程式碼執行的順序,如某個程式碼區段相關方法(Method)之呼叫順序。
廢話不多說,回到本文重點,VSTS2010支援靜態的Reverse Engineering,主要有三個工具—Layer Diagram、Architecture Explorer、.net Class Diagram。
2 Layer Diagram
Layer Diagram可以讓我們以高階角度來看整個軟體結構,細膩度您可以自由選擇,從專案、Namespace、Classs、到Method皆可。
筆者透過一個計算器範例來說明,它是一個Web Application。首先請新增一個Modeling Project,命名為”DemoReverseEngineering”,接著再新增空白Layer Diagram,命名為”MainLayerDiagram”,然後從Solution Explorer中拖曳ClassLibrary1、WebApplication1至MainLayerDiagram,完成後會看到兩個方塊(Layer)。接下來請按右鍵,選Generate Dependencies,VSTS2010會自動找它們之間的關係,如下圖。如此不管是從Namespace、Class或Method的角度,您都可以藉此找出彼此間的關係:
圖1 Layer Diagram
接下來我們可以定義每個Layer包含什麼Artifact(工作產品),很簡單,你可以直接相關文件至對應Layer,然後對Layer按右鍵選擇View Links,即可檢視此Layer相關Artifact。
圖2 Layer Explorer
最後要說明的是,Layer Diagram基本上為一Snapshot(快照)圖形,後續即使您程式碼有了更動,圖形並不會自動跟著更新,所以你必須定期執行Validate Architecture。假設筆者故意將關係線刪除,然後在Layer Diagram空白處按右鍵選Validate Architecture,若圖形與實際結構有不一致之處,就會有錯誤訊息,如下圖:
圖3 Validate Architecture結果
3 Architecture Explorer
Architecture Explorer可以讓我們從特定點出發,追踪相關Class、Method、Member間的關係。
要叫出此視窗,請選擇Menu -> View -> Architecture Explorer,可從三個角度出發:
Class View:從Namespace結構出發,往下展開至Class、Method、Member。您可以追踪各Methods之間的呼叫關係
圖4 Architecture Explorer之Class View
當您按Architecture Explorer視窗最左上角[Create a new graph]鈕,可產生如下圖形:
圖5 Class View圖形
- l Solution View:從專案角度出發,至檔案、Class、Member等等。
圖6 Architecture Explorer之Solution View
- Select Files:您可以選擇多個檔案,如.exe, .dll等,此將由實體檔案展開至Class、Method、Member。這個功能筆者滿喜歡的,因為您可以用它來分析別人的程式庫(尤其是你沒有原始碼的時候)。
圖7 透過File System分析mscorlib.dll
4 .net Class Diagram
.net Class Diagram不同於UML Class Diagram,它提供了圖形與程式碼雙向即時同步功能,即一旦修改程式碼,圖形會直接更新,反之亦然,此為VSTS2008原即提供的功能。您可在Solution Explorer下,選擇你的目標專案,按工具列的[View Class Diagram]鈕,即可自動產生.net Class Diagram,如下圖。但它仍有一些限制,如Web Site專案即無法產生此圖形。
圖8 .net Class Diagram
5 結語
VSTS2010提供不同面向的工具協助您對您的程式碼進行逆向工程,Layer Diagram可從高階面看架構;Architecture Explorer能從特定點切入,只探索您關心的部份;.net Class Diagram則可分析最細部的Class結構。
在VSTS2008 版本,Architecture Edition包含Application Designer、System Designer、Logical Datacenter Designer、Deployement Designer,它們的主要作用在於塑模Non-functional Requirement,在VSTS2010它們全不見了!筆者認為Non-functional Requirement應該不是塑模的重點,它們固然重要,但只要一份文件把它們條列式記錄下來,需要時拿來比對一下就夠用了,用不著對此專門進行塑模這麼大的工程,上述推論僅是筆者的臆測。