敏捷軟件開發(fā)又稱敏捷開發(fā),是一種從1990年代開始逐漸引起廣泛關(guān)注的一些新型軟件開發(fā)方法,是一種應(yīng)對(duì)快速變化的需求的一種軟件開發(fā)能力。它們的具體名稱、理念、過程、術(shù)語都不盡相同,相對(duì)于“非敏捷”,更強(qiáng)調(diào)程序員團(tuán)隊(duì)與業(yè)務(wù)專家之間的緊密協(xié)作、面對(duì)面的溝通(認(rèn)為比書面的文檔更有效)、頻繁交付新的軟件版本、緊湊而自我組織型的團(tuán)隊(duì)、能夠很好地適應(yīng)需求變化的代碼編寫和團(tuán)隊(duì)組織方法,也更注重做為軟件開發(fā)中人的作用。
詞源
敏捷一詞來源于2001年初美國(guó)猶他州雪鳥滑雪圣地的一次敏捷方法發(fā)起者和實(shí)踐者(他們發(fā)起組成了敏捷聯(lián)盟)的聚會(huì)。
價(jià)值觀
雪鳥會(huì)議共同起草了敏捷軟件開發(fā)宣言。其中最重要的部分就是對(duì)一些與會(huì)者一致同意的軟件開發(fā)價(jià)值觀的表述:
人和交互重于過程和工具。
可以工作的軟件重于求全責(zé)備的文檔。
客戶協(xié)作重于合同談判。
隨時(shí)應(yīng)對(duì)變化重于循規(guī)蹈矩。
其中位于右邊的內(nèi)容雖然也有其價(jià)值,但是左邊的內(nèi)容最為重要。
原則
宣言中還包括以下原則:
對(duì)我們而言,最重要的是通過盡早和不斷交付有價(jià)值的軟件滿足客戶需要。
我們歡迎需求的變化,即使在開發(fā)后期。敏捷過程能夠駕馭變化,保持客戶的競(jìng)爭(zhēng)優(yōu)勢(shì)。
經(jīng)常交付可以工作的軟件,從幾星期到幾個(gè)月,時(shí)間尺度越短越好。
業(yè)務(wù)人員和開發(fā)者應(yīng)該在整個(gè)項(xiàng)目過程中始終朝夕在一起工作。
圍繞斗志高昂的人進(jìn)行軟件開發(fā),給開發(fā)者提供適宜的環(huán)境,滿足他們的需要,并相信他們能夠完成任務(wù)。
在開發(fā)小組中最有效率也最有效果的信息傳達(dá)方式是面對(duì)面的交談。
可以工作的軟件是進(jìn)度的主要度量標(biāo)準(zhǔn)。
敏捷過程提倡可持續(xù)開發(fā)。出資人、開發(fā)人員和用戶應(yīng)該總是維持不變的節(jié)奏。
對(duì)卓越技術(shù)與良好設(shè)計(jì)的不斷追求將有助于提高敏捷性。
簡(jiǎn)單——盡可能減少工作量的藝術(shù)至關(guān)重要。
最好的架構(gòu)、需求和設(shè)計(jì)都源自自我組織的團(tuán)隊(duì)。
每隔一定時(shí)間,團(tuán)隊(duì)都要總結(jié)如何更有效率,然后相應(yīng)地調(diào)整自己的行為。
對(duì)比其他的方法敏捷方法有時(shí)候被誤認(rèn)為是無計(jì)劃性和紀(jì)律性的方法,實(shí)際上更確切的說法是敏捷方法強(qiáng)調(diào)適應(yīng)性而非預(yù)見性。
適應(yīng)性的方法集中在快速適應(yīng)現(xiàn)實(shí)的變化。當(dāng)項(xiàng)目的需求起了變化,團(tuán)隊(duì)?wèi)?yīng)該迅速適應(yīng)。這個(gè)團(tuán)隊(duì)可能很難確切描述未來將會(huì)如何變化.
對(duì)比迭代方法
相比迭代式開發(fā)兩者都強(qiáng)調(diào)在較短的開發(fā)周期提交軟件,敏捷方法的周期可能更短,并且更加強(qiáng)調(diào)隊(duì)伍中的高度協(xié)作。
對(duì)比瀑布式開發(fā)
兩者沒有很多的共同點(diǎn),瀑布模型式是最典型的預(yù)見性的方法,嚴(yán)格遵循預(yù)先計(jì)劃的需求、分析、設(shè)計(jì)、編碼、測(cè)試的步驟順序進(jìn)行。步驟成果作為衡量進(jìn)度的方法,例如需求規(guī)格,設(shè)計(jì)文檔,測(cè)試計(jì)劃和代碼審閱等等。
瀑布式的主要的問題是它的嚴(yán)格分級(jí)導(dǎo)致的自由度降低,項(xiàng)目早期即作出承諾導(dǎo)致對(duì)后期需求的變化難以調(diào)整,代價(jià)高昂。瀑布式方法在需求不明并且在項(xiàng)目進(jìn)行過程中可能變化的情況下基本是不可行的。
相對(duì)來講,敏捷方法則在幾周或者幾個(gè)月的時(shí)間內(nèi)完成相對(duì)較小的功能,強(qiáng)調(diào)的是能將盡早將盡量小的可用的功能交付使用,并在整個(gè)項(xiàng)目周期中持續(xù)改善和增強(qiáng)。
有人可能在這樣小規(guī)模的范圍內(nèi)的每次迭代中使用瀑布式方法,另外的人可能將選擇各種工作并行進(jìn)行,例如極限編程。
敏捷方法的適用性
在敏捷方法其獨(dú)特之處以外,他和其他的方法也有很多共同之處,比如迭代開發(fā),關(guān)注互動(dòng)溝通,減少中介過程的無謂資源消耗。通??梢栽谝韵路矫婧饬棵艚莘椒ǖ倪m用性:
從產(chǎn)品角度看,敏捷方法適用于需求萌動(dòng)并且快速改變的情況,如系統(tǒng)有比較高的關(guān)鍵性、可靠性、安全性方面的要求,則可能不完全適合;從組織結(jié)構(gòu)的角度