l

2007年12月12日 星期三

例外處理 (2):名詞解釋

Failures (失敗), faults (缺陷), errors (錯誤), 和 exceptions (例外異常) 是我們在討論到例外處理時,經常會看到的幾個名詞。這些名詞看起來很像,而且也經常被當成同義字交互使用。然而事實上它們卻有著不同的涵義。瞭解這些名詞的定義將是我們探討例外處理的第一步。

當一個軟體元件 (或是程式) 無法依據其
功能性規格 (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 faultcomponent 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 失敗。

參考資料:

  1. 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.
  2. 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.
  3. P. A. Lee and T. Anderson, Fault Tolerance: Principles and Practice, 2nd ed., Springer, 1990.