2012-07-30 46 views
2

我一直在考慮休眠故障,無法找出一個例子。根據定義,休眠故障是一種故障(代碼缺陷),不會導致錯誤,因此不會導致故障。任何人都可以給我一個例子嗎?掠過我心中唯一的辦法就是unusued bug的代碼.. 感謝休眠故障的一個例子?

回答

4

休眠故障是比人們想象的要普遍得多。大多數程序員都經歷過思考「我在想什麼?怎麼可能永遠運行正確?」,即使代碼沒有表現出錯誤的行爲的時刻。經典案例是錯誤的角落處理,例如在失敗的內存分配上:

char *foo = malloc(42); 
strcpy(foo, "BarBaz"); 

上面的代碼將在大多數情況下正常工作,並通過測試就好;然而,當malloc由於內存耗盡而失敗時,它會慘敗。故障在那裏,但是休眠。

+0

太好了,謝謝!任何其他與內存不相關的例子? – user970696 2012-07-30 08:58:36

2

休眠故障只是那些沒有得到透露,直到您發送正確輸入[編輯:或情況]系統。

一個典型的例子是從Therac-25。在技​​術人員使用該系統變得「流利」之前,不會發生由輸入上不太可能產生的一組鍵引起的競爭狀況。他們記住了常見治療的關鍵,這意味着他們可以很快進入。

浮現在我的腦海裏一些其他的:

  • 千年蟲都處於休眠狀態的故障,直到2000年到來的時候...
  • 的Photoshop 7仍然運行確定我的Windows 7機器上,yet it thinks my 1TB disks are full 。一種解釋是用於容納可用空間的數據類型不是爲了解釋如此大量的可用空間而設計的,並且存在導致可用空間不足的溢出。
  • 用TFTP傳輸一個大於32MB的文件(塊計數器只能在16位中進入65535)可以在很多舊的實現中發現一個休眠錯誤。

在最後一組例子中,可以說沒有規範要求這些系統支持這些實例,所以它們並不是真正的缺點。但是,這是完整的規格。