敏捷開(kāi)發(fā)(agile development)是非常流行的軟件開(kāi)發(fā)方法柒莉。據(jù)統(tǒng)計(jì)闻坚,2018年90%的軟件開(kāi)發(fā)采用敏捷開(kāi)發(fā)。
但是兢孝,到底什么是敏捷開(kāi)發(fā)窿凤,能說(shuō)清的人卻不多。本文嘗試用簡(jiǎn)潔易懂的語(yǔ)言跨蟹,解釋敏捷開(kāi)發(fā)雳殊。
一、迭代開(kāi)發(fā)
敏捷開(kāi)發(fā)的核心是迭代開(kāi)發(fā)(iterative development)窗轩。敏捷一定是采用迭代開(kāi)發(fā)的方式夯秃。
那么什么是"迭代開(kāi)發(fā)"呢?迭代的英文是 iterative痢艺,直譯為"重復(fù)"仓洼,迭代開(kāi)發(fā)其實(shí)就是"重復(fù)開(kāi)發(fā)"。
對(duì)于大型軟件項(xiàng)目堤舒,傳統(tǒng)的開(kāi)發(fā)方式是采用一個(gè)大周期(比如一年)進(jìn)行開(kāi)發(fā)色建,整個(gè)過(guò)程就是一次"大開(kāi)發(fā)";迭代開(kāi)發(fā)的方式則不一樣植酥,它將開(kāi)發(fā)過(guò)程拆分成多個(gè)小周期镀岛,即一次"大開(kāi)發(fā)"變成多次"小開(kāi)發(fā)"弦牡,每次小開(kāi)發(fā)都是同樣的流程,所以看上去就好像重復(fù)在做同樣的步驟漂羊。
舉例來(lái)說(shuō)驾锰,SpaceX 公司想造一個(gè)大推力火箭,將人類(lèi)送到火星走越。但是椭豫,它不是一開(kāi)始就造大火箭,而是先造一個(gè)最簡(jiǎn)陋的小火箭 Falcon 1旨指。結(jié)果赏酥,第一次發(fā)射就爆炸了,直到第四次發(fā)射谆构,才成功進(jìn)入軌道裸扶。然后,開(kāi)發(fā)了中型火箭 Falcon 9搬素,九年中發(fā)射了70次呵晨。最后,才開(kāi)發(fā) Falcon 重型火箭熬尺。如果 SpaceX 不采用迭代開(kāi)發(fā)摸屠,它可能直到現(xiàn)在還無(wú)法上天。
迭代開(kāi)發(fā)將一個(gè)大任務(wù)粱哼,分解成多次連續(xù)的開(kāi)發(fā)季二,本質(zhì)就是逐步改進(jìn)。開(kāi)發(fā)者先快速發(fā)布一個(gè)有效但不完美的最簡(jiǎn)版本揭措,然后不斷迭代胯舷。每一次迭代都包含規(guī)劃、設(shè)計(jì)蜂筹、編碼需纳、測(cè)試芦倒、評(píng)估五個(gè)步驟艺挪,不斷改進(jìn)產(chǎn)品,添加新功能兵扬。通過(guò)頻繁的發(fā)布麻裳,以及跟蹤對(duì)前一次迭代的反饋,最終接近較完善的產(chǎn)品形態(tài)器钟。
二津坑、增量開(kāi)發(fā)
迭代開(kāi)發(fā)只是要求將開(kāi)發(fā)分成多個(gè)迭代,并沒(méi)有回答一個(gè)重要的問(wèn)題:怎么劃分迭代傲霸,哪個(gè)任務(wù)在這個(gè)迭代疆瑰,哪個(gè)任務(wù)在下個(gè)迭代眉反?這時(shí),一般采用"增量開(kāi)發(fā)"(incremental development)劃分迭代穆役。
所謂"增量開(kāi)發(fā)"寸五,指的是軟件的每個(gè)版本,都會(huì)新增一個(gè)用戶(hù)可以感知的完整功能耿币。也就是說(shuō)梳杏,按照新增功能來(lái)劃分迭代。
舉例來(lái)說(shuō)淹接,房產(chǎn)公司開(kāi)發(fā)一個(gè)10棟樓的小區(qū)十性。如果采用增量開(kāi)發(fā)的模式,該公司第一個(gè)迭代就是交付一號(hào)樓塑悼,第二個(gè)迭代交付二號(hào)樓......每個(gè)迭代都是完成一棟完整的樓劲适。而不是第一個(gè)迭代挖好10棟樓的地基,第二個(gè)迭代建好每棟樓的骨架厢蒜,第三個(gè)迭代架設(shè)屋頂......
增量開(kāi)發(fā)加上迭代開(kāi)發(fā)减响,才算真正的敏捷開(kāi)發(fā)。
三郭怪、敏捷開(kāi)發(fā)的好處
3.1 早期交付
敏捷開(kāi)發(fā)的第一個(gè)好處支示,就是早期交付,從而大大降低成本鄙才。
還是以上一節(jié)的房產(chǎn)公司為例颂鸿,如果按照傳統(tǒng)的"瀑布開(kāi)發(fā)模式",先挖10棟樓的地基攒庵、再蓋骨架嘴纺、然后架設(shè)屋頂,每個(gè)階段都等到前一個(gè)階段完成后開(kāi)始浓冒,可能需要兩年才能一次性交付10棟樓栽渴。也就是說(shuō),如果不考慮預(yù)售稳懒,該項(xiàng)目必須等到兩年后才能回款闲擦。
敏捷開(kāi)發(fā)是六個(gè)月后交付一號(hào)樓,后面每?jī)蓚€(gè)月交付一棟樓场梆。因此墅冷,半年就能回款10%,后面每個(gè)月都會(huì)有現(xiàn)金流或油,資金壓力就大大減輕了寞忿。
3.2 降低風(fēng)險(xiǎn)
敏捷開(kāi)發(fā)的第二個(gè)好處是,及時(shí)了解市場(chǎng)需求顶岸,降低產(chǎn)品不適用的風(fēng)險(xiǎn)腔彰。
請(qǐng)想一想叫编,哪一種情況損失比較小:10棟樓都造好以后霹抛,才發(fā)現(xiàn)賣(mài)不出去宵溅,還是造好第一棟樓,就發(fā)現(xiàn)賣(mài)不出去上炎,從而改進(jìn)或停建后面9棟樓恃逻?
對(duì)于軟件項(xiàng)目來(lái)說(shuō),先有一個(gè)原型產(chǎn)品藕施,了解市場(chǎng)的接受程度寇损,往往是項(xiàng)目成功的關(guān)鍵。有一本書(shū)叫做《夢(mèng)斷代碼》裳食,副標(biāo)題就是"20+個(gè)程序員矛市,三年時(shí)間,4732個(gè)bug诲祸,100+萬(wàn)美元浊吏,最后失敗的故事",這就是沒(méi)有采用敏捷開(kāi)發(fā)的結(jié)果救氯。相反的找田,Instagram 最初是一個(gè)地理位置打卡 App,后來(lái)發(fā)現(xiàn)用戶(hù)不怎么在乎地理位置着憨,更喜歡上傳照片墩衙,就改做照片上傳軟件,結(jié)果成了獨(dú)角獸甲抖。
由于敏捷開(kāi)發(fā)可以不斷試錯(cuò)漆改,找出對(duì)業(yè)務(wù)最重要的功能,然后通過(guò)迭代准谚,調(diào)整軟件方向挫剑。相比傳統(tǒng)方式,大大增加了產(chǎn)品成功的可能性柱衔。如果市場(chǎng)需求不確定樊破,或者你對(duì)該領(lǐng)域不熟悉,那么敏捷開(kāi)發(fā)幾乎是唯一可行的應(yīng)對(duì)方式秀存。
四捶码、如何進(jìn)行每一次迭代
雖然敏捷開(kāi)發(fā)將軟件開(kāi)發(fā)分成多個(gè)迭代,但是也要求或链,每次迭代都是一個(gè)完整的軟件開(kāi)發(fā)周期,必須按照軟件工程的方法論档押,進(jìn)行正規(guī)的流程管理澳盐。
具體來(lái)說(shuō)祈纯,每次迭代都必須依次完成以下五個(gè)步驟。
需求分析(requirements analysis)
設(shè)計(jì)(design)
編碼(coding)
測(cè)試(testing)
部署和評(píng)估(deployment / evaluation)
每個(gè)迭代大約持續(xù)2~6周叼耙。
五腕窥、敏捷開(kāi)發(fā)的價(jià)值觀
《敏捷軟件開(kāi)發(fā)宣言》里面提到四個(gè)價(jià)值觀。
程序員的主觀能動(dòng)性筛婉,以及程序員之間的互動(dòng)簇爆,優(yōu)于既定流程和工具。
軟件能夠運(yùn)行爽撒,優(yōu)于詳盡的文檔入蛆。
跟客戶(hù)的密切協(xié)作,優(yōu)于合同和談判硕勿。
能夠響應(yīng)變化哨毁,優(yōu)于遵循計(jì)劃。
六源武、十二條原則
該宣言還提出十二條敏捷開(kāi)發(fā)的原則扼褪。
通過(guò)早期和持續(xù)交付有價(jià)值的軟件,實(shí)現(xiàn)客戶(hù)滿(mǎn)意度粱栖。
歡迎不斷變化的需求话浇,即使是在項(xiàng)目開(kāi)發(fā)的后期。要善于利用需求變更闹究,幫助客戶(hù)獲得競(jìng)爭(zhēng)優(yōu)勢(shì)凳枝。
不斷交付可用的軟件,周期通常是幾周跋核,越短越好岖瑰。
項(xiàng)目過(guò)程中,業(yè)務(wù)人員與開(kāi)發(fā)人員必須在一起工作砂代。
項(xiàng)目必須圍繞那些有內(nèi)在動(dòng)力的個(gè)人而建立蹋订,他們應(yīng)該受到信任。
面對(duì)面交談是最好的溝通方式刻伊。
可用性是衡量進(jìn)度的主要指標(biāo)露戒。
提倡可持續(xù)的開(kāi)發(fā),保持穩(wěn)定的進(jìn)展速度捶箱。
不斷關(guān)注技術(shù)是否優(yōu)秀智什,設(shè)計(jì)是否良好。
簡(jiǎn)單性至關(guān)重要丁屎,盡最大可能減少不必要的工作荠锭。
最好的架構(gòu)、要求和設(shè)計(jì)晨川,來(lái)自團(tuán)隊(duì)內(nèi)部自發(fā)的認(rèn)識(shí)证九。
團(tuán)隊(duì)要定期反思如何更有效删豺,并相應(yīng)地進(jìn)行調(diào)整。