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