邱占芝,張斌,巨貝貝
(大連交通大學(xué) 軟件學(xué)院,遼寧 大連 116028)
在跨地域大型煤炭集團(tuán)企業(yè)的生產(chǎn)和經(jīng)營中,煤炭運(yùn)銷管理業(yè)務(wù)主要包括:調(diào)度管理、計(jì)劃管理、合同管理、統(tǒng)計(jì)管理、結(jié)算管理、地銷管理、煤質(zhì)管理、分公司業(yè)務(wù)管理、基礎(chǔ)數(shù)據(jù)管理等一系列相關(guān)綜合業(yè)務(wù).隨著企業(yè)經(jīng)營的高節(jié)奏、信息化、遠(yuǎn)程化趨勢的快速發(fā)展,建設(shè)網(wǎng)絡(luò)化的煤炭運(yùn)銷綜合業(yè)務(wù)管理系統(tǒng),對提高企業(yè)的經(jīng)營效益、提升企業(yè)的經(jīng)營水平、促進(jìn)企業(yè)與國際化接軌具有重要意義.對于跨地域大型煤炭集團(tuán)企業(yè),由于跨地域、機(jī)構(gòu)繁多、管理流程復(fù)雜、客戶信息與管理需求多變等特點(diǎn),往往要求運(yùn)銷管理系統(tǒng)應(yīng)具備分布式網(wǎng)絡(luò)運(yùn)行方式、業(yè)務(wù)功能完整、操作方便易用、查詢統(tǒng)計(jì)靈活、數(shù)據(jù)處理安全、兼容性強(qiáng)、運(yùn)行穩(wěn)定、支持異構(gòu)環(huán)境等特點(diǎn).傳統(tǒng)瀑布式的系統(tǒng)開發(fā)模式周期長、無法回溯、無法適應(yīng)用戶需求多變的情況.為此,本文針對網(wǎng)絡(luò)化煤炭運(yùn)銷管理系統(tǒng)中關(guān)鍵業(yè)務(wù)需求,使用敏捷開發(fā)方法,設(shè)計(jì)系統(tǒng)的總體方案、系統(tǒng)構(gòu)架、業(yè)務(wù)流程和功能模塊,闡述其關(guān)鍵技術(shù)和迭代開發(fā)過程.通過該系統(tǒng)的運(yùn)行和維護(hù),證明了方案的正確性和開發(fā)方法的有效性.
敏捷開發(fā)方法是一種迭代、循序漸進(jìn)的開發(fā)方法.在敏捷開發(fā)中,系統(tǒng)項(xiàng)目的構(gòu)建被切分成多個(gè)子項(xiàng)目,各個(gè)子項(xiàng)目的成果都經(jīng)過測試,具備集成和可運(yùn)行的特征.敏捷開發(fā)與傳統(tǒng)開發(fā)過程的最大的不同之處在于它強(qiáng)調(diào)以人為核心,團(tuán)隊(duì)有激情,有活力地快速適應(yīng)需求的不斷變化[1].特點(diǎn)如下:①直接交流.敏捷開發(fā)要求設(shè)計(jì)人員同客戶直接交流,將客戶作為系統(tǒng)設(shè)計(jì)的參與者,客戶與開發(fā)者被緊密結(jié)合在一起,能夠及時(shí)溝通和反饋從而避免了軟件危機(jī)發(fā)生的概率;②短周期迭代.應(yīng)用敏捷開發(fā)的可伸縮性針對不同業(yè)務(wù)部門制定不同的周期,周期通常為1~2周,每次迭代的結(jié)束意味著一次小的交付,而較短周期的交付有效的避免了問題擴(kuò)散,極大的減少了傳統(tǒng)開發(fā)模式中返工的情況;③代碼重構(gòu).代碼持續(xù)性的重構(gòu)極大加強(qiáng)代碼魯棒性、復(fù)用性同時(shí)排除不必要的復(fù)雜邏輯.以模塊迭代為基本單位,重構(gòu)迭代為框架,在變化中逐漸平衡軟件設(shè)計(jì)和企業(yè)業(yè)務(wù)的關(guān)系.
對于跨地域、多部門的網(wǎng)絡(luò)化運(yùn)銷管理系統(tǒng),由于公司業(yè)務(wù)人員各司其職,對整體需求模糊,且項(xiàng)目周期短.因此,采用特制驅(qū)動的敏捷開發(fā)模式,以搭建系統(tǒng)原型的用戶測試代替用例測試,以代碼審核和重構(gòu)代替單元測試,從而更符合當(dāng)前國內(nèi)企業(yè)信息化開發(fā)的需求和模式.
隨著當(dāng)前信息產(chǎn)業(yè)和軟件開發(fā)技術(shù)的發(fā)展,各種可重用性框架日漸增多,使用框架雖然可以使開發(fā)者減少代碼編寫量,將更多精力投入到業(yè)務(wù)邏輯中,但開發(fā)者必須對是否使用框架、使用何種框架做出選擇,可以從以下幾個(gè)角度考慮:①層次,即框架屬于哪個(gè)層次.應(yīng)用系統(tǒng)從整體上可分為表示層、業(yè)務(wù)邏輯層、持久層,應(yīng)該結(jié)合項(xiàng)目自身特點(diǎn),在業(yè)務(wù)層上靈活應(yīng)用框架;②量級,根據(jù)企業(yè)規(guī)模和業(yè)務(wù)邏輯選擇合適框架,當(dāng)業(yè)務(wù)邏輯要求實(shí)時(shí)性的情況下舍棄框架會提高程序效率,因此過分依賴框架往往造成舍本逐末的設(shè)計(jì);③開源,開源框架不僅使開發(fā)成本降低,同時(shí)將框架將內(nèi)核暴露于開發(fā)者,便于開發(fā)人員從底層掌握和改進(jìn)框架從而更契合定制業(yè)務(wù)的邏輯.
煤炭運(yùn)銷系統(tǒng)所涉及的企業(yè)組織結(jié)構(gòu)主要劃分為銷售公司機(jī)關(guān)和各礦分公司.公司機(jī)關(guān)下設(shè)調(diào)運(yùn)科、地銷科、煤質(zhì)科、質(zhì)量信息科、結(jié)算科等,負(fù)責(zé)整體運(yùn)銷業(yè)務(wù)的管理,業(yè)務(wù)邏輯復(fù)雜、易改變,業(yè)務(wù)量繁重,維護(hù)工作量較大;各礦分公司負(fù)責(zé)本公司所轄各礦的軌道衡/汽車衡稱重?cái)?shù)據(jù)采集及統(tǒng)計(jì)管理,地點(diǎn)分布廣泛.公司機(jī)關(guān)和各分公司所有用戶必須通過網(wǎng)絡(luò)登錄系統(tǒng),進(jìn)行相關(guān)業(yè)務(wù)的處理.為此,該系統(tǒng)的總體架構(gòu)采用基于B/S和C/S混合模式.公司機(jī)關(guān)業(yè)務(wù)主要是管理職能,系統(tǒng)采用B/S三層結(jié)構(gòu)模式,B/S模式將系統(tǒng)分成客戶端(瀏覽器)、應(yīng)用服務(wù)器和數(shù)據(jù)庫服務(wù)器.客戶端負(fù)責(zé)視圖,應(yīng)用服務(wù)器根據(jù)客戶端提出的請求,調(diào)用相應(yīng)的業(yè)務(wù)邏輯對數(shù)據(jù)庫服務(wù)器進(jìn)行訪問,數(shù)據(jù)庫服務(wù)器負(fù)責(zé)數(shù)據(jù)處理[2].對于各礦分公司業(yè)務(wù),因涉及銷售量的數(shù)據(jù)采集,要求實(shí)時(shí)性強(qiáng),信息量相對較少且穩(wěn)定,業(yè)務(wù)流程簡單,故分公司銷售數(shù)據(jù)采集系統(tǒng)架構(gòu)采用C/S兩層結(jié)構(gòu).用B/S和C/S混合模式的系統(tǒng)極大地提高了系統(tǒng)的可用性、操作速度與維護(hù)效率.
(1)開發(fā)工具.考慮跨平臺、維護(hù)方便等,項(xiàng)目工程使用java語言開發(fā),以struts1.x為業(yè)務(wù)控制框架,同時(shí)引入jquery作為表示層框架,以JDBC驅(qū)動方式實(shí)現(xiàn)數(shù)據(jù)庫容抗匹配以及事務(wù)界定;
(2)數(shù)據(jù)庫平臺.采用微軟公司的SQL Server2005大型關(guān)系數(shù)據(jù)庫管理系統(tǒng),既可以滿足對數(shù)據(jù)處理快速、高效和準(zhǔn)確的需要,又保證了數(shù)據(jù)安全、系統(tǒng)維護(hù)與升級方便等[3];
(3)軟件環(huán)境.服務(wù)器操作系統(tǒng)選用WindowsServer2003SP2企業(yè)版,WEB服務(wù)器選擇tomcat5.5及其以上版本.
公司機(jī)關(guān)各部門之間業(yè)務(wù)聯(lián)系緊密,工作相互依存制約;各礦區(qū)地理位置分散,各自擁有服務(wù)器,嚴(yán)格事務(wù)流程,完成事務(wù)性工作.公司機(jī)關(guān)決定各礦分公司工作目標(biāo),各礦分公司定期匯報(bào)具體工作情況.整個(gè)業(yè)務(wù)流程可分為三大部分:調(diào)運(yùn)管理、煤質(zhì)處理和結(jié)算處理.系統(tǒng)業(yè)務(wù)流程圖如圖1所示.
由企業(yè)業(yè)務(wù)流程設(shè)計(jì)系統(tǒng)模塊,主要分為三個(gè)子系統(tǒng):調(diào)運(yùn)管理、煤質(zhì)管理和結(jié)算管理.
調(diào)運(yùn)管理子系統(tǒng)主要完成基礎(chǔ)數(shù)據(jù)的錄入,合同的簽訂,庫存量管理,銷售計(jì)劃的制定以及裝車管理.子模塊包括:合同管理、計(jì)劃管理和裝車管理.合同管理主要完成合同各項(xiàng)內(nèi)容的基礎(chǔ)設(shè)置,合同/協(xié)議簽訂和合同的查詢;計(jì)劃管理制定路運(yùn)/地銷銷售計(jì)劃;裝車管理根據(jù)銷售計(jì)劃和鐵路計(jì)劃下達(dá)路運(yùn)/地銷裝車單,指導(dǎo)調(diào)度作業(yè),出具地衡/軌道衡稱重單.
煤質(zhì)管理子系統(tǒng)分為化驗(yàn)管理和質(zhì)量信息管理兩個(gè)模塊.化驗(yàn)管理處理各車煤質(zhì)化驗(yàn)信息,每日出具商品煤質(zhì)化驗(yàn)日報(bào)表以及維護(hù)各礦煤種信息;質(zhì)量信息管理處理客戶對煤質(zhì)的反饋以及到貨煤礦的檢斤記錄.
結(jié)算管理子系統(tǒng)包括:結(jié)算處理、財(cái)務(wù)管理、審批對賬處理和客戶回款管理.結(jié)算處理主要完成運(yùn)費(fèi)處理和生成結(jié)算單;財(cái)務(wù)管理處理開具發(fā)票的情況;審批對賬處理由相關(guān)部門對不同結(jié)算單進(jìn)行審批,審批通過后進(jìn)行對賬;客戶回款管理對客戶回款情況進(jìn)行記錄.

