天天看點

靈活開發

靈活軟體開發又稱靈活開發,是一種從1990年×××始逐漸引起廣泛關注的一些新型軟體開發方法,是一種應對快速變化的需求的一種軟體開發能力。它們的具體名稱、理念、過程、術語都不盡相同,相對于“非靈活”,更強調程式員團隊與業務專家之間的緊密協作、面對面的溝通(認為比書面的文檔更有效)、頻繁傳遞新的軟體版本、緊湊而自我組織型的團隊、能夠很好地适應需求變化的代碼編寫和團隊組織方法,也更注重做為軟體開發中人的作用。

價值觀

借着親自并協助他人進行軟體開發,我們正緻力于發掘更優良的軟體開發方法透過這樣的努力,我們已建立以下價值觀:

人和互動 重于 過程和工具。

可以工作的軟體 重于求全責備的文檔。

客戶協作重于合同談判。

随時應對變化重于循規蹈矩。

其中位于右邊的内容雖然也有其價值,但是左邊的内容最為重要。

對我們而言,最重要的是通過盡早和不斷傳遞有價值的軟體滿足客戶需要。

我們歡迎需求的變化,即使在開發後期。靈活過程能夠駕馭變化,保持客戶的競争優勢。

經常傳遞可以工作的軟體,從幾星期到幾個月,時間尺度越短越好。

業務人員和開發者應該在整個項目過程中始終朝夕在一起工作。

圍繞鬥志高昂的人進行軟體開發,給開發者提供适宜的環境,滿足他們的需要,并相信他們能夠完成任務。

在開發小組中最有效率也最有效果的資訊傳達方式是面對面的交談。

可以工作的軟體是進度的主要度量标準。

靈活過程提倡可持續開發。出資人、開發人員和使用者應該總是維持不變的節奏。

對卓越技術與良好設計的不斷追求将有助于提高靈活性。

簡單——盡可能減少工作量的藝術至關重要。

最好的架構、需求和設計都源自自我組織的團隊。

每隔一定時間,團隊都要總結如何更有效率,然後相應地調整自己的行為。

過短的疊代可能會沒辦法增加足夠的功能,導緻在到達最後的疊代前專案産生明顯的延遲。靈活強調即時通訊(最好是面對面),但在大型多團隊分布式系統開發的情況下,如何達成這點反而是個問題。靈活方法過程中産生很少的已撰寫檔案,因而需要大量的專案後檔案。

對比其他的方法靈活方法有時候被誤認為是無計劃性和紀律性的方法,實際上更确切的說法是靈活方法強調适應性而非預見性。

适應性的方法集中在快速适應現實的變化。當項目的需求起了變化,團隊應該迅速适應。這個團隊可能很難确切描述未來将會如何變化.

相比疊代式開發兩者都強調在較短的開發周期送出軟體,靈活方法的周期可能更短,并且更加強調隊伍中的高度協作。

對比瀑布式開發兩者沒有很多的共同點,瀑布模型式是最典型的預見性的方法,嚴格遵循預先計劃的需求、分析、設計、編碼、測試的步驟順序進行。步驟成果作為衡量進度的方法,例如需求規格,設計文檔,測試計劃和代碼審閱等等。

瀑布式的主要的問題是它的嚴格分級導緻的自由度降低,項目早期即作出承諾導緻對後期需求的變化難以調整,代價高昂。瀑布式方法在需求不明并且在項目進行過程中可能變化的情況下基本是不可行的。

相對來講,靈活方法則在幾周或者幾個月的時間内完成相對較小的功能,強調的是能将盡早将盡量小的可用的功能傳遞使用,并在整個項目周期中持續改善和增強。

有人可能在這樣小規模的範圍内的每次疊代中使用瀑布式方法,另外的人可能将選擇各種工作并行進行,例如極限程式設計。

靈活方法的适用性

靈活方法和其他的方法也有很多共同之處,比如疊×××發,關注互動溝通,減少中介過程的無謂資源消耗。通常可以在以下方面衡量靈活方法的适用性:從産品角度看,靈活方法适用于需求萌動并且快速改變的情況,如系統有比較高的關鍵性、可靠性、安全性方面的要求,則可能不完全适合;從組織結構的角度看,組織結構的文化、人員、溝通則決定了靈活方法是否适用。跟這些相關聯的關鍵成功因素有:

組織文化必須支援談判

人員彼此信任

人少但是精幹

開發人員所作決定得到認可

環境設施滿足成員間快速溝通之需要

最重要的因素恐怕是項目的規模。規模增長,面對面的溝通就愈加困難,是以靈活方法更适用于較小的隊伍,20、40人或者更少。大規模的靈活軟體開發尚處于積極研究的領域。

另外的問題是項目初期的大量假定或者快速收集需求可能導緻項目走入誤區,特别是客戶對其自身需要毫無概念的情況下。與之類似,人之天性很容易造成某個人成為主導并将項目目标和設計引入錯誤方向的境況。開發者經常能把不恰當的方案授予客戶,并且直到最後發現問題前都能獲得客戶認同。雖然理論上快速互動的過程可以限制這些錯誤的發生,但前提是有效的負回報,否則錯誤會迅速膨脹。

目前列入靈活方法的有:

軟體開發節奏,Software Development Rhythms

靈活資料庫技術,AD/Agile Database Techniques

靈活模組化,AM/Agile Modeling

自适應軟體開發,ASD/Adaptive Software Development

水晶方法,Crystal

特性驅動開發,FDD/Feature Driven Development

動态系統開發方法,DSDM/Dynamic Systems Development Method

精益軟體開發,Lean Software Development

AUP(Agile Unified Process)

Scrum

XBreed

極限程式設計,XP Extreme Programming

探索性測試

靈活技術

測試驅動開發,TDD/Test-Driven Development

行為驅動開發,BDD/Bahavior-Driven Development

http://zh.wikipedia.org/wiki/%E6%95%8F%E6%8D%B7%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91

繼續閱讀