---
# System prepended metadata

title: '[Video Note] [Project Management] [User Story] 使用者故事 (User Story)'
tags: [Project Management, User Story, Video Note]

---

# 軟體開發的重要工作
![CleanShot 2024-01-25 at 11.05.09](https://hackmd.io/_uploads/Bkz7xUk56.png)

- 軟體開發的重要工作包括需求截取分析、系統設計、系統實作、系統測試以及專案管理等。
- 在需求分析中，重要的是理解並擷取真實的客戶或使用者需求，避免不同角色對需求的理解出現偏差。
- 使用者故事是一種方法，用簡短的描述來規劃系統為使用者提供什麼功能，著重於以使用者角度撰寫需求。

# 沒有做好需求分析的情況
![image](https://hackmd.io/_uploads/r1e0gLyca.png)
[PROJECT MANAGEMENT - A TREE SWING STORY](https://pmac-agpc.ca/project-management-tree-swing-story)

- 案例中提到的Tree Swing情境強調了需求分析的重要性，客戶端提出的需求在不同角色轉述下可能產生差異，而真實需求可能被誤解。
- 強調了避免這種情況的必要性，因為沒有正確的需求分析可能導致開發出不符合預期的程式。

# 什麼是使用者故事
![CleanShot 2024-01-25 at 11.11.39](https://hackmd.io/_uploads/H1IY-8J5p.png)

- 使用者故事是一種簡短的描述，著重於系統為使用者提供什麼功能。
- 包含文字描述和可能的對話，以確定故事的大小和詳細程度。
- 使用者故事以白話、商業的方式撰寫，避免技術層面的描述，站在客戶或使用者的角度思考。

# 使用者故事範例
![CleanShot 2024-01-25 at 11.12.34](https://hackmd.io/_uploads/Hych-U156.png)

- 提供了一些合理的使用者故事範例，例如「使用者可以搜尋工作職缺」或「公司可以發布新的職缺」，這些故事以使用者的角度描述系統功能。

# 使用者故事基本準則
![CleanShot 2024-01-25 at 11.13.59](https://hackmd.io/_uploads/SylfMIy5T.png)

- 撰寫使用者故事時，要以對客戶有價值的方式思考，不論是真實客戶或開發團隊自身。
- 寫法上應該以白話方式呈現，內容著重在商業語言（Business Language）而非技術層面。
- 在大型團隊中，可能有產品負責人或需求團隊負責使用者故事的撰寫。

# 故事的大小
![CleanShot 2024-01-25 at 11.19.03](https://hackmd.io/_uploads/HyIHmUyqp.png)

- 使用者故事不應過於龐大，一般建議讓一到兩位的開發者在半天到兩週的時間內能完成。
- 大故事有時被稱為「史詩」（Epic），可以將其拆解為更小的使用者故事，便於後續的設計、實作、測試等階段。
- 提到以「Epic」的方式規劃較大、高階的需求，再拆解成小而可實作的故事。


# 故事的詳細程度
![CleanShot 2024-01-25 at 11.19.34](https://hackmd.io/_uploads/H1JDXI19a.png)
![CleanShot 2024-01-25 at 11.20.07](https://hackmd.io/_uploads/BJRtm8J96.png)
![CleanShot 2024-01-25 at 11.21.18](https://hackmd.io/_uploads/rJgyV8y9T.png)

- 故事撰寫時強調不需過早確定細節，可加上註記標示待討論的重點。
- 使用者故事可包含註記，指示日後需要團隊討論與確認的部分。

# 使用者故事模板
![CleanShot 2024-01-25 at 11.22.02](https://hackmd.io/_uploads/BJOlEUk5T.png)

- 使用者故事模板為 
    ```
    As a <role>
    I can <activity> 
    so that <value>
    ```
- 這種模板的廣泛應用有助於清晰描述使用者的需求。

# 定義故事的角色
![CleanShot 2024-01-25 at 11.22.28](https://hackmd.io/_uploads/BkzfVIJ9T.png)
![CleanShot 2024-01-25 at 11.23.07](https://hackmd.io/_uploads/ryn4N8J56.png)

- 使用者故事中需要清楚定義不同的角色，可使用 Persona 進行補充說明。
- 以集思廣益方式，通過腦力激盪歸納出各種可能的使用者角色。

# 好的故事有 INVEST 屬性
- Independent（獨立的）
- Negotiable（可協商的）
- Valuable（有價值的）
- Estimable（易估算的）
- Small（小的）
- Testable（可測試的）

# 獨立的故事（Independent）
![CleanShot 2024-01-25 at 11.24.19](https://hackmd.io/_uploads/HJxtN81q6.png)

- 警告故事間強烈相依性可能導致管理上的困擾，建議合併相關故事以維持獨立性。

# 可協商的故事（Negotiable Story）
![CleanShot 2024-01-25 at 11.24.52](https://hackmd.io/_uploads/HyRoEIJqT.png)
- 故事應該可協商，不應固定，可包含註記待後期討論，避免過早的不必要細節。

# 有價值的故事（Valuable Story）
![CleanShot 2024-01-25 at 11.25.31](https://hackmd.io/_uploads/SyeAE8156.png)
- 故事應對客戶和使用者有價值，避免寫入過於技術性或不必要的底層機制。

# 故事壞味道
![CleanShot 2024-01-25 at 11.26.03](https://hackmd.io/_uploads/rJtlBLkqp.png)
- 敘事太大或太小、互相依賴、過多的鍍金、細節過多、過早的UI介面等可能造成故事品質差的情況。


# 關鍵字
- 需求截取分析： 在軟體開發中，指的是從客戶或使用者提出的需求中，擷取並分析真實的需求，以確保開發的軟體符合預期。
- 使用者故事： 一種簡短的描述方式，以使用者的角度規劃系統為其提供什麼功能，著重在白話、商業層面的撰寫。
- 史詩（Epic）： 在需求規劃中，指的是相對較大、高階的需求，可能包含多個子需求，可以進一步拆解為小的使用者故事。
- 產品負責人： 在敏捷開發中，是負責規劃、管理產品需求的角色，通常與開發團隊協作以確保開發符合客戶期望。
- 半天到兩週： 建議的使用者故事大小，表示一到兩位的開發者在這個時間範圍內能夠完成一個使用者故事。
- 需求分析： 在軟體開發中，指的是分析和理解客戶或使用者對系統的需求，是軟體開發過程中的關鍵步驟。
- INVEST 屬性: 一種敘述良好的使用者故事的屬性，包括獨立性、可協商性、有價值性、可估算性、小規模性、可測試性。
- Persona (人物誌): 透過創建虛構人物的方式，描述目標使用者的特徵、需求和期望，有助於更深入地理解和設計使用者故事。
- Independent (獨立的): 故事之間應該盡量避免強烈的相依性，以便更好地管理和開發。
- Negotiable (可協商的): 故事應該是可以協商的，不需要固定不變，可以在後期進行討論和調整。
- Valuable (有價值的): 故事應對客戶和使用者有實質價值，避免不必要的技術性或底層機制。
- Estimable (可估算的): 故事應該具有可估算的大小，使團隊能夠更準確地預測開發時間和資源。
- Small (小的): 故事應該足夠小，易於管理和開發，避免過大的任務。
- Testable (可測試的): 故事應該能夠進行測試，以確保符合預期的功能和需求。
- 商業語言（Business Language）: 是指在商業環境中使用的特定語言和詞彙。這種語言通常是一種專業化的語言，用於溝通、交流和描述與商業相關的概念、流程、策略、計劃和報告等。