- 記錄問題解決日志
- 告警就是錯(cuò)誤
- 對(duì)問題各個(gè)擊破
- 報(bào)告所有的異常
- 提供有用的錯(cuò)誤信息
記錄問題解決日志
可以選擇符合需求的任何格式。下面這些條目可能會(huì)用得上探熔。
- 問題發(fā)生日期锰扶。
- 問題簡(jiǎn)述瞄桨。
- 解決方案詳細(xì)描述遣疯。
- 引用文章或網(wǎng)址,以提供更多細(xì)節(jié)或相關(guān)信息扶镀。
- 任何代碼片段蕴侣、設(shè)置或?qū)υ捒虻慕仄粒灰鼈兪墙鉀Q方案的一部分臭觉,或者可以幫助更深入地理解相關(guān)細(xì)節(jié)昆雀。
要記錄團(tuán)隊(duì)做出一個(gè)重要決策的原因。否則蝠筑,在6~9個(gè)月之后狞膘,想再重新回顧決策過程的時(shí)候,這些細(xì)節(jié)就很難再記得了什乙,很容易發(fā)生互相指責(zé)的情形挽封。
警告就是錯(cuò)誤
將警告視為錯(cuò)誤。簽入帶有警告的代碼臣镣,就跟簽入有錯(cuò)誤或者沒有通過測(cè)試的代碼一樣辅愿,都是極差的做法。簽入構(gòu)建工具中的代碼不應(yīng)該產(chǎn)生任何警告信息退疫。
對(duì)問題各個(gè)擊破
在解決問題時(shí)渠缕,要將問題域與其周邊隔離開來鸽素,特別是在大型應(yīng)用中褒繁。
單元測(cè)試的好處之一,是它會(huì)強(qiáng)迫形成代碼的分層馍忽。因?yàn)橐WC代碼的可測(cè)試棒坏,就必須把它從周邊代碼中解脫出來。
識(shí)別復(fù)雜問題的第一步遭笋,是將它們分離出來坝冕。就像試圖修復(fù)正在飛行的飛機(jī)的引擎,但是當(dāng)引擎被從飛機(jī)中取出來瓦呼,而且放在工作臺(tái)上之后喂窟,修復(fù)就變得容易了。同理,如何可以隔離出發(fā)生問題的模塊磨澡,也更容易修復(fù)發(fā)生問題的代碼碗啄。
隔離問題不應(yīng)該只在交付軟件之后才著手。在構(gòu)建系統(tǒng)原型稳摄、調(diào)試和測(cè)試時(shí)稚字,各個(gè)擊破的戰(zhàn)略都可以起到幫助作用。
報(bào)告所有異常
有一條新聞厦酬,提到一套大型航空訂票系統(tǒng)中發(fā)生了嚴(yán)重的問題胆描。系統(tǒng)崩潰,飛機(jī)停飛仗阅,上千名旅客滯留機(jī)場(chǎng)昌讲,整個(gè)航空運(yùn)輸系統(tǒng)數(shù)天之內(nèi)都亂作一團(tuán)。原因是什么减噪?在一臺(tái)應(yīng)用服務(wù)器上發(fā)生了一個(gè)未檢查異常剧蚣。
處理或是向上傳播所有的異常。不要將它們壓制不管旋廷,就算是臨時(shí)這樣做也不行鸠按。在寫代碼時(shí)要估計(jì)到會(huì)發(fā)生的問題
決定由誰來負(fù)責(zé)處理異常是設(shè)計(jì)工作的一部分。
不是所有的問題都應(yīng)該拋出異常饶碘。
報(bào)告的異常應(yīng)該在代碼的上下文中有實(shí)際意義目尖。
要傳播不能處理的異常。
提供有用的錯(cuò)誤信息
一方面提供給用戶清晰扎运、易于理解的問題描述和解釋瑟曲,使他們有可能尋求變通之法。另一方面豪治,還要提供具備關(guān)于錯(cuò)誤的詳細(xì)技術(shù)細(xì)節(jié)給用戶洞拨,這樣方便開發(fā)人員尋找代碼中真正的問題所在。
錯(cuò)誤類型:
- 程序缺陷负拟,即系統(tǒng)的bug烦衣,需要修復(fù)代碼才能解決;
- 環(huán)境問題掩浙,如數(shù)據(jù)庫連接失敗花吟、磁盤容量不足、權(quán)限不足厨姚,系統(tǒng)管理員可以解決此類問題衅澈;
- 用戶錯(cuò)誤,用戶操作問題谬墙,告訴用戶
像“無法找到文件”這樣的錯(cuò)誤信息今布,就其本身而言無助于問題的解決经备。“無法打開/andy/project/main.yaml以供讀取”這樣的信息更有效部默。
在提供更多信息的同時(shí)弄喘,不要泄露安全信息、個(gè)人隱私甩牺、商業(yè)機(jī)密蘑志,或其他敏感信息(對(duì)于基于Web的應(yīng)用,這一點(diǎn)尤其重要)贬派。