2010-04-05 16 views
6

你做什麼錯誤檢查?什麼錯誤檢查實際上是必要的?我們是否真的需要檢查文件是否已成功保存?如果它從第一天開始測試並且工作正常,它不應該始終工作嗎?錯誤檢查過度殺毒?

我發現自己錯誤檢查每一件小事,大多數時候如果感覺過度殺傷。比如檢查文件是否已成功寫入文件系統,檢查數據庫語句是否失敗.......應該不是這些工作或不工作的東西?

你做了多少錯誤檢查?是否存在錯誤檢查的元素,因爲您相信它會起作用?

我確定我記得在某處寫着「不要測試那些永遠不會發生的事情」的東西.....雖然不記得它的來源。

那麼,所有可能失敗的東西都應該檢查失敗嗎?或者我們應該相信這些簡單的操作?例如,如果我們可以打開一個文件,我們是否應該檢查是否讀取每一行失敗?也許它取決於應用程序或應用程序本身內的上下文。

聽到別人怎麼做會很有意思。

UPDATE:作爲一個簡單的例子。我保存一個表示圖庫中圖像的對象。然後我將圖像保存到光盤。如果文件保存失敗,即使對象認爲存在圖像,我也必須將圖像顯示出來。我可以檢查圖像保存到光盤的失敗,然後刪除對象,或者將圖像保存在事務中(工作單元) - 但使用使用表鎖定的數據庫引擎時可能會變得非常昂貴。

謝謝,

詹姆斯。

回答

0

我一般遵循這些規則。

  1. 過度驗證用戶輸入。
  2. 驗證公共API。
  3. 使用斷言編譯生產代碼的其他一切。
1

如果您的空閒空間用盡並嘗試寫入文件,並且不檢查錯誤,您的應用程序將無聲無息或出現愚蠢的消息。我討厭當我在其他應用程序中看到這個。

+0

也許你應該買一個更大的硬盤? – Malfist 2010-04-05 18:44:54

+1

非常有趣。這只是一個例子。還有一個是沒有寫信給某些目錄的權利。 – Andrey 2010-04-05 19:11:46

1

我沒有解決整個問題,只是這一部分:

所以應該可能 可能失敗檢查一切都失敗? 或者我們應該相信那些更簡單的 操作?

在我看來,錯誤檢查在下一步很重要時最重要。如果打開文件失敗將導致錯誤消息永久丟失,那麼這是一個問題。如果應用程序將簡單地死亡並給用戶一個錯誤,那麼我會考慮另一種問題。但是默默地死去,或者靜靜地掛起來,是一個你應該盡力去編碼的問題。所以不管是不是「簡單的操作」與我無關;它取決於接下來會發生什麼,或者如果失敗,結果會是什麼。

0

關於你的榜樣......

我省代表在畫廊圖像的對象。然後我將圖像保存到光盤。如果文件保存失敗,即使對象認爲有圖像,我也會顯示[無]圖像。我可以檢查圖像保存到光盤的失敗,然後刪除對象,或者將圖像保存在事務中(工作單元) - 但使用使用表鎖定的數據庫引擎時可能會變得非常昂貴。

在這種情況下,我建議將圖像保存到磁盤第一保存對象之前。這樣,如果圖像無法保存,您不必嘗試回滾圖庫。一般來說,依賴關係應該先寫入磁盤(或放入數據庫)。

至於錯誤檢查...檢查有意義的錯誤。如果fopen()爲您提供了一個文件ID並且您沒有收到錯誤,那麼您通常不需要檢查fclose()關於返回「無效文件ID」的那個文件ID。但是,如果文件打開和關閉是不相交的任務,那麼檢查該錯誤可能是一個好主意。

0

這可能不是你正在尋找的答案,但是當你在你想要做的事情的全部背景下看時,只有一個「正確的」答案。

如果你正在編寫一個供內部使用的原型,並且如果你遇到了奇怪的錯誤,那麼它並不重要,那麼通過增加額外的檢查來浪費時間和公司資金。另一方面,如果你正在編寫空中交通管制的生產軟件,那麼處理每一個可能的錯誤的額外時間可能會花費很多。

我認爲這是一種折衷 - 編寫錯誤代碼所花費的額外時間與在發生錯誤時處理錯誤的好處。宗教處理每一個錯誤並不是最佳的海事組織。