成 林
(浙江醫(yī)院,浙江 杭州 3100013)
醫(yī)院信息系統(tǒng)(簡稱HIS),是一個非常復雜的系統(tǒng),不僅承擔了維系醫(yī)院正常工作的重任,而且在醫(yī)院的發(fā)展方向以及日常決策方面都提供了極為重要的信息支持。隨著新需求的不斷涌現(xiàn),HIS軟件也需要不斷地升級和完善,這也為軟件維護提出了更高的要求。在日常工作中,不僅保證信息系統(tǒng)安全穩(wěn)定的正常運行,更要保證其數(shù)據(jù)的準確可靠,充分發(fā)揮其決策、輔助等管理職能,保證醫(yī)院工作的正常開展。HIS系統(tǒng)的軟件維護就顯得尤其重要。通常軟件的生命周期只有10年,只有做好維護工作才能延長軟件的生命周期,不斷適應醫(yī)院的發(fā)展和需求。
本院實行的是內(nèi)外網(wǎng)物理隔絕的網(wǎng)絡環(huán)境,無法使用遠程聯(lián)機的維護方式,就需要以本院信息中心為主,軟件開發(fā)商為輔的維護策略。按照一般軟件維護的方法可分為四類:完善性維護、適應性維護、糾錯性維護和預防性維護。作者在日常維護工作中,依據(jù)HIS軟件系統(tǒng)的特點,探討前三種維護方法在HIS系統(tǒng)中應用的特點。
完善性維護是指在軟件系統(tǒng)運行期間為了滿足用戶不斷增加的需求并提高和增強系統(tǒng)的功能和效率所進行的維護工作。在HIS軟件的維護過程中,經(jīng)常會遇到業(yè)務科室提出增加某些功能或修改已有功能的需求,作者將此類需求的維護定義為完善性維護,完善性維護占軟件維護工作量的55%。完善性維護范圍廣、影響大,通常在進行維護前首要考慮技術上是否可行、對其他工作是否有影響及資源和時間的占用是否合算。在前期驗證可行后還要注意以下三個方面:(1)對程序的修改可能會產(chǎn)生新的錯誤,在使用前應先通過測試服務器測試更新程序;(2)對數(shù)據(jù)結構進行修改必須慎重,因為各個模塊間數(shù)據(jù)的交叉引用可能導致動一發(fā)而牽全身,在修改前必須參照系統(tǒng)文件中關于數(shù)據(jù)結構的詳細描述和模塊間的數(shù)據(jù)交叉引用表,以防局部的修改影響全局的整體使用;(3)任何對源程序的修改,都需要對相應的文檔進行更新,不然會造成源程序與文檔的不一致,引起今后HIS應用和維護工作的混亂。
根據(jù)以上原則,對業(yè)務科室提交的需求,從合理性和技術可行性兩個方面對維護要求進行分析和審查,并對修改將產(chǎn)生的影響做出充分的估計。對不妥的維護要求與業(yè)務科室協(xié)商予以修改或撤消。通過領導審批后的維護報告,由信息管理員根據(jù)具體情況制定程序修改計劃,每隔2周將匯總的修改計劃集中提交給軟件開發(fā)商修改。這樣集中處理需求不但可以減輕修改和測試程序的工作量,還可以使各個修改文檔和歷史程序井井有條,不易出錯。為了防止不同的程序員在修改程序時使用不同的命名方法,對此院方不僅要求軟件開發(fā)商在編程過程中規(guī)定和執(zhí)行了類、接口、數(shù)據(jù)表字段的命名規(guī)范,還要求建立修改文檔使不同的程序員也能根據(jù)文檔了解原先修改的代碼,不會因為軟件開發(fā)商的人員變動而造成HIS源碼的混亂。
適應性維護是指運行環(huán)境發(fā)生變化后,與之適應而進行的軟件維護,適應性維護占到軟件維護工作量的20%。比如隨著全民醫(yī)保的不斷發(fā)展和完善,醫(yī)保政策幾乎每年都有變化,這就需要 HIS系統(tǒng)與之適應。其中有些工作是信息中心可以通過調整參數(shù)或存儲過程來完成,但大多數(shù)情況下需要開發(fā)商升級醫(yī)保接口程序。
對這類適應性需求,其重要程度遠大于一般的完善性需求,必須優(yōu)先修改。所以要求軟件開發(fā)商提供規(guī)范的接口升級流程文檔和更新后的數(shù)據(jù)字典,這樣不僅可以讓信息管理員了解更新后的表結構變化,還可以保證接口修改的可控、可查、可測,從而提高今后的維護效率。另一方面,必須將適應性需求和完善性需求分別進行管理,因為這兩類需求絕不能一起修改,不然可能造成相互影響從而產(chǎn)生缺陷(BUG),必須等到醫(yī)保接口通過測試并穩(wěn)定運行1個月后才能進行完善性維護。
所謂糾錯性維護主要指發(fā)現(xiàn)和修正在開發(fā)階段產(chǎn)生、測試階段未發(fā)現(xiàn)的錯誤。糾錯性維護占到軟件維護工作量的25%。實踐表明,任何一個軟件在通過驗收測試后,并不能保證軟件內(nèi)部所有的隱藏錯誤被全部排除。因此,需要進行糾錯性維護。出現(xiàn)問題時,系統(tǒng)管理員通常會用SQL語句查詢數(shù)據(jù)庫表內(nèi)數(shù)據(jù)是否有問題,SQL語句中最常用的就是Select查詢語句。當然大多數(shù)BUG是無法靠查詢語句找出問題原因的,所以作者要求軟件開發(fā)商提供源程序,包括主要部分的數(shù)據(jù)字典,就可以使用分析源碼法和調試跟蹤法查找原因。下面介紹作者在糾錯性維護工作中使用的這兩種方法。
3.1 分析源碼法 隨著HIS軟件不斷新增功能和升級醫(yī)保接口,難免遇到各類程序BUG,根據(jù)出現(xiàn)的錯誤提示倒查分析源代碼,就能發(fā)現(xiàn)一些系統(tǒng)問題,及時分析出錯誤的原因。
HIS軟件開發(fā)商在程序發(fā)布前雖經(jīng)過質保部的測試,但是各家醫(yī)院的HIS版本并不相同,數(shù)據(jù)庫和表結構也不盡相同,一旦接口升級無法做到在各家醫(yī)院的數(shù)據(jù)庫環(huán)境中進行充分測試,這就可能出現(xiàn)程序BUG。如余杭醫(yī)保接口升級后的第5天,有患者門診結算時彈出提示窗口:“藥品序號 =XXXXXX醫(yī)保編碼未匹配不能結帳”。經(jīng)查該藥為當天新增藥品,通過Select查詢語句復核表XXX-new后確定該藥已匹配過醫(yī)保編碼,出錯原因是否會是程序取值仍然取到舊表上了?順著這個思路,使用Power Builder打開源程序,對余杭醫(yī)保結算的PBL直接搜索關鍵字“醫(yī)保編碼未匹配不能結帳”找到這個語句的位置,再看代碼里的取值條件,發(fā)現(xiàn)代碼里取值使用的表名是XXX,但是這是一個升級后已作廢的數(shù)據(jù)表,現(xiàn)在使用的是新表XXX_new,新增藥品因為在舊的對照表內(nèi)不存在所以造成無法結算。隨后立即致電軟件開發(fā)商,將分析結果與對方核對,確認是余杭醫(yī)保目錄更新后程序漏改了這一段代碼,從而快速解決問題。
分析源碼法可以在出現(xiàn)問題時,從程序內(nèi)部尋找原因,是一種直接、高效的維護手段;此外通過查看源代碼可以對程序的運行有所了解,也便于在問題發(fā)生時迅速定位并給予解決。
3.2 調試跟蹤法 有一些程序漏洞雖然在測試時沒什么問題,但在一些特殊情況下就會出現(xiàn),比如操作上或流程上的改變,這時僅靠分析源碼不一定能找出問題所在,特別是在信息管理員對源碼位置不熟悉的情況下就無法使用分析源碼法來排查問題。遇到這類情況就需要使用Debug調試程序來跟蹤排查問題,從而分析原因。
雖然編程語言有許多種,但都有調試程序。調試程序通俗地說就是程序查錯和分析工具。使用調試程序需要注意的是Step Into、Step Over和Step Out三個調試功能鍵的區(qū)別:Step Into就是單步執(zhí)行程序的每一條指令,遇到子函數(shù)就進入并且繼續(xù)單步執(zhí)行;Step Over是在單步執(zhí)行時,在函數(shù)內(nèi)遇到子函數(shù)時不會進入子函數(shù)內(nèi)單步執(zhí)行,而是將子函數(shù)整個執(zhí)行完再停止,也就是把子函數(shù)整個作為一步;Step Out就是當單步執(zhí)行到子函數(shù)內(nèi)時,可以直接執(zhí)行完子函數(shù)余下部分,并返回到上一層函數(shù)。當出現(xiàn)問題時,通過調試程序不僅可以知道程序在執(zhí)行到哪一段代碼時出錯,還可以知道各變量的取值是否正確。以 PB的Debug調試工具為例,在遇到之前分析源碼法中的問題時,首先在結算窗口的預結算代碼前雙擊鼠標設置斷點,然后點擊Start進入單步調試,在Local窗口觀察“醫(yī)保編碼”的變量X的取值是否正確。當變量太多時,在Watch窗口里插入該變量名“X”來實時跟蹤。當執(zhí)行到彈出提示窗口:“藥品序號=XXXXXX醫(yī)保編碼未匹配不能結帳”時,變量X的取值還是為空,Debug執(zhí)行指針指向了問題代碼行,查看該行附近的代碼,果然取值表設定為錯誤的表XXX。
調試跟蹤法可以跟蹤程序的運行過程,在不熟悉源碼的情況下迅速找到問題所在,并將程序狀態(tài)與預期狀態(tài)進行對比,通常與分析源碼法結合使用。
HIS軟件系統(tǒng)的維護,作者除了使用上述三種方法還依據(jù)醫(yī)院實際情況探索了一套適應本院的軟件維護的措施,如有計劃的集中處理需求;規(guī)范和保存各類接口升級的流程文檔;要求軟件開發(fā)商提供源程序,包括主要部分的數(shù)據(jù)字典等。這樣只需要維護人員熟悉數(shù)據(jù)庫SQL語言,掌握分析PB程序的方法,就能應付日常的維護工作。
近年來的調查顯示,軟件系統(tǒng)開發(fā)的工作量只占20%,而維護工作量卻占到80%,做好 HIS軟件維護是維持醫(yī)院正常醫(yī)療秩序的保證。所以根據(jù)醫(yī)院發(fā)展的需要不斷完善HIS軟件,才能延長 HIS的使用周期;及時排除程序BUG,才能保證 HIS的數(shù)據(jù)準確和穩(wěn)定運行。