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