變化和不確定,對于軟件業來說,是多么熟悉而又讓人煩惱的名詞。軟件工程自誕生以來,一直試圖通過技術和管理的手段來降低軟件項目的不確定性。在這個美好的愿景指導下,專家們發明了結構化、發明了面向對象、發明了CMM,這些新的技術和方法的確有助于“軟件危機”的解決,促進了軟件業的發展;然而,超支、超時、低質量的老問題并未得到根本解決。為了對抗不確定,軟件開發越來越復雜,越來越龐大,傳統的重量級(Heavy Weight)方法的副作用也越來越明顯——組織臃腫、辦事低效、官僚主義...
相對于重量級方法,軟件業一直有另一種聲音在,那就是輕量級方法(Light Weight),其目標是以較小的代價獲得重量級相當的效果。
最負盛名的輕量級方法是XP。XP是Extreme Programming的縮寫,從字面上可以譯為極端編程。但是,XP并不僅僅是一種編程方法,也不是中文中理解的那種不可理喻的“極端”化做法。實際上,XP是一種審慎的(deliberate)、有紀律(disciplined)的軟件生產方法。XP(Extreme Programming)植根于上個世紀80年代后期的Smalltalk社區。90年代,Kent Beck和Ward Cunningham把他們使用Smalltalk開發軟件的項目經驗總結和擴展,逐步形成了一種強調適應和以人為導向的軟件開發方法。
XP的核心是四大價值,即改善溝通(communication),尋求簡單(simplicity),獲得反饋(feedback)和富有勇氣(courage)。在此基礎上,XP總結出了軟件生產的十余條做法(practice),涉及軟件設計、測試、編碼、發布等各個環節。與其它輕量級方法相比,XP獨一無二的突出了測試的重要性,甚至將測試作為整個開發的基礎,每個開發人員不僅要書寫軟件產品的代碼,同時也必須書寫相應的測試代碼;所有這些代碼通過持續構建和集成(Continuous Build & Integration)為下一步的開發打定了一個高度穩定的基礎平臺。有了這樣的基礎平臺的保證,XP就可以實施軟件設計的再造(Refactoring)。XP的設計理念是,在每次迭代周期僅僅設計這次迭代所要求的產品功能,上次迭代周期中的設計通過Refactoring形成此次的設計。
2001年2月,在美國猶他州的一個滑雪場,17位輕量級軟件開發方法的創始人和專家,包括Kent Beck(Extreme Programming)、Alistair Cockburn(Crystal Methodologies)、Jim Highsmith(Adaptive Software Development)等等,共同發布了“The Manifesto for Agile Software Development”(敏捷軟件開發宣言)。這表明,在軟業經歷了無數次的項目失敗之后,人們開始反思軟件開發的工程特性,反思計劃和控制的有效性,反思過去對于不確定性的態度和反應。敏捷終于為這個行業,以及這個行業中的一些人所認識、理解和推崇。
與會者之一Martine Fowler在其后來的文章“The New Methodology”中這樣解釋重量級、輕量級和敏捷:
輕量級與重量級的差異來自于人們對兩種方法的文檔數量的直觀感受,即輕量級方法較少產生和依賴于龐大的文檔,但這只是一個表面現象;在諸多的輕量級方法之間存在著很多相通的地方,敏捷更恰當的表達了這些輕量級方法的最根本之處。首先,敏捷強調適應,而非預測。重量級方法花費大量的人力物力,試圖制訂詳細的計劃來指導長期的工作,而一旦情況變化,那么計劃就不再適用。因此本質上重量級方法是抵制變化的,而敏捷方法則強調適應變化。其次,敏捷方法以人為中心,而非以流程為中心(即以事為中心)。敏捷方法強調軟件開發應順乎本心(work with people's nature ),軟件開發應帶來樂趣。
敏捷流程(Agile Process)汲取眾多輕量級方法的“精華”,更加強調對變化的適應和對人性的關注。除了上面介紹的XP以外,其他知名的敏捷流程包括:
1. Crystal
Cystal事實上不是一種開發方法,而是一系列的方法。因為Crystal的發明人Alistair Cockburn認為,不同類型的項目需要采用不同的方法。Alistair Cockburn從兩個維度來劃分項目,一是項目規模,以人數計算;二是產品發生錯誤的后果,以嚴重性計算。
Crystal方法集也形成于90年代,當時,Cockburn接受了IBM的任務去寫一些關于開發方法的東西。相對而言,Crystal的個人色彩要淡些,因為它不僅來源于Cockburn的個人經驗,而且也來源于Cockburn走訪的很多不同的項目;而Cockburn本人也較為思想開放,樂于接受“異見”。
文章來源于領測軟件測試網 http://www.kjueaiud.com/