序言
用戶故事是敏捷實(shí)踐中一個(gè)十分重要的環(huán)節(jié)体啰,它能幫助我們高效地收集客戶真正的需求慷丽。軟件開(kāi)發(fā)都始于需求收集與分析,如果一開(kāi)始的需求都弄錯(cuò)了纪吮,軟件的成功則無(wú)從談起俩檬。
另一個(gè)重要的環(huán)節(jié)是高效溝通,不論是開(kāi)發(fā)團(tuán)隊(duì)與客戶的溝通碾盟,還是團(tuán)隊(duì)內(nèi)部人員之間的溝通棚辽。溝通可以使得客戶和團(tuán)隊(duì)成員都朝同一個(gè)方向前進(jìn),更少的浪費(fèi)冰肴、風(fēng)險(xiǎn)和成本屈藐。
什么是用戶故事榔组?
用戶故事描述了對(duì)用戶、系統(tǒng)或軟件購(gòu)買(mǎi)者有價(jià)值的功能联逻。用戶故事由以下三個(gè)方面組成:
- 卡片(Card):卡片代表客戶需求搓扯,包含一份書(shū)面的故事描述,用來(lái)做計(jì)劃和作為提示包归。
- 對(duì)話(Conversation):有關(guān)故事的對(duì)話是需求的細(xì)節(jié)化锨推,用于具體化故事細(xì)節(jié)。
- 確認(rèn)(Confirmation):驗(yàn)收測(cè)試公壤,用于表達(dá)和編檔故事細(xì)節(jié)可用于確定故事何時(shí)完成换可。
故事的使用
客戶團(tuán)隊(duì):專職人員,為開(kāi)發(fā)人員排列優(yōu)先級(jí)厦幅,回答他們所有問(wèn)題沾鳄,在軟件完成時(shí)使用軟件,并且寫(xiě)下所有的故事慨削《从妫客戶團(tuán)隊(duì)中包含確保軟件滿足用戶需求的所有人,意味著可以包括測(cè)試人員缚态、產(chǎn)品經(jīng)理磁椒、實(shí)際用戶和交互設(shè)計(jì)師。
為什么客戶團(tuán)隊(duì)而不是由開(kāi)發(fā)團(tuán)隊(duì)來(lái)編寫(xiě)用戶故事玫芦?
主要基于兩個(gè)原因:首先每個(gè)故事必須用商業(yè)語(yǔ)言來(lái)寫(xiě)浆熔,而不是技術(shù)術(shù)語(yǔ),這樣一來(lái)桥帆,客戶團(tuán)隊(duì)可以排列故事的優(yōu)先級(jí)医增,放入迭代和發(fā)布。其次老虫,作為主要的產(chǎn)品構(gòu)想者叶骨,客戶團(tuán)隊(duì)所處的位置最適合描述產(chǎn)品行為。
客戶團(tuán)隊(duì)和開(kāi)發(fā)人員一起選擇迭代長(zhǎng)度祈匙,可能一周到四周的時(shí)間忽刽。客戶團(tuán)隊(duì)要確保項(xiàng)目能夠達(dá)成交付所需產(chǎn)品的目標(biāo)夺欲。一旦確定了迭代長(zhǎng)度跪帝,開(kāi)發(fā)人員就會(huì)估計(jì)每輪迭代中可以做多少事情,我們稱之為速率(velocity)些阅。每輪迭代開(kāi)始前伞剑,客戶團(tuán)隊(duì)可以在中途修正計(jì)劃,當(dāng)?shù)Y(jié)束后市埋,我們可以得知開(kāi)發(fā)團(tuán)隊(duì)的實(shí)際速率黎泣,然后用它代替估計(jì)速率進(jìn)行估計(jì)恕刘。
什么是驗(yàn)收測(cè)試?
驗(yàn)收測(cè)試用來(lái)驗(yàn)證實(shí)現(xiàn)的用戶故事是否符合客戶團(tuán)隊(duì)的期望聘裁。測(cè)試工作可以包括從故事卡背面寫(xiě)下測(cè)試描述開(kāi)始雪营,將測(cè)試放入到自動(dòng)化測(cè)試工具中的所有工作。
如何編寫(xiě)故事衡便?
一個(gè)優(yōu)秀的用戶故事(需求)應(yīng)該具備以下幾個(gè)特點(diǎn):
獨(dú)立的(Independent)
應(yīng)該盡量避免故事間的相互依賴献起。在對(duì)故事排列優(yōu)先級(jí)時(shí),或者使用故事做計(jì)劃時(shí)镣陕,故事間的相互依賴會(huì)導(dǎo)致一些問(wèn)題谴餐。出現(xiàn)依賴時(shí),可以使用兩種方法:第一呆抑,將相互依賴的故事合并成一個(gè)大的岂嗓、獨(dú)立的故事;第二鹊碍,用一個(gè)不同的方式去分割故事厌殉。
可討論的(Negotiable)
故事不是簽署好的合同或者軟件必須實(shí)現(xiàn)的需求,他們是可以討論的侈咕。故事卡是功能的簡(jiǎn)單描述公罕,細(xì)節(jié)將在客戶團(tuán)隊(duì)和開(kāi)發(fā)團(tuán)隊(duì)的討論中產(chǎn)生。把故事卡用于提醒開(kāi)發(fā)人員和客戶進(jìn)行關(guān)于需求的討論耀销,討論中確定的細(xì)節(jié)將變成測(cè)試楼眷。
對(duì)用戶或者客戶有價(jià)值的(Valuable to Purchasers or Users)
應(yīng)當(dāng)盡量保證“每個(gè)故事對(duì)用戶有價(jià)值”。最好的方法是讓客戶來(lái)編寫(xiě)故事(需求)熊尉。
可估計(jì)的(Estimatable)
當(dāng)故事無(wú)法估計(jì)是因?yàn)殚_(kāi)發(fā)人員不掌握所涉及的技術(shù)時(shí)罐柳,可以讓一個(gè)或多個(gè)開(kāi)發(fā)人員去實(shí)施極限編程(XP)中的探針試驗(yàn)(spike),限定一個(gè)最大時(shí)間量(稱為時(shí)間箱狰住,timebox)张吉,用這個(gè)時(shí)間量作為探針試驗(yàn)的估計(jì),如此催植,一個(gè)不可估計(jì)的故事就可以變成兩個(gè)故事:一個(gè)快速的探針故事(用來(lái)獲取足夠的信息)和一個(gè)故事(真正的實(shí)現(xiàn)功能)芦拿。
小的(Small)
故事的大小很關(guān)鍵,故事太大或太小查邢,都無(wú)助于制訂計(jì)劃。合適的故事大小最終取決于團(tuán)隊(duì)酵幕、它的容量及所使用的技術(shù)扰藕。如果故事是很大的史詩(shī)故事(分為復(fù)合故事compound story和復(fù)雜故事complex story)則對(duì)故事進(jìn)行分割。相同的芳撒,故事太小時(shí)邓深,可以對(duì)故事進(jìn)行合并未桥。
可測(cè)試的(Testable)
故事必須是可測(cè)試的。成功通過(guò)了測(cè)試可以證明開(kāi)發(fā)人員正確地實(shí)現(xiàn)了故事芥备。不可測(cè)試的故事通常發(fā)生在一些非功能性的需求上冬耿,這些需求和軟件有關(guān),但不直接與功能有關(guān)萌壳。 (給故事加上注釋最好的辦法是給它編寫(xiě)測(cè)試用例)亦镶。