用戶故事(一):什么是用戶故事?

9 評論 157643 瀏覽 325 收藏 11 分鐘

用戶故事在軟件開發過程中被作為描述需求的一種表達形式;為了規范用戶故事的表達,便于溝通;包含角色、活動、價值三個要素。

一、用戶故事的概念

概念這種東西我喜歡說文解字的方式去理解和闡述;用戶故事=用戶+故事=人+故+事,那就是一個人因為什么原因要做什么事,提煉出來三要素就是who、why、what。從需求角度描述就是一個用來確認用戶和用戶需求的簡短描述。

二、用戶故事的三要素

用戶故事在軟件開發過程中被作為描述需求的一種表達形式。為了規范用戶故事的表達,便于溝通,用戶故事通常的表達格式為:作為一個<用戶角色>, 我想要<完成活動>, 以便于<實現價值>。

一個完整的用戶故事包含三個要素:

  1. 角色(who):誰要使用這個
  2. 活動(what):要完成什么活動
  3. 價值(value):為什么要這么做,這么做能帶來什么價值

三、3C原則

用戶故事的描述信息以傳統的手寫方式寫在紙質卡片上,所以Ron Jeffries(2001)對這三個方面稱為3C:卡片(Card)、對話(Conversation)和確認(Confirmation)。

(1)卡片(Card):用戶故事一般在小卡片上寫著故事的簡短描述,規則和完成標準。

卡片的正面書寫故事的描述,格式為:作為一個<角色>, 我想要<完成活動>, 以便于<實現價值>描述需求;卡片背面書寫完成用戶故事的規則和完成標準,格式為:Given…When…Then。

(2)交談(Conversation):用戶故事背后的細節來源于和客戶或者產品負責人的交流溝通;確保各方對故事的理解正確。

(3)確認(Confirmation):通過驗收測試確認用戶故事被正確完成。

四、INVEST原則

好的用戶故事除了格式規范,要素完整外,還應該遵循INVEST原則:Idependent(獨立的);Negotiable(可協商的);Valuable(有價值的);Estimatable(可評估);Small(小的);Testable(可測試的)。

1. Idependent(獨立的)

要盡可能的讓一個用戶故事獨立于其他的用戶故事。用戶故事間保持獨立性不僅便于排列和調整優先級,使得發布和迭代計劃更容易制定,便于獨立地理解、跟蹤、實現、測試以及頻繁交付,也使得用戶故事的大小估算所涉及的范圍更清晰,從而估算偏差更小。

2. Negotiable(可協商的)

一個用戶故事的內容要是可以協商的,用戶故事不是合同。一個用戶故事只是對用戶故事的一個簡短的描述,不包括太多的細節;具體的細節在溝通階段產出。一個用戶故事帶有了太多的細節,實際上限制了用戶、團隊的想法和溝通。

3. Valuable(有價值的)

每個故事必須對客戶具有價值(無論是用戶、購買方還是公司內部角色)。用戶故事對于最終的用戶是有價值的,因此應該站在用戶的角度去編寫,描述的是一個一個的feature,而非一個一個的task。

這個特點促進團隊的開發和測試成員由傳統的指令式工作方式向自驅動的價值導向工作方式轉變,使團隊中的每個人知道自己每天做的工作價值。

4. Estimatable(可評估)

計劃會議里面一個很重要的環節,那就是故事點的估計。實際上就是對要開發的User Story進行一個粗量級的估算,以便于團隊能夠知道這個user story的復雜度(工作量)。

重點放在當前迭代里能否按照該用戶故事的接收條件和團隊定義的DoD(完成標準)來完成這個用戶故事,如果不能完成,給出理由,由PO來決定是否拆分或者重新設計用戶故事。

讓開發者難以估計故事的問題來自:對于領域知識的缺乏(這種情況下需要更多的溝通),或者故事太大了(這時需要把故事切分成小些的)。

5. Small(小的)

一個好的故事在工作量上要盡量短小,最好不要超過10個理想人/天的工作量,至少要確保的是在一個迭代中能夠完成。用戶故事越大,在安排計劃,工作量估算等方面的風險就會越大。

6. Testable(可測試的)

一個用戶故事要是可以測試的,以便于確認它是可以完成的。如果一個用戶故事不能夠測試,那么你就無法知道它什么時候可以完成。一個不可測試的用戶故事例子:軟件應該是易于使用的。

五、三個準則

用戶故事在遵循了INVEST原則后,基本就是一個好的用戶故事了。再重點分析三個準則,幫助在產出用戶故事時更好地符合原則。

三個準則是:一個用戶、完整價值、不依賴。

1. 一個用戶

只包含一個用戶,因為多個用戶常常有細微的差別。一般是典型的用戶,常常有共同的某類需求。

2. 完整價值

