劃分用戶故事(user-story)的原則

在敏捷開發過程中是通過用戶故事來將需求具體化成可以進行迭代開發的一個個現實的可見的開發任務。因此在敏捷軟件的開發過程中,用戶故事的劃分對于迭代和開發起著舉足輕重的作用。

用戶故事從其名字來看是站在用戶的角度所描述的故事,同時也是用戶所能看懂的故事,開發人員最容易犯下的一個錯誤就是站在自己的角度去思考和劃分故事,這樣就背離了用戶故事的初衷。

?

那什么是用戶故事?首先來說用戶故事是對需求的細化和切分,既然是細化,就得有一個度,需求的顆粒度需要多少才能稱之為用戶故事?這就牽扯出和用戶故事一起出現的另外一個關鍵的單詞叫史詩故事epic,通俗來說就是大型的故事。Epic有一些自身的特點:如是由許許多多的較大的不確定的需求(large fuzzy ?requirements)組成;另外epics本身具有更低的優先級,因為你不能直接通過其完成迭代和開發,而是首先需要劃分成較小的真正的user-story;除了這兩點,epics因為包含了太多的模糊性需求,所以常常混雜了很多不同的特性,而一個特性就是一組可以歸為一類的需求,同時對某一特定的用戶存在著交互的價值。

?

在用戶故事的劃分中有三要素,分別為card,conversation和confirmation。

card 故事描述:通過將故事寫在note card上面,除了故事本身的描述之外,還應該包括故事的時間點估計及對應的測試行為等等。

?

conversation 通過交談豐富內容:用戶故事的具體細節不是某一個開發人員或者PO自己拍著腦袋定義出來的,而需要項目組中的成員與PO或者客戶之間溝通得出的。

?

confirmation 驗收測試能夠確認故事已經完成:用戶故事劃分以后是由開發人員通過編碼實現,但是不能僅靠開發人員自測確認故事完成,需要的是一系列的驗收測試用以保證故事功能的完成及軟件按照我們的預期運行。

?

關于用戶的編寫原則,有一個通用的模板用以站在用戶的角度描述用戶所期望得到的功能:

As a?role, I want to?do something or a piece of functionality, so that?achieve some business value or statement of intent.?

作為一個角色,通過某項操作,以便能夠完成特定的目標。

在這個模板中有三個不同的點,分別為用戶角色--who,某項操作--what,完成的目標--why(reason)。

如:作為一個國米的球迷,通過點擊官網的最新新聞欄,以便能夠實時了解最新的國米動態。

?

一個良好的User-story的編寫應該遵循INVEST原則:

Independent:獨立性

用戶故事之間應該具有獨立性(有點類似于UT中的test case),不應該依賴于其他的用戶故事。如果用戶故事存在依賴性那么就會導致用戶故事之間存在著不同的優先級,只有被依賴的用戶故事完成才能繼續開發依賴的用戶故事。一般可以通過組合用戶故事或者分割用戶故事來減少用戶故事間的相互依賴性。

Negotiable:可協商

用戶故事不是簽訂的商業合同contracts,它是由客戶或者PO同開發小組的成員共同協商制定的,如果最開始像商業合同一樣設定了太多的條條框框和限制就無法更好的溝通及協商,也就不可能劃分出既讓客戶滿意,也能讓開發認同的好的用戶故事。

Valuable:有價值

用戶故事必須對于最終的用戶是有價值的,因此應該站在用戶的角度去編寫,描述的是一個一個的feature,而非一個一個的task。

Estimable:可評估

對于一個用戶故事的劃分需要足夠的領域知識,使得在劃分i故事之時就能大致了解故事開發的周期,為了減少估算的不確定性,故事本身不能太大。

Small:短小

故事應該盡量的短小,當然也不是說越小越好。短小的故事可以減少劃分過程中估算的誤差,最好的故事是能夠在一個迭代周期之內完成的。如果太大就應該考慮將其拆分為多個粒度更小的用戶故事。

Testable:可測試

