XP實(shí)際上是一種經(jīng)歷過(guò)很多實(shí)踐考驗的一種軟件開(kāi)發(fā)的方法,它誕生了大概有5 年,它已經(jīng)被成功的應用在許多大型的公司,如:Bayeris che Landesbank,Credit Swis s Life,DaimlerChrysler,First Union National Bank Ford Motor Company and UBS.XP 的成功得益于它對客戶(hù)滿(mǎn)意度的特別強調,XP 是以開(kāi)發(fā)符合客戶(hù)需要的軟件為目標而產(chǎn)生的一種方法論,XP 使開(kāi)發(fā)者能夠更有效的響應客戶(hù)的需求變化,哪怕在軟件生命周期的后期。
同時(shí),XP 也很強調團隊合作。團隊包括:項目經(jīng)理,客戶(hù),開(kāi)發(fā)者。他們團結在一起來(lái)保證高質(zhì)量的軟件。XP 其實(shí)是一種保證成功的團隊開(kāi)發(fā)的簡(jiǎn)單而有效的方法。
XP 強調四種價(jià)值:交流,簡(jiǎn)易,回饋,勇氣。XP 程序員之間緊密的相互交流,XP 程序員也和客戶(hù)緊密的交流。他們總是保持他們的設計簡(jiǎn)單明了。項目一開(kāi)始,XP 就強調通過(guò)對軟件的不斷測試來(lái)獲得反饋,程序員盡可能早的把軟件交給客戶(hù),并實(shí)現客戶(hù)對軟件需求提出的變化,有了這些基礎,XP 程序員就可以自信的面對需求和軟件技術(shù)的變化。
XP 是與眾不同的,它有點(diǎn)象快步的舞蹈。XP 開(kāi)發(fā)過(guò)程包括許多的小卡片,獨立的看,這些小卡片沒(méi)有什么意義,但是當它們組合在一起,一幅完整的美麗的圖片就可以看見(jiàn),XP方法有別于傳統軟件開(kāi)發(fā),它是軟件開(kāi)發(fā)的一種新的重要的發(fā)展。它改變了我們開(kāi)發(fā)程序的傳統思維方式。下面我們將介紹它帶給我們那些改變。
XP屬于輕量開(kāi)發(fā)方法中較有影響的一種方法。輕量開(kāi)發(fā)方法是相對于傳統的重量開(kāi)發(fā)方法而言。簡(jiǎn)單地理解,“量”的輕重是指用于軟件過(guò)程管理和控制的、除程序量以外的“文檔量”的多少。XP等輕量開(kāi)發(fā)方法認識到,在當前很多情況下,按傳統觀(guān)念建立的大量文檔,一方面需要消耗大量開(kāi)發(fā)資源,同時(shí)卻已失去幫助“預見(jiàn)、管理、決策和控制的依據”的作用。因此必須重新審視開(kāi)發(fā)環(huán)節,去除臃腫累贅,輕裝上陣。
一、XP的核心思想
從長(cháng)遠看,早期發(fā)現錯誤以及降低復雜度可以節約成本。極限編程強調我們將任務(wù)/系統細分為可以在較短周期解決的一個(gè)個(gè)子任務(wù)/模塊,并且強調測試、代碼質(zhì)量和及早發(fā)現問(wèn)題。通常,通過(guò)一個(gè)個(gè)短小的迭代周期,我們就可以獲得一個(gè)個(gè)階段性的進(jìn)展,并且可以及時(shí)形成一個(gè)版本供用戶(hù)參考,以便及時(shí)對用戶(hù)可能的需求變更作出響應。
二、XP的十二種方法
規劃策略(The Planning Game);
結對編程(Pair programming)
測試(Testing)
重構(Refractoring)
簡(jiǎn)單設計(Simple Design)
代碼集體所有權(Collective Code Ownership)
持續集成(Continuous Integration)
現場(chǎng)客戶(hù)(On-site Customer)
小型發(fā)布(Small Release)
每周40小時(shí)工作制(40-hour Week)
編碼規范(Code Standards)
系統隱喻(System Metaphor)
三、XP的四個(gè)核心價(jià)值
極限編程中有四個(gè)核心價(jià)值是我們在開(kāi)發(fā)中必須注意的:溝通(Communication)、簡(jiǎn)單(Simplicity)、反饋(Feedback)和勇氣(Courage)。
XP用“溝通、簡(jiǎn)單、反饋和勇氣”來(lái)減輕開(kāi)發(fā)壓力和包袱;無(wú)論是術(shù)語(yǔ)命名、專(zhuān)著(zhù)敘述內容和方式、過(guò)程要求,都可以從中感受到輕松愉快和主動(dòng)奮發(fā)的態(tài)度和氣氛。這是一種幫助理解和更容易激發(fā)人的潛力的手段。XP用自己的實(shí)踐,在一定范圍內成功地打破了軟件工程“必須重量”才能成功的傳統觀(guān)念。
XP精神可以啟發(fā)我們如何學(xué)習和對待快速變化、多樣的開(kāi)發(fā)技術(shù)。成功學(xué)習XP的關(guān)鍵,是用“溝通、簡(jiǎn)單、反饋和勇氣”的態(tài)度來(lái)對待XP;輕松愉快地來(lái)感受XP的實(shí)踐思想;自己認真實(shí)踐后,通過(guò)對真實(shí)反饋的分析,來(lái)決定XP對自己的價(jià)值;有勇氣接受它,或改進(jìn)它。
四、XP 帶給我們的變化
通過(guò)軟件工程設計的簡(jiǎn)單而優(yōu)美的軟件并不比那些設計復雜而難以維護的軟件有價(jià)值。這是真的嗎?XP認為事實(shí)并非如此。
一個(gè)典型的項目花在人力上的金錢(qián)是花在硬件上的時(shí)間的20 倍,這意味著(zhù)一個(gè)項目每年要花200 萬(wàn)美元在程序員身上,而僅僅花10 萬(wàn)美元在電腦設備上。很多聰明的程序員說(shuō):“我們如此聰明,發(fā)現一種方法可以節省20%的硬件開(kāi)銷(xiāo)”,然后他們使得源程序大而且難懂和難以維護,他們會(huì )說(shuō):“但是我們節省了20%或者2 萬(wàn)美元每年,很大的節省”。反之,如果我們寫(xiě)我們的程序簡(jiǎn)單而且容易擴展,我們將至少節省10%的人力開(kāi)銷(xiāo),一筆更大的節省,這是你客戶(hù)一定會(huì )注意到的一些事情。
另外一個(gè)對客戶(hù)來(lái)說(shuō)很重要的問(wèn)題就是程序的BUGS 。XP 不只是強調測試,而且要求正確的測試。測試必須是能自動(dòng)進(jìn)行的,以便為程序和客戶(hù)提供一個(gè)安全的環(huán)境。在編碼的所有階段,我們不斷增加測試用例。當找到bug 時(shí),我們就添加新的測試,一個(gè)緊密的安全網(wǎng)就這樣產(chǎn)生了。同一個(gè)BUG 不出現兩次,這些一定會(huì )引起用戶(hù)的注意。你的客戶(hù)必須注意的另外一件事情:XP 開(kāi)發(fā)者擁抱需求變化。XP 使我們能夠接受需求的變化。
一般情況下,客戶(hù)只有在系統被開(kāi)發(fā)完成以后能真正去體會(huì )它。XP 卻不一樣,它通過(guò)加強客戶(hù)的反饋來(lái)縮短開(kāi)發(fā)的周期,同時(shí)獲得足夠的時(shí)間來(lái)改變功能和獲得用戶(hù)的認同。在XP 中,你的客戶(hù)應該明確的知道這一點(diǎn)。
XP開(kāi)發(fā)過(guò)程的大多的革命是在軟件開(kāi)發(fā)的方法上,代碼質(zhì)量的重要程度超出人們一般所認為的。僅僅因為我們的客戶(hù)不能明白我們的源代碼并不意味著(zhù)我們可以不努力去管理代碼的質(zhì)量。
五、我們什么時(shí)候用XP
XP方法的產(chǎn)生是因為難以管理的需求變化,從一開(kāi)始你的客戶(hù)并不是很完全的知道他們要的系統是怎么樣的,你可能面對的系統的功能一個(gè)月變化多次。在大多數軟件開(kāi)發(fā)環(huán)境中不斷變化的需求是唯一的不變,這個(gè)時(shí)候應用XP 就可以取得別的方法不可能取得的成功。XP 方法的建立同時(shí)也是為了解決軟件開(kāi)發(fā)項目中的風(fēng)險問(wèn)題。假如你的客戶(hù)在特定的時(shí)間內,需要一個(gè)相當難開(kāi)發(fā)的系統,而且對于你的項目組來(lái)說(shuō),這個(gè)系統是一個(gè)新的挑戰(從來(lái)沒(méi)有做過(guò)),那風(fēng)險就更大了,如果這個(gè)系統對于整個(gè)軟件行業(yè)來(lái)說(shuō)都是新的挑戰,那么它的風(fēng)險就更大了,采用XP 將可以減少風(fēng)險,增加成功的可能。
XP方法是為小團體開(kāi)發(fā)建立的,在2-10 個(gè)人之間。假如你的團體恰好合適,你就不需要用其他的軟件工程方法了,就用XP ,但是要注意你不能將XP 方法應用于大團體的開(kāi)發(fā)項目中。我們應該注意,在需求一慣呈動(dòng)態(tài)變化或者高具有高風(fēng)險的項目中,你就會(huì )發(fā)現XP 方法在小團體的開(kāi)發(fā)中的作用要遠遠高于在大團體的開(kāi)發(fā)。
XP方法需要一個(gè)擴展的開(kāi)發(fā)團體,XP 團體不僅僅包括開(kāi)發(fā)者,經(jīng)理、客戶(hù)也是其中的一員,所有的工作一環(huán)扣一環(huán),問(wèn)問(wèn)題,商討方法和日程,增加功能測試,這些問(wèn)題的解決不僅僅涉及到軟件的開(kāi)發(fā)者。
另一個(gè)需要是可測試性,你必須能增加自動(dòng)的單元測試和功能測試,然而在你進(jìn)行這個(gè)需求的時(shí)候,你會(huì )發(fā)現有許多的問(wèn)題很難測試,這需要充分發(fā)揮你的測試的經(jīng)驗和智慧,而且你有時(shí)還要改變你的設計以便它可以更容易的進(jìn)行測試。記?。耗莾河行枨?,那兒就應該有測試的方法。
在XP方法的好處的清單上,最后一條是生產(chǎn)力。在同樣的合作環(huán)境下,XP 項目都一致的表現出比使用其他方法高的多的生產(chǎn)力。但這從來(lái)不是XP 方法學(xué)的真正目標。XP 真實(shí)追求的目標是:在規定的時(shí)間生產(chǎn)出滿(mǎn)足客戶(hù)需要的軟件。假如對于你的開(kāi)發(fā)來(lái)說(shuō),這是很重要的方面,你就可以選擇XP 了。
六、極限編程的有效實(shí)踐
1、完整團隊
XP項目的所有參與者(開(kāi)發(fā)人員、客戶(hù)、測試人員等)一起工作在一個(gè)開(kāi)放的場(chǎng)所中,他們是同一個(gè)團隊的成員。這個(gè)場(chǎng)所的墻壁上隨意懸掛著(zhù)大幅的、顯著(zhù)的圖表以及其他一些顯示他們進(jìn)度的東西。
2、計劃游戲
計劃是持續的、循序漸進(jìn)的。每2周,開(kāi)發(fā)人員就為下2周估算候選特性的成本,而客戶(hù)則根據成本和商務(wù)價(jià)值來(lái)選擇要實(shí)現的特性。
3、客戶(hù)測試
作為選擇每個(gè)所期望的特性的一部分,客戶(hù)可以根據腳本語(yǔ)言來(lái)定義出自動(dòng)驗收測試來(lái)表明該特性可以工作。
4、簡(jiǎn)單設計
團隊保持設計恰好和當前的系統功能相匹配。它通過(guò)了所有的測試,不包含任何重復,表達出了編寫(xiě)者想表達的所有東西,并且包含盡可能少的代碼。
5、結對編程
所有的產(chǎn)品軟件都是由兩個(gè)程序員、并排坐在一起在同一臺機器上構建的。
編寫(xiě)單元測試是一個(gè)驗證行為,更是一個(gè)設計行為。同樣,它更是一種編寫(xiě)文檔的行為。編寫(xiě)單元測試避免了相當數量的反饋循環(huán),尤其是功功能能驗證方面的反饋循環(huán)。程序員以非常短的循環(huán)周期工作,他們先增加一個(gè)失敗的測試,然后使之通過(guò)。
7、改進(jìn)設計
隨時(shí)利用重構方法改進(jìn)已經(jīng)腐化的代碼,保持代碼盡可能的干凈、具有表達力。
8、持續集成
團隊總是使系統完整地被集成。一個(gè)人拆入(Check in)后,其它所有人責任代碼集成。
9、集體代碼所有權
任何結對的程序員都可以在任何時(shí)候改進(jìn)任何代碼。沒(méi)有程序員對任何一個(gè)特定的模塊或技術(shù)單獨負責,每個(gè)人都可以參與任何其它方面的開(kāi)發(fā)。
10、編碼標準
系統中所有的代碼看起來(lái)就好像是被單獨一人編寫(xiě)的。
11、隱喻
將整個(gè)系統聯(lián)系在一起的全局視圖;它是系統的未來(lái)影像,是它使得所有單獨模塊的位置和外觀(guān)變得明顯直觀(guān)。如果模塊的外觀(guān)與整個(gè)隱喻不符,那么你就知道該模塊是錯誤的。
12、可持續的速度
團隊只有持久才有獲勝的希望。他們以能夠長(cháng)期維持的速度努力工作,他們保存精力,他們把項目看作是馬拉松長(cháng)跑,而不是全速短跑。
聯(lián)系客服