VSTS2010逆向工程—靜態篇

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的角度,您都可以藉此找出彼此間的關係:

clip_image002

圖1 Layer Diagram

接下來我們可以定義每個Layer包含什麼Artifact(工作產品),很簡單,你可以直接相關文件至對應Layer,然後對Layer按右鍵選擇View Links,即可檢視此Layer相關Artifact。

clip_image004

圖2 Layer Explorer

最後要說明的是,Layer Diagram基本上為一Snapshot(快照)圖形,後續即使您程式碼有了更動,圖形並不會自動跟著更新,所以你必須定期執行Validate Architecture。假設筆者故意將關係線刪除,然後在Layer Diagram空白處按右鍵選Validate Architecture,若圖形與實際結構有不一致之處,就會有錯誤訊息,如下圖:

clip_image006

圖3 Validate Architecture結果

3 Architecture Explorer

Architecture Explorer可以讓我們從特定點出發,追踪相關Class、Method、Member間的關係。

要叫出此視窗,請選擇Menu -> View -> Architecture Explorer,可從三個角度出發:

  • Class View:從Namespace結構出發,往下展開至Class、Method、Member。您可以追踪各Methods之間的呼叫關係

clip_image008

圖4 Architecture Explorer之Class View

當您按Architecture Explorer視窗最左上角[Create a new graph]鈕,可產生如下圖形:

clip_image010

圖5 Class View圖形

  • l Solution View:從專案角度出發,至檔案、Class、Member等等。

clip_image012

圖6 Architecture Explorer之Solution View

  • Select Files:您可以選擇多個檔案,如.exe, .dll等,此將由實體檔案展開至Class、Method、Member。這個功能筆者滿喜歡的,因為您可以用它來分析別人的程式庫(尤其是你沒有原始碼的時候)。

clip_image014

圖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專案即無法產生此圖形。

clip_image016

圖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應該不是塑模的重點,它們固然重要,但只要一份文件把它們條列式記錄下來,需要時拿來比對一下就夠用了,用不著對此專門進行塑模這麼大的工程,上述推論僅是筆者的臆測。

程式碼範例:DemoReverseEngineering.zip