目前國內(nèi)對于XP方面的研究和應(yīng)用此起彼伏,各種關(guān)于XP的書籍爭相出版,對于以XP為代表的"敏捷軟件工程"方法的爭論也在網(wǎng)絡(luò)上隨處可見。之所以出現(xiàn)這樣的情況,是因為國內(nèi)的用戶在軟件項目的實施過程中遇到了很多問題,例如項目的交付時間推遲、用戶需求變更頻繁等,我們的軟件工程師迫切的希望能夠找到解決問題的"銀彈"。對于高度動態(tài)、通過非常短的迭代周期來應(yīng)對需求變化的極限編程方法論來講,確實能夠從一定程度上解決問題。但是,對于國內(nèi)的軟件開發(fā)項目來說,XP并非"銀彈",它的一些最佳實踐不是都適合國內(nèi)的情況。本文結(jié)合一個具體的軟件開發(fā)項目,討論一下XP 在國內(nèi)的應(yīng)用情況。
XP簡介
傳統(tǒng)軟件開發(fā)方法
在最近的數(shù)十年中,很多企業(yè)的CEO們都面臨著增加盈利的壓力,因此,他們采用各種方法,例如裁員、業(yè)務(wù)外包、BPR、ERP、CRM等等。以上種種,使得世界500強的大部分企業(yè)在20世紀(jì)90年代的后期一直保持者二位數(shù)的利潤增長。但是很多跡象表明,在傳統(tǒng)的企業(yè)業(yè)務(wù)模型中已經(jīng)沒有多少可供削減開支的地方,因此,需要進(jìn)行徹底的改革。在軟件開發(fā)領(lǐng)域,情況更是如此。
自上個世紀(jì)60年代以來,軟件工程思想逐漸形成與發(fā)展,也出現(xiàn)了很多軟件開發(fā)模型與方法,例如瀑布模型、快速原型、增量模型和螺旋模型等[1]。而在90年代以后,卡耐基梅隆軟件學(xué)院推出的CMM,更是對于軟件開發(fā)的過程管理,提出了確切的衡量指標(biāo)。但是,最近的研究表明,有50%的項目會拖延交付,有30%以上的項目會超出預(yù)算,軟件開發(fā)領(lǐng)域的項目情況比軟件工程剛剛提出的時候相比,只是有很小的提高。詳細(xì)的數(shù)據(jù)[4](數(shù)據(jù)來自美國GSM研究機構(gòu), Michael Mah)如下表所示:
傳統(tǒng)的軟件開發(fā)過程,以RUP為代表,強調(diào)項目的可控性,是一個用例驅(qū)動的基于UML和構(gòu)件式架構(gòu)的迭代增量式開發(fā)過程。RUP定義了初始、細(xì)化、實現(xiàn)和部署4個階段,分別對應(yīng)著關(guān)鍵里程碑的劃分。RUP對于角色、流程、工件和活動的要求是靈活、可配置的,所以它廣泛的適用于各種類型的項目。但是,在RUP的各個流程碑,都規(guī)定了要交付的成果,尤其是對于需求的變更以及文檔,它強調(diào)及時的更新與同步。以上這些都決定了RUP是一種重量級的軟件開發(fā)方法,比較適合大中型的項目和產(chǎn)品開發(fā)。
XP以及其核心價值
最近,出現(xiàn)了很多輕量型的軟件開發(fā)方法,例如水晶模型、適應(yīng)模型以及極限編程等。它們都強調(diào),軟件開發(fā)是人與人合作進(jìn)行的過程,因此成功的軟件開發(fā)過程應(yīng)該充分利用人的優(yōu)勢,而弱化人的缺點,突出了人在軟件開發(fā)過程中的作用[2]。
Kent Beck在XP的開篇之作《Extreme Programming Explained - Embrace Change》中提出了極限編程這一創(chuàng)新的軟件過程方法論。極限編程是一種高度動態(tài)的過程,它通過非常短的迭代周期來應(yīng)對需求的變化。在極限編程中,包括四個基本活動:編碼、測試、聆聽與反饋,XP項目的狀態(tài)變遷如下圖所示[3][4]:
Kent Beck指出,XP有四個核心價值是我們應(yīng)該注意的[3][4]:
· 溝通:項目中發(fā)現(xiàn)的問題往往是由于開發(fā)人員與設(shè)計人員、設(shè)計人員與客戶之間的溝通不暢造成的,因此,在XP項目中沒有溝通是不可能的。
· 簡單:XP認(rèn)為應(yīng)該盡量保持代碼的簡單,只要它能工作就可以。Kent Beck指出與其實現(xiàn)一個復(fù)雜的的系統(tǒng),不如設(shè)計一個能夠滿足目前需要的、簡單的系統(tǒng),因為你所考慮的情況可能永遠(yuǎn)都不會發(fā)生。
· 反饋:盡快獲得用戶的反饋,并且越詳細(xì)越好,使得開發(fā)人員能夠保證自己的成果符合用戶的需要。
· 勇氣:這是最重要的核心價值。因為XP強調(diào)要"擁抱變化",因此對于用戶的反饋,要勇于對自己的代碼進(jìn)行修改,丟掉壞的代碼。
下面我們將要談到的XP的最佳實踐就體現(xiàn)了上述四個核心價值。實際上,XP中并沒有多少新的觀點,它的一些最佳實踐也都是長久以來都在使用中的。
XP的適用環(huán)境
從XP項目狀態(tài)圖以及它的核心價值中我們可以看到,XP弱化針對未來需求的設(shè)計,非常注重當(dāng)前的簡化。它的實踐,有一個非常關(guān)鍵的假設(shè)就是開發(fā)人員只注重眼前需求而依賴重構(gòu)來適應(yīng)需求的變動所帶來的風(fēng)險與開銷要小于需求變化使得事先充分設(shè)計失效的代價;反之,實施XP就是不明智的[5]。
因此,XP適合規(guī)模小、進(jìn)度緊、需求變化大、質(zhì)量要求嚴(yán)的項目。它希望以最高的效率和質(zhì)量來解決用戶目前的問題,以最大的靈活性和最小的代價來滿足用戶未來的需求,XP在平衡短期和長期利益之間做了巧妙的選擇。
我們可以看到,XP并不是解決問題的"銀彈",它也有不適合的情況。Beck曾經(jīng)建議在以下情況下不宜采用XP:
· 中大型的項目(項目團(tuán)隊超過10人);
· 重構(gòu)會導(dǎo)致大量開銷的應(yīng)用;
· 需要很長的編譯或者測試周期的系統(tǒng);
· 不容易進(jìn)行測試的應(yīng)用;
· 團(tuán)隊人員異地分布的項目;
· 不能接收XP文化的組織和團(tuán)隊;
項目概況及背景
我們公司是亞洲領(lǐng)先的電子商務(wù)解決方案供應(yīng)商,在J2EE架構(gòu)的項目執(zhí)行方面有豐富的經(jīng)驗,結(jié)合RUP形成了自己的一套電子商務(wù)項目實施方法論,并在多個項目中成功進(jìn)行實施。同時,由于具體項目時間和成本的限制,也出現(xiàn)了許多問題,主要有以下兩點:
項目交付后,用戶提出很多的修改意見,有些甚至涉及系統(tǒng)架構(gòu)的修改:出現(xiàn)這種情況的主要原因是很多項目雖然是采用增量迭代式的開發(fā)周期,但是在部署前才發(fā)布版本,用戶只是在項目部署后才看到真正的系統(tǒng),因此會發(fā)現(xiàn)很多界面、流程等方面的問題;
對于用戶提交BUG的修改周期過長:開發(fā)人員在作開發(fā)的時候,對于單元測試的重視程度不夠,模塊開發(fā)結(jié)束后就提交給測試人員進(jìn)行測試,而測試人員由于時間的關(guān)系,并不能發(fā)現(xiàn)所有的問題;在用戶提交BUG后,開發(fā)人員由于項目接近尾聲,對于代碼的修改產(chǎn)生惰性,同時又沒有形成有效的回歸測試方法,因此,修改的周期比較長。
針對XP的核心價值,可以看到,如果我們能夠加強與用戶的溝通、增加項目中測試實施的力度、提高開發(fā)人員的勇氣,就可以從一定程度上解決上述問題。
從2001年開始,公司內(nèi)部展開對于XP等敏捷方法的研究,希望能夠借鑒一些做法,來完善項目方法論。
2002年5月,我們決定在公司的一個新的項目中啟用XP的一些最佳實踐,來檢驗其效果。該項目是為一家國際知名手機生產(chǎn)廠商的合作伙伴提供手機配件定購、申請、回收等服務(wù),項目的情況如下表所示:
從上表中可以看出,該項目是一個小型項目,而且項目小組成員對于XP在項目開始之前都有一定的了解,另一方面,客戶要求的項目周期比我們預(yù)期估計的時間有一定的余地,因此我們決定利用這個項目進(jìn)行XP的試驗性實踐。
XP的最佳實踐以及在項目中的應(yīng)用
在項目執(zhí)行過程中,我們基本上還是采用RUP的軟件過程,而沒有死板的套用XP 的做法,例如:在需求分析階段,我們還是采用Use Case來對需求進(jìn)行描述,而不是XP規(guī)定的CRC卡片;在系統(tǒng)分析與設(shè)計階段,首先進(jìn)行系統(tǒng)的架構(gòu)設(shè)計,而不是簡單的套用XP的"簡單設(shè)計"實踐。
下面我們結(jié)合項目的具體情況,討論一下XP的12個最佳實踐。
現(xiàn)場客戶 ( On-site Customer )
· XP: 要求至少有一名實際的客戶代表在整個項目開發(fā)周期在現(xiàn)場負(fù)責(zé)確定需求、回答團(tuán)隊問題以及編寫功能驗收測試。
· 評述:現(xiàn)場用戶可以從一定程度上解決項目團(tuán)隊與客戶溝通不暢的問題,但是對于國內(nèi)用戶來講,目前階段還不能保證有一定技術(shù)層次的客戶常駐開發(fā)現(xiàn)場。解決問題的方法有兩種:一是可以采用在客戶那里現(xiàn)場開發(fā)的方式;二是采用有效的溝通方式。
· 項目:首先,我們在項目合同簽署前,向客戶進(jìn)行項目開發(fā)方法論的介紹,使得客戶清楚項目開發(fā)的階段、各個階段要發(fā)布的成果以及需要客戶提供的支持等;其次,由項目經(jīng)理每周向客戶匯報項目的進(jìn)展情況,提供目前發(fā)布版本的位置,并提示客戶系統(tǒng)相應(yīng)的反饋與支持。
代碼規(guī)范 ( Code Standards )
· XP: 強調(diào)通過指定嚴(yán)格的代碼規(guī)范來進(jìn)行溝通,盡可能減少不必要的文檔。
· 評述: XP對于代碼規(guī)范的實踐,具有雙重含義:一是希望通過建立統(tǒng)一的代碼規(guī)范,來加強開發(fā)人員之間的溝通,同時為代碼走查提供了一定的標(biāo)準(zhǔn);二是希望減少項目開發(fā)過程中的文檔,XP認(rèn)為代碼是最好的文檔。
對于目前國內(nèi)的大多數(shù)項目團(tuán)隊來說,建立有效的代碼規(guī)范,加強團(tuán)隊內(nèi)代碼的統(tǒng)一性,是理所當(dāng)然的;但是,認(rèn)為代碼可以代替文檔卻是不可取的,因為代碼的可讀性與規(guī)范的文檔相比合適由一定的差距。
同時,如果沒有統(tǒng)一的代碼規(guī)范,代碼全體擁有就無從談起。
· 項目: 在項目實施初期,就由項目的技術(shù)經(jīng)理建立代碼規(guī)范,并將其作為代碼審查的標(biāo)準(zhǔn)。
【?發(fā)表評論?0條?】