User Stories - 最佳實踐 (Best Practices)

在轉向敏捷之后,很多團隊開始使用“用戶故事”一詞。用戶故事是一種簡單而優雅的技術,可以收集客戶需求。然而,它需要一定的理解和實踐才能用User Stories構建出色的軟件。

讓我們仔細看看用戶故事是什么以及如何使用這種技術取得成功。

什么是用戶故事?

用戶素材是對功能的簡短描述,它為用戶或客戶帶來價值,團隊可以在迭代中提供這些功能。

用戶故事應該回答3個問題:

  • 我們為誰建造它? - 作為<用戶類型>
  • 我們在建什么? - 我想<feature>
  • 我們為什么要建造它? - 這樣<值或利益>

在此之后,用戶故事的典型格式是:

作為<用戶類型>,我想要<feature>,以便<value或benefit>。

用戶故事示例:作為注冊用戶,我希望能夠將我的圖片下載到我的個人資料中,以便其他用戶可以看到我的樣子。

有沒有創建用戶故事的程序?

沒有正式的過程來創建用戶素材。盡管如此,還是應該遵循一條準則來創建一個好的用戶故事。它被稱為3 C,由極限編程的創始人之一Ron Jeffries提出。

  • 該卡是用戶故事的書面說明。它沒有捕獲有關應該構建的內容的所有詳細信息。相反,它是一個提醒,是對必須進行的后續通信的承諾。
  • 對話用于討論用戶故事的細節。它可能會被一些文檔補充。
  • 確認由用戶驗收測試表示,確保用戶故事滿足用戶/客戶的驗收標準。

如何撰寫高質量的用戶故事

確保用戶故事具有適當質量的良好做法是遵守Bill Wake的INVEST首字母縮略詞的標準。INVEST還有助于確定用戶故事是否已被充分理解并為開發團隊開始工作做好準備。

  • 獨立 - 用戶故事不應該依賴于另一個用戶故事,因此用戶故事可以按任何順序開發。
  • 可協商 - 用戶故事的詳細信息通過產品負責人和開發團隊之間的口頭對話進行協商。
  • 有價值 - 用戶故事應該為用戶/客戶帶來所需的價值。
  • 估計 - 開發團隊應該很好地理解用戶故事來估計它。
  • 小 - 用戶故事應足夠小,以適應迭代。
  • 可測試 - 應為用戶故事編寫正確的驗收標準,以便進行驗證。

什么不是用戶故事?

讓我們對自己說實話:用戶故事不能通過其定義成為“技術用戶故事”,因為在這種情況下它不會給用戶/客戶帶來直接價值。不過,許多團隊喜歡在需要執行代碼重構等技術任務時創建用戶故事。我建議將其他工作項用于此類任務,并與您的產品負責人就此類工作達成一致,以便了解為何需要這樣做。這同樣涉及非功能性需求任務,界面設計任務,復雜的用戶交互任務或錯誤。您可以自由地為這些任務創建其他工作項。例如,Constraint Story可用于表示非功能性需求。用戶故事是捕獲產品功能的絕佳技術,但我們沒有義務將其用于所有目的。

誰是用戶?

在編寫用戶故事之前,應該清楚地了解創建用戶素材的用戶是誰。有時它被新用戶故事技術的團隊所忽視,他們最終創建了具有不必要功能的軟件。因此,做一個適當的用戶研究,讓你的所有用戶類型或用戶角色或角色寫下來并描述。可以幫助您解決此問題的兩種技術是用戶角色建模和角色。

誰負責撰寫用戶故事?

通常,客戶代表(例如產品負責人)負責用戶故事。盡管如此,用戶故事并不是從頂級到團隊的規范,而是產品負責人和團隊之間的協作技術。這就是為什么如果用戶故事是協作編寫的話會更好。一個很好的方法是做一個故事寫作研討會。

細節在哪里?

由于用戶故事不是規范,因此詳細信息以不同方式傳達:

  • 3 C指南中的第二個“C”是Conversation。對話是敏捷最重要的方面之一。因此,大多數細節都是通過客戶代表和開發團隊之間的口頭溝通來傳達的。
  • 第三個“C”是確認。用戶驗收測試確認用戶故事滿足用戶/客戶的驗收標準,并且它們用作正式的文檔詳細信息。BDD(行為驅動開發)是一種編寫驗收測試的好方法。
  • 如果需要,某些用戶故事可能包含其他書面詳細信息。

你怎么知道用戶故事何時完成?

