用例圖,即用來描述什么角色通過某某系統能做什么事情的圖,用例圖關注的是系統的外在表現,系統與人的交互,系統與其它系統的交互。
用例圖的作用:用於需求分析階段,描述用戶的需求,是開發者和用戶共同商討,最后達成共識。
用例圖有三種構成元素,分別是:角色,用例,關系
值得注意的是,角色可能是人,也可能不是人,而是另外的一個系統,本系統與另外一個系統交互的話,可以將另外一個系統畫成某某角色。
分析角色時需要考慮的內容:
(1)有哪些直接使用系統的人
(2)涉及到哪些維護人員
(3)使用哪些外設
(4)相連的其他系統
(5)還有哪些人和事物對這個系統產生的結果感興趣
用例:即系統具有的功能,在用例圖中用橢圓圈表示,圈里用文字描述該用例,一般為動賓短語。
值得注意的是,某個用例不一定是只屬於一個角色的,有些用例是同時屬於多個角色的,即被多個角色“共享”。
關系:即角色與用例之間的關系,在用例圖中用線條表示
執行者和用例的關系:關聯,依賴,泛化
線條有兩種:無箭頭的,有箭頭的。
有箭頭的線條,表示角色與系統交互的過程中,數據的流向,如果箭頭指向用例,就說明角色需要往系統輸入數據,如果箭頭指向角色,說明系統往角色輸出數據。沒有箭頭的線條,則沒有明確表示數據的流向。
用例圖主要用來描述“用戶、需求、系統功能單元”之間的關系。它展示了一個外部用戶能夠觀察到的系統功能模型圖。
【用途】:幫助開發團隊以一種可視化的方式理解系統的功能需求。
用例圖所包含的元素如下:
1. 參與者(Actor)
表示與您的應用程序或系統進行交互的用戶、組織或外部系統。用一個小人表示。
2. 用例(Use Case)
用例就是外部可見的系統功能,對系統提供的服務進行描述。用橢圓表示。
3. 子系統(Subsystem)
用來展示系統的一部分功能,這部分功能聯系緊密。
4. 關系
用例圖中涉及的關系有:關聯、泛化、包含、擴展。
如下表所示:
a. 關聯(Association)
表示參與者與用例之間的通信,任何一方都可發送或接受消息。
【箭頭指向】:指向消息接收方
b. 泛化(Inheritance)
就是通常理解的繼承關系,子用例和父用例相似,但表現出更特別的行為;子用例將繼承父用例的所有結構、行為和關系。子用例可以使用父用例的一段行為,也可以重載它。父用例通常是抽象的。
【箭頭指向】:指向父用例
c. 包含(Include)
包含關系用來把一個較復雜用例所表示的功能分解成較小的步驟。
【箭頭指向】:指向分解出來的功能用例
d. 擴展(Extend)
擴展關系是指用例功能的延伸,相當於為基礎用例提供一個附加功能。
【箭頭指向】:指向基礎用例
e. 依賴(Dependency)
以上4種關系,是UML定義的標准關系。但VS2010的用例模型圖中,添加了依賴關系,用帶箭頭的虛線表示,表示源用例依賴於目標用例。
【箭頭指向】:指向被依賴項
5. 項目(Artifact)
用例圖雖然是用來幫助人們形象地理解功能需求,但卻沒多少人能夠通看懂它。很多時候跟用戶交流甚至用Excel都比用例圖強,VS2010中引入了“項目”這樣一個元素,以便讓開發人員能夠在用例圖中鏈接一個普通文檔。
用依賴關系把某個用例依賴到項目上:
然后把項目-》屬性 的Hyperlink設置到你的文檔上;
這樣當你在用例圖上雙擊項目時,就會打開相關聯的文檔。
6. 注釋(Comment)
包含(include)、擴展(extend)、泛化(Inheritance) 的區別:
條件性:泛化中的子用例和include中的被包含的用例會無條件發生,而extend中的延伸用例的發生是有條件的;
直接性:泛化中的子用例和extend中的延伸用例為參與者提供直接服務,而include中被包含的用例為參與者提供間接服務。
對extend而言,延伸用例並不包含基礎用例的內容,基礎用例也不包含延伸用例的內容。
對Inheritance而言,子用例包含基礎用例的所有內容及其和其他用例或參與者之間的關系;
注意問題:
應該清晰的定義系統邊界
防止用例過多
應該從執行者的角度來命名用例
用例描述正規程度
避免執行者的名字不一致
避免執行者和用例之間關系太復雜
注意用例的大小是否恰當
避免用例描述混亂
區分用例分解和功能分解
避免客戶不能理解用例的情況發生
有些場合,用用例來描述需求是不合適的