什么是靈敏軟件開發?靈敏軟件開發是什么意思?
靈敏軟件開發不是一個詳細的過程,而是一個涵蓋性術語(umbrella term),用于概括具有類似基礎的方式和方法。這些方法,其中包括極限編程(Extreme Programming)、動態系統開發方法(Dynamic System Development Method)、SCRUM、Crystal和Lean等,都著眼于快速交付高質量的工作軟件,并做到客戶滿足。
靈敏軟件開發又稱靈敏開發,是一種從1990年代開始逐漸引起廣泛關注的一些新型軟件開發方法,是一種應對快速變化的需求的一種軟件開發能力。它們的詳細名稱、理念、過程、術語都不盡相同,相對于"非靈敏",更夸大程序員團隊與業務專家之間的緊密協作、面臨面的溝通(以為比書面的文檔更有效)、頻繁交付新的軟件版本、緊湊而自我組織型的團隊、能夠很好地適應需求變化的代碼編寫和團隊組織方法,也更注重做為軟件開發中人的作用。
靈敏開發詞源
靈敏一詞來源于2001年初美國猶他州雪鳥滑雪勝地的一次靈敏方法發起者和實踐者(他們發起組成了靈敏同盟)的聚會。
靈敏開發價值觀
雪鳥會議共同起草了靈敏軟件開發宣言。其中最重要的部門就是對一些與會者一致同意的軟件開發價值觀的表述:
人和交互重于過程和工具。
可以工作的軟件重于責備求全的文檔。
客戶協作重于合同談判。
隨時應對變化重于循分守紀。
其中位于右邊的內容固然也有其價值,但是左邊的內容最為重要
靈敏開發原則
宣言中還包括以下原則:
對我們而言,最重要的是通過盡早和不斷交付有價值的軟件知足客戶需要。
我們歡迎需求的變化,即使在開發后期。靈敏過程能夠駕馭變化,保持客戶的競爭上風。
常常交付可以工作的軟件,從幾禮拜到幾個月,時間標準越短越好。
業務職員和開發者應該在整個項目過程中始終朝夕在一起工作。
圍繞斗志高昂的人進行軟件開發,給開發者提供相宜的環境,知足他們的需要,并相信他們能夠完成任務。
在開發小組中最有效率也最有效果的信息傳達方式是面臨面的交談。
可以工作的軟件是進度的主要度量尺度。
靈敏過程提倡可持續開發。出資人、開發職員和用戶應該老是維持不變的節奏。
對卓越技術與良好設計的不斷追求將有助于進步靈敏性。
簡樸--盡可能減少工作量的藝術至關重要。
最好的架構、需乞降設計都源自自我組織的團隊。
每隔一定時間,團隊都要總結如何更有效率,然后相應地調整自己的行為。
對比其他的方法
靈敏方法有時候被誤以為是無計劃性和紀律性的方法,實際上更切當的說法是靈敏方法夸大適應性而非預見性。
靈敏開發適應性的方法
集中在快速適應現實的變化。當項目的需求起了變化,團隊應該迅速適應。這個團隊可能很難切當描述未來將會如何變化.
靈敏開發對比迭代方法
比擬迭代式開發兩者都夸大在較短的開發周期提交軟件,靈敏方法的周期可能更短,并且更加夸大步隊中的高度協作。
靈敏開發對比瀑布式開發
兩者沒有良多的共同點,瀑布模型式是最典型的預見性的方法,嚴格遵循預先計劃的需求、分析、設計、編碼、測試的步驟順序進行。步驟成果作為衡量進度的方法,例如需求規格,設計文檔,測試計劃和代碼審視等等。
瀑布式的主要的題目是它的嚴格分級導致的自由度降低,項目早期即作出承諾導致對后期需求的變化難以調整,代價高昂。瀑布式方法在需求不明并且在項目進行過程中可能變化的情況下基本是不可行的。
相對來講,靈敏方法則在幾周或者幾個月的時間內完成相對較小的功能,夸大的是能將盡早將盡量小的可用的功能交付使用,并在整個項目周期中持續改善和增強。
有人可能在這樣小規模的范圍內的每次迭代中使用瀑布式方法,另外的人可能將選擇各種工作并行進行,例如極限編程。
靈敏方法的合用性
在靈敏方法其獨特之處以外,他和其他的方法也有良多共同之處,好比迭代開發,關注互動溝通,減少中介過程的無謂資源消耗。通??梢栽谝韵路矫婧饬快`敏方法的合用性:從產品角度看,靈敏方法合用于需求萌動并且快速改變的情況,如系統有比較高的樞紐性、可靠性、安全性方面的要求,則可能不完全適合;從組織結構的角度看,組織結構的文化、職員、溝通澤決定了靈敏方法是否合用。
靈敏開發跟這些相聯系關系的樞紐成功因素有:
組織文化必需支持談判
職員彼此信任
人少但是精干
開發職員所作決定得到認可
環境舉措措施知足成員間快速溝通之需要
最重要的因素恐怕是項目的規模。規模增長,面臨面的溝通就愈加難題,因此靈敏方法適更用于較小的步隊,20、40人或者更少。大規模的靈敏軟件開發尚處于積極研究的領域。
另外的題目是項目初期的大量假定或者快速收集需求可能導致項目走入誤區,特別是客戶對其自身需要毫無概念的情況下。與之類似,人之天性很輕易造成某個人成為主導并將項目目標和設計引入錯誤方向的境況。開發者常常能把不恰當的方案授予客戶,并且直到最后發現題目前都能獲得客戶認同。固然理論上快速交互的過程可以限制這些錯誤的發生,但條件是有效的負反饋,否則錯誤會迅速膨脹。
敏捷軟件開發方法列表
目前列入靈敏方法的有:
1.軟件開發節奏,Software Development Rhythms
2.靈敏數據庫技術
3.AD/Agile Database Techniques
4.靈敏建模,AM/Agile Modeling
5.自適應軟件開發,ASD/Adaptive Software Development
6.水晶方法,Crystal
7.特性驅動開發,FDD/Feature Driven Development
8.動態系統開發方法,DSDM/Dynamic Systems Development Method
9.精益軟件開發,Lean Software Development
Scrum
10.測試驅動開發,TDD/Test-Driven Development
XBreed
極限編程,en:XP/en:Extreme Programming