本章討論 Use Cases(使用案例)在敏捷開發中的角色。核心觀點是:Use Cases 應該保持簡單,它們本質上是文字描述而非圖形,而且不應該被過度複雜化。

撰寫 Use Cases#

Use Case 是從使用者視角描述系統行為的文字敘述,只記錄使用者可見的事件。

基本結構#

一個 Use Case 包含:

  • 主要流程(Primary Course):描述正常情況下的操作步驟
  • 替代流程(Alternate Courses):描述例外狀況的處理方式

重點: Use Case 不是需求文件,而是即時需求(Just-in-Time Requirements)。不要試圖在專案初期就寫出所有的 Use Cases——它們應該隨著迭代逐步浮現與精煉。

撰寫原則#

  • 從使用者的角度描述:只記錄使用者能看到的行為,不涉及系統內部實作
  • 保持簡短:每個 Use Case 只描述一個完整的互動場景
  • 使用口語化的語言:避免技術術語,讓業務人員也能理解
  • 不要過度詳細:細節應該在後續迭代中逐步補充

替代流程(Alternate Courses)#

替代流程描述主要流程中可能出現的分支與例外。每個替代流程都以「在步驟 N,如果發生 X」的格式表述。

技巧: 替代流程不需要面面俱到。只記錄對使用者有意義的例外情況即可——系統內部的錯誤處理不屬於 Use Case 的範疇。

Use Case 圖#

Figure 17.1: System boundary diagram

Use Case 圖在 UML 中用橢圓形和小人(Actor)來表示。然而作者認為 Use Case 圖的價值非常有限:

  • 系統邊界圖(System Boundary Diagram)偶爾有用——它顯示哪些 Actor 與系統互動
  • 但 Use Case 之間的關係(如 <<extends>><<generalization>>)幾乎沒有實用價值

注意: 不要在 Use Case 之間繪製 <<extends>><<includes>> 或繼承關係。這些關係會讓 Use Case 圖變得過於複雜,而且帶來的價值幾乎為零。Use Case 的真正價值在於文字描述本身,而非圖形。

本章小結#

Use Cases 是收集需求的實用工具,但必須遵循以下原則:

  • 保持簡單:Use Cases 是文字,不是精美的圖表
  • 即時撰寫:不要試圖預先寫出所有 Use Cases
  • 避免過度結構化:不要用 Use Case 之間的關係來建構複雜的層次結構
  • 聚焦使用者視角:只描述使用者可見的行為