一、概述
用例圖是編寫需求說明時經(jīng)常用到的需求表達方式,用于向開發(fā)、測試同事說明需求中用戶與系統(tǒng)功能單元之間的關(guān)系。但是很多剛接觸用例的新人,在準備用例說明時并不清楚參與者與用例之間應該如何表達,網(wǎng)上教程五花八門,但感覺部分用例圖不夠規(guī)范,因此對用例圖及用例說明梳理總結(jié)。
考慮到用例圖的作圖規(guī)范,使用Visio的UML用例組件,對用例中的各種關(guān)系進行說明。

二、用例圖
用例圖的結(jié)構(gòu)主要分為三個部分:參與者、用例、參與者與用例之間的關(guān)系,具體說明如下:
2.1 參與者
顧名思義,代表系統(tǒng)外部與系統(tǒng)發(fā)生交互的人或事物;需要注意,人指的是參與者與系統(tǒng)發(fā)生交互時的角色,不代指具體的人。
事物指的是某一個應用程序或者特殊進程;例如微信登錄,通過跳轉(zhuǎn)微信確認登錄信息,微信對系統(tǒng)產(chǎn)生輸入時,可以把微信作為參與者;而設定時間,強制退出賬號時,時間這一特殊進程對系統(tǒng)產(chǎn)生輸入,因此時間也可以作為參與者。
2.2 用例
2.2.1 用例的說明
用例是系統(tǒng)外部可見的一個功能單元,是某一個參與者在系統(tǒng)中做某件事從開始到結(jié)束的一系列活動的集合,以及結(jié)束時應該返回的可觀測、有意義的結(jié)果,其中還包含可能的各種分支情況;具體用例在用例屬性中說明。
2.2.2 用例的特征
- 用例都是動賓結(jié)構(gòu);例如:登錄賬號
- 用例是相互獨立的
- 用例由參與者啟動
- 有可觀測的執(zhí)行結(jié)果
2.3 關(guān)系說明
角色與用例之間的關(guān)系主要包括關(guān)聯(lián)、歸納(泛化)、包含、拓展和依賴。
2.3.1 關(guān)聯(lián)關(guān)系
- 關(guān)系說明:表示參與者與用例之間的關(guān)系
- 展示形式:以一條直線相連
- 舉例說明:用戶登錄系統(tǒng)
圖1 參與者與用例之間的關(guān)聯(lián)關(guān)系
2.3.2 歸納(泛化)關(guān)系
- 關(guān)系說明:表示參與者與參與者之間、用例與用例之間的關(guān)系
- 展示形式:用箭頭表示,箭頭從子參與者(子用例)指向父參與者(基礎(chǔ)用例),一般父參與者(基礎(chǔ)用例)相對子參與者(子用例)更為抽象
- 舉例說明:VIP會員和普通用戶,歸納為用戶;賬號登錄與微信登錄,也可歸納為登錄系統(tǒng)。

圖2 用戶之間、用例之間的歸納關(guān)系
2.3.3 包含關(guān)系
- 關(guān)系說明:表示用例與用例之間的關(guān)系
- 展示形式:用帶有“包含”的箭頭表示,箭頭從基礎(chǔ)用例指向包含用例
- 舉例說明:用戶在賬號登錄過程中,包括輸入賬號、輸入密碼、確認登錄等操作

圖3 用例與用例之間的包含關(guān)系
2.3.4 拓展關(guān)系
- 關(guān)系說明:表示用例與用例之間的關(guān)系;用于拓展用例對基礎(chǔ)用例的增強;拓展用例是在特定條件出現(xiàn)時,才會被執(zhí)行的用例
- 展示形式:用帶有“拓展”的箭頭表示,由拓展用例指向基礎(chǔ)用例
- 舉例說明:用戶在登錄過程中忘記了密碼

圖4 用例與用例之間的拓展關(guān)系
2.3.5 依賴關(guān)系
- 關(guān)系說明:表示用例與用例之間的關(guān)系;一個用例在活動執(zhí)行過程中,要依賴另一個用例的執(zhí)行
- 展現(xiàn)形式:以一條直線相連
- 舉例說明:用戶要登錄系統(tǒng)后,才能查看首頁信息
- 補充說明:A用例依賴B用例,A用例或使用B用例執(zhí)行后的返回結(jié)果,或使用B用例執(zhí)行部分功能。依賴關(guān)系類似于包含關(guān)系,都是在用例執(zhí)行過程中,調(diào)用其它用例來完成部分任務。
圖5 用例與用例之間的依賴關(guān)系
2.3.6 注釋
對于部分有特殊條件支撐的用例,也可以添加注釋加以說明,例如VIP用戶與普通用戶登錄系統(tǒng)后,可查看的菜單、數(shù)據(jù)甚至對系統(tǒng)的操作都是不一樣的,此時可以在對應用例上加以注釋,以強調(diào)此用例的特殊需求。

圖6 對用例進行注釋
2.3.7 子系統(tǒng)
關(guān)系說明:用于強調(diào)某部分用例的強關(guān)聯(lián)性,例如門戶包含系統(tǒng)登錄、首頁信息展示等。

圖7 子系統(tǒng)與用例之間的關(guān)系
2.3.8 各關(guān)系的對比
為了對包含、拓展和歸納(泛化)關(guān)系更好的區(qū)分,以圖7為例說明各種關(guān)系之間的差別:
1)用例的使用條件
包含用例與歸納(泛化)的子用例,都沒有限定的使用條件;例如用戶登錄系統(tǒng)時,直接選擇輸入賬號密碼登錄系統(tǒng),或者通過微信登錄系統(tǒng);而忘記密碼是在用戶賬號登錄時遺忘密碼才會發(fā)生的用例,是有特定條件下才會發(fā)生的用例。
2)直接、間接提供服務
歸納(泛化)的子用例與拓展用例為參與者直接提供服務,例如用戶登錄系統(tǒng)時,會直接選擇賬號登錄或微信登錄,而賬號登錄或微信登錄直接為參與者提供登錄服務;而包含關(guān)系的用例,為參與者提供間接服務,例如賬號登錄時,需要輸入賬號、輸入密碼等,這些用例直接鼓舞于賬號登錄這個用例,間接為參與者提供登錄服務。
3)其余說明
- 延伸用例與基礎(chǔ)用例相互獨立,兩者之間不包含對方用例的內(nèi)容。
- 歸納(泛化)的子用例包含基礎(chǔ)用例所有內(nèi)容、基礎(chǔ)用例與其他用例的關(guān)系以及基礎(chǔ)用例與參與者之間的關(guān)系;例如賬號登錄是登錄系統(tǒng)的子用例,但賬號登錄包含了登錄系統(tǒng)的內(nèi)容、登錄系統(tǒng)與展示首頁的關(guān)系以及登錄系統(tǒng)與參與者的關(guān)系。
三、用例描述
完成了用例圖,實際上工作只完成了一半,更重要的是對每個用例進行具體的說明;包括說明用例之間的關(guān)系、參與者身份角色以及用例從開始至結(jié)束過程中的條件及分支情況等;具體用例說明形式可參考下表:

用例的描述針對不同業(yè)務系統(tǒng),描述的重點可能會存在差異,因此用例描述的重點在于清晰表達用例需求,不必拘泥于表達形式。