圖1 業(yè)務(wù)流程圖
2.4.1 故事原型確立
以合同管理模塊為例,按照敏捷開發(fā)的生命周期法[4]描述實(shí)際過程.
敏捷開發(fā)強(qiáng)調(diào)現(xiàn)場客戶的參與,以客戶提供的原始文檔為基礎(chǔ),構(gòu)建用戶故事(User Stories).根據(jù)用戶需求設(shè)計(jì)合同模塊功能,其結(jié)構(gòu)如圖2所示.

圖2 合同管理功能模塊圖
將功能翻譯為用戶故事:①鐵路到站用戶故事:用戶可以設(shè)置鐵路到站的名稱和所屬區(qū)域;②客戶管理用戶故事:客戶管理實(shí)現(xiàn)客戶的增刪查改,收貨人結(jié)算人關(guān)系關(guān)聯(lián),并設(shè)置相應(yīng)到站關(guān)系;③煤炭指標(biāo)設(shè)置故事:定制煤炭質(zhì)量指標(biāo);④合同條款定制用戶故事:為系統(tǒng)定制標(biāo)準(zhǔn)合同模板;⑤合同協(xié)議管理用戶故事:以基礎(chǔ)數(shù)據(jù)部分為基礎(chǔ)提供對合同的增刪查改操作;⑥抹帳協(xié)議管理用戶故事:提供非現(xiàn)金性合同的增刪查改;⑦補(bǔ)充協(xié)議:在合同執(zhí)行期間對合同修改,并對歷史合同進(jìn)行備份處理.
根據(jù)初始化用戶故事化,合同管理模塊分為7個(gè)子模塊,每個(gè)模塊相互滿足弱耦合關(guān)系,使用struts作為控制框架并引入DAO設(shè)計(jì)模式,將模塊分為3層:表示層、業(yè)務(wù)邏輯層和持久層,并通過靈活使用框架提高代碼內(nèi)聚度和可變動性,如圖3所示.
以最初用戶故事模型構(gòu)建功能性的原型模塊,為客戶測試做準(zhǔn)備.隨著項(xiàng)目迭代故事的進(jìn)行,這些用戶故事可能進(jìn)一步深化或被廢除,最終確立系統(tǒng)模塊.

