在上篇文章中,我們重新理解了敏捷宣言,其中包括往往被人們忽視的前兩句話。那么接下來(lái)這篇文章我們會(huì)看一下敏捷宣言的12原則。理解一下這12原則對(duì)敏捷開發(fā)在實(shí)踐中的指導(dǎo)意義。
12原則作為敏捷開發(fā)對(duì)于軟件開發(fā)流程的指導(dǎo)性綱領(lǐng),其實(shí)是對(duì)敏捷宣言進(jìn)行了具有實(shí)際操作意義的解釋。下面是敏捷宣言12原則:
我們遵循以下準(zhǔn)則:
1、我們的最高目標(biāo)是,通過(guò)盡早和持續(xù)地交付有價(jià)值的軟件來(lái)滿足客戶。
2、歡迎對(duì)需求提出變更——即使是在項(xiàng)目開發(fā)后期。要善于利用需求變更,幫助客戶獲得競(jìng)爭(zhēng)優(yōu)勢(shì)。
3、要不斷交付可用的軟件,周期從幾周到幾個(gè)月不等,且越短越好。
4、項(xiàng)目過(guò)程中,業(yè)務(wù)人員與開發(fā)人員必須在一起工作。
5、要善于激勵(lì)項(xiàng)目人員,給他們以所需要的環(huán)境和支持,并相信他們能夠完成任務(wù)。
6、無(wú)論是團(tuán)隊(duì)內(nèi)還是團(tuán)隊(duì)間,最有效的溝通方法是面對(duì)面的交談。
7、可用的軟件是衡量進(jìn)度的主要指標(biāo)。
8、敏捷過(guò)程提倡可持續(xù)的開發(fā)。項(xiàng)目方、開發(fā)人員和用戶應(yīng)該能夠保持恒久穩(wěn)定的進(jìn)展速度。
9、對(duì)技術(shù)的精益求精以及對(duì)設(shè)計(jì)的不斷完善將提升敏捷性。
10、要做到簡(jiǎn)潔,即盡最大可能減少不必要的工作。這是一門藝術(shù)。
11、最佳的架構(gòu)、需求和設(shè)計(jì)出自于自組織的團(tuán)隊(duì)。
12、團(tuán)隊(duì)要定期反省如何能夠做到更有效,并相應(yīng)地調(diào)整團(tuán)隊(duì)的行為。
第一條準(zhǔn)則:講明了敏捷開發(fā)的最高目標(biāo),就是盡早和持續(xù)交付有價(jià)值的軟件來(lái)滿足客戶,這里我們要注意幾個(gè)關(guān)鍵詞,盡早,持續(xù),有價(jià)值和滿足,通過(guò)這幾個(gè)詞,我們實(shí)際上是可以理解第一條原則的意義,那就是將產(chǎn)品對(duì)于客戶的價(jià)值放在首位,整個(gè)產(chǎn)品的交付和開發(fā)周期都是為了滿足客戶對(duì)于產(chǎn)品價(jià)值的滿意度。這也是為了解決傳統(tǒng)軟件開發(fā)中沒(méi)有將產(chǎn)品對(duì)于客戶的價(jià)值作為產(chǎn)品開發(fā)的目標(biāo)的問(wèn)題而提出的,只有將產(chǎn)品價(jià)值作為軟件開發(fā)的目標(biāo),才能保證團(tuán)隊(duì)理解開發(fā)工作的目標(biāo),這樣團(tuán)隊(duì)和個(gè)人才能夠不斷調(diào)整自己,為了這個(gè)目標(biāo)而去工作,才能保證產(chǎn)品的持續(xù)交付。
案例:某公司新建敏捷開發(fā)團(tuán)隊(duì),但是并沒(méi)有進(jìn)行相關(guān)培訓(xùn),團(tuán)隊(duì)開發(fā)人員不知道敏捷開發(fā)的意義,僅僅是感覺(jué)換了一種開發(fā)模式,對(duì)此非常抵觸。后來(lái)經(jīng)過(guò)培訓(xùn),了解到敏捷開發(fā)核心意義,知道自己在團(tuán)隊(duì)中的角色,也對(duì)團(tuán)隊(duì)的目標(biāo)統(tǒng)一起來(lái),并且從功能開發(fā)的傳統(tǒng)理念轉(zhuǎn)變?yōu)閮r(jià)值交付中來(lái),從而在后面的開發(fā)中,能夠不斷調(diào)整自己,為團(tuán)隊(duì)目標(biāo)服務(wù)。
第二條準(zhǔn)則:需求變更可能是軟件開發(fā)人員最討厭的,軟件開發(fā)人員的理想狀態(tài)應(yīng)該是,設(shè)計(jì)、接口定義好了,然后我做好就行了,也就是“雞犬之聲相聞老死不相往來(lái)”。但是實(shí)際情況則是需求變更永遠(yuǎn)是存在的,所以敏捷開發(fā)提出來(lái)的這條準(zhǔn)則是,既然我們無(wú)法阻止變更,那么我們就應(yīng)該抱著歡迎的態(tài)度,看看能不能從需求變更中找到機(jī)會(huì),化風(fēng)險(xiǎn)為機(jī)遇,從而制造更大的價(jià)值給客戶。
案例:某公司在開發(fā)產(chǎn)品的時(shí)候,客戶經(jīng)常提出變更需求,要求改變軟件功能,但是該團(tuán)隊(duì)成員始終保持耐心,和客戶溝通,分析變更需求,將變更需求分類識(shí)別,最后使得其中部分變更取消,而部分變更導(dǎo)入到現(xiàn)有功能中,而且從變更中發(fā)掘了一些新的功能,為客戶增加了盈利點(diǎn)。
第三條準(zhǔn)則:傳統(tǒng)軟件開發(fā)流程中,因?yàn)橛袕男枨蠓治?設(shè)計(jì)-編碼-單元測(cè)試-集成測(cè)試-系統(tǒng)測(cè)試等控制流程的存在,而且各個(gè)流程可能由不同部門和團(tuán)隊(duì)來(lái)分擔(dān),導(dǎo)致內(nèi)耗和效率較低,從而交付時(shí)間很容易不受控制,但是敏捷則希望軟件團(tuán)隊(duì)能夠不斷持續(xù)的交付軟件,也就是小步快跑的過(guò)程,讓客戶不斷的看到項(xiàng)目進(jìn)展,從而增強(qiáng)客戶對(duì)于團(tuán)隊(duì)產(chǎn)品交付能力的信心和滿意度。
案例:某通信企業(yè),以前交付產(chǎn)品,往往都是到了release結(jié)束的時(shí)候,客戶才能夠看到能夠工作的產(chǎn)品,這個(gè)時(shí)候發(fā)現(xiàn)問(wèn)題,往往需要加班維護(hù),客戶和開發(fā)人員都苦不堪言。后來(lái)在接受了敏捷理論之后,將軟件功能拆分成非常小的用戶故事,每個(gè)迭代按優(yōu)先級(jí)實(shí)現(xiàn)用戶故事,同時(shí)也demo給客戶看,客戶每個(gè)迭代都能夠看到產(chǎn)品在不斷完善,同時(shí)也能夠不斷的進(jìn)行反饋。用戶滿意度大大提升。
第四條準(zhǔn)則:敏捷宣言中地調(diào)就強(qiáng)調(diào)協(xié)作和溝通,那么這條準(zhǔn)則也是希望團(tuán)隊(duì)成員能夠有一個(gè)適合溝通的環(huán)境,特別是業(yè)務(wù)人員,他們是接觸客戶的第一責(zé)任人,任何客戶的需求都是通過(guò)他們傳遞給開發(fā)團(tuán)隊(duì)的,只有大家在一起不停的溝通協(xié)作,才能保證開發(fā)團(tuán)隊(duì)開發(fā)出來(lái)的產(chǎn)品真正是客戶想要的。
案例:在傳統(tǒng)開發(fā)模式中,需求經(jīng)過(guò)市場(chǎng)人員--BA--system analysis--system engineer ---developer,而且期間可能通過(guò)文檔來(lái)進(jìn)行溝通,這個(gè)時(shí)候開發(fā)人員往往不知道客戶真正需要的是什么,所以只能依照自己的理解去開發(fā)產(chǎn)品,這樣的產(chǎn)品很難說(shuō)是滿足客戶需求的。
第五條準(zhǔn)則:在敏捷開發(fā)流程中,團(tuán)隊(duì)的組建是非常重要的,首先我們要相信團(tuán)隊(duì)成員,相信他們是愿意為了團(tuán)隊(duì)的目標(biāo)而工作,有能力完成當(dāng)前的開發(fā)任務(wù)的。然后給予團(tuán)隊(duì)成員支持,鼓勵(lì)。而不是一味的傳遞壓力。
案例:本人在組建敏捷開發(fā)團(tuán)隊(duì)的時(shí)候,會(huì)召集團(tuán)隊(duì)成員開一個(gè)小的kick off會(huì)議,在該會(huì)議上會(huì)讓團(tuán)隊(duì)成員討論我們團(tuán)隊(duì)的幾條約定,而第一條就是“相信團(tuán)隊(duì)的每一個(gè)成員都會(huì)為團(tuán)隊(duì)當(dāng)前的開發(fā)目標(biāo)而努力工作”,這是敏捷團(tuán)隊(duì)組成基本原則,這樣才能夠使團(tuán)隊(duì)的成員互相信任,相互幫助,從而和諧統(tǒng)一的向一個(gè)目標(biāo)而工作。
第六條準(zhǔn)則:敏捷非常強(qiáng)調(diào)面對(duì)面溝通,因?yàn)槊鎸?duì)面溝通是所有溝通方式中最高效的方法,大家可以通過(guò)直接的溝通第一時(shí)間把問(wèn)題解決。
案例:郵件/視頻/即時(shí)通信/電話/面對(duì)面溝通,其中文檔和郵件是效率最低的方式,而在很多開發(fā)人員卻非常喜歡用郵件進(jìn)行溝通,雖然這樣效率極低。而在敏捷中,站會(huì)和看板則是制造一個(gè)每天讓團(tuán)隊(duì)開發(fā)人員面對(duì)面交流的機(jī)會(huì),從而將團(tuán)隊(duì)溝通成本降低,減少因溝通造成的項(xiàng)目問(wèn)題。
第七條準(zhǔn)則:敏捷強(qiáng)調(diào)即時(shí)交付,但是交付產(chǎn)品的衡量則是可以工作的軟件,傳統(tǒng)開發(fā)方式中,不同開發(fā)階段的交付可能不一樣,導(dǎo)致可能在相當(dāng)長(zhǎng)一段時(shí)間,客戶無(wú)法看到我們的軟件產(chǎn)品。而敏捷則強(qiáng)調(diào)交付一定是可以工作的軟件,這樣的話客戶可以從一開始就看到我們的產(chǎn)品,對(duì)產(chǎn)品有一個(gè)直觀的感受,從而可以不斷的提出反饋和建立信心。
案例:某通信企業(yè)開發(fā)一個(gè)產(chǎn)品,有6個(gè)月的周期,其中前2個(gè)月都在做需求分析,文檔設(shè)計(jì),提交了大量的設(shè)計(jì)文檔,而到了后4個(gè)月才真正的開發(fā)產(chǎn)品,到最后一個(gè)月的時(shí)候客戶才能看到一些工作的軟件。而用了敏捷開發(fā)之后,從第一個(gè)月開始,每隔2周,都會(huì)交付一個(gè)小的功能給客戶看,一開始可能不是很完善,但是到了后來(lái)越來(lái)越完善,客戶也很驚訝,該企業(yè)能做到這樣,而且也有信心了。
第八條準(zhǔn)則:可持續(xù)開發(fā),一直是敏捷強(qiáng)調(diào)的軟件開發(fā)節(jié)奏。敏捷不只是一味強(qiáng)調(diào)快速交付,而是強(qiáng)調(diào)一個(gè)開發(fā)節(jié)奏,這個(gè)節(jié)奏能夠讓項(xiàng)目管理人員和客戶對(duì)于這個(gè)團(tuán)隊(duì)有信心,就是我們交付給這個(gè)團(tuán)隊(duì)的開發(fā)任務(wù),他們能夠在多久完成,并且是保證質(zhì)量的。
案例:一個(gè)敏捷開發(fā)團(tuán)隊(duì),一開始的交付能力是逐漸增長(zhǎng)的,而PO往往希望團(tuán)隊(duì)能交付的產(chǎn)品越多越好,所以在每個(gè)迭代開始都安排了超過(guò)上個(gè)月迭代10%的工作,但是后來(lái)發(fā)現(xiàn),團(tuán)隊(duì)交付能力在到達(dá)一定程度上無(wú)法再增長(zhǎng)了,這個(gè)時(shí)候如果再增加任務(wù)的話,要不無(wú)法完成,要不完成不能保證質(zhì)量,最后根據(jù)團(tuán)隊(duì)的交付能力評(píng)估,PO每個(gè)月只交給團(tuán)隊(duì)能夠完成的任務(wù),這樣團(tuán)隊(duì)的交付能力剛好可以保證交付并且質(zhì)量。
第九條準(zhǔn)則:敏捷開發(fā)非常重視技術(shù)提升,因?yàn)樗嘈艌F(tuán)隊(duì)技術(shù)能力的擴(kuò)展和提升能夠提高產(chǎn)品質(zhì)量,交付能力等,從而提高團(tuán)隊(duì)的敏捷性。
案例:某敏捷團(tuán)隊(duì)由開發(fā)和測(cè)試人員組成,一開始開發(fā)只管開發(fā)軟件,測(cè)試負(fù)責(zé)測(cè)試和自動(dòng)化,但是后來(lái)發(fā)現(xiàn)由于測(cè)試人員較少,很多自動(dòng)化功能無(wú)法完成,導(dǎo)致無(wú)法進(jìn)行足夠的自動(dòng)化測(cè)試,發(fā)現(xiàn)了很多由于新代碼導(dǎo)致原有功能被破壞的例子。后來(lái)團(tuán)隊(duì)經(jīng)過(guò)協(xié)商,希望開發(fā)人員也能夠承擔(dān)一部分自動(dòng)化工作,并且將這個(gè)作為團(tuán)隊(duì)和個(gè)人的工作考核之一,經(jīng)過(guò)一段時(shí)間運(yùn)行,發(fā)現(xiàn)所有的開發(fā)人員都能夠進(jìn)行自動(dòng)化測(cè)試開發(fā),而且基本上所有的測(cè)試工作都可以用自動(dòng)化來(lái)進(jìn)行,增加了團(tuán)隊(duì)工作效率,并且保證了產(chǎn)品質(zhì)量。
第十條原則:只做需要做的事,這是敏捷的核心之一。有一句話,剛好最好。
案例:某敏捷團(tuán)隊(duì)在運(yùn)行一段時(shí)間,總是發(fā)現(xiàn)有用戶故事無(wú)法交付,后來(lái)發(fā)現(xiàn)是在分解用戶故事的時(shí)候,加入了大量的健壯性,穩(wěn)定性等功能,導(dǎo)致用戶故事變大變多。后來(lái)經(jīng)過(guò)和客戶溝通,知道了客戶需要的核心功能,后來(lái)便決定在下個(gè)迭代只實(shí)現(xiàn)這些基本功能,結(jié)構(gòu)發(fā)現(xiàn)按時(shí)交付能力大大提高。
第十一條原則:敏捷相信好的架構(gòu)設(shè)計(jì)是出自自組織的團(tuán)隊(duì)。敏捷的最終目標(biāo)也就是打造一個(gè)自組織團(tuán)隊(duì),就是該團(tuán)隊(duì)能夠通過(guò)高效協(xié)作,進(jìn)行需求分析,架構(gòu)設(shè)計(jì)等工作。
案例:某通信企業(yè),原來(lái)的設(shè)計(jì)架構(gòu)都是有系統(tǒng)工程師來(lái)進(jìn)行,但是系統(tǒng)工程師不在團(tuán)隊(duì)中,不實(shí)際編寫代碼,后來(lái)在運(yùn)行中發(fā)現(xiàn)往往會(huì)出現(xiàn)一些設(shè)計(jì)問(wèn)題,比如說(shuō)不符合當(dāng)前實(shí)現(xiàn)等。后來(lái)該企業(yè)讓系統(tǒng)工程師和團(tuán)隊(duì)坐到一起,共同進(jìn)行軟件架構(gòu)設(shè)計(jì)。經(jīng)過(guò)一段時(shí)間,發(fā)現(xiàn)軟件設(shè)計(jì)比以前好多了,出現(xiàn)的設(shè)計(jì)相關(guān)問(wèn)題也少了很多。
第十二條準(zhǔn)則:我個(gè)人認(rèn)為回顧會(huì)議是敏捷活動(dòng)中最重要的一個(gè),因?yàn)橹挥型ㄟ^(guò)回顧會(huì)議,找出團(tuán)隊(duì)需要保持的和不足之處,在下個(gè)迭代進(jìn)行改進(jìn),才能夠達(dá)到團(tuán)隊(duì)不斷改進(jìn),不斷前進(jìn),提供交付能力和縮短交付時(shí)間的目的。
案例:某大型企業(yè),組建SCRUM團(tuán)隊(duì),開始的回顧會(huì)議,大家暢所欲言,但是提出的問(wèn)題就放在那里,也沒(méi)有什么改進(jìn)計(jì)劃,或者是時(shí)間緊,就不管了,后來(lái)發(fā)現(xiàn)團(tuán)隊(duì)進(jìn)步很慢,交付能力停滯不前。后來(lái)在SM的引導(dǎo)下,將回顧會(huì)議中發(fā)現(xiàn)的問(wèn)題變成下個(gè)sprint的用戶故事,讓專門的人進(jìn)行改進(jìn)或者提高,經(jīng)過(guò)幾個(gè)迭代之后發(fā)現(xiàn),這些問(wèn)題解決之后,團(tuán)隊(duì)的交付能力大大提高,而且也進(jìn)入了一個(gè)高效的開發(fā)狀態(tài)。