摘 要: 通過(guò)XP在一個(gè)外貿(mào)管理信息系統(tǒng)的實(shí)際開(kāi)發(fā)應(yīng)用,闡述XP方法的主要特點(diǎn)。
關(guān)鍵詞: 極限編程 用戶故事 測(cè)試先行
XP(Extreme Programing)是敏捷編程方法的代表,適用于需求經(jīng)常發(fā)生變化的中小型項(xiàng)目的開(kāi)發(fā)。大多數(shù)用戶在系統(tǒng)發(fā)布之前,對(duì)系統(tǒng)功能往往只有一個(gè)模糊的想法,系統(tǒng)實(shí)際功能很難確定,且系統(tǒng)經(jīng)常改變。XP是一種高度動(dòng)態(tài)的過(guò)程,它通過(guò)非常短的迭代周期來(lái)應(yīng)對(duì)需求的變化。某外貿(mào)公司欲開(kāi)發(fā)一套外貿(mào)管理信息系統(tǒng)(FTMIS)軟件,但面臨時(shí)間緊迫、開(kāi)發(fā)人員不足二個(gè)問(wèn)題?;诖?這里利用極限編程方法XP進(jìn)行系統(tǒng)開(kāi)發(fā),以求在最短的時(shí)間內(nèi)獲得客戶最滿意的結(jié)果。
1 XP方法特點(diǎn)
XP運(yùn)作項(xiàng)目的方法是將項(xiàng)目分成多次迭代,每一次迭代交付一個(gè)通過(guò)質(zhì)量檢驗(yàn)、可投入使用、包含了一些新實(shí)現(xiàn)的用戶故事(User stories,即用戶素材,定義一些小的功能模塊)軟件。圖1為一個(gè)XP項(xiàng)目狀態(tài)變遷的過(guò)程。
圖1中用戶故事同時(shí)產(chǎn)生需求和測(cè)試場(chǎng)景。從需求定義開(kāi)始,XP省略了常規(guī)的系統(tǒng)和架構(gòu)的設(shè)計(jì)步驟,在進(jìn)行初步架構(gòu)探索后,就從簡(jiǎn)短的計(jì)劃發(fā)布直接進(jìn)入編碼的迭代循環(huán)。測(cè)試場(chǎng)景則用來(lái)進(jìn)行功能測(cè)試。編碼和設(shè)計(jì)是同時(shí)進(jìn)行的,而且特別強(qiáng)調(diào)測(cè)試的重要性,提倡測(cè)試驅(qū)動(dòng)。測(cè)試驅(qū)動(dòng)的編碼方式實(shí)際是一個(gè)循環(huán):寫對(duì)應(yīng)新功能的測(cè)試→運(yùn)行測(cè)試發(fā)現(xiàn)錯(cuò)誤→編寫代碼→運(yùn)行測(cè)試成功→寫對(duì)應(yīng)新功能的測(cè)試。最后,測(cè)試完成并得到用戶認(rèn)可后進(jìn)行小型發(fā)布。
XP方法具有如下特點(diǎn):
(1)重視客戶滿意度:XP的宗旨是開(kāi)發(fā)滿足客戶需要的軟件。XP讓開(kāi)發(fā)人員即使是在開(kāi)發(fā)周期的后期也能自信地面對(duì)需求變化。
(2)強(qiáng)調(diào)團(tuán)隊(duì)合作:項(xiàng)目經(jīng)理、用戶和開(kāi)發(fā)工程師共同組成一個(gè)完整的開(kāi)發(fā)團(tuán)隊(duì),目的是開(kāi)發(fā)出高質(zhì)量的軟件。
(3)開(kāi)發(fā)原則:XP從四個(gè)基本的方面改變?cè)械拈_(kāi)發(fā)方式,即交流、簡(jiǎn)單、反饋和勇氣,其目的在于克服由人為因素帶來(lái)的項(xiàng)目失敗。開(kāi)發(fā)人員要與用戶、同事交流;系統(tǒng)設(shè)計(jì)必須簡(jiǎn)單、明晰;通過(guò)不間斷的測(cè)試和發(fā)布得到用戶反饋;根據(jù)用戶的要求修改代碼,并爭(zhēng)取盡早地將軟件交付給用戶。在此基礎(chǔ)上,開(kāi)發(fā)人員將會(huì)有足夠的勇氣面對(duì)需求和技術(shù)的變化。
(4)輕量級(jí)過(guò)程:XP認(rèn)為重量級(jí)方法有些本末倒置,讓開(kāi)發(fā)人員遠(yuǎn)離了自己的專業(yè),做了他們既不擅長(zhǎng)、也不喜歡的事情。因此需要改變,讓開(kāi)發(fā)人員提高效率。
2 XP在外貿(mào)管理信息系統(tǒng)開(kāi)發(fā)中的應(yīng)用
2.1 發(fā)布計(jì)劃
很多項(xiàng)目都會(huì)在前期消耗過(guò)多的時(shí)間,只有等所有的需求完成之后才開(kāi)始設(shè)計(jì)工作。而采用XP方法,只需進(jìn)行短時(shí)間的需求分析就可以開(kāi)始設(shè)計(jì)工作。在經(jīng)過(guò)一段時(shí)間的需求分析后,FTMIS的幾個(gè)管理模塊就基本確定了,如圖2所示,各個(gè)模塊之間的數(shù)據(jù)交換一般建立在共享數(shù)據(jù)庫(kù)上。
XP要求結(jié)合業(yè)務(wù)和技術(shù)情況,快速確定下一次發(fā)布的范圍,即小型發(fā)布。一個(gè)版本的發(fā)布周期一般以1~3個(gè)月合適??蛻舸泶_定系統(tǒng)的核心內(nèi)容。甲方外貿(mào)公司主要做的是出口產(chǎn)品,所以該客戶代表制定了第一次發(fā)布需要實(shí)現(xiàn)的內(nèi)容:商品管理、客戶管理、報(bào)價(jià)單管理、訂單管理、出口合同管理、業(yè)務(wù)報(bào)表,并將這些模塊細(xì)化為各個(gè)用戶故事(User stories),加上程序員對(duì)這些故事的估算,定下第一個(gè)發(fā)布計(jì)劃的時(shí)間是6周??蛻魧?duì)每個(gè)發(fā)布版本的選擇在技術(shù)上可能不是最有效的,但可以確保每個(gè)版本都給企業(yè)帶來(lái)最大的收益。商業(yè)價(jià)值重于技術(shù)效率。在進(jìn)行第一個(gè)版本的開(kāi)發(fā)過(guò)程中,客戶繼續(xù)計(jì)劃了第二個(gè)版本和第三個(gè)版本要實(shí)現(xiàn)的內(nèi)容,整個(gè)開(kāi)發(fā)周期的發(fā)布計(jì)劃如表1所示。
小型發(fā)布的形式可以讓系統(tǒng)最快地投入生產(chǎn)。用戶的意見(jiàn)也可以迅速地得到反饋,及時(shí)在系統(tǒng)中得到解決。
2.2 迭代計(jì)劃
系統(tǒng)的一個(gè)版本被分解為若干個(gè)為時(shí)一周的迭代,以便盡快地從客戶代表處得到反饋意見(jiàn)。迭代長(zhǎng)度在項(xiàng)目開(kāi)始時(shí)即已選定,并且以后保持不變。客戶代表為用戶故事定下優(yōu)先級(jí)后,程序員將這些故事分解為任務(wù),每個(gè)任務(wù)執(zhí)行的時(shí)間一般不超過(guò)一、二天。用戶故事根據(jù)迭代的時(shí)間適當(dāng)進(jìn)行合并或拆分或移到下一迭代周期。FRMIS的第一個(gè)版本的迭代計(jì)劃如表2所示。
XP提倡模塊間的松藕合,它可使系統(tǒng)因變更所受的影響最少。通常開(kāi)發(fā)MIS的步驟都是先做用戶界面,再進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì),最后制作報(bào)表。由于XP強(qiáng)調(diào)現(xiàn)場(chǎng)客戶的參與,該客戶代表從用戶角度考慮,在制定用戶故事時(shí)定下了報(bào)表故事的優(yōu)先級(jí)最高的要求。根據(jù)客戶這一需求,先設(shè)計(jì)數(shù)據(jù)庫(kù),用實(shí)驗(yàn)數(shù)據(jù)或客戶提供的業(yè)務(wù)數(shù)據(jù)加以填充,然后制作報(bào)表。這樣當(dāng)報(bào)表模塊開(kāi)發(fā)出來(lái)并通過(guò)客戶驗(yàn)收后,數(shù)據(jù)庫(kù)結(jié)構(gòu)就非常確定了。這時(shí)再進(jìn)行界面的開(kāi)發(fā),整體速度就提高很多?,F(xiàn)場(chǎng)客戶的參與保證了開(kāi)發(fā)出來(lái)的系統(tǒng)具備用戶最需要的功能。
2.3 開(kāi) 發(fā)
XP方法的一個(gè)重要開(kāi)發(fā)原則就是結(jié)對(duì)編程。結(jié)對(duì)編程是由二個(gè)開(kāi)發(fā)人員在同一臺(tái)電腦上共同編寫解決同一問(wèn)題的代碼。通常一個(gè)人負(fù)責(zé)寫代碼,另一個(gè)負(fù)責(zé)保證代碼的正確性和可讀性。結(jié)對(duì)編程的優(yōu)點(diǎn)是:重要的設(shè)計(jì)決策至少由二個(gè)人決定,不易出現(xiàn)大的失誤;至少有二個(gè)人熟悉系統(tǒng)的每一部分,二人同時(shí)離開(kāi)的可能性比較小,保證了開(kāi)發(fā)的延續(xù);二人可以很好地交流工具的使用,學(xué)習(xí)新的技巧,提高很快。但并不是任何時(shí)候結(jié)對(duì)編程都是絕對(duì)高效的。
XP還提倡在實(shí)現(xiàn)功能代碼之前,先編寫單元測(cè)試。由于系統(tǒng)需求的不斷變化,程序的測(cè)試也要頻繁地進(jìn)行。為了降低開(kāi)發(fā)成本,測(cè)試的自動(dòng)化變得非常重要。系統(tǒng)采用DELPHI進(jìn)行開(kāi)發(fā),所以將適于DELPHI的測(cè)試框架DUNIT集成到開(kāi)發(fā)環(huán)境中。DUNIT使用很簡(jiǎn)單,例如在開(kāi)發(fā)中為編寫一個(gè)加密解密的類TCipher的測(cè)試單元TestCipher,首先在單元TestCipher中引用測(cè)試框架單元TestFramework,新建測(cè)試框架的主類TtestCase的子類TCipherTestCase,并重載TtestCase類的Setup和TearDown過(guò)程,這二個(gè)過(guò)程分別在測(cè)試之前和之后被調(diào)用。接下來(lái)在過(guò)程TCipherTestCase.TestEncryption中就可以編寫測(cè)試代碼,主要代碼及注解如下:
即可在程序初始化時(shí)對(duì)本測(cè)試類進(jìn)行注冊(cè)。之后在工程源文件引用單元TestCipher,并將APPLICATION.RUN;改為GUITestRunner.RunRegisteredTests;即可運(yùn)行已注冊(cè)的類。
編寫非GUI類的自動(dòng)化測(cè)試單元所花費(fèi)的時(shí)間不多,所帶來(lái)的好處顯而易見(jiàn)。但對(duì)有些GUI類的編寫測(cè)試就比較復(fù)雜,費(fèi)時(shí)費(fèi)力。所以在實(shí)際運(yùn)用中應(yīng)只選擇一定的合適的類來(lái)編寫單元測(cè)試,避免得不償失。
除了程序員編寫的單元測(cè)試外,在每個(gè)迭代完成時(shí)還應(yīng)由客戶代表進(jìn)行功能測(cè)試。實(shí)際用戶和開(kāi)發(fā)人員看問(wèn)題的角度有所不同,尤其在需求不完善的情況下。每周的迭代完成后的用戶測(cè)試使得意見(jiàn)反饋迅速而高效,減少了錯(cuò)誤積累帶來(lái)的項(xiàng)目失敗風(fēng)險(xiǎn),需要返工重構(gòu)的工作量也不至太多。
整個(gè)FTMIS開(kāi)發(fā)周期經(jīng)過(guò)18周的迭代,到最后第三個(gè)版本發(fā)布時(shí),系統(tǒng)已經(jīng)穩(wěn)定地為企業(yè)服務(wù)多時(shí)。同時(shí)因?yàn)殚_(kāi)發(fā)過(guò)程比較嚴(yán)格地遵守代碼規(guī)范,大幅度減少了后期開(kāi)發(fā)人員所不愿意寫的技術(shù)文檔。迭代周期及用戶故事制訂得比較合適也使開(kāi)發(fā)人員始終工作在松緊有度的環(huán)境中。最終客戶和開(kāi)發(fā)人員都得到了比較滿意的結(jié)果。
3 結(jié)束語(yǔ)
XP方法在FTMIS項(xiàng)目中的成功實(shí)施證明了以代碼設(shè)計(jì)為中心的自底向上過(guò)程的合理性和有效性。國(guó)內(nèi)諸多中小型項(xiàng)目開(kāi)發(fā)時(shí)都是時(shí)間緊迫、需求分析過(guò)于簡(jiǎn)單,此時(shí)XP比重量級(jí)開(kāi)發(fā)過(guò)程顯得更有優(yōu)勢(shì),并且易于實(shí)施。但對(duì)于XP的一些原則和方法,不能生搬硬套,應(yīng)該靈活進(jìn)行一些修剪補(bǔ)充,使項(xiàng)目獲得最大的成功。
參考文獻(xiàn)
1 Beck K.解析極限編程:擁抱變化.北京:人民郵電出版社,2002
2 Jeffries R,Anderson A,Hendrickson C.極限編程實(shí)施.北京:人民郵電出版社,2002
3 張恂.XP的價(jià)值和局限.非程序員,2002;(15)
4 Newkirk J,Martin R.極限編程實(shí)踐.北京:人民郵電出版社,2002