使用“完成定義”技術。簡而言之,Done的定義是團隊成員之間對工作完成意義的共同理解。完成的定義通常以活動清單的形式創建,其表明商定的價值(用戶驗收測試以滿足用戶驗收標準)和質量(以滿足質量標準)。團隊有時會忽略最后一個,在迭代結束時,什么可以使用戶故事不可能發送給客戶。完成技術的定義有助于避免這種情況。

完成定義的示例:

完成時間:

  • 單元測試通過
  • 代碼經過同行評審
  • 用戶驗收測試通過
  • 集成測試通過
  • 回歸測試通過
  • 用戶指南已更新

如何開始定義產品范圍?

在項目開始時,我們需要定義產品的粗略范圍,以便對其有全局視野。這可以通過Epics完成。史詩是一大塊工作,有一個共同的目標。Epic可以被視為占位符,用于稍后創建的更詳細的用戶故事。Epic通常需要多次迭代才能完成。

什么是組織用戶故事的最佳方式?

使用由Jeff Patton發明的故事映射技術 (User story Mapping)。故事映射代表了一種自上而下的需求組織方法,也是確定優先級和規劃的好方法。

對BABOK?Guidev2的敏捷擴展指出:

“故事映射提供了解決方案支持的活動序列的視覺和物理視圖。它使用二維網格結構來顯示產品在水平維度上的關鍵方面的順序和分組,詳細信息和優先級關于垂直維度的故事。故事映射是一種分解技術,它允許從端到端視圖開始逐步理解解決方案,并深入到詳細的用戶故事。

故事映射示例 (Visual Paradigm User Story Mapping):

clipboard.png

https://www.youtube.com/watch...

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/280275.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/280275.shtml
英文地址,請注明出處:http://en.pswp.cn/news/280275.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

聊一聊promise的前世今生

promise的概念已經出現很久了&#xff0c;瀏覽器、nodejs都已經全部實現promise了。現在來聊&#xff0c;是不是有點過時了&#xff1f; 確實&#xff0c;如果不扯淡&#xff0c;這篇隨筆根本不會有太多內容。所以&#xff0c;我就盡可能的&#xff0c;多扯一扯&#xff0c;聊一…

chromebook刷機_如何在Chromebook上切換(或離開)Canary頻道

chromebook刷機Just like Chrome, Google offers multiple channels of the Chrome OS operating system. In addition to the standard Stable, Beta, and Developer channels you can choose from on the About page, there’s a special bleeding-edge Canary channel. The …

C++--day05

目錄: 1. C的提高 1-131P 時間七天 2. C的基礎 132-286P 時間八天 3. C的提高 287-378P 時間五天 4. C/C的數據結構 379-482P 時間五天 5. C/C的設計模式基礎 483-540P 時間三天 視頻資料&#xff1a;https://www.bilibili.com/video/av27904891?fromsearch&seid108915144…

通過 CancellationToken 提高 Web 性能

在 Web 開發中&#xff0c;經常會遇到這樣的場景&#xff1a;用戶發起一個請求&#xff0c;Web 服務器執行一些計算密集型的操作&#xff0c;等待結果返回給用戶。這種情況下&#xff0c;如果用戶在等待結果的過程中取消了請求&#xff0c;那么服務器端依然會繼續執行計算&…

libreoffice_如何更改您在LibreOffice中可以撤消的操作數

libreofficeIn LibreOffice programs, you can undo one action after another…to a point. The default number of actions you can undo is 100, but that number is easy to change. 在LibreOffice程序中&#xff0c;您可以撤消一個動作&#xff0c;直到某個點。 您可以撤消…

遠程連接服務器出現身份驗證錯誤 要求的函數不受支持

來源&#xff1a;https://www.cnblogs.com/lindajia/p/9021082.html 以往發布程序到服務器都沒問題。今天遠程桌面連接到服務器&#xff0c;突然出現了異常&#xff01;異常信息為&#xff1a; 在網上看到有多種解決方案&#xff1a;發現有種修改注冊表的方式很簡單。 詳細步驟…

截取圖片生成頭像插件

上傳頭像插件 目的&#xff1a; 幫助開發者快速開發上傳頭像功能點 背景&#xff1a; 現在b&#xff0c;g能搜到的頭像上傳插件并不太好用&#xff0c;所以想提供一個比較自由度的上傳并且可以剪切的插件。 資源&#xff1a; 具體資源請查看這里 實現大致思路如下&#xff1a; …

CDH集群安裝配置(五)- Cloudera Manager Server

