當一個軟體元件 (或是程式) 無法依據其功能性規格 (functional specification) 提供正常的服務時,我們說這個元件的執行結果失敗 (A failure occurs when the service provided by a component departs from its functional specification)。Errors 是元件內部的狀態 (state),此狀態可能導致該元件執行失敗。Errors 的例子有,null objects, stack overflow。Faults 則是導致錯誤發生的根本原因。
Faults 可以區分為兩大類:design fault 和 component fault。Design faults 又稱為 defects 或 bugs,是人們在軟體開發過程中所犯的問題。例如,忘記初始化物件、把除數設定為零、演算法設計錯誤等。Component faults 則是指軟體元件與軟體元件之間,或是軟體元件與執行環境之間互動時所產生的不正常情況。例如,一個原本運作正常的網路連線忽然中斷、儲存資料時發現硬碟空間不足、列印檔案時印表機未開啟等等。在開發軟體時,除非這兩類的 faults 有被妥善處理,否則 faults 將導致 errors,進一步使得軟體的執行產生 failures (fault->error->failure)。
Exceptions 則是程式語言中用來表達 errors 與 failures 的一種概念。舉例說明,當我們在某個 method X 內部偵測的一個 exception,此時該 exception 表示一個 error;也就是說,method X 處於某種錯誤狀態。如果我們不作任何處理,則該 exception 會傳遞給 method X 的呼叫者。因此,從呼叫者的角度來看,此時該 exception 就代表了一個 failure;也就是說,執行 method X 失敗。
參考資料:
- A. Avizienis, J.-C. Laprie, B. Randell, and C. Landwehr, “Basic Concepts and Taxonomy of Dependable and Secure Computing,” IEEE Transactions on Dependable and Secure Computing, vol. 1, no. 1, 2004.
- A. F. Garcia, C. M. F. Rubira, A. Romanovsky, and J. Xu, “A Comparative Study of Exception Handling Mechanisms for Building Dependable Object-Oriented Software,” Journal of Systems and Software, vol. 59, no. 2, pp.197-222, 2001.
- P. A. Lee and T. Anderson, Fault Tolerance: Principles and Practice, 2nd ed., Springer, 1990.