極限編程
1.什么是極限編程
極限編程是由Kent Beck在1996年提出的。Kent仔細地觀察和分析了各種簡化軟件開發(fā)的前提條件、可能性以及面臨的困難。1996年3月,Kent提出了新的軟件開發(fā)觀念——XP。
XP是一種輕量級的、靈巧的軟件開發(fā)方法。同時,該方法具有嚴謹和周密的特征。XP的基礎(chǔ)和價值觀是交流、樸素、反饋和勇氣,即任何一個軟件項目都可以從四個方面入手進行改善:加強交流、從簡單做起、尋求反饋和勇于實事求是。XP是一種近似螺旋式的開發(fā)方法,它將復(fù)雜的開發(fā)過程分解為一個個相對比較簡單的小周期,通過積極的交流、反饋以及其他一系列的方法,開發(fā)人員和客戶可以非常清楚開發(fā)進度、變化、待解決的問題和潛在的困難等,并根據(jù)實際情況及時地調(diào)整開發(fā)過程。
“Extreme(極限)”是指,對比傳統(tǒng)的項目開發(fā)方式,XP強調(diào)把它列出的每個方法和思想做到極限、做到最好。XP所不提倡的,則一概忽略(如開發(fā)前期的整體設(shè)計等)。一個嚴格實施XP的項目,其開發(fā)過程應(yīng)該是平穩(wěn)的、高效的和快速的,能夠做到一周40小時工作制而不拖延項目進度。
2.極限編程的要求
極限編程要求有極限的工作環(huán)境、極限的需求、極限的設(shè)計、極限的編程和極限的測試。
1.極限的工作環(huán)境
為了在軟件開發(fā)過程中最大程度地實現(xiàn)和滿足客戶和開發(fā)人員的基本權(quán)利和義務(wù),XP要求把工作環(huán)境也做得最好。每個參加項目開發(fā)的人都將擔任~個角色(項目經(jīng)理、項目監(jiān)督人等)并履行相應(yīng)的權(quán)利和義務(wù)。所有的人都在同一個開放的開發(fā)環(huán)境中工作,每周40小時,不提倡加班。
2.極限的需求
客戶應(yīng)該是項目開發(fā)隊伍中的一員,而不是和開發(fā)人員分開的。因為從項目的計劃到最后驗收整個過程客戶一直起著很重要的作用。開發(fā)人員和客戶一起,把各種需求分割為一個個小的需求模塊,這些模塊又會根據(jù)實際情況被組合在一起或者被再次分解成更小的模塊。上述需求模塊都被記錄在一些小卡片(Story Card)上,之后將這些卡片分別分配給程序員們,并在一段時間內(nèi)(通常不超過3個星期)實現(xiàn)。客戶根據(jù)每個模塊的商業(yè)價值進行排序,確定開發(fā)的優(yōu)先級。開發(fā)人員要做的是確定每個需求模塊的開發(fā)風險。風險高的(通常是因為缺乏類似的經(jīng)驗)需求模塊將被優(yōu)先研究、探索和開發(fā)。經(jīng)過開發(fā)人員和客戶分別從不同的角度評估每個模塊后,它們被安排在不同的開發(fā)周期里,客戶將得到一個盡可能準確的開發(fā)計劃。
3.極限設(shè)計
從具體開發(fā)過程的角度來看,XP內(nèi)部的過程是多個基于測試驅(qū)動的開發(fā)(Test Driven Development)周期。諸如計劃和設(shè)計等外層的過程都是圍繞這些測試展開的,每個開發(fā)周期都有很多相應(yīng)的單元測試(Unit Test)。通過這種方式,客戶和開發(fā)人員都很容易檢驗所開發(fā)的軟件原型是否滿足了用戶的需求。XP提倡簡單的設(shè)計(Simple Design),即針對每個簡單的需求用最簡單的方式進行設(shè)計和后續(xù)的編程工作。這樣寫出來的程序可以通過所有相關(guān)的單元測試。
XP強調(diào)拋棄那種一攬子詳細設(shè)計方式(Big Design Up Front),因為在這種設(shè)計中有很多內(nèi)容是現(xiàn)在或近期所不需要的。
XP還大力提倡設(shè)計復(fù)核(Review)、代碼復(fù)核、重整和優(yōu)化(Re{ectory)。所有的這些過程的目標,歸根到底還是對設(shè)計的優(yōu)化。在這些過程中不斷運行單元測試和功能測試,可以保證經(jīng)過優(yōu)化后的系統(tǒng)仍然符合用戶的需求。
4.極限編程
編程是程序員使用某種程序設(shè)計語言編寫程序代碼,并最終得到能夠解決某個問題的程序的過程。XP極其重視編程,提倡配對編程(Pair Programming),即兩個人一起寫同一段程序,而且代碼所有權(quán)是歸于整個開發(fā)隊伍(Collective Code Ownership)。程序員在寫程序和優(yōu)化程序的時候,都要嚴格遵守編程規(guī)范。任何人都可以修改其他人寫的程序,修改后要確定新程序能通過單元測試。
5.極限測試
測試在XP中是很重要的。XP提倡開發(fā)人員經(jīng)常把開發(fā)好的模塊整合到一起(Continuous Integration),并且在每次整合后都進行單元測試。對代碼進行的任何復(fù)核和修改,也都要進行單元測試。發(fā)現(xiàn)了錯誤,就要增加相應(yīng)的測試,因此XP方法不需要錯誤數(shù)據(jù)庫。
3.極限編程要求的測試規(guī)則
除了單元測試之外,XP還要進行整合測試、功能測試、負荷測試和系統(tǒng)測試等。這些測試是XP開發(fā)過程中最重要的活動之一,與之相對應(yīng)的測試文檔也是最終交付給用戶的內(nèi)容之一。
根據(jù)極限編程的價值觀,可以總結(jié)出使用該方法進行項目開發(fā)的時候應(yīng)該遵循的規(guī)則。
1、完整團隊
XP項目的所有參與者(開發(fā)人員、客戶和測試人員等)一起工作在一個開放的場所中,他們是同一個團隊的成員。這個場所的墻壁上隨意懸掛著大幅的、顯著的圖表以及其他一些顯示他們進度的東西。
2、計劃
在XP項目中,計劃是持續(xù)的、循序漸進的。XP項目組只為下兩周的開發(fā)活動估算開發(fā)成本,而客戶則根據(jù)成本和商業(yè)價值來選擇要實現(xiàn)的功能模塊。
3、客戶測試
客戶測試已經(jīng)開發(fā)好的模塊是否符合客戶的需求。
4、簡單設(shè)計
XP項目團隊應(yīng)當保持設(shè)計方案恰好和當前的系統(tǒng)需求相匹配。它通過了所有的測試,不包含任何重復(fù),表達出了編寫者想表達的所有東西,并且包含盡可能少的代碼。
5、配對編程
所有的產(chǎn)品軟件都是由兩個程序員并排坐在一起共同開發(fā)的。
編寫單元測試是一個驗證行為,更是~個設(shè)計行為。同樣,它也是一種編寫文檔的行為。編寫單元測試避免了相當數(shù)量的反饋循環(huán),尤其是功能驗證方面的反饋循環(huán)。
7、改進設(shè)計
隨時利用重構(gòu)方法改進已經(jīng)過時的代碼,保持代碼盡可能的干凈、具有表達力。
8、持續(xù)集成
XP團隊總是對現(xiàn)有模塊進行集成。
9、代碼所有權(quán)歸集體所有
任何配對的程序員都可以在任何時候改進任何代碼。沒有程序員對任何一個特定的模塊或技術(shù)單獨負責,每個人都可以參與任何其他方面的開發(fā)。
10、編碼標準
制定編碼標準,并且整個團隊都必須遵守該編碼標準。使系統(tǒng)中所有的代碼看起來就好像是一個人編寫的。
11、可持續(xù)的速度
XP團隊成員以能夠長期維持的速度努力工作,保存精力,把項目看做是馬拉松長跑,而不是全速短跑。