
第十章
獵殺 Bug
如果除錯是去除軟體
bug
的流程,
編寫程式必定是把它放入的流程。
- Edsger Dijkstra
這是開放的季節,一個持續一整年的季節。不需要許可證,沒有任何限制。請自己帶著
短槍,進入開放的軟體原野,徹底去除那些令人討厭的惡棍、讓人難以捉摸的
bug
,打
扁它們,讓它們死。
OK,事實不是這麼美好。但有時你會遇到成群結隊的 bug 聯合起來對付你的程式碼。
散彈槍是唯一的回應。
有一個老故事是這麼說的:程式員編寫程式。程式員不完美。程式員的程式不完美。因
此它的第一次不會完美地運作。所以我們有 bug。 75
如果我們培養更好的程式員,顯然我們會培養更好的 bug。
有一些 bug 是簡單的錯誤,很容易找到並修改。當我們遇到這種 bug 時,代表我們很幸
運。
大部分的 bug(會讓我們花費好幾個小時的努力來追蹤,同時讓毛囊與頭髮色素細胞死
去)是令人討厭的微細問題。它們會很奇怪地互動且令人驚訝,會讓演算法產生出人意
料的結果,讓看起來很簡單的軟體產生無法預知的行為。它肯定被搗蛋鬼附身了。
這個問題並非只限於新手程式員,專家也很容易發生。我們的工藝先軀也蒙受痛苦,傑
出的電腦科學家 Maurice Wilkes 曾說:我清楚地記得
[...]
我在
EDSAC
室與打孔設備之