1. 程式人生 > >敏捷軟體開發之何為敏捷開發

敏捷軟體開發之何為敏捷開發

敏捷開發,Agile Development,就是指能夠在需求迅速變化的情況下快速開發軟體。我們接觸最多敏捷實踐方式有:極限程式設計(XP)、結對程式設計、測試驅動開發(TDD)等。

追究敏捷的歷史,就必須要提到著名的敏捷開發宣言,2001年,17位業界專家(其中包括我們非常熟悉的Martin, Martin Fowler)組成了一個敏捷聯盟,並且建立了一份敏捷聯盟宣言,宣揚了4條核心價值觀:

 

1, Individuals and interactions over processes and tools(人和互動重於過程和工具)

2,Working software over comprehensive documentation(可以工作的軟體重於易於理解的文件)

3,Customer collaboration over contract negotiation(客戶合作重於合同談判)

4,Responding to change over following a plan(響應變化重於遵照計劃)

此外,還有公開了12條敏捷軟體開發的規則。

1,Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.

儘早地、持續地交付有價值的軟體來滿足客戶的需求

2,Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage.

歡迎需求的變化,即使是專案後期的變更。敏捷過程能夠駕馭變化,為客戶帶來競爭優勢

3,Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.

經常交付可以工作的軟體,時間間隔越短越好

4,Business people and developers must work together daily throughout the project.

整個專案開發期間,業務人員與開發人員應該工作在一起

5,Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.

圍繞鬥志高昂的人構建專案,給他們提供所需的環境,滿足他們的需要,並信任他們

6,The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.

最有效的資訊傳達方式和與團隊相處的方法是面對面交流

7,Working software is the primary measure of progress.

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

8,Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.

敏捷過程提倡可持續開發。投資方、開發者和使用者應該總是保持一致的步伐

9,Continuous attention to technical excellence and good design enhances agility.

不斷追求卓越技術和良好設計有助於加強敏捷性

10,Simplicity--the art of maximizing the amount of work not done--is essential.

簡單--儘量減少工作量是非常重要的

11,The best architectures, requirements, and designs emerge from self-organizing teams.

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

12,At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.

每隔一段時間,團隊都要反思如何更有效率,並相應地調整自己的行為

從以上的4條價值觀和12條敏捷開發的規則中,我們可以得出敏捷開發更強調的是,人與人之間的互動,包括程式設計師之間,程式設計師和客戶之間的溝通,程式設計師不再是我們經常形容的程式碼工人等機械式的個體,受控於大量的規則文件和各種強大的工具。敏捷開發注重的是程式設計師的個人能力和溝通協作能力,一個具有良好溝通能力的程式設計師組成的團隊更有可能獲得成功,結對程式設計的方式就是利用兩個人的緊密協作達到1+1>2的效果。敏捷開發不在受制於龐大笨重的工具,合適的工具對成功來說是很重要的,但是過於龐大笨重的工具就和缺少工具一樣,都是不好的。專案中最常用的就是原始碼管理工具,實際使用過程中發現昂貴的工具未必能體現其價值,有些免費開源的工具已經足夠適用於專案的需求了。

傳統的軟體開發,非常注重文件的作用,文件有助於軟體的後續維護,有助於客戶對產品的理解。但是過多的文件比過少的文件更糟,文件太多就需要花費大量的時間去編寫和維護。對於需求經常變更的專案,維護龐大的文件本身就是一場噩夢。在敏捷開發中,編寫和維護一份簡短的系統和結構方面的文件已經足夠了。對於後續維護,更細緻的說明,應該體現在程式碼中,設計簡單良好、可讀性強的程式碼對程式設計師來說是比設計文件更直觀更容易理解的文件,軟體技術專家Jack Reeves曾經說過:“實際上滿足工程設計標準的唯一軟體文件,就是原始碼清單”。所以在專案中,直到迫切需要時才編制文件,按照需求開發可執行的軟體才是敏捷開發的重點。

一般的軟體專案合同中規定的都是整體的要求,但是我們知道軟體開發中有太多的不確定性,這就會帶來大量的需求變更,大的變更在專案開發過程總也是很正常的。經常有這樣的案例:客戶給我們需求,開發團隊埋頭苦幹數月後完成交付客戶,但是客戶非常不滿意,更有甚者,和客戶的理解相差太大而導致專案失敗。所以敏捷開發強調在開發過程中,保持和客戶的溝通,面對面的溝通,完成模組時,應該馬上請客戶進行驗收,這樣專案結束的時候,驗收的工作也基本完成了,極大地降低了專案失敗的風險。敏捷中,強調隨時應對變化的能力也會讓開發團隊有意識地設計和開發可擴充套件性好、可維護性好的軟體。

敏捷開發強調了程式設計師的能力,極大地發掘程式設計師個體的潛力和整體的協作來保證專案的成功,而不是靠文件、制度、工具等。

我非常推崇敏捷軟體開發模式,這樣的方式可以極大地調動程式設計師的積極性、極大地加強團隊的凝聚力。

如果你對敏捷軟體開發有興趣,請關注敏捷開發相關的各種實踐,給大家推薦一本敏捷開發的圖書,由Robert C. Marting(敏捷宣言發起者之一)編寫的經典著作:

 

如果想深入關注敏捷的動態,也請關注發起敏捷宣言的各位大師們的著作,他們是:

Kent Beck, Mike Beedle, Arie van Bennekum, Alistair Cockburn, Ward Cunningham, Martin Fowler, James Grenning, Jim Highsmith, Andrew Hunt, Ron Jeffries, Jon Kern, Brian Marick, Robert C. Martin, Steve Mellor, Ken Schwaber, Jeff Sutherland, Dave Thomas。