1. 程式人生 > >Bug、Defect、Error、Fault、Exception的區別

Bug、Defect、Error、Fault、Exception的區別

在電子管技術製造計算機的那個年代,那是計算機的主機重達數噸,並常常佔據整個房間的時代。在某個實驗室的某個平常的早晨,這個龐然大物突然停止了工作,我們的IT前輩們馬上就開始尋找出現這種情況的原因。憑藉設計圖紙的引導,他們很快就圈定了可能發生問題的那一部分。在接下來的檢查中,他們發現這次故障原來是一隻蟲子在經過兩隻繼電器時造成了短路所致。在修復了計算機並重新開始工作之後,負責計算機維護的工程師把這次故障記錄在了一份備忘錄上,以便將來其他人遇到類似的情況可以迅速的找到答案。當然,他還寫了一份文件給計算機的設計人員,希望以後在主機的散熱孔那裡可以加裝一層更加細密的金屬網,即不影響散熱,又可以防止蟲子爬到主機裡。

    發現上面的區別了嗎?一隻蟲子爬進主機引起短路的這個事件,更多的被我們稱為Bug,這個名詞一直從計算機硬體故障沿用到了計算機軟體故障。那麼Defect又是什麼呢?

還是看上面的這個例子。真正的Defect是計算機維護工程師提出來的那個問題:在主機的散熱孔那裡可以加裝一層更加細密的金屬網,即不影響散熱,又可以防止蟲子爬到主機裡。這是計算機設計人員疏忽的地方,是產品真正的Defect。而蟲子引發的那個故障只是這個Defect導致的故障的其中一種表現形式。也就是說,Bug是Defect的一種表現形式,而一個Defect是可以引起多種Bug的。
 

弄懂這兩個概念的區別,也就容易懂得Error、Fault和Exception的區別了。這三者一般在軟體中表示出現的一些錯誤程度。一般認為,Error為普通級別的錯誤,這個錯誤在經過更加嚴格的修正後會馬上解決。而Fault則認為是致命的錯誤,較之Error來說要嚴重很多,並且在短時間內來說不太容易解決。Exception一般認為是程式中可以擁有的一些異常分支,只是這些異常沒有被截獲,進行處理。
 

舉個例子,飛機飛行在高度為10000米的天空中,空乘小姐發現廁所的水龍頭沒有關閉而導致一些水外流出來,流出的水由於沒有防護裝置而流到了乘坐區,影響了環境。當空乘小姐想去打掃乘坐區衛生時,掃了幾下發現笤帚壞了。她需要來修理這個笤帚,而此時,機組人員報告飛機引擎壞了,所有人需要保持鎮定,穩定情緒,並快速做好跳傘準備,飛機發生了致命的錯誤,隨時會有生命危險。

這裡的水龍頭沒有關閉影響了飛機內環境衛生就是Exception,而笤帚壞了則屬於Error,飛機引擎壞了就是屬於Fault。通過這個例子,我們也可以知道,軟體出現了這三種類型的問題,首先處理Fault,其次是Error,最後才是Exception。