計算機程序中 Bug 的類型大全與歷史
美國計算機科學家、圖靈獎獲得者詹姆斯·尼古拉·格雷(Jim Gray),在他的著名的論文“Why do computers stop and what can be done about it?”中首次提出了程序bug的類型,比如玻爾bug(Bohrbug)、 海森堡bug(Heisenbugs)等用著名科學家名稱命名的bug。后來又出現(xiàn)了更多的bug類型?,F(xiàn)在,讓我們來看看它們都是什么bug類型。
美國計算機科學家、圖靈獎獲得者詹姆斯·尼古拉·格雷(Jim Gray)
玻爾bug(Bohrbug)
大多數(shù)我們遇到的bug都是可以重現(xiàn)的,這些bug被統(tǒng)稱為玻爾bug(Bohrbug)。它是用丹麥著名物理學家、諾貝爾獲得者尼爾斯·波爾的名 字命名的。波爾首先在1913年提出了一個簡單、易于理解的原子模型概念。在波爾的模型中,原子中的電子的路徑和動量是可預知的。同樣的道理,玻爾 bug(Bohrbug)也是可預知的。如果讓軟件在相同的條件下運行,你可以讓bug再次顯現(xiàn)。例如,如果程序遇到空指針異常會崩潰,那么,設定相同的 輸入條件,你可以輕易的讓它們重新。
丹麥著名物理學家、諾貝爾獲得者尼爾斯·波爾
海森堡bug(Heisenbug)
所有有閱歷的程序員都遇到過這種情況:有個bug讓程序崩潰了,但當程序重啟后,這個bug消失了。不論你用多少的時間和精力來試圖讓bug重現(xiàn),bug就是人間蒸發(fā)了。這樣的bug被稱為海森堡bug(Heisenbug),它是用德國物理學家、量子力學的創(chuàng)始人、“哥本哈根學派”代表性人物維爾納·海森堡(Werner Heisenber)的名字命名,隱射其著名的“測不準原理”(又稱“海森堡不確定性原理”)。根據他的這個理論,在某一個給定的時間點,一個電子所處的位置是無法確定的,也無法跟蹤它的軌跡。當你去debug、探測、隔離一個bug時,你的這些動作會導致bug改變它們的行為表現(xiàn),這些bug就叫做海森堡bug(Heisenbugs)。這種事情是有可能的,比如,如果你使用未初始化的變量,這會導致一個bug出現(xiàn)。然而,當你試圖debug這個程序時,程序卻沒有任何異常,因為很多的debug工具會自動初始化變量為0,所以這些bug將不會再現(xiàn)。
德國物理學家、量子力學的創(chuàng)始人、“哥本哈根學派”代表性人物維爾納·海森堡(Werner Heisenberg)
曼德博bug(Mandelbug)
當bug產生的原因過于復雜而難以理解時,bug的出現(xiàn)也變得沒有規(guī)律,這些叫做曼德博bug(Mandelbug)。它是用分形幾何學之父本華·曼德博的名字命名。例如,操作系統(tǒng)中基于任務調度產生的bug就屬于曼德博bug(Mandelbug)。
分形幾何學之父本華·曼德博
薛定諤bug(Schroedinbug)
有時候,一個可以運行的程序,當你去看它的代碼時,發(fā)現(xiàn)里面有一個bug或有某些問題,程序完全不可能在這樣的bug下運行。但你再次運行這個程序 時,bug突然就其作用了,程序崩潰的了!雖然這聽起來很詭異,但這樣的bug確實存在,而且被叫做薛定諤bug(Schroedinbug)。它是用奧 地利理論物理學家、量子力學的奠基人埃爾溫·薛定諤的名字命名。隱射薛定諤著名的薛定諤貓思想實驗。 在量子力學中,像原子這樣的粒子可以存在于兩種或兩種以上的量子狀態(tài)中,但薛定諤認為,在更典型的物體,例如一只貓——由很多原子構成——存在于兩種狀態(tài) 下的可能性是沒有的。他提出了一種思想實驗:把一只貓、一個裝有氰化氫氣體的玻璃燒瓶和一個放射性原子核放進封閉的盒子里。當盒子內的監(jiān)控器偵測到衰變粒 子時,就會打破燒瓶,殺死這只貓。根據量子力學的哥本哈根詮釋,在實驗進行一段時間后,貓會處于又活又死的疊加態(tài)。可是,假若實驗者觀察盒子內部,他會觀 察到一只活貓或一只死貓,而不是同時處于活狀態(tài)與死狀態(tài)的貓。而在量子物理中,這被稱作疊加態(tài):貓同時處于生和死的狀態(tài)。
奧地利理論物理學家、量子力學的奠基人埃爾溫·薛定諤
回到我們的bug上,因為你在代碼中發(fā)現(xiàn)了這個問題,你改變了程序的輸出——程序要么就繼續(xù)運行,要么崩潰。所以,這種bug就叫做薛定諤bug(Schroedinbug)。
還有幾種其它類型的bug沒有在這里列出,例如“成長的bug(aging-related bugs)”——只有在程序運行很久之后才會出現(xiàn)的bug。