1. 程式人生 > >你知道Bug也有分類的嗎?

你知道Bug也有分類的嗎?

美國電腦科學家、圖靈獎獲得者詹姆斯·尼古拉·格雷(Jim Gray)

美國電腦科學家、圖靈獎獲得者詹姆斯·尼古拉·格雷(Jim Gray)

美國電腦科學家、圖靈獎獲得者詹姆斯·尼古拉·格雷(Jim Gray),在他的著名的論文“Why do computers stop and what can be done about it?”中首次提出了程式bug的型別,比如玻爾bug(Bohrbug)、 海森堡bug(Heisenbugs)等用著名科學家名稱命名的bug。後來又出現了更多的bug型別。現在,讓我們來看看它們都是什麼bug型別:

玻爾bug(Bohrbug)

大多數我們遇到的bug都是可以重現的,這些bug被統稱為玻爾bug(Bohrbug)。它是用丹麥著名物理學家、諾貝爾獲得者尼爾斯·波爾的名 字命名的。波爾首先在1913年提出了一個簡單、易於理解的原子模型概念。在波爾的模型中,原子中的電子的路徑和動量是可預知的。同樣的道理,玻爾 bug(Bohrbug)也是可預知的。如果讓軟體在相同的條件下執行,你可以讓bug再次顯現。例如,如果程式遇到空指標異常會崩潰,那麼,設定相同的 輸入條件,你可以輕易的讓它們重新。

丹麥著名物理學家、諾貝爾獲得者尼爾斯·波爾

丹麥著名物理學家、諾貝爾獲得者尼爾斯·波爾

海森堡bug(Heisenbug)

所有有閱歷的程式設計師都遇到過這種情況:有個bug讓程式崩潰了,但當程式重啟後,這個bug消失了。不論你用多少的時間和精力來試圖讓bug重現,bug就是人間蒸發了。這樣的bug被稱為海森堡bug(Heisenbug),它是用德國物理學家、量子力學的創始人、“哥本哈根學派”代表性人物維爾納·海森堡(Werner Heisenber)的名字命名,隱射其著名的“測不準原理”(又稱“海森堡不確定性原理”)。根據他的這個理論,在某一個給定的時間點,一個電子所處的位置是無法確定的,也無法跟蹤它的軌跡。當你去debug、探測、隔離一個bug時,你的這些動作會導致bug改變它們的行為表現,這些bug就叫做海森堡bug(Heisenbugs

)。這種事情是有可能的,比如,如果你使用未初始化的變數,這會導致一個bug出現。然而,當你試圖debug這個程式時,程式卻沒有任何異常,因為很多的debug工具會自動初始化變數為0,所以這些bug將不會再現。

德國物理學家、量子力學的創始人、“哥本哈根學派”代表性人物維爾納·海森堡(Werner Heisenberg)

德國物理學家、量子力學的創始人、“哥本哈根學派”代表性人物維爾納·海森堡(Werner Heisenberg)

曼德博bug(Mandelbug)

當bug產生的原因過於複雜而難以理解時,bug的出現也變得沒有規律,這些叫做曼德博bug(Mandelbug)。它是用分形幾何學之父本華·曼德博的名字命名。例如,作業系統中基於任務排程產生的bug就屬於曼德博bug(Mandelbug)。

分形幾何學之父本華·曼德博

分形幾何學之父本華·曼德博

薛定諤bug(Schroedinbug)

有時候,一個可以執行的程式,當你去看它的程式碼時,發現裡面有一個bug或有某些問題,程式完全不可能在這樣的bug下執行。但你再次執行這個程式 時,bug突然就其作用了,程式崩潰的了!雖然這聽起來很詭異,但這樣的bug確實存在,而且被叫做薛定諤bug(Schroedinbug)。它是用奧 地利理論物理學家、量子力學的奠基人埃爾溫·薛定諤的名字命名。隱射薛定諤著名的薛定諤貓思想實驗。 在量子力學中,像原子這樣的粒子可以存在於兩種或兩種以上的量子狀態中,但薛定諤認為,在更典型的物體,例如一隻貓——由很多原子構成——存在於兩種狀態 下的可能性是沒有的。他提出了一種思想實驗:把一隻貓、一個裝有氰化氫氣體的玻璃燒瓶和一個放射性原子核放進封閉的盒子裡。當盒子內的監控器偵測到衰變粒 子時,就會打破燒瓶,殺死這隻貓。根據量子力學的哥本哈根詮釋,在實驗進行一段時間後,貓會處於又活又死的疊加態。可是,假若實驗者觀察盒子內部,他會觀 察到一隻活貓或一隻死貓,而不是同時處於活狀態與死狀態的貓。而在量子物理中,這被稱作疊加態:貓同時處於生和死的狀態。

奧地利理論物理學家、量子力學的奠基人埃爾溫·薛定諤

奧地利理論物理學家、量子力學的奠基人埃爾溫·薛定諤

回到我們的bug上,因為你在程式碼中發現了這個問題,你改變了程式的輸出——程式要麼就繼續執行,要麼崩潰。所以,這種bug就叫做薛定諤bug(Schroedinbug)。

還有幾種其它型別的bug沒有在這裡列出,例如“成長的bug(aging-related bugs)”——只有在程式執行很久之後才會出現的bug。

(via: http://www.vaikan.com/types-of-bugs/)