個人認為這一點在所有的特性中對于用戶故事的重要程度最高。首先,如果一個用戶故事無法進行測試,那么也就無法判斷該故事是否完成。除此之外,對應的驗收測試也最好是自動運行的,這樣在任何時候都能觸發該用戶故事的檢驗。最后,必須在定義了驗收測試通過的標準后才能認為故事劃分完畢。

關于Testable,有一個較為經典的例子:

As? a user, I want to be able to cancel a reservation so that I can get a refund for the trip not taken.

關于此用戶故事前面所提到的幾個要素who,what,why都滿足,那么驗收測試應該如何去做?模擬的應該是實際的真正場景,如:退款是全退還是部分退還;提前多久cancel才是有效的;退還款項如何與用戶之間進行確認等等。

按照剛才的假設,做一個真實場景的驗收測試用例,通過Given-When-Then的方式來設定:

Given:“我”付款1000RMB預定了一個3周后從成都飛往三亞的航班。

When:在航班起飛前一周“我”取消了該行程。

Then:“我”應該得到預定機票半價的退款(500RMB)

在對用戶故事設定驗收測試的條件時候,分別對應:starting state---》event---》final state

任何的user story,在驗收測試的時候都必須至少設定一個defaule scenario。

?

https://blog.csdn.net/rxr1st/article/details/7479472

?

轉載于:https://www.cnblogs.com/softidea/p/9609996.html

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

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

相關文章

【git】----- clone 及上傳文件