圖3 系統(tǒng)結(jié)構(gòu)模塊圖
2.4.2 迭代開發(fā)
代碼開發(fā)由一位項(xiàng)目主管和多個(gè)小組組成.項(xiàng)目主管負(fù)責(zé)整個(gè)業(yè)務(wù)的規(guī)劃、排除開發(fā)阻力等,不直接參與具體問題解決.各小組兩名成員分別負(fù)責(zé)代碼編寫和審核測試,每日例會向項(xiàng)目主管匯報(bào)工作進(jìn)展.模塊以1~2周為迭代周期,在迭代周期末尾小組成員合作進(jìn)行代碼重構(gòu),減少代碼冗余、提高代碼質(zhì)量和可讀性.
迭代交付期間以用戶測試為主,根據(jù)用戶需求不斷更新代碼和數(shù)據(jù)庫結(jié)構(gòu),并不斷重構(gòu)以保證結(jié)構(gòu)上的一致.對交付結(jié)果和新問題采用項(xiàng)目主管、小組成員三人頭腦風(fēng)暴式討論,提供多種解決方案,并根據(jù)業(yè)務(wù)流程選擇最優(yōu)方式,從而為下次迭代提供備選方案.模塊迭代計(jì)劃表如附表:

附表 模塊迭代計(jì)劃表
在迭代周期中根據(jù)用戶需求和反饋,逐步增加部分用戶故事和功能模塊,如下:①客戶數(shù)據(jù)收貨人和買受人區(qū)分.企業(yè)對應(yīng)客戶信息,根據(jù)合同分為買受人和收貨人,根據(jù)不同狀態(tài)添加客戶時(shí)可以選擇性插入狀態(tài),并可修改使兩種狀態(tài)可以相互轉(zhuǎn)化;②錯(cuò)誤信息的動態(tài)提示,持久層DAO拋出業(yè)務(wù)異常并捕獲,將封裝為ErrorMessage類型的對象返還業(yè)務(wù)邏輯層,通過控制器直接將錯(cuò)誤信息顯示與頁面上端,方便客戶與系統(tǒng)的交換交互;③合同管理用戶故事提供審核機(jī)制,審核交予高權(quán)限人員負(fù)責(zé),審核過后底層人員不能修改或刪除合同;④煤炭指標(biāo)設(shè)置用戶故事提供煤種設(shè)置機(jī)制,用戶可根據(jù)自己需求動態(tài)調(diào)整各頁面中煤種順序、顯示/隱藏;⑤安全處理功能,為用戶操作提供動作日志記錄.
運(yùn)銷管理項(xiàng)目采用小發(fā)布的方式,即結(jié)合業(yè)務(wù)邏輯,快速確定下一次發(fā)布范圍,結(jié)合本系統(tǒng)實(shí)際開發(fā)情況,第一個(gè)版本發(fā)布周期在1~4周,持續(xù)數(shù)次發(fā)布?xì)v時(shí)半年實(shí)現(xiàn)各模塊的開發(fā)與歸檔.合同管理模塊是開發(fā)的典型案例,以此為基礎(chǔ)每個(gè)模塊基本發(fā)布周期為4周時(shí)間,期間經(jīng)歷數(shù)次迭代,并單獨(dú)歸檔.
對系統(tǒng)不斷的重構(gòu)、測試和客戶的及時(shí)反饋,實(shí)現(xiàn)了全部用戶故事,并完成了系統(tǒng)流程.經(jīng)過半年的迭代開發(fā),最終系統(tǒng)得到用戶認(rèn)可.
通過實(shí)際項(xiàng)目的設(shè)計(jì)、開發(fā)、運(yùn)行與維護(hù)表明:采用敏捷開發(fā)方法,設(shè)計(jì)者和開發(fā)者與客戶直接交流,避免了軟件危機(jī)[5]發(fā)生的概率;開發(fā)周期短,避免了需求的不斷變化所帶來的開發(fā)工作量的劇增;代碼持續(xù)性重構(gòu)極大地加強(qiáng)代碼魯棒性、復(fù)用性,同時(shí)排除不必要的復(fù)雜邏輯.敏捷開發(fā)具有高度的靈活性,在追求高效率、高質(zhì)量的同時(shí),更加體現(xiàn)團(tuán)隊(duì)協(xié)作和降低開發(fā)成本.采用敏捷開發(fā)方法所設(shè)計(jì)和開發(fā)的網(wǎng)絡(luò)化煤炭運(yùn)銷管理系統(tǒng),既實(shí)現(xiàn)了公司內(nèi)部經(jīng)營信息的高度共享,并根據(jù)市場變化情況,及時(shí)改變銷售策略和產(chǎn)品品種,同時(shí)又為領(lǐng)導(dǎo)決策提供了技術(shù)上的支持和保障.
[1]胡霞.初探敏捷開發(fā)在項(xiàng)目開發(fā)中的應(yīng)用[J].硅谷,2009,24:66.
[2]唐紅軍,萬健基.基于B/S結(jié)構(gòu)的分銷資源信息管理系統(tǒng)模型設(shè)計(jì)與實(shí)現(xiàn)[J].電腦開發(fā)與應(yīng)用,2005,18(4):28-29.
[3]王會林.軟件定制開發(fā)從代碼到構(gòu)件之探索[J].電腦開發(fā)與應(yīng)用,2006(4):12-13.
[4]ALISTAIR COCKBURN.Agile Software Development[M].Boston:Addison Wesley,2002.
[5]LARMAN CRAIG.Agile and iterative development:A manager’s guide[M].北京:中國電力出版社,2004.