丹佛斯(天津)有限公司 商志偉
當(dāng)今世界科技日新月異,市場(chǎng)的需求隨時(shí)在發(fā)生著變化。傳統(tǒng)的瀑布式軟件開(kāi)發(fā)模型,對(duì)快速變化的需求應(yīng)對(duì)方法顯得捉襟見(jiàn)肘,無(wú)力應(yīng)對(duì)。敏捷開(kāi)發(fā)模型應(yīng)運(yùn)而生。敏捷開(kāi)發(fā)模型的誕生,就是為了應(yīng)對(duì)快速變化的城市需求,提高產(chǎn)品開(kāi)發(fā)速度,快速的拿出可運(yùn)行的產(chǎn)品,然后再逐步對(duì)產(chǎn)品進(jìn)行優(yōu)化,最終完成產(chǎn)品的交付。本文將著重介紹敏捷開(kāi)發(fā)概念及其優(yōu)勢(shì),以及如何進(jìn)行敏捷開(kāi)發(fā)。
想要理解敏捷開(kāi)發(fā)模型,首先要了解另外兩個(gè)概念:瀑布開(kāi)發(fā)模型和迭代開(kāi)發(fā)模型。瀑布開(kāi)發(fā)模型是最為傳統(tǒng)的軟件開(kāi)發(fā)模式,包括需求分析,設(shè)計(jì),實(shí)現(xiàn),測(cè)試和發(fā)布。瀑布開(kāi)發(fā)模型的簡(jiǎn)要流程如圖1-1所示:
圖1-1 瀑布開(kāi)發(fā)模型的簡(jiǎn)要流程圖
在瀑布開(kāi)發(fā)模型中,整個(gè)過(guò)程自上而下進(jìn)行。上一個(gè)階段的輸出,是下一個(gè)階段的輸入,在前一階段工作完成之前,不允許進(jìn)行下一階段的工作。整個(gè)瀑布開(kāi)發(fā)過(guò)程的工作量就像瀑布一樣,自上而下的流動(dòng),不能由下向上反向流動(dòng)。迭代開(kāi)發(fā)模型的簡(jiǎn)要流程如圖1-2所示:
圖1-2 迭代開(kāi)發(fā)模型的簡(jiǎn)要流程如圖
迭代開(kāi)發(fā)模型將傳統(tǒng)的瀑布開(kāi)發(fā)模型打散成一個(gè)一個(gè)小的迭代過(guò)程,每個(gè)迭代都包含需求分析,設(shè)計(jì),實(shí)現(xiàn),測(cè)試和發(fā)布。迭代開(kāi)發(fā)模型與瀑布開(kāi)發(fā)模型最大的區(qū)別在于:不必等到上一階段工作全部完成,就可以進(jìn)行下一階段的工作。每一個(gè)迭代,只完成一部分產(chǎn)品功能需求,循序漸進(jìn)的完成產(chǎn)品的所有功能需求。
敏捷開(kāi)發(fā)是一個(gè)以人為本,利用了迭代開(kāi)發(fā)思想的開(kāi)發(fā)方法。敏捷開(kāi)發(fā)不追求項(xiàng)目前期的完成設(shè)計(jì)和實(shí)現(xiàn),而是致力于用最快的速度開(kāi)發(fā)出可用的軟件,然后在后續(xù)的迭代中,根據(jù)客戶的反饋逐步升級(jí)和完善軟件,最終交付客戶滿意的產(chǎn)品。
敏捷開(kāi)發(fā)的一個(gè)重要優(yōu)勢(shì)是項(xiàng)目開(kāi)發(fā)速度“快”。敏捷開(kāi)發(fā)團(tuán)隊(duì)使用自我管理、自我組織的管理方式,團(tuán)隊(duì)成員擁有最大限度的自由,這極大的激發(fā)了每個(gè)成員的開(kāi)發(fā)熱情和創(chuàng)造力,從而實(shí)現(xiàn)了項(xiàng)目開(kāi)發(fā)的“快”。敏捷開(kāi)發(fā)的另一個(gè)優(yōu)勢(shì)是以人為本,一方面表現(xiàn)為將客戶引入到項(xiàng)目團(tuán)隊(duì)中來(lái),根據(jù)客戶的反饋來(lái)調(diào)整產(chǎn)品功能,使產(chǎn)品更加符合客戶的需求;以人為本另一方面表現(xiàn)為,項(xiàng)目成員全部進(jìn)行自我管理,各個(gè)成員擁有最大的自由度來(lái)完成各自的任務(wù)。
敏捷開(kāi)發(fā)有很多實(shí)現(xiàn)形式,如SCRUM,極限編程,特性驅(qū)動(dòng)開(kāi)發(fā)等等。本文著重介紹以SCRUM形式實(shí)現(xiàn)敏捷開(kāi)發(fā)。
SCRUM是一種開(kāi)發(fā)流程框架,是一種實(shí)現(xiàn)敏捷開(kāi)發(fā)的最佳實(shí)踐。SCRUM中有一系列工具和角色定義,下面對(duì)這些工具和角色進(jìn)行詳細(xì)介紹。
Sprint:沖刺周期,一般為2~6周。
User Story:用戶故事,即用戶的外在業(yè)務(wù)需求。
Task:開(kāi)發(fā)任務(wù),是由User Story拆分出來(lái)的。
Product Backlog:產(chǎn)品待辦事項(xiàng)列表,這個(gè)列表是有優(yōu)先級(jí)排序的。
Sprint Backlog:沖刺周期待辦事項(xiàng)列表,是當(dāng)前Sprint選出來(lái)的產(chǎn)品待辦事項(xiàng)的列表,將會(huì)在當(dāng)前Sprint實(shí)現(xiàn)并交付。
Sprint Plan Meeting:沖刺計(jì)劃會(huì),由整個(gè)Scrum團(tuán)隊(duì)為當(dāng)前Sprint中要做的工作制定計(jì)劃。
Daily Stand up Meeting:每日站會(huì),展示項(xiàng)目進(jìn)度,團(tuán)隊(duì)成員各自展示:昨天我做了哪些工作,今天我計(jì)劃完成哪些工作,以及是否有障礙阻礙團(tuán)隊(duì)達(dá)成Sprint目標(biāo)。
Sprint Review Meeting:沖刺評(píng)審會(huì),團(tuán)隊(duì)成員展示各自在當(dāng)前Sprint中實(shí)現(xiàn)的成果,從客戶那里得到對(duì)本次成果的反饋,根據(jù)用戶反饋決定成果是可以交付,還是需要進(jìn)一步改善。并且,團(tuán)隊(duì)成員與客戶和其他利益相關(guān)者一起,討論剩余的、變化的或新增的產(chǎn)品需求,對(duì)Product Backlog進(jìn)行維護(hù)。
Sprint Retrospect Meeting:沖刺回顧會(huì),Scrum團(tuán)隊(duì)檢查項(xiàng)目開(kāi)發(fā)以來(lái)有哪些不足之處,制定改進(jìn)方法,并在接下來(lái)的Sprint中實(shí)現(xiàn)改進(jìn)方法。
Product Owner:產(chǎn)品負(fù)責(zé)人,管理產(chǎn)品待辦事項(xiàng)列表的唯一責(zé)任人。產(chǎn)品負(fù)責(zé)人的工作包括:清晰的描述產(chǎn)品待辦事項(xiàng);為產(chǎn)品待辦事項(xiàng)添加優(yōu)待級(jí);確保產(chǎn)品待辦事項(xiàng)列表對(duì)Scrum團(tuán)隊(duì)所有成員可見(jiàn);確保Scrum團(tuán)隊(duì)對(duì)產(chǎn)品待辦事項(xiàng)列表中的內(nèi)容達(dá)到一定程度的理解。
Development Team:開(kāi)發(fā)團(tuán)隊(duì),主要負(fù)責(zé)完成項(xiàng)目開(kāi)發(fā)任務(wù),將產(chǎn)品待辦事項(xiàng)列表中的內(nèi)容實(shí)現(xiàn)為可發(fā)布的產(chǎn)品增量。開(kāi)發(fā)團(tuán)隊(duì)是自組織的,沒(méi)人能夠命令他們以何種固定的形式實(shí)現(xiàn)產(chǎn)品待辦事項(xiàng);開(kāi)發(fā)團(tuán)隊(duì)是跨職能的,團(tuán)隊(duì)擁有創(chuàng)造產(chǎn)品增量需要的一切技能;開(kāi)發(fā)團(tuán)隊(duì)成員之間是平等的,沒(méi)有上下級(jí)的關(guān)系;開(kāi)發(fā)團(tuán)隊(duì)中的成員可以有自己的特長(zhǎng),但是開(kāi)發(fā)的責(zé)任歸屬于整個(gè)開(kāi)發(fā)團(tuán)隊(duì);開(kāi)發(fā)團(tuán)隊(duì)不包含像是產(chǎn)品測(cè)試或產(chǎn)品需求分析這些負(fù)責(zé)指定領(lǐng)域的子團(tuán)隊(duì)。開(kāi)發(fā)團(tuán)隊(duì)成員一般在3~9人之前,團(tuán)隊(duì)成員太少的話,沒(méi)有足夠的交互,生產(chǎn)力增長(zhǎng)不大,而團(tuán)隊(duì)成員太多的話,需要過(guò)多的溝通協(xié)調(diào)工作,影響開(kāi)發(fā)效率。
Scrum Master:Scrum負(fù)責(zé)人,負(fù)責(zé)確保團(tuán)隊(duì)遵循Scrum的理論、實(shí)踐和規(guī)則。Scrum Master是Scrum團(tuán)隊(duì)中的協(xié)助式領(lǐng)導(dǎo)。Scrum Master協(xié)助產(chǎn)品負(fù)責(zé)人找到有效管理產(chǎn)品待辦事項(xiàng)列表的技巧,清晰地和開(kāi)發(fā)團(tuán)隊(duì)溝通項(xiàng)目愿景、產(chǎn)品待辦事項(xiàng)列表中的條目,教導(dǎo)開(kāi)發(fā)團(tuán)隊(duì)創(chuàng)建清晰簡(jiǎn)明的產(chǎn)品待辦列表?xiàng)l目,理解并實(shí)踐敏捷開(kāi)發(fā),推動(dòng)Scrum各項(xiàng)活動(dòng)。Scrum Master協(xié)助開(kāi)發(fā)團(tuán)隊(duì)自組織和跨職能,創(chuàng)造高價(jià)值的產(chǎn)品,移除開(kāi)發(fā)團(tuán)隊(duì)遇到的障礙,在Scrum還未被完全理解的環(huán)境下指導(dǎo)開(kāi)發(fā)團(tuán)隊(duì)進(jìn)行Scrum活動(dòng)。Scrum Master協(xié)助組織采用Scrum,在組織范圍內(nèi)計(jì)劃Scrum的實(shí)施,幫助員工及干系人理解并實(shí)施Scrum,發(fā)起能提升Scrum團(tuán)隊(duì)生產(chǎn)力的變革,與其他Scrum Master一起幫助組織更有效的施行Scrum。
(1)個(gè)體和互動(dòng)高于流程和工具;
(2)工作的軟件高于詳盡的文檔;
(3)客戶合作高于合同談判;
(4)響應(yīng)變化高于遵循計(jì)劃。
(1)我們最重要的目標(biāo),是通過(guò)持續(xù)不斷地及早交付有價(jià)值的軟件使客戶滿意。
(2)欣然面對(duì)需求變化,即使在開(kāi)發(fā)后期也一樣。為了客戶的競(jìng)爭(zhēng)優(yōu)勢(shì),敏捷過(guò)程掌控變化。
(3)經(jīng)常地交付可工作的軟件,相隔幾星期或一兩個(gè)月,傾向于采取較短的周期。
(4)業(yè)務(wù)人員和開(kāi)發(fā)人員必須相互合作,項(xiàng)目中的每一天都不例外。
(5)激發(fā)個(gè)體的斗志,以他們?yōu)楹诵拇罱?xiàng)目。提供所需的環(huán)境和支援,輔以信任,從而達(dá)成目標(biāo)。
(6)不論團(tuán)隊(duì)內(nèi)外,傳遞信息效果最好和效率最高的方式是面對(duì)面的交談。
(7)可工作的軟件是進(jìn)度的首要度量標(biāo)準(zhǔn)。
(8)敏捷過(guò)程倡導(dǎo)可持續(xù)開(kāi)發(fā)。責(zé)任人、開(kāi)發(fā)人員和用戶要能夠共同維持其步調(diào)穩(wěn)定延續(xù)。
(9)堅(jiān)持不懈地追求技術(shù)卓越和良好設(shè)計(jì),敏捷能力由此增強(qiáng)。
(10)以簡(jiǎn)潔為本,它是極力減少不必要工作量的藝術(shù)。
(11)最好的架構(gòu)、需求和設(shè)計(jì)出自組織團(tuán)隊(duì)。
(12)團(tuán)隊(duì)定期地反思如何能提高成效,并依此調(diào)整自身的舉止表現(xiàn)。
敏捷開(kāi)發(fā)原則是對(duì)敏捷價(jià)值觀的解釋和實(shí)踐,它將敏捷的價(jià)值觀落實(shí)到具體的可操作的原則之上,遵循這十二條原則,是敏捷軟件開(kāi)發(fā)項(xiàng)目得以成功的基石。
利用Scrum實(shí)施的敏捷開(kāi)發(fā)模型,能夠快速響應(yīng)需求變化,提高項(xiàng)目開(kāi)發(fā)速度,并確保開(kāi)發(fā)的產(chǎn)品確實(shí)滿足客戶的需求,是客戶真正想要的產(chǎn)品。
[1]《Scrum要素》作者∶Chris Sims & Hillary Louise Johnson.
[2]《Extreme Programming Explained》作者∶Ken Beck & Cynthia Andres.
[3]《Scrum敏捷軟件開(kāi)發(fā)》作者∶Mike Cohn.
[4]《敏捷迭代開(kāi)發(fā)∶管理者指南》作者∶Craig Larman.
[5]《Scrum敏捷項(xiàng)目管理實(shí)戰(zhàn)》作者∶Ken Schwaber.