在 Visual Studio 旗艦版中,能夠繪製「用例圖」來歸納使用您的應用程序或系統的用戶以及該應用程序或系統的用途。若要建立 UML 用例圖,請在「體系結構」菜單上,單擊「新建關係圖」。分佈式 用例圖有助於討論和傳達如下內容:工具 您的系統或應用程序與人、組織或外部系統進行交互的幾種方案。測試 它幫助參與者實現的目標。網站 系統的範圍。spa 用例圖不顯示用例的詳細信息:它只歸納用例、參與者和系統之間的某些關係。特別是,用例圖不顯示每一個用例爲實現目標所執行步驟的順序。能夠在其餘關係圖和文檔中描述這些詳細信息,這些關係圖和文檔可與各用例相連接。有關更多信息,請參見本主題中的詳細描述用例。線程 您爲用例提供的描述將使用與系統所用於的領域相關的一些詞彙,如「銷售」、「菜單」、「顧客」等。明肯定義這些詞彙及其關係是很是重要的,您能夠藉助 UML 類圖來進行定義。有關更多信息,請參見 UML 類圖:準則。設計 用例只處理系統的功能要求。諸如業務規則、服務質量要求和實現約束等其餘要求必須另外表示。體系結構和內部細節也必須另外說明。有關如何定義用戶需求的更多信息,請參見用戶需求建模。code 本主題中使用的示例與顧客可在其上從本地餐館訂餐的網站有關。orm ![](http://static.javashuo.com/static/loading.gif) 「參與者」(1) 是與您的系統進行交互的一類人、組織、設備或外部軟件組件。例如,「顧客」、「餐館」、「溫度傳感器」、「信用卡受權方」都是參與者。 「用例」(2) 表示一個或多個參與者爲實現特定目標而執行的操做。例如,「訂餐」、「更新菜單」、「處理付款」都是用例。 在用例圖中,用例與執行它們的參與者相關聯 (3)。 「系統」(4) 是您開發的任何成果。系統能夠是小型軟件組件,其中的參與者只是其餘軟件組件;系統也能夠是完整的應用程序;系統還能夠是部署在多臺計算機和設備上的大型分佈式應用程序套件。例如,「訂餐網站」、「送餐業務」、「網站版本 2」都是子系統。 用例圖能夠顯示系統或其子系統支持的用例。 主題內容 繪製用例圖的基本步驟 繪製參與者和用例 詳細描述用例 結構化用例 使用子系統邊界 繪製用例圖的基本步驟 建立新的用例圖 1.在「體系結構」菜單上,單擊「新建關係圖」。 2.在「模板」下,單擊「UML 用例圖」。 3.命名該關係圖。 4.在「添加到建模項目」中,從您的解決方案中選擇一個現有建模項目,或者選擇「建立新的建模項目」,而後單擊「肯定」。 繪製用例圖 1.將「子系統」邊界從工具箱拖到關係圖中,它能夠表示整個系統或其中的主要組件。 若是不但願描述系統或其組件支持哪些用例,用例圖中能夠不繪製系統邊界。 根據須要,拖動系統的四角將其擴大。 對其適當地重命名。 2.將「參與者」從工具箱拖到關係圖中(將其放在全部系統邊界以外)。 參與者表示與您的系統進行交互的各種用戶、組織和外部系統。 重命名這些參與者。例如:「顧客」、「餐館」、「信用卡機構」。 3.將「用例」從工具箱拖到適當的系統中。 用例表示參與者在系統的幫助下所執行的活動。 使用參與者自身可以理解的名稱重命名這些用例。不要使用與代碼有關的名稱。例如:「訂餐」、「付餐費」、「送餐」。 從主要的事務(如「訂餐」)開始,直到後面較小的事務(如「點菜」)爲止。 將每一個用例放入支持它的系統或主要子系統(忽略任何只與用戶有關的外觀模式或組件模式)。 能夠在系統邊界外繪製用例,以代表系統(可能在特定版本中)不支持該用例。 4.單擊工具箱上的「關聯」,而後單擊用例,再單擊該用例的參與者。以此方式將每一個參與者與其用例相連接。 5.用「包括」、「擴展」和「泛化」關係結構化用例。若要建立其中的每一個連接,請依次單擊工具、源用例和目標。請參見下面的結構化用例一節。 6.詳細描述用例。請參見下面的詳細描述用例一節。 7.繪製其餘關係圖,使其分別針對不一樣子系統或不一樣相關用例組。一個建模項目中的全部關係圖是同一模型的多種視圖。 繪製參與者和用例 用例圖的主要用途是顯示與系統交互的用戶以及這些用戶藉助系統實現的主要目標。 建立「參與者」來表示與您的系統或子系統進行交互的各種人員、組織、其餘系統、軟件或設備。 若要了解如何繪製參與者和其餘元素,請參見如何:編輯 UML 模型和關係圖。 對於每一組不一樣的目標,按其類型或角色標識參與者,即便具體的我的或實體多是相同的。例如,「餐館」和「顧客」是不一樣的參與者,即便餐館的僱員可能有時候也是顧客。 爲每一個參與者但願藉助系統實現的每一個目標建立「用例」。 以參與者可以理解的詞語命名並描述用例,而不該使用實現中所用的術語。 使用「關聯」連接參與者與用例。 ![](http://static.javashuo.com/static/loading.gif) 參與者之間的繼承 能夠在參與者之間繪製「泛化」連接。專用參與者(如示例中的「俱樂部顧客」)繼承泛化參與者(如「顧客」)的用例。箭頭應指向更通用的參與者,如「顧客」。建立連接時,首先指向更專用的參與者。 專用參與者能夠有本身的額外用例,這些用例對於其餘參與者是不可用的。 警告:不該形成會致使參與者泛化自身的泛化關係循環。循環可能會產生錯誤。 可選參與者圖標 可使用自定義圖標而不是標準線條圖來表示參與者。例如,能夠將其更改成相似於設備、餐館、銀行等的圖標。 更改參與者的外觀 1.右擊參與者,而後單擊「屬性」。 將出現「屬性」窗口。 2.將「Image Path」屬性設置爲圖像文件的位置。 可使用多種圖像格式中的任何一種,包括 .gif、.jpg 和 .bmp。 使用包含在解決方案或項目源代碼管理中的文件,以便在移動或複製解決方案時仍可用。 3.若要將此外觀複製到其餘用例圖中,請複製該參與者並將其粘貼到其餘關係圖中。 圖像的更改僅應用於特定關係圖中的視圖。這不會應用於基礎模型元素。若是將參與者從 UML 模型資源管理器拖到另外一個關係圖中,該參與者將以標準線條圖顯示。 參與者與用例之間的重數 參與者與用例之間的關聯可在每一端顯示一個「重數」。 ![](http://static.javashuo.com/static/loading.gif) 注意:若是用例圖中某個關聯兩端的重數都爲「1」,則隱藏該重數。 默認狀況下,每一個重數都爲「1」。在模型的嚴格釋義中,以顧客訂餐爲例,重數爲 1 表示一餐只有一名顧客預訂而且每名顧客一次只訂一餐。 您能夠更改這些重數。 例如: ![](http://static.javashuo.com/static/loading.gif) 若要代表發生一次用例可有多名同類參與者參與,可將關聯中參與者端的重數設置爲「1..*」。 在圖示中,一個或多個餐館可參與實現同一訂餐。 若要代表每名參與者可同時參與屢次用例,可將關聯中用例端的重數設置爲「*」。 在圖示中,每一個餐館可同時參與實現多個訂餐。 設置關聯的重數 1.右擊關聯,而後單擊「屬性」。 2.展開「第一個角色」或「第二個角色」。 「角色」表示關聯一端的元素。 3.設置 Multiplicity 屬性,可從下表中選擇: 1,代表有且僅有此角色的一個實例參與每一個連接。 1..*,代表此角色的一個或多個實例參與每一個連接。 0..1,代表參與是可選的。 *,代表此角色的零個或多個實例參與該連接。 注意:不少團隊不在用例圖中提供重數信息,保留重數的默認值 1,而是在用例的其餘描述中提供該信息。在這種狀況下,用例圖中的全部重數都將隱藏。 在多個關係圖中使用一個參與者或用例 能夠在多個關係圖中顯示相同的參與者或用例。例如: 能夠在不一樣關係圖中描述同一參與者涉及的不一樣用例。 可使用一個關係圖來顯示一個用例所關聯的多個參與者和子系統,使用另外一個關係圖來顯示如何將該用例結構化到被包括用例和擴展用例中。 在不一樣關係圖中顯示相同參與者或用例 1.在一個關係圖中建立參與者或用例。 2.建立另外一個用例圖。 3.將參與者或用例從「模型資源管理器」拖到新關係圖中。 注意:若是放入新關係圖的是已關聯的參與者和用例,則它們之間的關聯將自動顯示在新關係圖中。 詳細描述用例 用例表示: 參與者使用系統要實現的目標,如「購買餐飲」;以及 一個或多個方案,即爲實現目標而執行的一系列步驟,如:{「訂餐」、「付款」、「送餐」}。除了成功方案之外,還可能有若干異常或失敗方案,如「信用卡被拒」。 對用例的描述能夠有不一樣的詳細程度。在設計的早期階段,僅在用例圖上標示名稱就足夠了。稍後就能夠編寫更加詳細的方案描述。 在 Visual Studio 旗艦版 中,能夠採用多種方法描述用例,這些方法能夠分開使用,也能夠一塊兒使用: 將用例連接到項目中的另外一個或幾個關係圖。 活動圖有助於解釋包含循環、分支和並行線程的較複雜流程。活動圖還能夠顯示流程各部分之間的數據流。 序列圖有助於解釋不一樣參與者之間複雜的交互序列。序列圖還可用於顯示系統內發生的對每一個用例的響應。 將用例連接到用於詳細描述用例的 OneNote 頁面、節或段落。 將用例連接到 Word 文檔,在該文檔中使用文本、屏幕截圖等來描述該用例的方案。有關更多信息,請參見用戶需求建模。 將用例連接到同一解決方案中的關係圖或文件 1.繪製關係圖(如序列圖或活動圖)來演示用例的方案。 2.返回到用例圖。 3.將關係圖或文件從解決方案資源管理器拖到用例圖的空白部分。 4.使用「依賴項」從項目鏈接到用例。 連接到諸如 Word 文檔或 PowerPoint 演示文稿等解決方案文件 1.編寫一個文檔,在該文檔中使用文本、屏幕截圖等來描述用例的方案。 2.向解決方案中添加文檔。 a.將該 Word 文檔移入解決方案所在的 Windows 文件夾。 b.在解決方案資源管理器中,右擊解決方案,指向「添加」,而後單擊「現有項」。 c.導航到該 Word 文檔,而後單擊「添加」。 該 Word 文檔將顯示在解決方案資源管理器的解決方案文件夾中。 3.將該 Word 文檔從解決方案資源管理器拖到用例圖的空白部分。 隨即顯示新項目。 4.使用「依賴項」從項目鏈接到用例。 連接到共享文檔、OneNote 元素或網頁 1.獲取共享元素的 URL。例如,此 URL 能夠是以「\\」開頭的網絡文件路徑、網頁、以「http://」開頭的 Sharepoint URL,也能夠是指向 OneNote 節、頁面或以「onenote:」開頭的段落的連接。 2.在工具箱中,單擊「項目」,而後單擊用例圖。 3.選定新項目後,在「Hyperlink」屬性中鍵入或貼入 URL。 注意:雙擊項目可打開與其連接的關係圖或文檔。 將用例連接到工做項 若是您的項目使用 Visual Studio Team Foundation Server 2010 而且您有團隊資源管理器,則能夠將每一個用例連接到 Team Foundation 中的一個工做項。 這可用於: 在連接的工做項中描述用例。特別是,若是您的項目使用 Visual Studio Formal Process Template,則可連接到用例工做項。此工做項類型提供對用例的目標和方案進行描述的字段。 將測試用例連接到用例,以即可以獲取實現用例的代碼開發進度的報告。 將任務連接到用例,以即可以跟蹤開發工做的進度。 結構化用例 應設法只用幾個主要用例來描述系統的行爲。每一個大型用例定義某個參與者實現的主要目標,如購買產品,若是是從供應商的角度出發,就是提供用於銷售的產品。 明確這些目標以後,能夠細化如何實現每一個目標以及基本目標的變體。 應避免將用例分解得過細。用例應基於用戶對系統的體驗,而不是系統內部的處理。此外,您一般會發現,建立代碼的早期工做版本比花費時間對用例進行精細的結構化更高效。 您能夠在用例圖中歸納主要用例和細化用例之間的關係。如下各節對此進行介紹: 用包括顯示用例的細節 用泛化共享目標 用擴展分離變體用例 用包括顯示用例的細節 使用「包括」關係能夠代表一個用例用於描述另外一個用例的一些細節。在圖示中,「訂餐」包括「付款」、「選擇菜單」和「點菜」。每一個被包括的細化用例是一個或多個參與者爲了實現包括用例的總體目標可能必須執行的一個步驟。箭頭應指向細化的被包括用例。 警告:不該形成會致使用例包括自身的包括關係循環。循環可能會產生錯誤。 能夠共享被包括用例。在示例中,「訂餐」和「訂閱評論」用例都包括「付款」。 ![](http://static.javashuo.com/static/loading.gif) 被包括用例的目標和方案應具備獨立意義,以即可以包括在之後設計的用例中。 將用例分爲包括部分和被包括部分對於實現如下目標頗有用: 將用例描述結構化爲不一樣的詳細層次。 避免在不一樣用例中重複共享方案。 定義詳細步驟的順序 用例圖不提供執行細化步驟必須遵循的順序,也不告知其中的每一步驟是否始終是必需的。 若要明確步驟的順序,可使用「項目」將其餘文檔附加到包括用例。在下面的示例中,「訂餐」用例附加了一個活動圖。或者,可使用包含步驟列表或一系列屏幕截圖的文本文檔。有關更多信息,請參見詳細描述用例。 使用活動圖時請注意下面的命名約定: 整個活動的名稱與包括用例的名稱相同。 活動圖中的操做與被包括用例有相同的名稱。 ![](http://static.javashuo.com/static/loading.gif) 用泛化共享目標 「泛化」關係用於代表專用用例是實現由另外一個通用用例表示的目標的一種特定方式。箭頭應指向更通用的用例。 ![](http://static.javashuo.com/static/loading.gif) 例如,「付款」泛化「信用卡付款」和「現金付款」。 警告:不該形成會致使參與者泛化自身的泛化關係循環。循環可能會產生錯誤。 專用用例有助於展現系統實現相同目標的不一樣方法。 專用用例視爲繼承了通用用例的目標和參與者。通用用例能夠沒有本身的方案;其專用化描述實現目標的不一樣方法。 經過兩個或更多用例重構共同目標 1.建立新的通用用例,併爲其命名。 2.建立一個「泛化」關係,其箭頭指向新的通用用例。 a.單擊工具箱中的「泛化」。 b.單擊專用用例(示例中爲「信用卡付款」)。 c.單擊通用用例(示例中爲「付款」)。 3.若是已描述專用用例的目標,則可將共同部分移入通用用例的描述。 4.可將在專用用例之間共享的參與者移到通用用例。 用擴展分離變體用例
「擴展」連接用於代表一個用例能夠在特定狀況下向另外一個用例添加功能。箭頭應指向被擴展的主用例。 ![](http://static.javashuo.com/static/loading.gif) 警告;不該形成會致使參與者泛化自身的擴展關係循環。循環可能會產生錯誤。 例如,典型網站的「登陸」用例能夠包括「註冊新用戶」,但僅限用戶尚未賬戶的狀況。 將用例分爲主要部分和擴展部分 1.建立新的擴展用例,併爲其命名。 2.建立一個「擴展」關係,其箭頭指向被擴展用例。 a.單擊工具箱中的「擴展」。 b.單擊擴展用例(示例中爲「註冊新用戶」)。 c.單擊被擴展用例(示例中爲「登陸」)。 注意:不要在關係圖中建立擴展關係的循環。用例不能成爲自身的擴展。 3.若是已建立被擴展用例的方案,可將相關步驟移入擴展方案。 4.擴展的描述(示例中爲「註冊新用戶」)應包括在主用例方案中出現擴展的位置和條件的詳細信息。將其視爲修改主用例的描述。 擴展用例表示本應屬於主用例方案一部分的方案步驟。主用例的上下文將始終讀入擴展的方案和目標,所以它們能夠不具備獨立意義 描述如下狀況時分離擴展頗有用: 存在僅參與擴展用例的額外參與者。例如,須要管理員來批准顧客在網站上的註冊。 單獨的子系統將處理擴展用例。 此擴展將只在系統的特定版本中可用。您能夠在用例圖中將每一個版本顯示爲一個單獨的子系統。 使用子系統邊界 子系統邊界用於代表哪些用例在系統的範圍內。 繪製子系統邊界 1.在工具箱中單擊「子系統」,而後單擊關係圖。 子系統將顯示在關係圖中。 2.拖動子系統的四角以調整其大小。 3.將現有用例拖入或拖出子系統以調整該子系統內容。 - 或 - 若要直接在子系統中建立新用例,請在工具箱中單擊「用例」,而後單擊子系統內部。 注意:用例的「Subjects」屬性指示包含它的子系統。 系統範圍外的用例 將屬於業務組成部分但不禁您開發的系統來處理的用例包括在關係圖中一般是頗有用的。這有助於開發人員瞭解其工做背景。例如,「送餐」能夠顯示爲涉及參與者「餐館」和「顧客」的用例,但在「訂餐網站」的職責範圍外。 多個子系統 能夠建立多個子系統邊界以代表不一樣用例是如何由不一樣的系統組件來處理的。例如,「添加餐館評價」可能在單獨的論壇網站上處理。請記住,用例圖應處理用戶可見的內容。若是要描述系統內部的工做劃分,應考慮使用組件圖。 系統版本 可使用不一樣的子系統邊界來演示不一樣版本的系統。例如,「付款」用例可能包括在「網站版本 2」中,但不在「版本 1」中。這表示系統可幫助顧客訂餐,可是,顧客必須直接付款給餐館。 「依賴項」關係用於連接表示不一樣版本或變體的子系統。 ![](http://static.javashuo.com/static/loading.gif) |