Visual Studio 2010:架構(gòu)師最怕程序員知道的新工具
原創(chuàng)【51CTO獨家特稿】2010年4月12日是微軟Visual Studio 2010正式版發(fā)布的日子。作為Visual Studio的用戶,您是否還記得自己使用的***個Visual Studio版本?是否還記得CODE出***段代碼時的興奮?是否還記得那無數(shù)個尋找Bug的日日夜夜?51CTO開發(fā)頻道帶您一起走進Visual Studio歷史,今天我們要介紹的是——Visual Studio 2010。
Visual Studio 2010建模概述
在微軟Visual Studio 2010(Visual Studio 2010 Ultimate)中,應(yīng)用程序生命周期(ALM)是其重要特性和SDLC實現(xiàn)方式之一。我們將一個軟件的生命周期(SDLC)劃分為幾個階段,而利用各種工具輔助每個關(guān)鍵環(huán)節(jié)進行管理,就稱為應(yīng)用程序生命周期管理(ALM,Application Lifecycle Management)。微軟的Visual Studio 2010將會努力打造一個功能平等、共同分擔(dān),易用便捷的平臺,以用于組織內(nèi)的應(yīng)用程序生命周期管理過程。在Visual Studio 2010的工具中,真正主角已經(jīng)不在是作為編碼工具的Visual Studio IDE,而是ALM的核心TFS(Team Foundation Server)。
其中,在架構(gòu)方面則是通過新的架構(gòu)瀏覽器(Architecture Explorer)和架構(gòu)層圖(Architecture Layer Diagram),以圖形化的方式描述系統(tǒng)架構(gòu),從而使得項目中的技術(shù)人員或非技術(shù)人員都能以模型透過圖形化的方式進行協(xié)作,以及定義企業(yè)與系統(tǒng)功能。另外,VSTS 2010也同時支持統(tǒng)一建模語言(UML,Unified Modeling Language)及特定領(lǐng)域語言(DSL,Domain Specific Language),架構(gòu)設(shè)計人員在Visual Studio 2010中可以進行架構(gòu)與建模設(shè)計,從而擺脫了傳統(tǒng)使用非VS架構(gòu)設(shè)計工具,使得設(shè)計師可以更有效率的進行.NET架構(gòu)設(shè)計工作。
微軟在最初的時候,項目中的技術(shù)人員使用一些單獨的開發(fā)工具進行軟件開發(fā),例如架構(gòu)師使用Rose進行架構(gòu)設(shè)計,開發(fā)人員則使用Visual Studio進行編碼。同時,項目中的非技術(shù)人員則使用一些通用的項目管理工具進行項目管理,例如項目經(jīng)理使用Project,Excel等制定項目計劃,進行任務(wù)劃分和分配等。Visual Studio經(jīng)過近十年左右的發(fā)展,已經(jīng)不再是僅僅面向某一個角色(開發(fā)人員)的工具,而是要服務(wù)于軟件開發(fā)過程中的所有不同的角色(開發(fā)人員、測試人員、架構(gòu)師、項目經(jīng)理等),使其覆蓋在整個軟件開發(fā)生命周期(SDLC)中,所以,在Visual Studio 2010中的各個功能之間,彼此相互關(guān)聯(lián)和互通也大大增強。
我們可以通過Visual Studio 2010架構(gòu)泳道(swim-lane)圖,來對Visual Studio 2010建模過程功能應(yīng)用更直觀的了解。如圖1所示。
圖1 Visual Studio 2010建模過程結(jié)構(gòu)
在架構(gòu)建模設(shè)計過程中,同樣遵循ALM的過程定義(理解代碼、域理解、控制維護、擴展性等)。我們可以根據(jù)產(chǎn)品所針對的問題,將通過上圖中的4個主題的方式來分析Visual Studio 2010建模功能過程。例如,“理解代碼”描述如何利用Visual Studio 2010中的代碼分析和可視化技術(shù)幫助用戶分析理解已有的系統(tǒng)。最終,用戶可以利用這些技術(shù)在已有的代碼庫基礎(chǔ)上幫助客戶實現(xiàn)***的功能需求。
Visual Studio 2010新增了UML Modeling Project,提供了對類圖,時序圖,用例圖等的支持,這也是基于VS.NET DSL來實現(xiàn)。如圖2所示。
圖2 DSL設(shè)計模型
VSTS2010架構(gòu)分析工具
VSTS 2010全新的架構(gòu)工具可以讓我們了解應(yīng)用程序和功能設(shè)計,并幫助驗證設(shè)計與執(zhí)行過程中不偏離開發(fā)目的。它除了支持一般系統(tǒng)分析設(shè)計流程(需求—>實體)外,也支持另一類的流程——逆向工程 (Reverse Engineering)。
通過逆向工程可以理解應(yīng)用程序之間的部分是重要的依賴,以確定可能會出現(xiàn)問題。此外,直觀圖可以幫助我們找到***地方來執(zhí)行新的功能。DGML文件可以使解決方案產(chǎn)生的依賴矩陣和布局,每個視圖可以在項目結(jié)構(gòu)中提供一個不同的視圖。如圖3所示。
圖 3 程序集關(guān)系分析
通過高級的視圖功能可以來分析模型的整體結(jié)構(gòu)。在一個區(qū)域中,可以根據(jù)需要修改15分鐘到一個小時之間的變化差異的依賴關(guān)系,也可以放大局部類之間的關(guān)系圖。
VSTS2010逆向工程類型可分為靜態(tài)與動態(tài),靜態(tài)指的是整個程序代碼的靜態(tài)結(jié)構(gòu),如組件或類別間的關(guān)系;動態(tài)則是程序代碼執(zhí)行的順序,如某個程序代碼區(qū)段相關(guān)方法調(diào)用與響應(yīng)順序。
靜態(tài)逆向工程(Static Reverse Engineering)
VSTS2010提供針對不同功能層面的分析工具來輔助程序代碼進行逆向工程。Layer Diagram可從高階面來看架構(gòu);Architecture Explorer能從特定點切入,只探索我們所關(guān)心的部分;.net Class Diagram則可分析詳細部分的Class結(jié)構(gòu)。靜態(tài)的逆向工程,主要有三個工具:Architecture Explorer、Layer Diagram和Class Diagram。Layer Diagram可以讓我們以高層角度來分析整個軟件結(jié)構(gòu),細膩程度可以自由選擇,從項目、Namespace、Classs、到方法都可以。如圖4所示。
圖 4 關(guān)系層圖
我們可以定義每個Layer包含的工作產(chǎn)品(Artifact),并可以直接用相關(guān)文件對應(yīng)到Layer,然后對Layer右鍵單擊選擇View Links,即可檢視此Layer相關(guān)工作產(chǎn)品。Layer Diagram基本上為快照(Snapshot)圖形,后續(xù)即使程序代碼有了變動,圖形并不會自動跟著更新,所以必須定期執(zhí)行Validate Architecture。如圖5所示。
圖 5 層瀏覽器
動態(tài)逆向工程(Dynamic Reverse Engineering)
在以前程序開發(fā)等人員,當(dāng)分析程序代碼完全沒頭緒時,需要從程序代碼中直接理解程序流程,這是一件困難且很痛苦的事。 VSTS2010新增架構(gòu)工具支持動態(tài)逆向工程,主要有兩個工具:依賴圖(Dependency Graph)和Sequence Diagram(時序圖),使用這兩個工具會大大增強代碼分析的效率。依賴圖可以協(xié)助理解程序代碼的結(jié)構(gòu)與關(guān)系,可以透過架構(gòu)瀏覽器(Architecture Explore)來生成依賴圖。順序圖是用來表達程序流程的圖像工具,VSTS2010也用于對象導(dǎo)入系統(tǒng)設(shè)計,可以手工直接繪制Sequence Diagram功能,也能通過逆向工程依選擇代碼段自動生成圖形。
圖6 展現(xiàn)順序圖合并
如圖6所示,分組生命線(Lifeline Grouping)。在VSTS2010中,順序圖具有合并功能,可以通過Group功能把Lifeline合并起來,按“Ctrl”鍵選擇多個Lifeline后,右鍵單擊選“Collapse”,即可合并成LifelineGroup。例如,可以將兩個Class1合并起來,若要展開,右鍵單擊選“Expand”。
#p#
VSTS 2010模型瀏覽器
在實際的項目開發(fā)實踐中,大多數(shù)情況下都是在已有代碼的基礎(chǔ)上構(gòu)建新的系統(tǒng)。在這種情況下,架構(gòu)師或者開發(fā)人員遇到的一個典型的問題是:沒有好的工具可以幫助他們很好的理解現(xiàn)有代碼的架構(gòu),從而很難有效地在現(xiàn)有代碼的基礎(chǔ)上,添加新的功能以滿足新的需求。為了解決這個問題,VSTS 2010提供了新的兩個重要的建模工具:UML模型瀏覽器(UML Model Explorer)和架構(gòu)瀏覽器(Architecture Explorer)。新的模型瀏覽器可以讓架構(gòu)師為已有代碼創(chuàng)建完整的架構(gòu)圖,并且能夠理解原有系統(tǒng)的各個組件是怎樣協(xié)作在一起的。這將為架構(gòu)師決定如何設(shè)計、使用、復(fù)用或者是否放棄現(xiàn)有代碼,提供了非常有價值的參考信息。
UML模型瀏覽器(UML Model Explorer)
在VSTS 2010 Architecture和Ultimate版本中,新增加了一個新的工具窗(UML Model Explorer)來幫助用戶理解和使用所創(chuàng)建的UML模型。它是一個樹狀結(jié)構(gòu)的WPF組件,用來展示UML模型中的層次結(jié)構(gòu)。在這里,模型是指所創(chuàng)建Modeling Project(工程模板)中的內(nèi)容。通過這個工程模板可以創(chuàng)建模型工程,在模型工程中再創(chuàng)建UML圖。也就是說UML類圖、活動圖、用例圖、組件圖,只能在模型工程中才能創(chuàng)建,并且可以按照模型架構(gòu)進行設(shè)計與創(chuàng)建層次。
Modeling Project是模型數(shù)據(jù)、圖表文件和其他用戶想要存儲的資源(比如Excel、Word文檔)的容器。用戶可以在任何新建的或者已有的解決方案中添加該工程,在解決方案中同樣支持不同程序工程(C#、VB、Web等等)。模型工程Modeling Project同樣也支持版本控制。一般來說,UML Model Explorer中的根節(jié)點用來表示Modeling Project本身。如圖7所示。
圖7 模型工程創(chuàng)建
創(chuàng)建模型工程后,在Solution Explorer下有一個默認創(chuàng)建的文件夾“ModelDefinition”下面的*.uml文件是建模工具自動添加和維護,不需要用戶任何手工干預(yù)。它們存儲了UML圖內(nèi)部所對應(yīng)的模型關(guān)系定義,這是整個模型工程的核心。uml文件和模型中Package對象是一一對應(yīng)的,當(dāng)創(chuàng)建好一個新的模型工程后,會有一個默認ModelDefinition.uml文件被創(chuàng)建,它對應(yīng)了整個模型的根Package,也就是“UML Model Explorer”窗口中的根節(jié)點。
架構(gòu)瀏覽器(Architecture Explorer)
在Visual Studio 2010中,提供了構(gòu)架瀏覽器(Architecture Explorer)工具來輔助廣大開發(fā)人員來分析和理解已有代碼或者編譯好的.Net Assembly。它能夠以Class View、Solution View和 File System的方式來瀏覽已有的系統(tǒng)代碼。Class View和Solution View支持對Visual C#和Visual Basic.Net工程的瀏覽,而File System -> Select Files方式則可以用來瀏覽任何基于.Net的編譯好的Assembly文件的內(nèi)容,類似Reflection反編譯工具的功能。如圖8所示。
圖8 架構(gòu)瀏覽器
另外,可以通過鼠標(biāo)拖拽的方式,直接把構(gòu)架瀏覽器中的內(nèi)容通過拖拽的方式添加到已有的依賴圖上。除了能瀏覽打開的工程之外,構(gòu)架瀏覽器還可以直接瀏覽編譯好的Assembly文件中的名字空間、類型等,只是不能雙擊導(dǎo)向到相應(yīng)的代碼,其它都與直接瀏覽工程差不多。如圖9所示。
圖10 架構(gòu)瀏覽器選擇類視圖生成依賴圖
規(guī)格瀏覽器(Spec Explorer)
Spec Explorer是微軟發(fā)布的一款與Visual Studio 2010緊密整合的基于模型測試的工具,也是一個Visual Studio集成開發(fā)環(huán)境的插件。它已經(jīng)被大量用于微軟內(nèi)部技術(shù)團隊的測試,并已在Windows協(xié)議測試工程(超過兩百工程師參與并協(xié)同工作)。Spec Explore與VS整合工作環(huán)境是基于模型的測試(Model-Based Testing,MBT)技術(shù),它是一個輕量級的,形式化的驗證軟件系統(tǒng)的方法,并可以對測試軟件系統(tǒng)(System Under Test,SUT)進行形式化的建模,設(shè)計出機器可讀的模型;目前完全驗證一致性的代價非常高,重量級的形式化方法往往難以被應(yīng)用到實際工程中,而基于模型的測試在這方面體現(xiàn)了優(yōu)勢,并已被運用到很多大型項目中。如圖11所示。
圖11 Spec Explore與VS整合基于模型測試
用戶可以通過Spec Explorer對一個軟件系統(tǒng)的期望行為進行建模,并自動生成能夠在Visual Studio的測試框架下運行的測試代碼。模型可以用當(dāng)前主流的程序設(shè)計語言C#開發(fā),然后通過Cord語言腳本對模型進行配置和裁剪。
Spec Explorer工具可以自動探索規(guī)格說明(Specification,Spec)的所有潛在行為,并將其行為模型表示為狀態(tài)機。一次探索的輸出有可能非常大,所以Spec Explorer提供了Cord語言對輸出進行裁剪,并選出測試中真正關(guān)心的場景。并能夠高效的解決狀態(tài)爆炸的問題。
SpecExplorerVisual Studio 2010.msi插件可以在
http://msdn.microsoft.com/en-us/devlabs/ee692301.aspx下載。
開發(fā)設(shè)計模型
Visual Studio 2010 Ultimate的ALM涵蓋了系統(tǒng)設(shè)計到測試階段的工具。其中,在架構(gòu)方面包括新的架構(gòu)檢視工具(Architecture Explorer),增加對統(tǒng)一建模語言(UML)的支持,例如類圖、用例圖、活動圖和時序圖等;以及架構(gòu)層圖(Architecture Layer Diagram),以圖形化的方式描述系統(tǒng)架構(gòu),從而使得項目中的技術(shù)人員或非技術(shù)人員都能以模型透過圖形化的方式進行協(xié)作,以及定義企業(yè)與系統(tǒng)功能關(guān)系等。
VSTS 2010架構(gòu)功能組成,主要功能分為三部分:1)理解現(xiàn)有代碼;2)明確結(jié)構(gòu)設(shè)計;3)團隊合作。如圖12所示。
圖12 VSTS2010架構(gòu)功能模型
新增Visual Studio 2010的Architecture功能,可供軟件架構(gòu)師和開發(fā)等人員使用模型圖可以幫助理解代碼和用戶需求,使軟件系統(tǒng)具有更好的質(zhì)量。例如,可以使用統(tǒng)一建模語言設(shè)計用戶需求的用例,活動類和序列圖功能等,來描述和溝通用戶需求,從而增強ALM的周期管理控制。Architecture工具模板,如圖13所示。
圖13 Architecture工具模板
當(dāng)在系統(tǒng)需求確定之后,我們便進入基于UML的面向?qū)ο蟮脑O(shè)計(Object-Oriented Design,OOD)系統(tǒng)設(shè)計階段,在這個階段中,將通過以下UML圖來呈現(xiàn)Visual Studio 2010在設(shè)計階段的支持和應(yīng)用。
Visual Studio 2010的Architecture工具包括以下UML圖(參考圖9):
◆活動圖(Activity Diagram):在參與者之間闡明業(yè)務(wù)用例實現(xiàn)的工作流程。
◆組件圖(Component Diagram):組件圖的主要目的是顯示系統(tǒng)組件間結(jié)構(gòu)或接口的關(guān)系。
◆類圖(Class Diagram):展示了系統(tǒng)的邏輯結(jié)構(gòu),類和接口的關(guān)系。可以用于存儲和系統(tǒng)之間的關(guān)系交換數(shù)據(jù)類型。
◆順序圖(Sequence Diagram):主要是顯示對象之間發(fā)送的消息的時間順序。
◆用例圖(Use Case Diagram):描述角色和用例之間的關(guān)系,著重展示系統(tǒng)必須實現(xiàn)的功能,用于在需求分析階段分析客戶需求。
此外,可以從已有代碼創(chuàng)建:層圖(Layer Diagram),代碼之間的不同部分依賴;類圖,
類型及其.NET關(guān)系代碼;順序圖,在方法調(diào)用.NET代碼順序。
UML 2.1.2規(guī)范定義了13種圖,Visual Studio 2010支持其中最常用的5種圖(類圖、用例圖、活動圖、組件圖和順序圖)。它們的底層的Meta模型是完全符合UML2.1.2規(guī)范定義的模型關(guān)系。
作者簡介
高陽,微軟MVP,51CTO駐站專家。連續(xù)兩屆微軟全球最有價值專家,微軟(北京).NET俱樂部講師。上海復(fù)旦大學(xué)軟件工程碩士,北京交通大學(xué)計算機科學(xué)學(xué)士。
【編輯推薦】