如何寫(xiě)好最外圍用例
如何寫(xiě)好最外圍用例
作者:張恂 來(lái)源:www.zhangxun.com
時(shí)間:2005年08月04日
2003 年,我曾經(jīng)在網(wǎng)上看到一篇技術(shù)文章《 沒(méi)頭沒(méi)尾—項目開(kāi)發(fā)筆記:如何編寫(xiě)最外層用例 ?! 》,這篇文章寫(xiě)得很好,真實(shí)記述、反映了用例寫(xiě)作中的一些常見(jiàn)現象和誤區。 然而,該文的前后兩個(gè)用例實(shí)際上都不是針對客戶(hù)的真正的“最外層用例”,盡管作者作了些改進(jìn),但這些用例在具體的內容和寫(xiě)法上還存在一些問(wèn)題。
1.引言
“本系統的目標是制作出一個(gè)跨企業(yè)的信息平臺,為目標公司的客戶(hù)進(jìn)行服務(wù)。這些服務(wù)分成很多的方面,比如提供給銀行的公司財務(wù)情況查詢(xún),提供給生產(chǎn)廠(chǎng)商銷(xiāo)售情況的報告。提供給銷(xiāo)售的商場(chǎng)以及店鋪貨源的情況,提供給物流,安裝服務(wù)公司送貨以及安排信息。從中賺取提高銷(xiāo)售效率,減少運輸損耗的費用。設定目標公司為 A公司,信息平臺名稱(chēng)B系統。”
從上面介紹的內容來(lái)看,我猜 B 系統是 一個(gè) 類(lèi)似于供應鏈 應用 的 企業(yè) 門(mén)戶(hù) 系統,這里所說(shuō)的 A 公司好像是一家從事商品分銷(xiāo)的企業(yè)。通過(guò)該門(mén)戶(hù), A 公司可以有效地聯(lián)系上家—生產(chǎn)商(供貨商),下家—商場(chǎng)、店鋪以及銀行、物流公司、安裝服務(wù)公司等客戶(hù)或合作伙伴。
在討論這個(gè)案例前,首先讓我們重溫一下什么是最外圍用例( the outermost use cases ,根據 Cockburn 的定義改寫(xiě)) :
對于每一個(gè)用例找到它仍能適用的最外圈的設計范圍,針對該范圍為它編寫(xiě)一個(gè)概要用例; 對于一個(gè)將要設計的系統, 我們 通??梢哉业揭粋€(gè)更廣的設計范圍,而使主用角( PA , Primary Actor )仍然處于該范圍之外,如果不斷擴大該范圍,可以找到一個(gè)臨界點(diǎn),主用角就會(huì )被包含在當前的范圍之內,這個(gè)臨界點(diǎn)就是最外圈的范圍; 最外圍用例是通過(guò)把同一個(gè)范圍內具有相似目標的主用角合并到一起而創(chuàng )建出來(lái)的,它們把與這些用角有關(guān)的所有低層用例都匯聚到了一起。
如何獲取最外圍用例呢? Cockburn 給了一些步驟建議 :
(1) 從一個(gè)用戶(hù)目標開(kāi)始。
(2) 問(wèn)“這個(gè)目標對主用角 AA (最好在組織外部)提供什么服務(wù)?”,用角 AA 是我們想要收集用例的最終主用角。
(3) 找出最外圈的設計范圍 S ,使得 AA 仍然在 S 之外,給 S 命名。
(4) 找出最終主用角 AA 在設計范圍 S 中的所有用戶(hù)目標。
(5) 找出 AA 對系統 S 的概要目標 GG 。
(6) 為 GG 編寫(xiě)出概要用例。這個(gè)用例就是我們要找的最外圍用例,它將一些海平面(用戶(hù)目標層)的用例維系在一起。
值得注意的是,這里 Cockburn 所說(shuō)的“系統” S 不一定都是指軟件,它可能是軟件系統(如 B 系統),也可能是業(yè)務(wù)系統(如 A 公司、企業(yè)、部門(mén)等)。 在下面第 2 、第 3 小節中我將按照 Cockburn 的最外圍用例 定義 來(lái)考察 原文中的兩個(gè)最外圍用例 ,逐個(gè)分析存在的錯誤。用第 1 個(gè)例子說(shuō)明以“操作人員”為 主用角 、最外圈范圍為軟件系統( B 系統)的正確寫(xiě)法,用第 2 個(gè)例子說(shuō)明以“客戶(hù)”為主用角 、最外圈范圍為業(yè)務(wù)系統( A 公司)的正確寫(xiě)法。
2.軟件用例 - 業(yè)務(wù)管理
用例名稱(chēng): 最外圍用例
錯誤分析: 顯然這不是一個(gè)正確的用例名稱(chēng)。建議改為“業(yè)務(wù)管理”,解釋如下文。
簡(jiǎn)要說(shuō)明:
A 公司決定讓其業(yè)務(wù)合作伙伴以及最終的用戶(hù)通過(guò)互聯(lián)網(wǎng)訪(fǎng)問(wèn) B 系統以達到減少 A 公司本地人員的工作量以及提升工作效率的目的。 B 系統負責完成進(jìn)銷(xiāo)存業(yè)務(wù)、其它業(yè)務(wù)處理以及報表管理。一些系統維護人員還負責管理基礎信息的認定與實(shí)現。包括四個(gè)用例:基礎設置子系統,進(jìn)銷(xiāo)存子系統,其它業(yè)務(wù)處理子系統,報表子系統。
錯誤分析: 首先,用例的名稱(chēng)、內容中不應該出現“子系統”這個(gè)術(shù)語(yǔ), subsystem 屬于系統設計范疇。
從業(yè)務(wù)介紹來(lái)看,操作人員主要進(jìn)行“進(jìn)銷(xiāo)存、報表和其他業(yè)務(wù)”的處理,系統維護人員主要進(jìn)行基礎信息管理,所以這 4 個(gè)概要用例(風(fēng)箏層)分屬不同的 PA 。這兩種角色在概要白云層似乎沒(méi)有必要嚴格區分,所以我們把系統維護人員和操作人員合并成“操作維護人員”,并且把這 4 個(gè)用例合并成 1 個(gè)最外圍用例“業(yè)務(wù)管理”,并在此處描述。
用例范圍: 跨企業(yè)信息平臺
主執行者( PA ): 客戶(hù)
錯誤分析: 從用例范圍和基本流的內容看, 這里的 PA 應該是“操作維護人員”(客戶(hù)作為 PA 的最外圍用例見(jiàn)第 3 小節)。
用例層次: 白云(最高層次)
觸發(fā)事件: 客戶(hù)有購貨的需求
錯誤分析: 這里應該描述可以檢測到的事件(動(dòng)作、狀態(tài)的改變等),我們怎么知道客戶(hù)有購貨的需求呢?正確的說(shuō)法可能是:客戶(hù)以各種方式請求服務(wù)。
主成功場(chǎng)景(基本流)
· 系統維護人員操作基礎設置子系統維護基礎設置的數據。
· 操作人員操作進(jìn)銷(xiāo)存子系統完成進(jìn)銷(xiāo)存業(yè)務(wù)。
· 操作人員通過(guò)報表系統分析查詢(xún)業(yè)務(wù)結果。
· 操作人員通過(guò)其它的業(yè)務(wù)子系統完成對系統中的其它業(yè)務(wù)處理。(注,其它業(yè)務(wù)子系統包括財務(wù)資金等等子系統,將會(huì )子用例描述中強調)
小結:
從以上分析看,原用例存在著(zhù)基本的概念錯誤,用例的主用角( PA) 、范圍和基本流的內容相互之間存在不一致的現象。這 個(gè)最外圍用例可以改寫(xiě)如下:
用例名稱(chēng): 業(yè)務(wù)管理
范圍: B 系統
層次: 概要 / 白云
主用角: 系統操作維護人員
觸發(fā)事件: 客戶(hù)通過(guò)電話(huà)、郵件等方式向操作維護人員提出服務(wù)請求(如購貨)。
基本流:
操作維護人員通過(guò) B 系統可完成以下任務(wù):
1. 基礎信息管理。
2. 處理進(jìn)銷(xiāo)存業(yè)務(wù)。
3. 進(jìn)行報表管理,查詢(xún)、分析業(yè)務(wù)結果。
4. 處理其他業(yè)務(wù)(如財務(wù)資金管理)。
[ 用例結束 ]
3.業(yè)務(wù)用例 - 客戶(hù)服務(wù)
用例名稱(chēng): 最外圍用例
錯誤分析: 顯然這不是一個(gè)正確的用例名稱(chēng),建議改為“客戶(hù)服務(wù)”。
簡(jiǎn)要說(shuō)明:
A 公司決定讓其業(yè)務(wù)合作伙伴以及最終的用戶(hù)通過(guò)互聯(lián)網(wǎng)訪(fǎng)問(wèn) B 系統以達到減少 A 公司本地人員的工作量以及提升工作效率。 B 系統負責完成銷(xiāo)售業(yè)務(wù)以及報告銷(xiāo)售情況。一些系統維護人員還必須為客戶(hù)和職員設置安全存取級別。包括四個(gè)用例:增加服務(wù)( A 公司本地),增加服務(wù)(客戶(hù)),報告業(yè)務(wù)情況,管理安全存取權限。
錯誤分析: 這段話(huà)其實(shí)不太像用例簡(jiǎn)述。最外圍用例應該從 A 公司向客戶(hù)提供服務(wù)的角度來(lái)敘述,比方說(shuō),可以請求服務(wù),查詢(xún)業(yè)務(wù)銷(xiāo)售報表等。在本例中我們進(jìn)行黑盒業(yè)務(wù)建模,涉及到 B 系統和系統維護人員的內容,比如安全級別設置,不應在此處反映。
用例范圍: 跨企業(yè)平臺
錯誤分析: 我們選定了 A 公司的客戶(hù)作為 PA ,那么按照最外圍用例的定義,最大范圍邊界應為 A 公司而不是 B 系統。實(shí)際上這是一個(gè)業(yè)務(wù)用例( Business Use Case )。雖然客戶(hù)也可以直接訪(fǎng)問(wèn) B 系統,但是對于客戶(hù)而言,B 系統 不是最大的范圍 。
用例層次: 白云(最高層次)
主執行者( PA ): 客戶(hù)
主成功場(chǎng)景(基本流):
·客戶(hù)通過(guò)電話(huà),郵件聯(lián)系 A 公司操作人員,請求一個(gè)新的服務(wù)。 A 公司的操作人員通過(guò) B 系統處理服務(wù)請求。
·客戶(hù)直接通過(guò) B 系統的客戶(hù)端,請求與處理新的服務(wù)。
·客戶(hù)通過(guò) B 的系統可以查詢(xún)出銷(xiāo)售情況以及其它相關(guān)情況的報表。
·B 的系統維護人員將要對客戶(hù)以及操作人員進(jìn)行安全存取權限的設置。
錯誤分析: 在最外圍業(yè)務(wù)用例的基本流中,主要包含一些用戶(hù)目標層或概要層的用例,所以此處不應該出現與 B 系統、操作人員、系統維護人員相關(guān)的內容,它們在我們定義的范圍邊界( A 公司)之內。 根據以上分析,我將該 最外圍用例改寫(xiě)如下:
用例名稱(chēng):
客戶(hù)服務(wù)
范圍:
A 公司 / 業(yè)務(wù)
層次:
概要 / 白云
主用角 :
客戶(hù)
觸發(fā)事件:
客戶(hù)提出服務(wù)請求
基本流:
客戶(hù)可以下列 2 種方式獲得服務(wù):
1. 服務(wù)請求處理:客戶(hù)通過(guò)電話(huà)、郵件、客戶(hù)端軟件等方式請求服務(wù), A 公司接收請求后進(jìn)行相應處理,并把處理結果以恰當的方式返回給客戶(hù)。
2. 銷(xiāo)售查詢(xún):客戶(hù)通過(guò)客戶(hù)端軟件直接查詢(xún)銷(xiāo)售情況及相關(guān)報表。
[ 用例結束 ]
4.總結
有人認為:“ 也許針對一個(gè)項目可以有很多‘正確的‘最外層用例的設計方法。上面兩種劃分方式應該說(shuō)只從最外層用例的角度來(lái)說(shuō)都是正確的 ” 。我不同意這種開(kāi)脫的說(shuō)法,針對 1 個(gè)項目抽取最外圍用例實(shí)際上只有 1 種“最優(yōu)解”。為什么?道理很簡(jiǎn)單,因為最外圍用例是 Cockburn 提出的,他給出了找到最外圍用例的步驟和方法,而這種方法是明確的、無(wú)二義性的。人們找錯了最外圍用例,多半是因為沒(méi)有理解和掌握這套方法。
概括一下,原文主要存在以下錯誤:
1 )由于用例的主用角 、范圍與基本流的內容不一致,導致那兩個(gè)用例都不是真正的最外圍用例。實(shí)際上,針對“客戶(hù)”的最外圈范圍是 A 公司,而針對“操作維護人員”的最外圈范圍是 B 系統。
2 )在用例的功能描述中出現了軟件內部設計的內容,不符合需求提取、分析的要求。
最終,由于原作者對于為什么要編寫(xiě)用例,用例與傳統結構化方法的功能總體描述究竟有何實(shí)質(zhì)上的不同,用例有哪些特點(diǎn),缺乏準確而深入的理解,導致編寫(xiě)用例的時(shí)候思路凌亂,把幾種內容混雜在一起,做成了一碗“雜燴面”。 這個(gè)案例給我們的重要啟迪是,抽取用例最關(guān)鍵的一步是首先明確 SuD ( System Under Discussion or Design )范圍的定義 以 及針對這個(gè)范圍的主用角 。 如果用 傳統 “結構化”的老思路來(lái)套用例的格式,換湯不換藥,那對 IT/軟件項目開(kāi)發(fā)將起不到真正的效果,甚至可能產(chǎn)生負作用,如果那樣還不如不寫(xiě)用例。 最外圍用例便于我們將關(guān)注的焦點(diǎn)轉向用戶(hù)真正需要什么,從而真正地從用戶(hù)的角度出發(fā)來(lái)考慮問(wèn)題。