在敏捷開發(fā)的實(shí)踐中脆烟,通過規(guī)劃沖刺中不同的階段,開發(fā)可以達(dá)到如下幾個(gè)目的:
可視化管理團(tuán)隊(duì)的目標(biāo)房待;
明確目標(biāo)的優(yōu)先級邢羔;
明確目標(biāo)分解后的任務(wù)項(xiàng);
可視化管理任務(wù)的進(jìn)展?fàn)顩r桑孩。
規(guī)劃沖刺
利用發(fā)布計(jì)劃拜鹤,可順利地將粗顆粒度的故事分配到發(fā)布中的多輪迭代中。不過流椒,在開始一輪迭代時(shí)敏簿,有必要去針對該迭代再去做進(jìn)一步的計(jì)劃。
計(jì)劃會(huì)議
整個(gè)團(tuán)隊(duì)通過舉行計(jì)劃會(huì)議來為下一個(gè)迭代做計(jì)劃」咴#客戶以及團(tuán)隊(duì)中的所有開發(fā)人員温数,包括程序員,測試人員和其他人都要參與這個(gè)會(huì)議蜻势,計(jì)劃會(huì)議的內(nèi)容一般如下:
討論分析用戶故事撑刺;
從故事中拆分出任務(wù);
分配每個(gè)開發(fā)人員需要承擔(dān)的任務(wù)握玛;
開發(fā)人員單獨(dú)估計(jì)自身所承擔(dān)的任務(wù)够傍,以確保他們不會(huì)做出過于樂觀的承諾。
在實(shí)際的操作中败许,團(tuán)隊(duì)計(jì)劃會(huì)議后會(huì)開啟一個(gè)沖刺王带,將backlog中確定在該沖刺進(jìn)行的故事拖到?jīng)_刺列表中,隨后為每個(gè)故事進(jìn)行分解并關(guān)聯(lián)對應(yīng)的任務(wù)市殷。
討論故事
迭代計(jì)劃會(huì)后愕撰,團(tuán)隊(duì)會(huì)獲得一個(gè)已經(jīng)排好優(yōu)先級的故事集合。正如程序員可能改變他們對實(shí)現(xiàn)一個(gè)故事難度的看法醋寝,客戶或產(chǎn)品負(fù)責(zé)人一樣可以改變他們對故事優(yōu)先級的想法搞挣。計(jì)劃會(huì)議是客戶或產(chǎn)品負(fù)責(zé)人為團(tuán)隊(duì)調(diào)整故事優(yōu)先級的最佳階段。
會(huì)議中音羞,PO(產(chǎn)品負(fù)責(zé)人)會(huì)從最高優(yōu)先級的故事開始給團(tuán)隊(duì)講解每個(gè)故事的內(nèi)容囱桨。然后由開發(fā)人員提問,直到他們充分理解故事嗅绰,能從故事中分解出任務(wù)舍肠。這個(gè)過程沒有必要理解故事的所有細(xì)節(jié),過分地深入每個(gè)故事細(xì)節(jié)會(huì)使會(huì)議變得低效窘面、冗長翠语,因?yàn)闀?huì)議中不是每個(gè)人都需要聆聽所有故事的細(xì)節(jié)。在計(jì)劃會(huì)議后财边,開發(fā)人員可以和PO一起理清故事的關(guān)鍵細(xì)節(jié)肌括。
拆分任務(wù)
理解用戶故事的大致內(nèi)容后,需再將故事分解為任務(wù)酣难。在JIRA敏捷管理中谍夭,可以通過創(chuàng)建子任務(wù)的方式來分解故事,并將故事與這些拆分后的任務(wù)進(jìn)行關(guān)聯(lián)憨募。只有當(dāng)所有的子任務(wù)狀態(tài)變成已完成時(shí)紧索,這個(gè)故事才能拖到已完成的列中。
為何要拆分故事而不直接把故事作為獨(dú)立的工作單位馋嗜?
盡管故事的確可以小到作為工作單位齐板,但將故事拆分出更小的任務(wù),一般更符合項(xiàng)目開發(fā)的需要。
首先甘磨,對于很多團(tuán)隊(duì)來說橡羞,實(shí)現(xiàn)故事的開發(fā)人員不止一個(gè),需要由多個(gè)開發(fā)人員共同完成一個(gè)故事济舆。這要么是因?yàn)殚_發(fā)人員在某些特定技術(shù)上的專業(yè)性卿泽,比如前后端分離開;要么是因?yàn)楣ぷ鲃澐质峭瓿晒适碌淖羁焱緩健?/p>
其次滋觉,故事是對用戶或客戶有價(jià)值的功能的描述签夭,不是開發(fā)人員的代辦事項(xiàng),把故事拆解成任務(wù)有助于發(fā)現(xiàn)那些可能會(huì)被遺忘的任務(wù)椎侠。一整個(gè)小組一起來拆分任務(wù)第租,依靠的是所有人的集體智慧,避免某個(gè)人忘記了故事中的某個(gè)部分我纪。
相比瀑布過程慎宾,敏捷沒有前期設(shè)計(jì)階段,其過程特點(diǎn)是做頻繁的短期設(shè)計(jì)浅悉,當(dāng)腦海里至少有一個(gè)最小的設(shè)計(jì)方案時(shí)趟据,才可能從故事中拆分出任務(wù)。所以术健,一個(gè)故事的任務(wù)拆分其實(shí)是即時(shí)設(shè)計(jì)中的一次短脈沖汹碱,以這些短脈沖的集合取代瀑布過程的前期設(shè)計(jì)階段。
在團(tuán)隊(duì)成員說明任務(wù)時(shí)荞估,需要實(shí)時(shí)將圍繞某個(gè)故事的任務(wù)都記錄下來咳促,然后將任務(wù)以卡片的形式在物理或電子看板中進(jìn)行展示。
JIRA敏捷管理中的活躍沖刺模塊勘伺,團(tuán)隊(duì)可以針對每一個(gè)迭代開啟一個(gè)新的沖刺等缀,規(guī)劃好時(shí)間,通過看板工具實(shí)時(shí)查看工作進(jìn)度或開發(fā)瓶頸娇昙。
承擔(dān)責(zé)任
通過看板,我們可以清晰地看到每個(gè)任務(wù)的責(zé)任人(采用結(jié)對編程時(shí),每個(gè)任務(wù)也只關(guān)聯(lián)一個(gè)人的名字,此人將承擔(dān)完成任務(wù)和與PO谒麦、客戶溝通信息的責(zé)任邮屁,確保在迭代期間完成任務(wù)。)
雖然任務(wù)事先已經(jīng)由每個(gè)人認(rèn)領(lǐng)寄猩,但在沖刺期間并不是一成不變的。在沖刺中,隨著開發(fā)取得進(jìn)展铃诬,成員會(huì)比之前預(yù)想的更了解任務(wù),因此任務(wù)的認(rèn)領(lǐng)及承諾也需要相應(yīng)做出調(diào)整。
在敏捷中趣席,團(tuán)隊(duì)協(xié)作非常重要兵志,只有所有人達(dá)到預(yù)期,這個(gè)迭代才算完成宣肚,如果有開發(fā)人員不能完成他承擔(dān)的所有任務(wù)想罕,團(tuán)隊(duì)中的其他成員應(yīng)該盡量勇于承擔(dān)。
估算和確認(rèn)
通常當(dāng)一個(gè)團(tuán)隊(duì)經(jīng)歷了3個(gè)以上的迭代之后霉涨,基本可以確定團(tuán)隊(duì)的速率(即一個(gè)迭代可以完成的故事點(diǎn)總數(shù))按价,當(dāng)然前提是每個(gè)迭代的時(shí)間周期是一樣的。
假如你的團(tuán)隊(duì)的速率是平均每個(gè)迭代40個(gè)故事點(diǎn)笙瑟,每個(gè)開發(fā)人員首先以理想時(shí)間估算自己承擔(dān)的工作量楼镐,然后整個(gè)團(tuán)隊(duì)相加進(jìn)而做出實(shí)際的評估,判斷在該迭代中能否完成所有任務(wù)往枷。
例如框产,為期2周的沖刺開始了,一個(gè)開發(fā)人員估算完成任務(wù)實(shí)際需要55個(gè)小時(shí)师溅,算上必須要做的其他事情茅信,沒有把握在這些任務(wù)上投入更多時(shí)間,這種情況有以下選擇:
繼續(xù)往前走墓臭,一個(gè)一個(gè)的去完成蘸鲸,寄希望于一切順利
請求團(tuán)隊(duì)中其他成員接收一部分任務(wù)
與PO討論,放棄一個(gè)故事窿锉,或者拆分故事酌摇,放棄其中一部分
最好的方法是后兩種,整個(gè)團(tuán)隊(duì)必須同舟共濟(jì)嗡载。
開啟沖刺
迭代會(huì)議結(jié)束后窑多,團(tuán)隊(duì)正式進(jìn)入到這個(gè)迭代的開發(fā)中。JIRA敏捷管理中洼滚,把一個(gè)正式開啟的迭代稱作為一個(gè)活躍沖刺埂息,一個(gè)看板針對一個(gè)活躍沖刺。團(tuán)隊(duì)根據(jù)計(jì)劃制定這個(gè)迭代的目標(biāo)和時(shí)間范圍遥巴。
在迭代過程中千康,JIRA管理引用了看板方法來管理我們的開發(fā)。 看板的結(jié)構(gòu)通常包括如下幾個(gè)列: - Backlog :是這個(gè)沖刺需要完成的所有用戶故事铲掐,這些故事加在一起就是這個(gè)迭代的目標(biāo)拾弃,這些故事通常按照優(yōu)先級從上到下排列。 - 待辦 :這一列代表的是待辦任務(wù)項(xiàng)摆霉,用戶故事會(huì)被拆分為對應(yīng)的開發(fā)任務(wù)豪椿,這些待辦的開發(fā)任務(wù)將展示在這一列中奔坟。 - 進(jìn)行中 : 進(jìn)行中的任務(wù)。 - 完成 :已經(jīng)完成的任務(wù)和用戶故事搭盾。
任務(wù)看板上除了有默認(rèn)的3列之外咳秉,還可以自定義新建泳道,通過泳道來管理故事和任務(wù)的對應(yīng)關(guān)系增蹭。
在沖刺的交付階段我們應(yīng)該將以下幾點(diǎn)作為看板方法的步驟去貫徹執(zhí)行:
專注于質(zhì)量滴某;
減少進(jìn)行中的工作(work-in-process);
頻繁交付滋迈;
根據(jù)交付速率來平衡任務(wù)的請求量霎奢;
按照任務(wù)的優(yōu)先級排序進(jìn)行開發(fā);
消除變異性的根源饼灿,提高可預(yù)測性幕侠。
專注于質(zhì)量
很多開發(fā)團(tuán)隊(duì)將可用資源花在與缺陷修復(fù)相關(guān)的工作上,這會(huì)對高缺陷率團(tuán)隊(duì)的生產(chǎn)力和交付速率產(chǎn)生巨大影響碍彭。
鼓勵(lì)提高初始質(zhì)量晤硕,很可能提升2-4倍的交付速率,如果團(tuán)隊(duì)真的很糟糕庇忌,那么通過“專注于質(zhì)量”的做法舞箍,甚至都可能獲得10倍的交付速率的提升。
專業(yè)的測試人員應(yīng)該做好測試皆疹,讓測試人員來發(fā)現(xiàn)缺陷疏橄,防止缺陷遺漏在代碼中。要求開發(fā)人員編寫單元測試代碼略就,使單元測試代碼自動(dòng)化捎迫,也就是我們經(jīng)常提及的自動(dòng)化測試,以提供自動(dòng)化的回歸測試表牢,這樣也可以產(chǎn)生巨大的效果窄绒。測試驅(qū)動(dòng)開發(fā)似乎確實(shí)能帶來使測試覆蓋更為完整的好處。對于普通團(tuán)隊(duì)崔兴,在功能編碼前編寫測試代碼彰导,能夠提高代碼質(zhì)量。
代碼檢查能夠幫助改善外部和內(nèi)部的代碼質(zhì)量敲茄,最好經(jīng)常做螺戳,并且以小批量進(jìn)行為好。
協(xié)作式的分析和設(shè)計(jì)折汞,也能夠提高代碼質(zhì)量。團(tuán)隊(duì)一起分析問題和設(shè)計(jì)解決方案盖腿,產(chǎn)出的質(zhì)量會(huì)更高爽待。
還有使用現(xiàn)代開發(fā)工具提高質(zhì)量损同,許多現(xiàn)代開發(fā)工具都包括靜態(tài)代碼分析和動(dòng)態(tài)代碼分析的功能,需要在開發(fā)中不斷地進(jìn)行代碼優(yōu)化鸟款,這些工具可以防止程序員犯低級錯(cuò)誤膏燃。
減少在制品
在制品和平均前置時(shí)間之間存在相關(guān)性。前置時(shí)間越長何什,質(zhì)量就會(huì)顯著下降组哩,而在制品數(shù)量越多,平均前置時(shí)間則越長处渣。因此伶贰,提高質(zhì)量的關(guān)鍵是減少在制品數(shù)量。
減少在制品的數(shù)量或縮短迭代的長度罐栈,將對初始質(zhì)量產(chǎn)生重大影響黍衙。隨著在制品數(shù)量的增加,缺陷數(shù)量會(huì)不成比例地增加荠诬。為期2周的迭代比4周的迭代好是很有道理的琅翻。較短的的迭代會(huì)產(chǎn)出更高的質(zhì)量。
僅需使用看板來限制在制品數(shù)量便可提升質(zhì)量柑贞,那為什么不引入明確的規(guī)則來限制在制品數(shù)量方椎,解放管理人員使其可關(guān)注于其他的管理工作。
敏捷管理中強(qiáng)調(diào)的對于在制品的限制钧嘶,JIRA管理也進(jìn)行了應(yīng)用棠众。團(tuán)隊(duì)可以根據(jù)開發(fā)能力和進(jìn)度設(shè)置列約束,通過限制處理中的卡片數(shù)量來控制開發(fā)人員的在制品數(shù)量康辑,只有當(dāng)在制品卡片數(shù)量小于限制數(shù)摄欲,才可以到backlog中拉取新的任務(wù)。如下圖:
頻繁交付
減少在制品數(shù)量能夠縮短前置時(shí)間疮薇,縮短前置時(shí)間意味著可以更為頻繁地提交可用的代碼胸墙。頻繁的提交代碼,能夠與外部團(tuán)隊(duì)或業(yè)務(wù)建立信任按咒。
JIRA敏捷開發(fā)中迟隅,開發(fā)人員會(huì)在每天定點(diǎn)提交合并代碼(即使只完成部分功能)。如下圖的代碼提交日志會(huì)記錄每個(gè)人提交合并的時(shí)間励七,會(huì)對提交代碼部分進(jìn)行備注智袭,這樣可以提高多個(gè)開發(fā)人員的合作效率:
在軟件開發(fā)中,規(guī)模雖小但是頻繁掠抬、高質(zhì)量地發(fā)布交付吼野,較之規(guī)模大但頻率低的發(fā)布,更能夠在團(tuán)隊(duì)合作上建立起信任两波。小規(guī)模的發(fā)布說明瞳步,團(tuán)隊(duì)具有交付能力闷哆,并能夠一直致力于產(chǎn)出價(jià)值。便于軟件開發(fā)團(tuán)隊(duì)與市場单起、與用戶之間建立起信任抱怔。
為什么以小批量的方式進(jìn)行編碼能夠提高產(chǎn)品質(zhì)量?這點(diǎn)其實(shí)也很好理解嘀倒。隨著進(jìn)行中工作項(xiàng)數(shù)量的增加屈留,問題的復(fù)雜性也會(huì)呈指數(shù)級增加。在軟件開發(fā)中测蘑,有很多知識(shí)遷移和信息發(fā)現(xiàn)活動(dòng)灌危,他們是隱性的,而且都是面對面的協(xié)作過程中發(fā)生的帮寻。雖然這些信息具備口頭表述性和可視性的特征乍狐,但是他們大多以畫像在草圖之類的非正式形態(tài)存在。我們的大腦無法存儲(chǔ)這些隱性知識(shí)固逗,即時(shí)記住浅蚪,也會(huì)遺忘。更無法記得確切的細(xì)節(jié)烫罩,并會(huì)因此犯錯(cuò)惜傲。
如果減少進(jìn)行中的工作,能減少對隱性知識(shí)的遺忘贝攒,從而獲得高質(zhì)量的產(chǎn)品盗誊,并促進(jìn)更為頻繁地發(fā)布。
根據(jù)交付速率來平衡任務(wù)的請求量
意味著根據(jù)交付可工作代碼的速率隘弊,來設(shè)置新的任務(wù)進(jìn)入開發(fā)流中哈踱,這樣便可有效地將進(jìn)行中的任務(wù)數(shù)量固定在某個(gè)值。在有交付后梨熙,便會(huì)從SpringBacklog里拉入新的任務(wù)开镣。因此,任何對新工作的優(yōu)先級排序咽扇,只可能在現(xiàn)有任務(wù)被交付的情況下才發(fā)生邪财。
這一變化具有深遠(yuǎn)的影響,流程的交付速率會(huì)受限于某個(gè)瓶頸质欲,可往往很難準(zhǔn)確的找到這個(gè)瓶頸在何處树埠。事實(shí)上,價(jià)值流中的每個(gè)人都會(huì)說自己已經(jīng)超載嘶伟。但通過交付速率怎憋,處于價(jià)值流其他環(huán)節(jié)的人員就會(huì)發(fā)現(xiàn)他們有了富余能力,而那些處于瓶頸處的人員的工作會(huì)很忙九昧,但不會(huì)過載绊袋。這時(shí)整個(gè)團(tuán)隊(duì)成員會(huì)有一種手頭終于有時(shí)間的感覺了赠橙。
在活躍沖刺中,團(tuán)隊(duì)可以實(shí)時(shí)查看每個(gè)成員的任務(wù)量愤炸,從而掌握團(tuán)隊(duì)進(jìn)度以及瓶頸。
人們只有釋放了大部分壓力掉奄,才能集中精力準(zhǔn)確高質(zhì)量地完成工作规个。那些手上有富余時(shí)間的工作者,會(huì)開始將精力投向于環(huán)境改造姓建。他們可能會(huì)開始不斷提升自身技能诞仓,改進(jìn)使用的工作,改善溝通協(xié)作方式等速兔。隨著時(shí)間的推移墅拭,團(tuán)隊(duì)在持續(xù)進(jìn)行改善,進(jìn)而整個(gè)團(tuán)隊(duì)都會(huì)得到改變涣狗。通過限制在制品以及當(dāng)只有可用產(chǎn)能時(shí)才拉入新工作的做法谍婉,產(chǎn)生的富余時(shí)間能帶來無法想象的改善行動(dòng)。
想要進(jìn)行持續(xù)改善镀钓,就要具備富余時(shí)間穗熬,為了產(chǎn)生富余時(shí)間,要做到根據(jù)交付速率來平衡需求請求量丁溅,限制在制品的數(shù)量唤蔗。
優(yōu)先級排序
當(dāng)團(tuán)隊(duì)做到前幾點(diǎn)要求后,心理重心應(yīng)該轉(zhuǎn)向優(yōu)先級排序窟赏,而不僅僅只是交付的代碼數(shù)量妓柜。
當(dāng)交付方面缺乏可預(yù)測性時(shí),很少有人會(huì)去關(guān)注優(yōu)先級排序的問題涯穷。在解決這個(gè)問題之前棍掐,需要保證次序的可靠性,將管理精力重點(diǎn)用于改善交付能力和交付的可預(yù)測性上求豫,一旦能夠真正做到按需求請求的大致次序交付需求塌衰,就應(yīng)該把思考轉(zhuǎn)向如何對輸入的需求進(jìn)行優(yōu)先級排序。
JIRA敏捷管理中蝠嘉,根據(jù)計(jì)劃會(huì)議討論后的結(jié)果最疆,PO可以重新對故事的優(yōu)先級進(jìn)行排序,團(tuán)隊(duì)也將根據(jù)這個(gè)優(yōu)先級安排開發(fā)任務(wù)的順序蚤告。
如果不具備定期交付高質(zhì)量代碼的能力努酸,就不可能建立起信任關(guān)系,因此杜恰,在優(yōu)先級排序上具備影響力的可能性也會(huì)很小获诈,也就無法進(jìn)一步優(yōu)化團(tuán)隊(duì)交付的價(jià)值仍源。
總結(jié)
在敏捷管理方法中,前期的需求計(jì)劃和討論必不可少舔涎。而在正式的開發(fā)過程中笼踩,首先要學(xué)習(xí)構(gòu)建高質(zhì)量的代碼,其次亡嫌,減少進(jìn)行中的工作項(xiàng)數(shù)量嚎于,縮短前置時(shí)間,并頻繁發(fā)布挟冠。第三于购,根據(jù)交付速率來平衡需求請求量,對在制品設(shè)置限制知染,進(jìn)而產(chǎn)生富余時(shí)間并釋放個(gè)體的創(chuàng)造力肋僧,促進(jìn)改善行為的發(fā)生。第四控淡,隨著軟件開發(fā)的順暢運(yùn)轉(zhuǎn)和能力優(yōu)化嫌吠,通過改善優(yōu)先級排序來優(yōu)化交付的價(jià)值。
期望一步實(shí)現(xiàn)優(yōu)化業(yè)務(wù)價(jià)值逸寓,只是一種不切實(shí)際的美好愿望居兆。遵循以上幾點(diǎn)并采取行動(dòng),會(huì)讓你的敏捷團(tuán)隊(duì)逐步達(dá)到期望的成熟度水平竹伸。