在GitHub上創建一個項目首先點擊新存儲庫進入創建的步驟創建完成后跳轉到下一個頁面復制路徑然后在自己的新建的文件夾里面(例如:git)右鍵,點擊Git Bash Here進入命令行輸入 git clone 輸入剛剛拷貝的路徑(https://github.com/nam…

數據結構與算法總結

文章目錄線性數據結構1. 數組2. 鏈表2.1. 鏈表簡介2.2. 鏈表分類2.2.1. 單鏈表2.2.2. 循環鏈表2.2.3. 雙向鏈表2.2.4. 雙向循環鏈表2.3. 應用場景2.4. 數組 vs 鏈表3. 棧3.1. 棧簡介3.2. 棧的常見應用常見應用場景3.2.1. 實現瀏覽器的回退和前進功能3.2.2. 檢查符號是否成對出現…

使用 Spring Data JPA 簡化 JPA 開發

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 從一個簡單的 JPA 示例開始 本文主要講述 Spring Data JPA,但是為了不至于給 JPA 和 Spring 的初學者造成較大的學習曲線&am…

JS 取整、取余

一、取整 1. 取整 // 丟棄小數部分,保留整數部分 parseInt(7/2)  // 3 2. 向上取整 // 向上取整,有小數就整數部分加1 Math.ceil(7/2)  // 4 3. 向下取整 // 向下取整,丟棄小數部分 Math.floor(7/2)  // 3 4. 四舍五入 // 四舍五入 Math.round(7/2)  // 3 二、取余 // …

中國歷史朝代及皇帝簡介

一 、原始社會(約170萬年前到約公元前21世紀)  [詳細]約170萬年前 元謀人生活在云南元謀一帶       查看元謀人>>約70-20萬年前北京人生活在北京周口店一帶      查看北京人>>約1.8萬年前山頂洞人開始氏族公社的生活      …

Hadoop基礎-Hdfs各個組件的運行原理介紹

Hadoop基礎-Hdfs各個組件的運行原理介紹 作者:尹正杰 版權聲明:原創作品,謝絕轉載!否則將追究法律責任。 一.NameNode工作原理(默認端口號:50070) 1>.什么是NameNode NameNode管理文件系統的…

JPA入門例子(采用JPA的hibernate實現版本)

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 (1)、JPA介紹: JPA全稱為Java Persistence API ,Java持久化API是Sun公司在Java EE 5規范…

IDEA詳細配置與使用

文章目錄一、IntelliJ IDEA 介紹二、查看安裝目錄結構三、查看設置目錄結構3.1 config目錄3.2 system目錄四、設置顯示常見的視圖1.工程界面展示2.如何刪除模塊3.查看項目配置五、常用配置1.Appearance & Behavior2. Editor - General3. Editor – Font4. Editor – Color …

M1905

11.09 11:00------102萬                          11.09 14:00---103萬 11.12 16:00------103萬                          11.19 16:00---94萬 11.20 16:00----94.9萬          …

前端又要失失失失失失失失失業了!

1. 禍起 看到標題,切圖仔們又是菊花一緊。前幾天微軟剛剛開源Sketch2Code,讓UI草圖轉化成HTML代碼。切圖仔瑟瑟發抖。 還沒等切圖仔調整好心情,號稱H5代碼生成工具的H5DS也開源了最新的代碼。 尼瑪,H5代碼都可以一鍵生成了&#x…

我是如何對研發和測試人員進行量化的績效考核的

我把硬件開發、軟件開發和測試人員的績效考核分成3部分,即重點工作、績效改進和績效浮動。下面分別進行說明它們的量化方法。1. 重點工作的績效量化方法重點工作的量化標準應從數量(包括文檔)、時間、質量和難度系數等多個維度來評定。…

常見cmd命令,開發人員必備

運行程序 notepad--------打開記事本calc-----------啟動計算器regedit.exe-------注冊表write----------寫字板mmc------------打開控制臺iexpress-------木馬捆綁工具,系統自帶fsmgmt.msc-----共享文件夾管理器osk------------打開屏幕鍵盤certmgr.msc----證書管理…

IDEA常用快捷鍵【win-mac對比】

文章目錄Mac 鍵盤符號說明CtrlAltShiftCtrl AltCtrl ShiftAlt ShiftCtrl Shift Alt其他Mac 鍵盤符號說明 ? Command? Shift? Caps Lock? Option? Control? Return/Enter? Delete? 向前刪除鍵(FnDelete)↑ 上箭頭↓ 下箭頭← 左…

SpringBoot 之環境搭建

見: http://bbs.itmayiedu.com/article/1491835651684 1. 什么是**SpringBoot?** Spring Boot 是由 Pivotal 團隊提供的全新框架,其設計目的是用來簡化新 Spring 應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人…

十五、類與封裝的概念

1、類的封裝 C中類的封裝: 成員變量:C中用于表示類屬性的變量成員函數:C中用于表示類行為的函數 C中可以給成員變量和成員函數定義訪問級別 public:成員變量和成員函數可以在類的內部和外界訪問和調用 private:成員變量…

哪些人不能要 哪些人不能留

以下所有的論斷都是基于中小型實業公司而言,因為我任職過的公司都是這個類型的。招聘時這些人不能要:1)頻繁跳槽的人。這些人要么對工作不用心,要么對環境的適應能力差,要么不愿去分析公司的長處和短處,要么…

vue項目中axios的封裝

1.安裝 1 npm install axios --save 2.新建http.js,封裝攔截器以及多種請求方式 1 import axios from axios;2 import { Message } from element-ui;3 4 // 請求攔截器5 axios.interceptors.request.use( 6 config > {7 //發送請求前需要做什么&#xff0c…

【2022】Java基礎面試真題

文章目錄1. Java基礎1.1 為什么Java代碼可以實現一次編寫、到處運行?1.2 一個Java文件里可以有多個類嗎(不含內部類)?1.3 說一說你對Java訪問權限的了解1.4 介紹一下Java的數據類型1.5 int類型的數據范圍是多少?1.6 請…

關于 Virtual SAN/VSAN 的常見問題解答

問:VSAN需要使用 SSD,它有什么用途呢? 答:SSD 用于讀取緩存 (70%) 和寫入緩沖 (30%)。每次寫入都會先轉到 SSD,稍后再取消暫存到 HDD。 ? 問:創建 VSAN 虛擬機存儲策略時,何時應使用“允許的故…

IntelliJ IDEA 中 右鍵新建時,選項沒有Java class的解決方法和具體解釋

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 我是在別人問我的時候,才發現還可以有這個問題,主要是他新項目直接打開,什么都沒配置,就打…