热门问题
时间线
聊天
视角

海森堡bug

来自维基百科,自由的百科全书

Remove ads

程序設計術語中,海森堡bug(英語:heisenbug)是指在嘗試研究它時似乎會消失或者改變行為的bug(程序錯誤)。[1][2][3]該詞彙是關於物理學家維爾納·海森堡名字的雙關語,他最先斷言了量子力學觀察者效應——觀察系統的行為將不可避免地將改變其狀態。電子學中的傳統用語則是探針效應英語Probe effect,指連接一個測試探針英語Test probe到設備將改變其行為。

類似的詞語有玻爾bugbohrbug)、曼德博bugmandelbug[4][5][6]薛定諤bugschrödinbug[7][8],它們偶爾被用於指代其他類型的非尋常軟件缺陷,但通常以開玩笑的心態使用。[9][10][11]

例子

之所以會出現海森堡bug,是因為通常的調試手段,諸如插入輸出語句或是掛接調試器,往往會修改程序代碼,或是更改變量內存地址,或是改變其執行時間。這都可能影響程序的行為。如果正好影響到了bug,就有可能產生海森堡bug。

海森堡bug的一個常見情況是,bug只在打開編譯器優化時出現,而關閉優化再編譯程序(使用調試器時通常如此)則bug消失。一些在優化後的程序中通常會放入寄存器的值,在調試狀態下會放入到主內存。這會造成一些影響,比如這可能會影響浮點數比較的結果,因為內存中的值可能比寄存器中的值有更小的範圍和精度[來源請求]。與此類似,CC++等語言中使用的運行時斷言的副作用可能導致海森堡bug,因為當生產環境的代碼使用NDEBUG宏關閉斷言後,測試表達式不會被求值。

海森堡bug的其他常見原因是使用未初始化的變量的值(調試時此變量的初始值或地址可能有變化),或者使用了無效的英語Fandango on core指標(調試時可能指向了不同的地方)。調試器也經常提供監視器(watches)或其他用戶界面,它們也可能添加額外的原始碼來隱秘地執行(例如屬性存取器),從而改變程序的狀態。[12]

時間也可能是海森堡bug的一個因素,尤其是對於多線程應用程式而言。在調試器控制下執行的程序與正常執行的程序在運行時間上會有差異。使用調試器進行逐行單步調試時,時間敏感的bug(例如競爭危害)可能不會發生。當行為涉及到與不在調試器控制下的實體進行交互時,例如兩台計算機之間的網絡數據包處理時,則更是如此。

海森堡bug可以被視為信息技術中的觀察者效應英語Observer effect (information technology)的一個實例。沮喪的程式設計師可能會幽默地指責一個海森堡bug是由於月相[13]或其他因素,或者猜測它是因為Α粒子宇宙線影響計算機硬件而導致的軟性錯誤所致(如果只發生了一次)。

Remove ads

相關詞彙

詞彙「bohrbug」是海森堡bug的一個反義詞,它指良好、穩定的bug。就像確定性的玻爾模型一樣,它們不改變自己的行為,並且相對容易被檢測到。[14][15]

曼德博bug(mandelbug,名字取自本華·曼德博曼德博集合)是原因極其複雜而很難修復的bug,其行為看上去混亂甚至存在不確定性。它也指程式設計師深入檢查代碼、修復它們時會發現更多bug的bug。[來源請求]

薛定諤bug(schrödinbug,名字取自埃爾溫·薛定諤及他的薛定諤貓)是程式設計師發現一個永遠不應該被觸發的情況發生的bug。[來源請求]

興登堡bug(hindenbug,[16][需要較佳來源]名字取自興登堡號空難)是具有災難性行為的bug。

希格斯bug子(higgs-bugson,名字取自希格斯玻色子)是一個基於觀測到的條件(最常見的是模糊相關的日誌項和似是而非的用戶報告),而預計會出現的bug,但它幾乎不可能在開發過程和測試環境下重現。這個詞也可能指代一個在代碼中的明顯bug(被數學驗證),但是在執行中無法觀察到,或是難以在實際執行中發現。

Remove ads

詞彙歷史

該詞彙在1985年被詹姆斯·尼古拉·格雷在一篇關於軟件故障的論文中使用[17],並也在1986年由Jonathan Clark和Zhahai Stewart在郵件列表(之後的Usenet新聞組)comp.risks英語comp.risks中使用。[18]

供職於IBM的研究員Bruce Lindsay英語Bruce Lindsay (IBM Fellow)在2004年的ACM Queue英語ACM Queue採訪中確認,Heisenbug被最初定義時他在場。[19][需要解釋]

更早它於1983年在ACM的出版物中有出現。[20]

解決

海森堡bug難以被發現和修復,而且在嘗試修復它的時候經常會引起更多意料之外的程序行為。原因是這種問題的出現通常是由另外一個bug為其提供支撐,使程序行為在調試過程中難以預測和分析。總體來看,隨着軟件的成熟,海森堡bug的數量將會減少。[21]

參見

參考資料

外部連結

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads