為什么要分層
用例描述了用戶做了什么事。用戶可以做很多事,比如,我們梳理出用戶需要下訂單,管理收貨地址、進行支付、選擇支付方式、使用優惠券等,毫無疑問這些都是用例。然而讀者會發現,這些用例沒有層次和順序,將導致遺漏一些需求,也不利于研發人員理解需求。
此時,我們可以憑經驗來梳理,比如,將用戶訂外賣的用例按照操作步驟拆解成瀏覽首頁、瀏覽商品列表、瀏覽商品詳情、選擇商品數量和規格、進行登錄和輸入密碼、輸入支付密碼、確認支付等。這樣就清晰了一些,但內容仍然很多,也缺少層次。所以,我們需要把用例分層。
用例層級概述
用例可以分成三個層級,分別是目標層用例、實現層用例和步驟層用例。我們以用戶訂外賣為例做說明。用戶要訂外賣,可以拆解的用例如下。
目標層用例:用戶訂外賣。
實現層用例:為完成用戶訂外賣的目標,我們可以讓用戶在網上訂外賣,或者打電話訂外賣。這兩種方法就是實現層用例。
步驟層用例:如果用戶選擇在網上訂外賣,就要進行操作,其步驟是選擇菜品、下訂單和支付,這三個步驟就是步驟層用例。
通過這種方式梳理,業務的需求就清晰了。以上三個層級都可稱為用例,但用通俗的說法表達,三個層級就是在梳理用戶的操作目標、該目標的實現方案、該方案的操作步驟。“用例”這個詞是更準確的表述,也是有特定含義和目標的概念。
1.目標層用例
目標層用例要從目標和用例兩方面理解。既然稱作目標層用例,那么該事務既是目標也是用例。其中,目標是指用戶使用系統的理由或要達到的效果,用例是指用戶實際做的一件事。
目標層用例的判定
用戶想做的事情很多,但符合目標層用例的事情并不多。目標是指用戶登錄網站的理由,所以只要不是用戶登錄網站的理由,就不算目標層用例。在這個定義下,用戶購物、注冊和退貨等,都是目標層用例,這些用例都是用戶登錄網站的理由。用戶支付貨款、設置收貨地址等,都不是目標層用例,因為用戶一般不會為了設置收貨地址而登錄網站。為了分清目標層用例,我們要注意以下幾點。
1)用戶在做完一件事后能滿意離開
用戶在做完一件事后就滿意了,不需要做其他事,那么做這件事就是目標層用例。
用戶在做完一件事后就滿意了,不需要做其他事,那么做這件事就是目標層用例。
訂外賣:登錄外賣平臺干什么?登錄外賣平臺訂外賣。購買后滿意了嗎?滿意。
退貨物:登錄電商平臺干什么?登錄電商平臺退貨。退貨完成后滿意嗎?滿意。
銀行存錢:用ATM機干什么?用ATM機存錢。存完錢后滿意嗎?滿意。
顯然,在以上案例中用戶都是滿意的。如果用戶只填收貨地址,那么這就不是目標層用例。因為用戶在填寫收貨地址后就走了,用戶是無法完成購買的,也是不滿意的。如果用戶支付完畢后就走了,用戶也是不滿意的,因為用戶不會為了給網站付款而付款,用戶的目標是購物。
從另一個角度看,無論是填寫收貨地址還是支付,都不會獨立存在,都是為完成“購物”這個目標而執行的步驟。“購物”這個目標是可以獨立存在的。實際上,支付和填寫收貨地址這兩個用例都是步驟層用例。
2)員工工作職責是目標層用例
上面我們列舉了用戶的目標層用例,這些用戶都是消費者。企業內部的員工也有目標層用例。比如,用戶要購物,員工就要辦理發貨,用戶要退貨,員工就要辦理退貨,辦理發貨、辦理退貨都是目標層用例。再如,員工要補貨也是目標層用例。
用戶的目標層用例的判定標準是,用戶能滿意離開的是目標層用例。員工的目標層用例的判定標準是,工作完成了,就是目標達成了。比如,上面的發貨、退貨和補貨等工作完成了,就認為目標達成了。
用戶的目標層用例的判定標準是,用戶能滿意離開的是目標層用例。員工的目標層用例的判定標準是,工作完成了,就是目標達成了。比如,上面的發貨、退貨和補貨等工作完成了,就認為目標達成了。
員工的目標層用例往往就是員工的工作職責。比如,員工的工作職責可以是在用戶訂購貨物后及時發貨、在庫存缺貨后及時補貨、當用戶存款時高效辦理存款等。
3)表達目標,而不是具體實現
能夠讓用戶滿意離開的事情是目標層用例,但應注意不應體現具體實現。
如果目標的判定比較模糊,也可追問一下要做的工作或解決的問題是什么。比如:
庫管要獲得商品庫存量,要做的工作(解決的問題)是可提前進行補貨。
管理員要獲得系統錯誤信息,要做的工作(解決的問題)是排除系統錯誤。
梳理時的注意事項
我們理解了如何判定目標層用例,而在判定目標層用例時,還應注意以下兩點。
1)目標層用例可以分層
目標層用例可分層表述,即可拆分成大目標和小目標。比如,用戶目標是訂外賣,訂外賣可以拆分為訂外賣和退貨兩個目標層用例。
但在實戰中,直接列出訂外賣和退貨兩個目標層用例,不分層也是可以的。原因是目標層用例并不多,只要保證能列全就可以了。
2)注冊和登錄的特殊處理
注冊是目標層用例,而登錄不是目標層用例,但在實戰中不用區別。
用戶登錄電商平臺注冊完就走了,或者到銀行開通一個賬戶就走了。因此,注冊賬號和開通賬戶都是目標層用例。但是用戶不能在登錄電商網站后就離開,登錄后還需要購物或查詢所購商品。
如果產品經理已經能厘清登錄和注冊功能,那么就不需要通過用例的方式,再來找到注冊和登錄功能了。
2.實現層用例
為實現用戶的目標層用例,產品經理就要定義產品如何實現,這個實現方法就被稱為實現層用例。比如,員工補貨是一個目標層用例,為了實現補貨,我們可以讓員工查看電腦上的庫存信息,或給員工推送庫存告警短信,這兩種方法就是在表達如何實現員工補貨的目標,就是實現層用例。
目標層用例和實現層用例常常容易混淆,我們再舉幾個例子便于讀者理解。比如,用戶要訂外賣,就要登錄網站下單,這是一種方法。此外,用戶還可以打電話下單,這也是一種方法。
再如,一個餐廳的客人要排隊,系統就可以支持客人遠程用手機排隊、客人在現場自己取號排隊、由現場服務員代為取號排隊這三種實現方法。用戶要在外賣網站注冊,注冊就是目標層用例,其實現方法有用戶用手機注冊、用郵箱注冊等。
在梳理實現層用例時,我們還應注意以下兩點。
1)實現層用例可以跳過
區分目標層用例和實現層用例是一個好習慣,這有助于產品經理思考為滿足業務目標有哪些可選方案。但這種區分不是必須要做的,比如,在用戶訂外賣的用例中,企業只打算實現網站下單,那就沒必要列出實現層用例。此時目標層用例也暗含著實現方案。
2)實現層用例是解決方案的子集
一個實現層用例同時也是一個解決方案,但是實現層用例只是解決方案的子集。在上文中,我們對解決方案做了深入說明。我們知道解決方案是一個范圍很大的詞,我們給用戶提供的解決方案可以是一項服務、一個產品或一個產品的功能等。
3.步驟層用例
無論實現層用例是什么,都需要系統來實現。用戶使用系統的過程,就是一步一步地操作的過程,這就是步驟層用例。同時,通過對這些步驟的拆分和合并,就可劃分出產品的設計單元。劃分出產品的設計單元就是步驟層用例的目標,也是整個用例分析的最終目標。下面我們分成步驟層用例的拆分和步驟層用例的合并兩步,來說明這個過程和目標。
步驟層用例的拆分
用戶為完成訂外賣這個目標,就要有如下步驟,分別為選擇菜品、核對訂單、支付訂單,這是第一個層級的步驟層用例。而核對訂單又可拆分成設置收貨地址、修改菜品數量和設置優惠券,這是第二個層級的步驟層用例。
在拆分步驟層用例的時候,我們應注意以下幾點。
1)去掉不必要的步驟
用戶在訂外賣時,必然要看首頁、看商家頁和進行登錄。但這幾個步驟不需要加入步驟層用例的拆分。一方面,因為用例的目標是避免遺漏需求,但產品經理不會遺漏以上功能。另一方面,首頁和商家頁較為獨立,與訂外賣的關聯度并不強。
2)可按頁面梳理步驟
我們將步驟拆分成了兩層。第一層包括三個步驟,分別是選擇菜品、核對訂單和支付訂單,這也分別對應著三個頁面,每個頁面就是一個步驟。而核對訂單這個頁面又包括三個步驟,即設置收貨地址、修改菜品數量和設置優惠券。因此,提煉步驟層用例的技巧是,想象下單時有幾個頁面,就可以輕松地抽象出步驟了。
3)按層來梳理步驟
每個步驟應在同一個層面表述,不要出現有的步驟拆分過粗,有的步驟又拆分過細的現象。如果無法在一個層面表述,則可以將該步驟拆分成多層。在上面的案例中,選擇菜品、核對訂單和支付訂單就是一個層面的問題。但其中“核對訂單”的步驟較多,于是我們又拆分出一層,包括設置收貨地址、修改菜品數量、設置優惠券。
步驟層用例的合并
我們進行步驟層用例的拆分,是為了梳理出用戶的操作步驟,這樣就可以避免需求遺漏。但是,我們還應通過用例的合并,來劃分出設計單元,這樣產品經理就可分單元地去設計產品。
合并的原則是,如果該步驟層用例較小,就要合并該步驟層用例。比如,在“核對訂單”步驟下,修改菜品數量是一個簡單交互,設置優惠券也是簡單的交互,就是一個選擇而已。因此,這兩個步驟都不能成為獨立的設計單元,應合并到核對訂單中。
步驟層用例的認定
和目標層用例和實現層用例不同,步驟層用例沒有嚴格的定義和劃分,其提煉也極為靈活。雖然提煉很靈活,但是步驟層用例也有認定原則,其認定原則如下。
1)大小適中
有的資料會把用例拆得很細,這是不恰當的。用例的目的是劃分設計單元,而不是厘清業務細節。比如,設置收貨地址用例就是大小適中的設計單元。但是,如果將該用例再拆成填寫姓名、填寫手機號和填寫送貨地址等步驟,就不合適了。
2)高內聚、低耦合
每個步驟都是相對獨立的,但步驟之間也有聯系。用專業的說法就是高內聚和低耦合。意思是說,用例內的多個功能是緊密結合的,這就是高內聚。同時,用例之間也有聯系,但并不緊密,這就是低耦合。
用例分析不適合梳理信息類內容,如個人中心、首頁和詳情頁,這些頁面以信息展現為主,并沒有太復雜的流程,可直接畫原型圖。用例分析也不適合梳理熟悉的功能。比如,登錄和注冊的功能雖然多,但是這些功能很固定,產品經理也很熟悉,不會遺漏這些功能,因此就不需要用用例分析了。
梳理用例是為了不遺漏需求和功能,而不是為了表達自己懂用例。