益處

Nassim Nicholas Taleb 在《Antifragile》中寫到:“錯誤包含豐富的信息”。我完全同意這個觀點。Bug 幫助我們更好地理解系統,告訴我們怎樣提高編碼、測試和調試技巧。所以我認為盡可能從 bug 中學習經驗,是再正常不過的事了。

我發現為每個有趣的bug記錄下來,讓我輕易學習到很多。在記錄的行為中我會對發生的事情思考得更深刻。同樣,一旦記錄下來,我可以在之后檢查發生的事情。偶爾,我也會瀏覽文件,只閱讀教訓部分,對我認為是從 bug 中學到的最有價值的經驗加強記憶。

我記錄 bug 文件至今已經有 13 年了。這是一段漫長的時間,但是我堅持下來了,因為作為一名程序員,它幫助我進步。嘗試一下吧,看看它是否也對你有益!

我有一個命名為 bugs.txt 的純文本文件。在文件的頂部是一個具備所有標題的模板,但是沒有包含信息。當我添加一個新的記錄,我復制模板部分,粘貼在模板下面。然后完成記錄并且填滿信息。大多數展示在上面例子中的 fields 應該是不需要聲明的。

有必要指出這并不是 bug 追蹤器。我并沒有添加所有我修復的 bug 。例如,如果我只是忘記在代碼中添加聲明,一旦發生這種情況,我就意識到問題出在哪里了,我并不會添加這條記錄。僅僅當 bug 本身,或是修復,或是調試過程特別有趣,我才會添加一條新的記錄。通常,是我導致了這個 bug。但是偶爾,特別是花幾天時間才追蹤到的困難 bug,盡管不是我造成的我也會添加一條記錄。

一旦修復了一個 bug,我的第一反應是松了口氣然后繼續前進。我試著一更正后就寫下這個記錄。這時我的腦海中依然清晰保留所有的細節。拖延會讓精確回憶發生的事情變得很困難(或者我壓根忘記寫下這條記錄)。

至今,我已經有 194 條記錄,平均每個月有一條新的記錄。最重要的是教訓部分。這里需要自我反省。是什么導致這個 bug 的特殊性?我發現經驗常常來自于三個不同的方面:

編碼。我在代碼中犯了什么錯誤?我是否忘記了 else 部分代碼?是否系統調用失敗,但沒有檢查 response?我在未來應該怎么調整代碼來防止這些問題?

測試。一般不包括本可以在測試中捕獲的 bug 。要是這樣的話,應該在哪個階段測試——單元、功能、系統?丟失了哪個測試用例?

調試。我本可以怎樣快速定位 bug?我是否使用了正確的方法?我是否假定了太多?我是否需要在代碼中使用更好的日志記錄?

index-icon-weibo index-icon-facebook index-icon-twitter github-1
wen-xin-2
? ??友情鏈接 | 法律說明? ? ? ? ? 北京起步科技股份有限公司 ??2006-2016 ? ? ? ?京ICP備13007148號