在線安裝 sudo yum install cloudera-manager-daemons cloudera-manager-server 離線安裝 資源下載地址 https://archive.cloudera.com/cm6/6.1.0/redhat7/yum/RPMS/x86_64/ 上次下面資源包到cdh1節點 cloudera-manager-server-6.1.0-769885.el7.x86_64.rpm cloudera-manager-s…

c++簡單程序設計-5

編程實驗部分1.vector3.cpp #include <iostream> #include <vector> #include <string> using namespace std;// 函數聲明 void output1(vector<string> &); void output2(vector<string> &); int main() {vector<string>like…

關于JavaScript的編譯原理

引擎&#xff1a;負責整個js程序的編譯和執行過程編譯器&#xff1a;負責語法分析和代碼生成作用域&#xff1a;收集和維護一系列查詢&#xff08;由所有聲明的標識符組成&#xff09; 【例子&#xff1a;聲明一個變量并賦值 var a value&#xff1b;】 Step1.編譯器對該程序段…

safari檢查元素_如何防止Safari檢查是否使用Apple Pay

safari檢查元素Apple Pay’s incorporation into macOS Sierra makes it really easy to pay using the service on your Mac with your iPhone or iPad. But that doesn’t mean just because you can, you will, or will want to use Apple Pay in the future. 通過將Apple P…

spring boot中servlet啟動原理

啟動過程及原理 1 spring boot 應用啟動運行run方法 StopWatch stopWatch new StopWatch();stopWatch.start();ConfigurableApplicationContext context null;FailureAnalyzers analyzers null;configureHeadlessProperty();SpringApplicationRunListeners listeners getRu…

某乎有人問--微軟會拋棄C#嗎,有點擔心?

在某乎有人問&#xff1a;微軟會拋棄C#嗎&#xff0c;有點擔心&#xff1f;&#xff0c;類似這樣的問題&#xff0c;一直都有很多人在問&#xff0c;今天我們就來聊聊這個問題。沒必要擔心微軟倒閉了&#xff0c;C#都不會消失&#xff0c;其實.Net已經不屬于微軟的了。C#是屬于…

mailing list的原理

1 發往mailing list郵箱的郵件會被所有訂閱了該郵箱的人收到 說白了&#xff0c;就是一種郵件群發機制&#xff0c;為了簡化群發&#xff0c;不是將所有的收件人放到收件人列表中&#xff0c;而是發往總的郵箱即可。 2 要向該mailing list郵箱中發送郵件需要先要訂閱 但是&…

icloud上傳錯誤_如何修復HomeKit“地址未注冊到iCloud”錯誤

icloud上傳錯誤While Apple has made serious improvements to the HomeKit smarthome framework, there are still more than a few ghosts in the machine. Let’s look at how to banish the extremely frustrating “Address is not registered with iCloud” error to get…

Jenkins安裝部署

Jenkins安裝部署 Jenkins簡介 Jenkins是一個開源軟件項目&#xff0c;是基于Java開發的一種持續集成工具&#xff0c;用于監控持續重復的工作&#xff0c;旨在提供一個開放易用的軟件平臺&#xff0c;使軟件的持續集成變成可能。 安裝步驟 本文以CentOS7為環境&#xff0c;安裝…

Angular2中的路由(簡單總結)

Angular2中建立路由的4個步驟&#xff1a; 1、路由配置&#xff1a;最好新建一個app.toutes.ts文件&#xff08;能不能用ng命令新建有待調查&#xff09; Angular2中路由要解決的是URL與頁面的對應關系&#xff08;比如URL是http://localhost:4200/all-people&#xff0c;那么頁…

受 SQLite 多年青睞,C 語言到底好在哪兒?

SQLite 近日發表了一篇博文&#xff0c;解釋了為什么多年來 SQLite 一直堅持用 C 語言來實現&#xff0c;以下是正文內容&#xff1a; C 語言是最佳選擇 從2000年5月29日發布至今&#xff0c;SQLite 一直都是用 C 語言實現。C 一直是實現像 SQLite 這類軟件庫的最佳語言。目前&…

為什么 Random.Shared 是線程安全的

在多線程環境中使用 Random 類來生成偽隨機數時&#xff0c;很容易出現線程安全問題。例如&#xff0c;當多個線程同時調用 Next 方法時&#xff0c;可能會出現種子被意外修改的情況&#xff0c;導致生成的偽隨機數不符合預期。為了避免這種情況&#xff0c;.NET 框架引入了 Ra…