本章討論幾個與 User Story 相關的延伸議題,包括非功能性需求的處理、紙卡與軟體的選擇、使用者介面設計、Story 的保留,以及 Bug 的處理。
處理非功能性需求#
並非所有需求都能寫成 User Story。非功能性需求(如效能、安全性、可維護性等)通常以約束條件(Constraint)的形式處理。
常見的非功能性需求類型:
| 類型 | 約束條件範例 |
|---|---|
| 效能 | 80% 的搜尋在 2 秒內回應 |
| 準確度 | 系統正確預測結果的機率 ≥ 55% |
| 可移植性 | 不使用任何不利於移植到 Linux 的技術 |
| 可維護性 | 所有元件必須有自動化單元測試 |
| 容量 | 資料庫能儲存 2000 萬筆會員資料 |
將約束條件寫在獨立的卡片上,標註為「Constraint」。大多數約束條件可以撰寫自動化測試來驗證合規性。
紙卡還是軟體#
這是一個常見的辯論。兩種方式各有優勢:
紙卡的優勢#
- 簡單直觀:低科技的提醒,Story 本就是不精確的
- 促進互動:可以在桌上排列、堆疊、分類
- 有限的空間:自然限制了 Story 的細節量
軟體的優勢#
- 追溯性:容易滿足 ISO 等認證的追溯需求
- 遠端協作:分散式團隊必須使用軟體
- 排序靈活:容易進行多維度的排序和篩選
作者建議從紙卡開始,觀察在你的環境中如何運作。如果有充分理由(遠端團隊、合規需求),再切換到軟體。
User Story 與使用者介面#
敏捷方法主張迭代式開發,但使用者介面的頻繁變動可能會困擾使用者。Larry Constantine 指出:
對使用者介面而言,架構、導覽和整體外觀必須在一開始就設計好,後續的迭代式精煉是不可接受的。
如果 UI 對產品成功至關重要,考慮採用 Agile Usage-Centered Design 的流程:
- 進行使用者角色建模
- 蒐集高層級 Story
- 排定優先順序
- 精煉高優先和中優先的 Story
- 將 Story 分組
- 建立紙本原型
- 精煉原型
- 開始開發
如果你的產品有重要的 UI,不要完全依賴迭代來「長出」好的介面。在開發前投入幾天到幾週做 UI 原型是值得的。
保留還是丟棄 Story#
Story 完成開發後是否應該保留?作者建議保留:
- 如果使用軟體工具,沒有理由刪除已完成的 Story
- 如果使用紙卡,可以存檔或影印保留
- 在公司被收購、產品改寫、需要展示流程等情境中,保留的 Story 都可能派上用場
Bug 的處理#
Bug 和 Story 的關係取決於 Bug 的大小:
- 大型 Bug(修復時間與一般 Story 相當):當作獨立的 Story 處理
- 小型 Bug(預期可快速修復):多個小 Bug 釘在一起,加上一張封面卡片,當作一個 Story 處理
有些團隊使用不同顏色的卡片來區分 Story 類型(白色=正常、紅色=Bug、藍色=技術任務)。但作者認為這增加了不必要的複雜性——簡單地使用白色卡片就好。