用戶故事(User Story)是從用戶的角度對系統(tǒng)功能的描述。所以,又被稱為使用者故事。
用戶故事最重要的特點(diǎn)在於每一 個(gè)用戶故事都是一個(gè)“可獨(dú)立分配”的需求單位。要達(dá)到“可獨(dú)立分配”,就要從“用戶”如何使用系統(tǒng)來表達(dá)用戶故事。這樣才讓你實(shí)現(xiàn)到一個(gè)能讓用戶交流,端到端(用戶界面到后端)的功能單位。
在敏捷開發(fā)中,需求最終會(huì)被描述成User Story。開發(fā)人員依照用戶故事中的描述估測完成所需要的時(shí)間,并指定該User Story的優(yōu)先級。這樣,最終,所有的User Story組成了Product Backlog。
在敏捷中,用戶故事是最基本的設(shè)計(jì)單元,它是從用戶的角度出發(fā)對功能的一段簡要描述。啰嗦一下,用戶故事是輕量級的需求描述。用戶故事沒有什么強(qiáng)制性的語法。但是,按照大致符合這樣一個(gè)形式來考慮用戶故事是比較有益的:
用戶故事從用戶的角度描述用戶渴望得到的功能和實(shí)現(xiàn)的價(jià)值。一個(gè)好的用戶故事包括三個(gè)基本要素:
角色:誰要使用這個(gè)功能。
活動(dòng):需要完成什么樣的功能。
商業(yè)價(jià)值:為什么需要這個(gè)功能以及這個(gè)功能帶來什么樣的價(jià)值。
用戶故事通常按照如下的格式來表達(dá):
英文:
As a , I want to , so that .
中文:
作為一個(gè)<角色>, 我想要<活動(dòng)>, 以便于<商業(yè)價(jià)值>
舉例:
作為一個(gè)“網(wǎng)站管理員”,我想要“統(tǒng)計(jì)每天有多少人訪問了我的網(wǎng)站”,以便于“我的贊助商了解我的網(wǎng)站會(huì)給他們帶來什么收益?!?/b>
需要注意的是用戶故事不能夠使用技術(shù)語言來描述,要使用用戶可以理解的業(yè)務(wù)語言來描述。
作為【用戶的類型】,我希望可以【先這樣做,然后那樣做,就應(yīng)該得到...的結(jié)果】以便【業(yè)務(wù)價(jià)值】。
例如:“作為購書者,我希望可以根據(jù)ISBN來找到一本書,以便能更快的找到正確的書?!?/p>
在做用戶故事時(shí),需要注意每個(gè)用戶故事用的是用戶的語言,它只描述一個(gè)功能(feature),而不要涉及設(shè)計(jì)或?qū)崿F(xiàn)上的內(nèi)容。
一般而言,每個(gè)用戶故事的開發(fā)周期不要太長(1-5天),否則用戶故事應(yīng)當(dāng)切分為多個(gè)子用戶故事。
不需要一開始對所有的故事都進(jìn)行詳細(xì)的描述,但計(jì)劃放在下一個(gè)sprint中的故事應(yīng)該比較清楚。
在面對一個(gè)具體項(xiàng)目,不會(huì)把項(xiàng)目拆分成用戶故事,就無法敏捷起來!真正的敏捷開發(fā)必須是基于用戶故事的開發(fā)過程。
我們看到很多人在嘗試敏捷時(shí),只是簡單地把項(xiàng)目的長周期拆分成短周期,這并不是真正的迭代,因?yàn)槊總€(gè)周期都沒有可體驗(yàn)、可交付的東西,依然像瀑布一樣在不斷堆積半成品,這不是真的Scrum。
如果不是基于用戶故事開發(fā),測試驅(qū)動(dòng)開發(fā)(TDD)和行為驅(qū)動(dòng)開發(fā)(BDD)很難開展,因?yàn)槿狈唧w用戶場景的描述,很難寫出具體、簡明的測試用例,因而很難累積足夠的自動(dòng)化測試提高系統(tǒng)的可改性,內(nèi)部質(zhì)量、重構(gòu)、持續(xù)優(yōu)化便無從談起。
如果不是基于用戶故事開發(fā),持續(xù)集成(CI)也意義不大,因?yàn)樘峤坏拇a并沒有構(gòu)成可交付的產(chǎn)品,其實(shí)并沒有真的在集成。
用戶故事和用戶場景搭配起來使用,會(huì)起到更好的作用。用戶故事反映了用戶面對的問題
用戶場景的描述更多,包含了更多的信息,比一個(gè)用戶故事更長、更豐富。用戶場景盡可能接近現(xiàn)實(shí),用文字表達(dá)會(huì)說話的典型用戶。
用戶場景舉例:比如:人們每次去超市買東西,都要排好長時(shí)間的隊(duì)伍進(jìn)行結(jié)算,特別麻煩。有的時(shí)候就會(huì)有人放棄結(jié)賬,不買了,或者找到另外的超市購買,這樣,對于超市來說,就會(huì)有損失。
那么針對這個(gè)用戶場景,用戶故事可以這么來寫:作為一個(gè)消費(fèi)者,我希望在超市買東西結(jié)賬的時(shí)候,可以不用排那么長的隊(duì),我可以快速結(jié)賬,以便節(jié)約出時(shí)間干些更重要的事。
每次的評審會(huì)議,其實(shí)也是對用戶故事進(jìn)行評審。
敏捷開發(fā)中的用戶故事一定要重視,通過用戶故事,形成用戶故事地圖,這樣客戶對整個(gè)產(chǎn)品就會(huì)有一個(gè)更直觀的價(jià)值體驗(yàn)。
關(guān)于用戶故事地圖,有一本書寫的挺好。
歡迎關(guān)注我們的公眾號,在公眾號回復(fù)“用戶故事”,您將知道是哪本書。
