1. 程式人生 > >調試九法 讀書筆記

調試九法 讀書筆記

IV 產品 一個bug 知識 時間 基礎 統計數據 如何 並且

作者阿甘斯是一位經驗豐富的工程師,他根據多年的系統設計和調試經驗,發現了兩條重要的事情:

(1)如果查找一個bug花費了大量的時間,那麽原因可能是忽略了某個最基本的、最重要的規則,一旦應用了那條規則,很快就會找到問題。

(2)擅於快速調試的人已經深刻理解了這些規則,而那些很難理解或使用這些規則的人則很難找到bug。

書中的9條規則很簡單,多數人看了可能會說:“不是一些顯而易見的規則嗎?”,但是知易行難,理解並應用才是最重要的。這些規則通用性極強,不僅僅適用於工程師,因為這些基礎規則是用來提供查找問題的全新方法,並讓你快速找到核心問題。

下面是這九條規則:

<1>理解系統

<2>制造失敗

<3>不要想,而要看

<4>分而治之

<5>一次只改一個地方

<6>保持審計追蹤

<7>檢查插頭

<8>獲得全新觀點

<9>如果你不修復bug,它將永遠存在

下面分別解釋這9條規則:

<1>理解系統

這是最重要的一條規則,所以放在第一條。你必須理解系統的工作原理及它是如何設計的。在某些情況下還得知道為什麽這樣設計。如果你沒有理解系統的某個部分,那麽這通常是出問題的地方。

理解系統最基本的辦法就是閱讀手冊。產品說明書、官方的技術支持文檔等,都歸屬於手冊這一含義。仔細閱讀手冊,解決問題的關鍵隱藏在細節中,遇到問題不要盲目地相信你的記憶能力,該翻手冊時就要翻。通過閱讀手冊掌握基礎的知識,了解工作的流程,這樣就能迅速定位錯誤是由哪個步驟造成的。所以,夯實基礎十分重要。

<2>制造失敗

重現錯誤是為了觀察它發生的條件,找到原因,並且檢查是否修復了這個錯誤。你觀察時必須足夠細致,記錄你的步驟。查找那些不受你控制的條件(導致間歇性的失敗),例如未初始化的數據,隨機數據輸入,多線程同步和外部設備。不要過於相信表面的統計數據,被切斷腿的小昆蟲遭遇突響的聲音卻不逃跑不是因為聽覺器官在腿上!你要正確地切入要點,不被表面現象所迷惑。當你決絕了一個問題,記住這次經歷,將你解決問題的工具保留下來,保不準下次就得用上。

<3>不要想,而要看

親眼查看失敗,留意實際情況發生的過程,不要想當然的憑想象猜測。通過觀察,讓你能盡量縮小範圍至幾種可能性之內。你可以利用工具去觀察錯誤,但必須知道,工具也會影響要測試的對象。

<4>分而治之

這是調試的核心。類似於二分查找法,根據錯誤特征反復將問題分成好的一般與壞的一半,來縮小搜索範圍,進一步研究有問題的一半。當錯誤的特征不明顯時,可以嘗試放大這個特征。查找問題時從有問題的分支上溯查找。bug之間相互保護,相互隱藏,所以出現多個bug時,修復已知的bug,解決一個,往往連帶著解決了多個。

<5>一次只改一個地方

改動後不能解決問題要還原後再進行下一次改動,因為改動了後,環境條件也會發生改變,會影響錯誤的查找。每次改動專註於一處地方。你要能明白正常情況下的結果,與你遇見的情況做對比。在改動時,要隔離關鍵因素以確保每次改動只改變了一個。

<6>保持審計追蹤

記錄步驟(bug隱藏在細節中),要將調試的信息關聯起來。運用工具記錄步驟,好記性不如爛筆頭。

<7>檢查插頭

不要忽略基礎性問題的可能性,設備突然不能工作了,有可能是你的腳不小心將插頭踢松了。當你用工具來測試時,確保你的工具沒問題,用壞的氣筒打氣,問題並不出在輪胎上。

<8>獲得全新的觀點

放下無謂的自尊向他人,最好是專家求助,他會給你帶來新的觀點。在咨詢時,報告問題的癥狀而不是你認為的原因(理論),這會將他人陷入你的固定思維中。學會利用工具搜索問題,比如Google。向小黃鴨傾訴你的想法,以理清你的思路。

<9>如果你不修復bug,他將依然存在

發現問題並采取措施後檢查問題確實被修復了,且是由修復措施解決的。間歇性的bug如果不修復會一直存在。

授人以魚不如授人以漁,作者沒有講述遇見某個具體的問題,你要怎麽怎麽,他通過九個規則讓你學會找到問題,問題解決方式往往簡單,難的是如何去找到這個問題。

調試九法 讀書筆記