二次開(kāi)發(fā)是指在原有系統(tǒng)的基礎(chǔ)上根據(jù)客戶需求所進(jìn)行的修改或再開(kāi)發(fā),以使得軟件更符合實(shí)際。在醫(yī)療信息系統(tǒng)(hospitalinformationsystem,HIS)建設(shè)中,醫(yī)院和軟件供應(yīng)商面臨的最大困擾莫過(guò)于軟件的修改問(wèn)題。醫(yī)院的差異化競(jìng)爭(zhēng)決定了每個(gè)醫(yī)院的流程會(huì)越來(lái)越不一樣,因此需求也不盡相同。用戶在使用過(guò)程中對(duì)軟件系統(tǒng)理解逐漸加深,也會(huì)不斷提出優(yōu)化流程的要求。此外還有大量不合理但又必須滿足的修改要求,對(duì)這些需求的適應(yīng)能力是考驗(yàn)HIS技術(shù)水平的重要指標(biāo)。
二次開(kāi)發(fā)是軟件開(kāi)發(fā)的生命周期所致,軟件維護(hù)是軟件生命周期中持續(xù)時(shí)間最長(zhǎng)的階段。軟件的維護(hù)包括糾錯(cuò)性維護(hù)和改進(jìn)性維護(hù)兩個(gè)方面。在軟件開(kāi)發(fā)完成并投入使用后,由于多方面的原因,軟件不能繼續(xù)適應(yīng)用戶的要求。要延續(xù)軟件的使用壽命,就必須對(duì)軟件進(jìn)行維護(hù)。
二次開(kāi)發(fā)是用戶需要深化的必然要求[1]。用戶的需求會(huì)隨著應(yīng)用的深入而不斷擴(kuò)展。醫(yī)院信息化不像蓋大樓、購(gòu)設(shè)備,需要在應(yīng)用過(guò)程中不斷地動(dòng)態(tài)調(diào)整。尤其是醫(yī)院業(yè)務(wù)流程更會(huì)隨著國(guó)家醫(yī)療政策的變化而發(fā)生變化,這需要我們?cè)谠械尼t(yī)院信息系統(tǒng)基礎(chǔ)上不斷地進(jìn)行二次開(kāi)發(fā)和必要的系統(tǒng)改造,做好系統(tǒng)的適應(yīng)性維護(hù)和完善性維護(hù),以使醫(yī)院管理信息系統(tǒng)隨著醫(yī)院的發(fā)展而發(fā)展,延長(zhǎng)醫(yī)院信息系統(tǒng)的穩(wěn)定期和適用期,避免將管理信息系統(tǒng)推倒重來(lái)的惡果。軟件設(shè)計(jì)的不足日益顯現(xiàn),任何軟件的設(shè)計(jì)都無(wú)法完全預(yù)料到未來(lái)的應(yīng)用需求,因此軟件系統(tǒng)的二次開(kāi)發(fā)是不可避免的。
1 二次開(kāi)發(fā)的方式
1.1 依托信息系統(tǒng)的開(kāi)發(fā)商進(jìn)行系統(tǒng)的二次開(kāi)發(fā),完成醫(yī)院的需求。牢固樹(shù)立”購(gòu)買軟件就是購(gòu)買服務(wù)”的觀念,在軟件購(gòu)買期間對(duì)軟件開(kāi)發(fā)商的能力、信譽(yù)、響應(yīng)時(shí)間以及生存能力等進(jìn)行調(diào)查,確保能有較長(zhǎng)的合作周期。如有必要可以在購(gòu)買合同中就售后及二次開(kāi)發(fā)進(jìn)行規(guī)定,避免不必要的麻煩。軟件是立足于自我開(kāi)發(fā),還是全面買進(jìn),二者都被證明是不成功的選擇。在醫(yī)院信息系統(tǒng)應(yīng)用初期,由于觀念影響,大多數(shù)醫(yī)院奉行自我開(kāi)發(fā),由于醫(yī)院計(jì)算機(jī)技術(shù)力量薄弱,大多數(shù)系統(tǒng)是低水平重復(fù),沒(méi)有形成一個(gè)象樣的綜合信息系統(tǒng),致使衛(wèi)生行業(yè)計(jì)算機(jī)應(yīng)用發(fā)展緩慢;另一方面由于醫(yī)院間的管理差異,各有特色,很難有能適合各種醫(yī)院的通用軟件。實(shí)踐證明與社會(huì)上的專業(yè)力量合作,引進(jìn)通用軟件,結(jié)合自身特點(diǎn)加以二次開(kāi)發(fā)才是較為正確的選擇。
醫(yī)院應(yīng)慎重選擇擬合作的計(jì)算機(jī)軟件開(kāi)發(fā)公司,應(yīng)注重合作公司的技術(shù)力量、開(kāi)發(fā)經(jīng)驗(yàn)、維護(hù)能力及公司的專業(yè)發(fā)展能力,以及是否有成功的實(shí)例、是否有自主版權(quán)的商品化的HIS軟件、是否有繼續(xù)開(kāi)發(fā)升級(jí)的能力。醫(yī)院選擇的合作單位最好是與醫(yī)院在同一地區(qū),或在該地區(qū)有響應(yīng)機(jī)構(gòu)的公司。應(yīng)由醫(yī)院與合作單位共同研究訂出系統(tǒng)的目標(biāo)、構(gòu)造、平臺(tái)的選擇及分步實(shí)施的方案,再談判價(jià)格問(wèn)題。
因應(yīng)用系統(tǒng)有一個(gè)試用期和維護(hù)期,且信息系統(tǒng)是逐步擴(kuò)大、增長(zhǎng)的,管理上提出的要求也是變化的,合作公司需到醫(yī)院進(jìn)行實(shí)地調(diào)研,醫(yī)院人員應(yīng)自始至終參與工程的規(guī)劃、安裝、調(diào)試,這對(duì)日后醫(yī)院HIS維護(hù)開(kāi)發(fā)有極大好處。
1.2 依靠醫(yī)院自身信息人才自行進(jìn)行二次開(kāi)發(fā),此方式適合于有比較長(zhǎng)時(shí)間的信息系統(tǒng)應(yīng)用經(jīng)驗(yàn)和有一支長(zhǎng)期致力于醫(yī)院信息系統(tǒng)維護(hù)的富有開(kāi)發(fā)經(jīng)驗(yàn)的信息隊(duì)伍的醫(yī)院。
2 二次開(kāi)發(fā)的做法
常見(jiàn)二次開(kāi)發(fā)主要有3種做法,修改源代碼,采用中間件,利用數(shù)據(jù)庫(kù)表結(jié)構(gòu),實(shí)現(xiàn)數(shù)據(jù)的共享。
2.1 修改源程序,能夠擁有系統(tǒng)的源代碼自然是許多程序開(kāi)發(fā)人員夢(mèng)寐以求的事情,但是由于我們目前許多程序員在程序編寫(xiě)上的不規(guī)范,造成讀他人的程序是一個(gè)相當(dāng)困難和頭痛的事情。在源程序上修改的優(yōu)點(diǎn)是能夠完全無(wú)縫連接,缺點(diǎn)為若源代碼編寫(xiě)不規(guī)范,對(duì)源代碼的理解和再編寫(xiě)工作量大,且不容易完成,而且一般的醫(yī)院也無(wú)法得到系統(tǒng)的源代碼。
2.2 采用數(shù)據(jù)庫(kù)中間件技術(shù)。
2.2.1 中間件是一種獨(dú)立的系統(tǒng)軟件或服務(wù)程序,分布式應(yīng)用軟件借助這種軟件在不同的技術(shù)之間共享資源[1]。中間件位于客戶機(jī)”服務(wù)器的操作系統(tǒng)之上,管理計(jì)算機(jī)資源和網(wǎng)絡(luò)通訊。目前對(duì)中間件的應(yīng)用是數(shù)據(jù)庫(kù)開(kāi)發(fā)的熱點(diǎn)。
2.2.2 數(shù)據(jù)庫(kù)中間件方法的優(yōu)點(diǎn):移植性好,中間件封裝了各種與平臺(tái)有關(guān)的細(xì)節(jié),使更換操作系統(tǒng)和通訊協(xié)議等底層的配置無(wú)需改變應(yīng)用程序代碼。集成方便,中間件可以非常容易地集成到應(yīng)用開(kāi)發(fā)環(huán)境中,無(wú)需大的代碼改動(dòng)。易于擴(kuò)充,中間件的局部改進(jìn)和整體升級(jí)只要保持對(duì)外接口不變就不會(huì)影響到系統(tǒng)的其他部分,在功能上對(duì)應(yīng)用程序?qū)崿F(xiàn)了透明性;使用簡(jiǎn)單,中間件對(duì)各種數(shù)據(jù)源使用統(tǒng)一的訪問(wèn)方法,使用戶不必關(guān)心數(shù)據(jù)庫(kù)選擇等操作。
2.2.3 數(shù)據(jù)庫(kù)中間件方法的缺點(diǎn):數(shù)據(jù)庫(kù)操作比較集中,統(tǒng)一由中間件負(fù)責(zé)數(shù)據(jù)間的同步和點(diǎn)對(duì)點(diǎn)的通訊,對(duì)中間件的可靠性要求高,一旦中間件出現(xiàn)問(wèn)題,所有的數(shù)據(jù)連接將斷掉,導(dǎo)致數(shù)據(jù)庫(kù)癱瘓,這種方法不適合高性能的應(yīng)用處理。
2.3 利用數(shù)據(jù)庫(kù)表結(jié)構(gòu)的方式實(shí)現(xiàn)數(shù)據(jù)的共享,此方法適合于對(duì)系統(tǒng)非常熟悉,包括其表結(jié)構(gòu)和數(shù)據(jù)流程、業(yè)務(wù)流程,能夠準(zhǔn)確地提取出需要的數(shù)據(jù),并將結(jié)果數(shù)據(jù)回填,方便原有系統(tǒng)的應(yīng)用來(lái)調(diào)用。此方法最為簡(jiǎn)單。缺點(diǎn):由于無(wú)法嵌套入原有的程序中,客戶在使用上存在不方便。若對(duì)數(shù)據(jù)結(jié)構(gòu)和流程不了解,會(huì)出現(xiàn)錯(cuò)誤的結(jié)果,影響數(shù)據(jù)的使用。
3 二次開(kāi)發(fā)應(yīng)注意的問(wèn)題
3.1 未雨綢繆,在簽軟件購(gòu)買合同的時(shí)候,將相關(guān)文檔的提供寫(xiě)入合同中,能提供程序源代碼作為合同重要款項(xiàng),實(shí)施和驗(yàn)收時(shí),保存好相關(guān)技術(shù)文檔,為二次開(kāi)發(fā)打好基礎(chǔ)。開(kāi)發(fā)文檔的規(guī)范性書(shū)寫(xiě)和開(kāi)發(fā)軟件的測(cè)試保存,代碼編制遵照<程序編制規(guī)范.doc>標(biāo)準(zhǔn)[2]。主要有變量命名規(guī)范、窗口和窗口相關(guān)Datawindow命名規(guī)范、函數(shù)的命名規(guī)范、數(shù)據(jù)窗口命名規(guī)范、類的命名規(guī)范、界面設(shè)計(jì)風(fēng)格規(guī)范、庫(kù)(PBL)命名規(guī)范、字段名通用命名規(guī)范。定期整理需求和相關(guān)代碼鼓勵(lì)程序員建設(shè)客戶化支持庫(kù),部門定期統(tǒng)一歸檔整理最終成為標(biāo)準(zhǔn)產(chǎn)品。充分利用好程序注釋,增加程序的可讀性。
3.2 在以自力更生為主進(jìn)行合作開(kāi)發(fā)的同時(shí)建立定型軟件集中保存管理制度,避免因人員的流動(dòng)導(dǎo)致軟件維護(hù)和開(kāi)發(fā)的中斷。
3.3 應(yīng)以不改變軟件主體結(jié)構(gòu)為前提,在保證現(xiàn)有應(yīng)用的前提下做好二次開(kāi)發(fā)。
3.4 二次開(kāi)發(fā)應(yīng)在充分理解和消化現(xiàn)有系統(tǒng)的基礎(chǔ)上完成,而不是盲目開(kāi)發(fā)造成項(xiàng)目沒(méi)有上成又耗費(fèi)了人力物力。