用例圖
一、概念
Ⅰ. 用例圖主要用來描述什么?
- 本系統被什么執行者使用?
- 每種執行者通過本系統能做什么事情?
Ⅱ. 用例圖的基本語法
Ⅲ. 使用用例圖的小技巧
-
我們可以使用先讀出執行者的名字,然后讀出用例中的文字的方式來檢查自己的用例圖畫的是否合適。
-
宏觀的用例圖需要畫出系統邊界。而細化的用例圖並不需要畫出系統邊界。
-
關聯箭頭的“數據流向”解釋:
-
- 有箭頭的線條表示執行者與系統交互的過程中數據的流向。
- 如果箭頭指向用例,就說明執行者需要向系統輸入數據,如果箭頭指向執行者,說明系統向執行者輸出數據。
-
關聯箭頭的“誰啟動誰”的解釋:
-
- 箭頭用來表示執行者和系統通過相互發送信號或消息進行交互的關聯關系。
- 箭頭尾部用來表示啟動交互的一方,箭頭頭部用來表示被啟動的一方。
二、進階
Ⅰ. 角色的繼承
繼承的意思就是,兒子具備父親的特點,父親可以做的事情,兒子也可以做,兒子可以做的事情,兒子的兒子也可以做!
上圖表示二級角色繼承於一級角色,三級角色繼承於二級角色。
Ⅱ. 用例的Include
Include的兩種主要用法:
- 以“樹”的方式組織各種用例,用Include來組織好父子用例,子用例可以再次Include自己的子用例,這樣用例有粗有細,層次分明。
- 某些用例的一部分可以抽離出來稱為子用例,該子用例同時也被其他用例包含。
第一種用法:
上圖表示“管理菜式”包括“增加菜式”、“刪除菜式”、“修改菜式”、“查看菜式”這四個用例
第二種用法:
上圖表示“管理菜式”和“訂餐”都包含“查看菜式”用例
Ⅲ. 用例的Extend
“擴展(Extend)”表示的意思是:在某用例的基礎上,還能做社么事情。箭頭方向表明了誰擴展誰。
上圖表示在“查看報表”的基礎上,還能“導出報表”和“打印報表”
Ⅳ. 用例的繼承
用例的繼承也是對用例進行組織的一種方法,但很容易與Include混淆。
用例的繼承和用例的Include的最大區別:Include的父用例是切切實實存在的,而繼承的父用例是被抽象出來的,例如圖上的“查詢”。
Ⅴ. 用例的粒度控制
- 在客戶能准確全面理解的基礎上,用例越精簡越好。
- 用例應使用客戶的語言,需保證客戶能看懂能理解,而不應處於開發人員的角度來描述。
- 全面並且有整點的表達好用例,對於仲昂殿難點用例應詳細描述,對於“常識”型的用例則不與要過多筆墨。
- 可通過Include和Extend分解和些話用例,最底層的用例粒度應大體一致,注意這點應該靈活把握,不應僵化。
- 我們需要利於客戶想法,但又要高於客戶的想法。盡管客戶自己或提出橫奪想法,我們不應盲目的從客戶的這些想法直接導出用例,用例更多地是從系統的目標、待解決的客戶問題而推導出來的。
- 用例圖不是萬能的,也不是表達需求的唯一方式。我往往會以用例圖為主同時附加其他方式來表達,某些特殊項目,我設置不用用例圖來表達需求。
三、訂餐系統的用例圖
Ⅰ. 常見的問題
- 漏掉了“取消訂餐”這個用例。
- 訂餐時需要有菜式可選,但忘了需要“管理菜式”的用例。
- 遺漏“打印訂餐信息”用例。
- 用例沒有用“動賓”方式類表達。
Ⅱ. 繪制用例圖的幾個要點
- 要仔細分析現有業務,在此基礎上整理需求。
- 分析有什么用戶使用本系統,他們需要的基本功能是什么。
- 必須先保證基本功能,然后再考慮“花哨”功能,不要本末倒置。
- 使用用戶的語言來表達,表達的模式就是用戶通過本系統能做社么事情,避免用技術用語。
Ⅲ. 用例圖的組織
- 畫一個表示系統宏觀需求的用例圖,該用例圖我會使用系統邊界,每個用例圈圈會比較高度概括的語言。
- 將宏觀用例圖分解為多個具體的用例圖。
- 用例圖比較多、層次比較復雜時,我會分層次地展開用例圖,也就是將宏觀的用例圖分解后,再次分解。
- 通過包對用例進行適當的分類,這點會在暴徒章節詳細介紹。
- 用戶角色比較多時,我會先單獨畫出角色一級他們的關系,並用表格說明每個角色在本系統期望解決的問題、關注點等。