完整地交付一個客戶價值。一個完整的用戶故事意味著這個故事完成后,用戶可以達成一個明確的、有意義的目標。

3. 不依賴

依賴性的三種常見類型是:重疊、順序和包含。

總體上來說,故事之間功能點相互重疊是需要避免的;順序關系是現實存在,在多數情況下可以通過一些手段解決;包含關系對復雜系統是有幫助的,對排定發布和迭代計劃的影響需要注意。

(1)重疊依賴

重疊依賴是帶來最多困擾的依賴形式,特別是多個用戶故事包含多個不同的重疊部分時,很難找到一組用戶故事可以代表該最小可行產品的功能集合,該集合應該包含且僅包含一次需要的功能。

解決方式:

  • 將重疊部分單獨剝離出來做為獨立的用戶故事;
  • 合理拆分用戶故事,并且將重疊部分只保留在一個最有內聚性的用戶故事中;
  • 使用Scrum開發模式。

(2)順序依賴

順序依賴是指要使某用戶故事完成,另外的一個或多個用戶故事必須在它之前完成。順序依賴通常是無害的,而且有一些方式可以減輕這種依賴。

從敏捷開發的角度,整個系統是從初始的最小可行產品逐步演化為強大的產品,后面的每一步是建立在前面的基礎之上的。

但從另外的角度,不必要的順序依賴使得排列和調整優先級變的比較困難,進而影響制定發布和迭代計劃,也使得用戶故事的大小估算更難以把握。

解決方式:

  • 一個迭代內的用戶故事盡量做到沒有內在依賴;
  • 保持迭代之間只有單向依賴,在時間上只有后面迭代的故事對前面迭代故事的單向依賴(前向依賴);
  • 剝離出核心依賴作為獨立的故事,不要把有依賴和無依賴的需求混在一個故事里。

(3)包含依賴

包含依賴是指在組織用戶故事時使用有層級的管理,比如常見的特性-故事兩級管理,一個特性包含多個用戶故事,這樣就構成了特性對其屬下故事的包含依賴。

解決方式:

  • 用戶故事一級用來做迭代計劃,避免用特性一級做粗粒度迭代計劃,特性一級可以用來做發布計劃;
  • 特性一級同樣可以進行拆分,直至拆分到最小市場化特性的程度,并將其包含的用戶故事分別歸到新拆分出的特性中去;
  • 遵從最小可行產品的理念,一個特性分多個用戶故事多個迭代實現,每一個迭代可形成潛在可交付或者提供內部或外部反饋。

系列文章目錄

用戶故事(一):什么是用戶故事?

用戶故事(二):為什么要使用用戶故事表達需求?

用戶故事(三):用戶故事該怎么寫?

參考文章

如何理解用戶故事INVEST規則中的獨立性?

Scrum中用戶故事的介紹

 

本文由 @chun 原創發布于人人都是產品經理,未經許可,禁止轉載。

題圖來自 Unsplash,基于CC0協議。

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 剛好最近再做環球項目,這種外企要求是寫用戶故事,真的是很繁瑣,一般一個prd一千多字就能解決的問題,寫用戶故事需要拆成五六個甚至更多,研發看起來也很費勁,看一堆文檔才能了解這一期產品設計的全貌。這種公司一般都是不著急的,用戶故事里面包含了產品文檔+測試用例等等,字數一般在兩三千左右一個拆的要足夠細,很繁瑣。接到這種項目的需求,盡量就跑吧,就是個寫文檔工具人

    來自北京 回復
  2. 花里胡哨,全是理論,沒有干貨,沒有用!

    來自陜西 回復
  3. 請教作者,寫用戶故事的目的在于使整個團隊理解需求的價值。但是對開展開發工作來說,產品經理需要交付的是產品需求文檔PRD,開發團隊依據PRD進行開發。開發如果只依靠用戶故事,是不足以開始干活的。是不是可以這樣理解 ?謝謝~~

    來自遼寧 回復
    1. 是的。具體開發實施,是需要詳細的需求文檔,一般包括功能結構、產品規則、流程圖、交互設計稿等,就是在需求確定要做的情況下,該怎么完成。
      用戶故事,講究的是敏捷化,統一團隊意見和明確努力方向。

      回復
  4. 所以用戶故事是運用于產品規劃?指導需求調研顯然不夠,信息量太少了

    回復
    1. 用戶故事是傳達需求的方式,是調研后得到需求后的結論性表述。以故事的方式講述,大家更容易場景化理解,認可需求價值,

      回復
  5. 感謝分享!作為一個小白,概念性的東西有些晦澀,建議多補充些例子,如依賴的情況。

    來自北京 回復
    1. +1 具體點就好啦

      來自上海 回復
    2. 同意,后面兩個依賴的解決辦法有點模糊

      回復