Bug的型別

edithfang發表於2014-06-24

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

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

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

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

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

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

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

本文轉載自:外刊IT評論
相關閱讀
評論(0)

相關文章