什么是用例?
用例描述了多個Actor與系統之間的交互,以便為發起 Actor 提供可觀察的價值結果。
系統的功能由不同的用例定義,每個用例代表特定參與者的特定目標(獲得可觀察的價值結果)。
在下圖所示的自動櫃員機中,銀行客戶可以從賬戶中提取現金、在賬戶之間轉移資金或將資金存入賬戶。這些對應於參與者在使用系統時的特定目標。
圖 :ATM 用例示例。
每個用例都與參與者之一的目標相關聯。用例的集合構成了使用系統的所有可能方式。您應該能夠簡單地通過觀察用例的名稱來確定用例的目標。
用例以參與者與系統之間的對話形式描述參與者與系統之間的交互,其結構如下:
- 演員<<做某事>>
- 系統<<做出響應>>
- 演員<<做別的事>>
- 系統…
這種形式的每個對話都稱為“事件流”。
因為有許多事件流可能實現目標(例如,流可能會根據參與者的特定輸入而有所不同),並且存在無法實現目標的情況(例如,當前需要的網絡連接不可用),每個用例將包含多個流,包括一個“基本事件流”和幾個“替代流” (Alternative Flow)。
事件的基本流程為理想情況指定參與者和系統之間的交互,其中一切都按計划進行,參與者的目標(價值的可觀察結果)得到滿足。基本流程代表了系統為此用例提供的主要能力。
顧名思義,替代流程指定與同一目標相關的替代交互。
與用例密切相關的是場景的概念。場景是特定的事件流 (Flow of Events),用於系統的一組特定輸入、系統狀態和系統環境狀態。場景與測試用例密切相關。
事件流程
事件流應該足夠清楚地描述參與者和系統之間的交互,以使局外人易於理解。事件流應該代表系統做什么,而不是系統是如何設計來執行所需行為的。
對於事件流的內容,請遵循以下准則:
- 描述用例如何開始和結束。
- 描述參與者和用例之間交換了哪些數據。
- 不要描述用戶界面的細節,除非有必要了解系統的行為。過早指定用戶界面細節會限制設計選項。
- 描述事件的流程,而不僅僅是功能。要強制執行此操作,請以“當演員...”開始每個動作。
- 避免使用模糊的術語。
- 詳細說明事件的流程。為每個操作指定何時發生什么。請記住,此文本將用於標識測試用例。
事件流——結構
事件流的兩個主要部分是事件的基本流和事件的替代流程。事件的基本流程應涵蓋執行用例時“通常”發生的情況。可選的事件流包括與正常行為相關的可選或異常特征的行為,以及正常行為的變化。你可以把可選的事件流看成是對基本事件流的繞道,其中一些會返回到基本事件流,而另一些會結束用例的執行。
基本流 - 詳述主要場景的事件流程
作為起點,使用用例主要場景的分步描述。然后,逐漸向這個場景添加細節,描述用例做什么,而不是如何解決系統內部的問題。
事件流描述探索:
- 用例如何以及何時開始
- 用例何時與 Actor 交互,以及它們交換什么數據
- 當用例使用存儲在系統中的數據或將數據存儲在系統中時
- 用例如何以及何時結束
識別替代流程
一個用例由許多場景組成,每個場景代表用例的特定實例,這些實例對應於來自參與者的特定輸入或環境中的特定條件。每個場景都描述了系統提供行為的替代方式,或者它可以描述失敗或異常情況。
在詳細說明主要場景時,通過詢問以下問題來確定替代流程:
- 根據 Actor 的輸入,是否有不同的選項可用?(例如,如果演員在訪問 ATM 時輸入了無效的 PIN 碼)
- 哪些業務規則可以發揮作用?(例如,演員從 ATM 請求的錢多於她帳戶中的可用錢)
- 會出什么問題?(例如在需要執行交易時沒有可用的網絡連接)
最好也迭代地開發這些場景。從識別它們開始。檢查每個可能的場景以確定它是否相關,它是否真的可以發生,以及它是否與其他場景不同。消除多余或不必要的場景,然后開始闡述更重要的場景。
下圖中的直箭頭表示事件的基本流程,曲線表示相對於法線的替代路徑。一些替代路徑返回到事件的基本流程,而其他路徑則結束用例。
用例事件流的典型結構
為了闡明事件流在結構中的適合位置,您需要為每個繞行到基本事件流的繞行描述以下內容:
- 可以在基本事件流中插入替代流的位置
- 替代行為開始需要滿足的條件
- 如何以及在何處恢復基本事件流,或用例如何結束
如果事件的替代流程非常簡單,那么在事件的基本流程部分(使用一些非正式的“if-then-else”結構)來描述它可能很誘人。應該避免這種情況。太多的選擇會使正常行為難以看到。此外,在基本事件流部分中包含替代路徑將使文本更像偽代碼並且更難閱讀。
基本流和替代流都可以進一步結構化為子流。在這樣做時,您的主要目標應該是文本的可讀性。一個指導原則是,子流應該是用例中具有明確目的的行為片段,並且在您執行所描述的所有操作或不執行任何操作的意義上是“原子的”。
特殊要求
在用例的特殊需求中,您描述了事件流未涵蓋的所有用例需求。這些通常是會影響設計模型的非功能性需求。
前置條件和后置條件
前提條件是在可以啟動用例之前需要的系統及其環境的狀態。后置條件是用例結束后系統可以處於的狀態。使用前置條件和后置條件的概念來闡明事件流如何開始和結束會很有幫助。但是,只有在用例描述的受眾同意它有幫助時才使用它們。
顯示了一個示例。
前置條件和產生的后置條件的說明
例子
- 用例在 ATM 機中提取現金的前提條件:客戶擁有一張個人發行的卡,該卡適合讀卡器,已獲得 PIN 碼,並已在銀行系統中注冊。
- 用例在 ATM 機中提取現金的后置條件:在用例結束時,平衡所有帳戶和交易日志,重新初始化與銀行系統的通信,並將卡退還給客戶。