軟件運(yùn)行日志
--------------------------------------------------------------------------------
現(xiàn)代軟件日益復(fù)雜,徹底消除軟件中的錯(cuò)誤已經(jīng)被證明是不可能的,那么,及時(shí)發(fā)現(xiàn)錯(cuò)誤、定位錯(cuò)誤現(xiàn)場(chǎng)信息,迅速排除軟件錯(cuò)誤就成為非常重要的事情,甚至在軟件實(shí)際運(yùn)行環(huán)境中也是如此。軟件運(yùn)行日志就是捕獲錯(cuò)誤現(xiàn)場(chǎng)信息的一種重要手段。
軟件運(yùn)行日志是給誰看的?我認(rèn)為是軟件維護(hù)人員、資深客戶(比如客戶方的系統(tǒng)管理員)。軟件中的錯(cuò)誤信息,應(yīng)該分為兩類,一類是軟件用戶能夠理解的,另一類是軟件用戶不能理解的,需要軟件維護(hù)人員介入的。前者,通常與軟件用戶的操作行為相關(guān),軟件用戶在得到提示后,可以自行進(jìn)行處理;而后者,通常與軟件自身缺陷、軟件部署環(huán)境問題相關(guān)的,只有軟件維護(hù)人員才能處理的。很明顯,對(duì)于后者的詳細(xì)內(nèi)容,沒必要用告警對(duì)話框的方式提供給軟件用戶,而且這樣做,會(huì)大大增加軟件錯(cuò)誤處理的復(fù)雜度。直接將其寫入運(yùn)行日志,是最簡(jiǎn)便、也最可靠的方法。可以想象下面的場(chǎng)景,應(yīng)用軟件在某臺(tái)電腦上運(yùn)行出錯(cuò),軟件維護(hù)人員或客戶方系統(tǒng)管理員查看運(yùn)行日志,發(fā)現(xiàn)了一些系統(tǒng)模塊調(diào)用失敗的信息,并與開發(fā)人員遠(yuǎn)程溝通,開發(fā)人員根據(jù)這些信息,迅速定位報(bào)告錯(cuò)誤的代碼,隨后開發(fā)人員可能反饋,某個(gè)系統(tǒng)組件沒有的到正確的配置,也可能反饋,軟件中有一處缺陷,將在下一個(gè)版本或補(bǔ)丁包中得到修正。不管是哪一種情況,這一過程讓我們感到的是效率和愉悅。
在了解到軟件日志是給誰看的之后,我們就可以合理制定軟件中的錯(cuò)誤處理策略。一些錯(cuò)誤,我們需要逐層向上報(bào),最終得到妥善處理或者向用戶給出提示;另一些錯(cuò)誤,我們直接將其信息寫入軟件運(yùn)行日志,并向上反饋本函數(shù)發(fā)生了錯(cuò)誤,未能成功執(zhí)行。
軟件運(yùn)行日志的內(nèi)容有哪些?我認(rèn)為可以分為:關(guān)鍵信息提示、警告提示、錯(cuò)誤提示、致命問題提示、調(diào)試日志。關(guān)鍵信息提示,是指軟件執(zhí)行到了某些重要的節(jié)點(diǎn),就將相應(yīng)的信息寫入軟件運(yùn)行日志,通過這些關(guān)鍵信息提示,我們可以了解軟件的大致運(yùn)行過程是否正常,而它成本非常低廉,相比安裝龐大的開發(fā)調(diào)試環(huán)境。警告提示和錯(cuò)誤提示,都是用于提示軟件中的錯(cuò)誤,那么兩者之間的區(qū)別如何界定呢?還有,調(diào)試日志也是報(bào)告軟件錯(cuò)誤的,與這兩者又如何相區(qū)別呢?
我認(rèn)為,調(diào)試日志與警告提示、錯(cuò)誤提示的本質(zhì)性區(qū)別在于,調(diào)試日志是面向開發(fā)人員的,是從軟件執(zhí)行的角度發(fā)出的;警告提示、錯(cuò)誤提示是從軟件功能的角度發(fā)出的。換而言之,調(diào)試日志是記錄軟件運(yùn)行中的非正常現(xiàn)象,而警告提示、錯(cuò)誤提示是記錄軟件某項(xiàng)功能失常的相關(guān)信息。
我認(rèn)為,警告提示、錯(cuò)誤提示的本質(zhì)性區(qū)別在于,警告提示是軟件功能出現(xiàn)問題,但沒有徹底失效;錯(cuò)誤提示,就是此項(xiàng)功能完全失效,該項(xiàng)功能停止執(zhí)行,立即返回;致命問題提示,則是軟件整體安全受到威脅。反映到程序中,通常就是,在一個(gè)函數(shù)中檢測(cè)到錯(cuò)誤后,該函數(shù)以失敗的方式返回,就報(bào)告錯(cuò)誤提示;若函數(shù)仍能繼續(xù)執(zhí)行,就報(bào)告告警提示;若該錯(cuò)誤嚴(yán)重違例,比如斷言違例、內(nèi)存溢出、堆棧溢出等威脅穩(wěn)定性的錯(cuò)誤,就報(bào)告致命問題提示。
一般來說,致命性提示,通常是與軟件自身缺陷引起的,應(yīng)當(dāng)引起開發(fā)人員的重視;警告提示、錯(cuò)誤提示多半是軟件運(yùn)行環(huán)境配置問題引起的,但也不排除軟件缺陷、用戶操作等因素,應(yīng)當(dāng)引起軟件維護(hù)人員、系統(tǒng)管理員的注意。
對(duì)于軟件維護(hù)人員,調(diào)試日志意義不大,而其數(shù)據(jù)輸出量卻往往相當(dāng)大,因此,在軟件部署運(yùn)行環(huán)境下,通常應(yīng)當(dāng)通過配置開關(guān),關(guān)閉調(diào)試日志輸出。只有開發(fā)人員介入后,才有必要打開該開關(guān),從而在缺乏調(diào)試工具的環(huán)境中,獲得豐富的調(diào)試信息。
總的來說,將每一種錯(cuò)誤、每一種軟件環(huán)境配置問題都以對(duì)話框的方式提示出來,或許可以減小維護(hù)成本,代價(jià)卻是開發(fā)成本成幾何級(jí)數(shù)增長(zhǎng);軟件開發(fā)中省掉錯(cuò)誤處理,的確可減少一些成本,代價(jià)是即便一個(gè)環(huán)境配置問題,都需要開發(fā)人員現(xiàn)場(chǎng)調(diào)試,軟件維護(hù)成本大大增加。而軟件運(yùn)行日志,無疑是兩者之間取得平衡的關(guān)鍵性武器。