1991年秋,在美國勒海大學(xué)亞科卡學(xué)院的一份研究報告《21世紀(jì)美國制造業(yè)的戰(zhàn)略:一個工業(yè)主導(dǎo)的觀點(diǎn)》中,首次提出了敏捷競爭的概念。
何謂敏捷(Agility)?對于企業(yè)而言,敏捷意味著企業(yè)能夠在顧客機(jī)會不斷變化、難以預(yù)測的競爭環(huán)境中贏利運(yùn)營;對于個人而言,敏捷指在企業(yè)對難以預(yù)測的顧客機(jī)會做出反應(yīng),不斷重組其人力和技術(shù)資源的過程中,個人能夠?qū)A利底線做出貢獻(xiàn),提高企業(yè)的凈收入。因此,敏捷可以看作是對變化和不確定的全面反應(yīng)。
變化和不確定,對于軟件業(yè)來說,是多么熟悉而又讓人煩惱的名詞。軟件工程自誕生以來,一直試圖通過技術(shù)和管理的手段來降低軟件項目的不確定性。在這個美好的愿景指導(dǎo)下,專家們發(fā)明了結(jié)構(gòu)化、發(fā)明了面向?qū)ο?、發(fā)明了CMM,這些新的技術(shù)和方法的確有助于“軟件危機(jī)”的解決,促進(jìn)了軟件業(yè)的發(fā)展;然而,超支、超時、低質(zhì)量的老問題并未得到根本解決。
為了對抗不確定,軟件開發(fā)越來越復(fù)雜,越來越龐大,傳統(tǒng)的重量級(Heavy Weight)方法的副作用也越來越明顯——組織臃腫、辦事低效、官僚主義...
相對于重量級方法,軟件業(yè)一直有另一種聲音在,那就是輕量級方法(Light Weight),其目標(biāo)是以較小的代價獲得重量級相當(dāng)?shù)男Ч?/span>
最負(fù)盛名的輕量級方法是XP。XP是Extreme Programming的縮寫,從字面上可以譯為極端編程。但是,XP并不僅僅是一種編程方法,也不是中文中理解的那種不可理喻的“極端”化做法。實際上,XP是一種審慎的(deliberate)、有紀(jì)律(disciplined)的軟件生產(chǎn)方法。XP(Extreme Programming)植根于上個世紀(jì)80年代后期的Smalltalk社區(qū)。90年代,Kent Beck和Ward Cunningham把他們使用Smalltalk開發(fā)軟件的項目經(jīng)驗總結(jié)和擴(kuò)展,逐步形成了一種強(qiáng)調(diào)適應(yīng)和以人為導(dǎo)向的軟件開發(fā)方法。
XP的核心是四大價值,即改善溝通(communication),尋求簡單(simplicity),獲得反饋(feedback)和富有勇氣(courage)。在此基礎(chǔ)上,XP總結(jié)出了軟件生產(chǎn)的十余條做法(practice),涉及軟件設(shè)計、測試、編碼、發(fā)布等各個環(huán)節(jié)。與其它輕量級方法相比,XP獨(dú)一無二的突出了測試的重要性,甚至將測試作為整個開發(fā)的基礎(chǔ),每個開發(fā)人員不僅要書寫軟件產(chǎn)品的代碼,同時也必須書寫相應(yīng)的測試代碼;所有這些代碼通過持續(xù)構(gòu)建和集成(Continuous Build & Integration)為下一步的開發(fā)打定了一個高度穩(wěn)定的基礎(chǔ)平臺。有了這樣的基礎(chǔ)平臺的保證,XP就可以實施軟件設(shè)計的再造(Refactoring)。XP的設(shè)計理念是,在每次迭代周期僅僅設(shè)計這次迭代所要求的產(chǎn)品功能,上次迭代周期中的設(shè)計通過Refactoring形成此次的設(shè)計。
2001年2月,在美國猶他州的一個滑雪場,17位輕量級軟件開發(fā)方法的創(chuàng)始人和專家,包括Kent Beck(Extreme Programming)、Alistair Cockburn(Crystal Methodologies)、Jim Highsmith(Adaptive Software Development)等等,共同發(fā)布了“The Manifesto for Agile Software Development”(敏捷軟件開發(fā)宣言)。這表明,在軟業(yè)經(jīng)歷了無數(shù)次的項目失敗之后,人們開始反思軟件開發(fā)的工程特性,反思計劃和控制的有效性,反思過去對于不確定性的態(tài)度和反應(yīng)。敏捷終