HOW TO:使用順序圖表探索程式碼
更新:2010 年 8 月
在 Visual Studio Ultimate 中,您可以產生「順序圖表」(Sequence Diagram) 來協助您視覺化和了解程式碼如何實作特定的方法。 順序圖表會將物件之間的互動描述成一系列生命線和訊息。 生命線代表物件的執行個體,而訊息則代表這些物件之間的方法呼叫。 您可以從 Visual C# .NET 或 Visual Basic .NET 程式碼產生順序圖表。 若要從 ASP.NET 網站專案產生順序圖表,請安裝 Visual Studio 2010 Microsoft Visual Studio 2010 Visualization and Modeling 功能套件。
注意事項 |
---|
產生的順序圖表會顯示類似於 UML 順序圖表上的項目。 從程式碼產生的順序圖表會獨立於 UML 模型存在,而且可加入至任何 .NET 專案。 反之,您以手動方式繪製的 UML 順序圖表則永遠是您在其中建立圖表之模型的一部分。 如需詳細資訊,請參閱 UML 順序圖表:參考。 |
若要在且不影響程式碼的情況下,識別和溝通想要進行的變更,您可以探索和修改產生的順序圖表。 例如,您可以加入新的生命線、訊息、互動使用和片段。
若要針對要在對應的程式碼上執行的工作建立和追蹤工作,您可以建立工作項目並連結到圖表項目。 如需詳細資訊,請參閱 HOW TO:從模型項目連結至工作項目。
本主題內容
從原始程式碼產生順序圖表
探索順序圖表上的程式碼
編輯圖表來建議設計變更
從圖表巡覽
將互動項目連結至工作項目
與其他圖表的關聯性
疑難排解順序圖表
從原始程式碼產生順序圖表
若要從程式碼產生順序圖表
在 Visual Studio 中,開啟包含方法定義的程式碼檔案。
以滑鼠右鍵按一下方法定義內的任意位置,然後按一下 [產生順序圖表]。
在 [產生順序圖表] 對話方塊的 [最大呼叫深度] 方塊中,指定您想要查看的最大呼叫層級。
例如,如果您只想要查看第一層呼叫,請將最大呼叫深度層級指定為 1。 順序圖表就會將第二層呼叫顯示成沒有目標生命線的訊息,稱為遺失訊息。
注意事項 產生圖表之後,您可以展開特定的遺失訊息。
在 [將呼叫包含於] 底下,從下表中選擇一個範圍:
若要查看
按一下
立即專案中項目的呼叫
[目前專案]
方案中項目的呼叫
[目前方案 ] (預設值)
方案內部和外部項目的呼叫
[方案和外部參考]
例如,您可以僅對目前專案中的項目進行方法呼叫的檢查,從簡單的順序圖表開始著手。 您可以產生顯示跨方案項目之呼叫的新範圍,藉以擴展圖表的範圍。 如果您想要查看不在方案中之項目的呼叫,就必須產生包含外部參考的圖表。
在 [排除對以下的呼叫] 底下,您可以透過省略對下列項目的呼叫,進一步簡化圖表:
若要省略對這些項目的呼叫
選取
屬性和事件
[屬性和事件] (預設值)
System 命名空間
[系統命名空間] (預設值)
特定的命名空間
[其他命名空間],然後在方塊中輸入命名空間,並使用逗號 (,) 分隔各命名空間。 請勿使用萬用字元 (*),因為不支援萬用字元。
若要包含對這些項目的呼叫,請清除其對應的核取方塊。
完成後,請按一下 [確定]。
Visual Studio 就會產生順序圖表,並將它加入至對應的專案。 如需有關產生順序圖表之問題的詳細資訊,請參閱疑難排解順序圖表。
注意事項 產生的順序圖表不會顯示陣列宣告。
產生圖表之後,對圖表進行的任何變更都不會出現在程式碼中,而對程式碼進行的任何變更也不會出現在圖表中。 若要顯示這些變更,必須產生新的順序圖表。 您可以任意從相同的方法產生新順序圖表。
探索順序圖表上的程式碼
順序圖表可以協助您探索程式碼,並將它展示給其他人。 若要針對這些目的完成最有用的圖表,請在產生圖表時,使用不同的範圍進行實驗。 您也可以在產生圖表之後,加以修改。 例如,您可以刪除與展示和討論設計無關的訊息。
您可以對順序圖表進行下列變更。
若要 |
請執行這些步驟 |
---|---|
顯示下一層呼叫 |
以滑鼠右鍵按一下沒有目標生命線的訊息,然後按一下 [展開輸出]。 |
在新的圖表中展開訊息 |
以滑鼠右鍵按一下訊息,然後按一下 [產生順序圖表]。 新的圖表就會加入至目前專案。 |
將一組訊息摺疊成單一生命線。 |
選取您想要組成群組的生命線、以滑鼠右鍵按一下選取範圍,然後按一下 [摺疊]。 雖然您可以重新命名群組,不過當您展開群組時,將會遺失名稱。 若要展開群組,請在群組上按一下滑鼠右鍵,然後按一下 [展開]。 |
刪除項目 |
以滑鼠右鍵按一下圖案,然後按一下 [刪除]。 |
改善版面配置 |
以滑鼠右鍵按一下圖表的空白區域,然後按一下 [重新整理配置]。 您也可以復原這個命令。 |
反白顯示選取的項目 |
以滑鼠右鍵按一下項目,然後按一下 [屬性]。 在 [屬性] 視窗中,設定 [色彩] 欄位。 |
為圖表加上附註 |
按一下 [註解] 工具、在圖表中按一下,然後在註解中輸入附註。 您可以使用 [註解連結] 工具,將註解連接至生命線或片段上的一個或多個點。 |
編輯圖表來建議設計變更
您可以變更圖表,並加入和刪除項目來協助您考慮替代設計。 您也可以將圖表的部分複製到您已在 UML 模型專案中建立的 UML 順序圖表。 這樣做可讓您將生命線與 UML 模型的型別、元件和動作項目產生關聯。
下表摘要說明適用於描述設計提議的變更。 如需詳細資訊,請參閱 UML 順序圖表:方針。
若要 |
請執行這些步驟 |
---|---|
反白顯示生命線、訊息和其他項目 |
變更項目的 [色彩] 屬性。 -或- 將 [註解] 連結至項目:
|
移動生命線 |
將生命線拖曳至圖表的不同區域。 若要移動具有遺失或尋得訊息的生命線群組,請遵循以下步驟來選取生命線,然後移動它們:
|
移動和重新排列訊息 |
在圖表上,向上或向下拖曳訊息。
|
加入生命線 |
按一下 [工具箱] 中的 [生命線],然後按一下圖表。 |
加入訊息 |
|
將生命線和訊息複製到其他圖表或從中複製 |
複製並貼上生命線。 系統也會一併複製這些生命線之間的訊息。
注意事項
當您將生命線從模型專案中的 UML 順序圖表複製到產生的順序圖表時,可能只會顯示生命線標頭,或者您可能必須調整其色彩。若要修正這個問題,請選取貼上的生命線,並設定其 [色彩] 屬性。
|
將訊息放入合併片段中 |
您可以使用合併片段來代表訊息的替代順序、迴圈以及其他撰寫。 |
將訊息移至新的圖表 |
以滑鼠右鍵按一下訊息,然後按一下 [移至圖表]。 如此就會建立新的圖表,其中包含此訊息及其附帶訊息。 在原始圖表上,此訊息會由 [互動使用] 所取代。 |
複製圖表 |
在 [方案總管] 中複製圖表,或在 [Windows 檔案總管] 中複製這些檔案。 每個圖表都有兩個相關聯的檔案。 您可以使用任何 Visual Studio Ultimate 執行個體來編輯產生的順序圖表,而且可以使用 Visual Studio Ultimate 或 Visual Studio Premium 來讀取這種圖表。 |
不反白顯示特定手動變更,例如加入項目和名稱變更 |
|
從圖表巡覽
若要 |
請執行這些步驟 |
---|---|
分別從生命線或訊息巡覽至類別或方法的定義 |
以滑鼠右鍵按一下生命線或訊息,然後按一下 [移至定義]。 |
在架構總管中尋找類別或方法 |
以滑鼠右鍵按一下生命線或訊息,然後按一下 [在架構總管中顯示]。 如需詳細資訊,請參閱 HOW TO:產生適用於 .NET 程式碼的相依性圖形。 |
將順序圖表連結至工作項目
若要協助規劃實作變更的工作,您可以將順序圖表上任何種類的項目連結至 Team Foundation Server 中的工作項目。 如需詳細資訊,請參閱 HOW TO:從模型項目連結至工作項目。
若要 |
請執行這些步驟 |
---|---|
將生命線、訊息或其他項目連結至工作項目 |
您可以稍後重複這個命令,將多個工作項目連結加入至相同的模型項目。 |
檢視連結的工作項目 |
以滑鼠右鍵按一下一個或多個項目,然後按一下 [檢視工作項目]。 |
移除工作項目的連結 |
系統會刪除模型項目與所選工作項目之間的連結。 但是,不會移除工作項目和模型項目。 |
使用產生之順序圖表的方針
當您要使用產生的順序圖表來探索程式碼時,下列方針可能很有用。
探索程式碼
您可以產生相依性圖表來取得大型程式碼主體中主要群組和相依性的整體概觀。 然後,產生順序圖表,以便將焦點放在設計的個別部分。 如需詳細資訊,請參閱 HOW TO:產生適用於 .NET 程式碼的相依性圖形。
解譯圖表
建立圖表的演算法會用符號代替可執行程式碼。 這項技術無法涵蓋某些情況。 尤其,這些情況包括:
兩個或多個生命線可能會出現在圖表中,而執行中程式碼只處理單一執行個體。 一般而言,系統會針對每則訊息產生個別的目標生命線。
生命線的型別就是程式碼中宣告的型別,即使您的程式碼永遠使用子型別也一樣。
將焦點放在設計層面
請選擇一個設計層面來放置焦點。 您可以產生不同的圖表,以便將焦點放在不同的層面,並且在任何工作階段中建立圖表檔案的複本。
若要取得清楚公開設計層面的有用圖表,您可能必須使用命名空間篩選和產生來進行實驗。
請刪除與焦點層面無關的訊息,然後展開相關訊息來顯示更多詳細資料。
除非代表共同作業物件群組之生命線的內部互動與您要放置焦點的層面有關,否則請使用 [摺疊] 命令,將這些生命線組成群組。
更新設計
您可以使用版本控制,在圖表上進行共同作業。 我們建議您在編輯圖表時加以鎖定,使同時間只有一位人員能夠編輯。
您通常可以使用產生的順序圖表來識別讓程式碼難以變更或調整的現有程式碼功能。 例如,您可能會注意到某個生命線會傳送所有訊息,但是其他生命線只會回應訊息,而不會傳送它們自己的訊息。 請考慮此物件所完成的工作是否能夠更有效地在其他物件之間分割。 每個物件類別都應該具有清楚定義的單一工作。 一般而言,這項原則會讓您更容易識別哪些程式部分必須在使用者的需求變更時加以變更,或是在應用程式的不同變體中重新排列這些部分。
當您擁有將焦點放在設計特定層面的圖表時,請建立此圖表的複本並加以編輯,以便建立變更的替代提議。
您可以將產生之順序圖表的項目複製到 UML 順序圖表中。 您必須先在 UML 模型專案內部建立 UML 順序圖表。 然後,您就可以針對更新設計的不同檢視建立模型,而且可以將生命線連結至模型中的元件或類別。 您也可以擴充互動以包含外部動作項目。
疑難排解順序圖表
下列表格描述在產生順序圖表時可能發生的問題和可能的解決方式:
問題 |
解決方式 |
---|---|
無法產生順序圖表。 |
如果 System 命名空間被排除,且程式碼包含對 COM 方法的呼叫,而此 COM 方法會接受 ref 或 out 參數並使用 new 關鍵字傳遞參數,則順序圖表就可能不會產生。 若要避免這個問題,請變更程式碼或在產生圖表時包含 System 命名空間。 |
在畫面出現下列訊息之後,系統產生空白順序圖表: 「並未將物件參考設定為物件的執行個體。」 當順序圖表是從介面方法的明確實作產生,且圖表未自動加入至來源專案時,便會出現這個問題。 明確實作位於方法名稱之前,其中包含介面名稱和句號 (.)。 例如,當您從下列簽章產生順序圖表,且未自動將順序圖表加入至專案時,便會出現這個問題。
|
可能的話,不要包含介面名稱和句號 (.)。 -或- 在順序圖表產生對話方塊中,確定要自動將順序圖表加入至專案中。 |
順序圖表產生的時間過長。 -或- 順序圖表在重新開啟時損毀。 根據您的電腦組態而定,順序圖表可能太大而無法快速產生,造成 Visual Studio 用完記憶體,在您關閉再重新開啟圖表時便損毀。 例如,順序圖表內含 390 條生命線和 19,000 則訊息,造成圖表檔超過 85 MB。 |
藉由減少呼叫深度、篩選掉不必要的命名空間、移除屬性和事件等等,來縮小圖表範圍。 |
請參閱
工作
參考
概念
變更記錄
日期 |
記錄 |
原因 |
---|---|---|
2010 年 8 月 |
必須要有 Microsoft Visual Studio 2010 Visualization and Modeling 功能套件,才能為 ASP.NET 網站專案產生順序圖表。 |
客戶回函。 |
2011 年 4 月 |
[其他命名空間] 方塊不支援萬用字元 (*)。 |
客戶回函。 |