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