[閒聊] [分享] 論規範外包商Error Handling的重要

看板Soft_Job (軟體人)作者 (are you there ?)時間16年前 (2010/04/12 11:30), 編輯推噓2(203)
留言5則, 5人參與, 最新討論串1/1
「本文已取得原作者同意轉錄」 http://blog.ragic.com/tw/outsource-error-handling/ http://blog.ragic.com/tw/outsource-error-handling-2/ 棍! 廠商寫的系統訊息亂七八糟 – 論規範外包商Error Handling的重要(上) 棍! 廠商寫的系統訊息亂七八糟 – 論規範外包商Error Handling的重要(下) 到哪裡一、魔鬼降臨 在總裁一句 “人事凍結” 的命令下, 身為一間大企業的MIS工程師, 展開了 與外包商長期的角力。”魔鬼就在執行的細節裡” 一句話點破了外包管理省 工省事的神話。為了避免包商拿了錢一拍兩散的常態, 或千拜託萬拜託卻另 外要你簽個 25% MA。因此驗收合約的精細度就變得很重要, 今天要和大家 談的就是規範Error Handling和Return Code這檔事。 參與專案外包工作已經十個年頭, 從三五人的小公司到號稱遵循CMMI/ISO制 度的大公司, 幾乎沒看到有專案, 在需求文件中對包商交付系統的 Error Handling 做規範。因此當專案結束, 維運人員接手一段日子後, 才 發現原來系統傳回 “帳號密碼錯誤”, 有時候事實上是 “資料庫連線失敗” 或 “伺服器磁碟已滿”。搞得維運人員灰頭土臉, 三不五時被老闆叫去罵系 統寫的爛。其實探究原因, 這是由於開發系統時, 工程師常以工程的角度去 做Error Handling, 而非以維運角度去處理。 “那要如何在合約中簡單的規範下包商的處理方式呢?” 下面將建議幾個法則。 (這裡我們不談“throw early, catch late” 之類的程式編寫原則, 那是下包 商工程師撰寫上的藝術, 我們在合約中不需多加干涉。) 二、法則1: “用責任區來編Error Code” 對工程師來說, 處理一個錯誤, 最重要的就是 “技術上這是哪類的錯誤?”, 分類方法可能是DB, AP, Network, … 但對維運人員來說, 看到一個錯誤, 最 重要的就是 “誰該處理?”, 分類方法是 “使用者密碼錯誤-使用者要處理”, “排程匯入供應商的產品資料格式有誤-供應商的錯”,“網路中斷-喂!網管醒醒”, … 為了強迫包商工程師改變思考習慣, 避免他不分青紅皂白的全部 “try…catch…” 起來傳回同一個錯誤。進而變成有效的下包商驗收準則, 你必須先找出與這系 統相關的 “責任區”, 如果Error Code有4碼, 第一碼可以是責任區的代號, 像: 1xxx-代表使用者操作問題 – 像帳號密碼有誤。 2xxx-代表供應商介接系統問題 – 可能是匯入資料格式有誤, 或根本連不到供 應商的主機。 3xxx-代表系統基礎環境有問題 – MIS部門要check是否磁碟已滿, 或網路設備 異常。 其它三碼則由下包商工程師自行編排分類。 相信我, 這時間花的值得, 這樣 工程師在寫程式時就會試著去判斷問題的原因, 發生錯誤時, 你手下可憐的維 運團隊也不需要再推敲追查半天, 你也不需要無助的找大老闆坐鎮, 來開那種 永遠沒結果的跨部門推責大會。另外, 當程式歸責錯誤時, 也可以明確指出是 程式 “defect”, 要求下包商修正。下包商再也沒有理由說 “這個是新需求, 要再算錢!”。 三、法則2: 應妥善處理前端錯誤訊息, 應引導使用者排除問題 如果您不希望天天有客戶打電話進來客訴, 就得讓錯誤訊息, 能引導使用者自 已排除問題, 這項需求的確認比較麻煩, 可能需要透過與下包商情境的商談來 事先定義, 並透過第一線客服人員或直接由使用者試用。當然, 最好是錯誤訊 息可以不用透過修改程式, 直接以 config file / resource file 的方式, 由維運人員依上線後的客訴情況來微調錯誤訊息。 但要注意, 詳細的引導可能會讓你的系統更新困難, 因此一些常變動, 但分散 在各頁面的部份, 像客服電話號碼, 或某個常變動的權限申請程序, 應要求廠 商讀取相同 config, 或 Link到同一則 FAQ。 四、法則3: 應妥善處理前端錯誤訊息, 不可透露程式安全細節 有時程式錯誤, 廠商為了方便debug, 會把程式哪行出錯的訊息dump在畫面上, 甚至還包含了IP, DB Account, Password 等資訊, 不禁叫人捏一把冷汗。近年 來一些 Application Server 已支援 “開發模式” 與 “上線模式”, 上線模式時 會自動隱藏錯誤細節。但無論透過什麼方式, 廠商必須遵守 “catch 所有可能 錯誤” 的原則, 畢竟沒有一位高階主管在看到系統彈出醜醜的 “Http 500 Interal Server Error” 時, 會覺得你負責的系統做的棒極了! 五、法則4: 後端錯誤log應越詳細越好 為了追蹤問題, 後端錯誤log當然應越詳細越好。若系統流量很大, 為了分析方 便, 可考慮要求廠商log應該是 “可被匯入DB分析的”, “具備自動rotate或灌爆 警示的功能。完整的記錄欄位除了發生錯誤的trace stack之外, 還可依需求包 含來源IP、案件代號、發生時間、輸入資料等資訊, 以便連結到特定客訴使用者 行為, 或進行錯誤類型的統計。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.87.162.162

04/12 12:39, , 1F
確實是要如此, 不過實行的程度有多少就...
04/12 12:39, 1F

04/12 12:55, , 2F
付多少錢 做多少事 不管在哪一環都一樣.........
04/12 12:55, 2F

04/12 12:58, , 3F
作者經驗很豐富,我覺得這篇文章很值得參考
04/12 12:58, 3F

04/12 14:33, , 4F
推,切中要領...
04/12 14:33, 4F

04/12 23:47, , 5F
寫給user的程式, 還要防範user造成的error XD
04/12 23:47, 5F
文章代碼(AID): #1BmfF6XB (Soft_Job)
文章代碼(AID): #1BmfF6XB (Soft_Job)