l

2013年5月3日 星期五

為什麼例外處理那麼難(4):工具支援觀點

Apr. 29 22:40~23:18

image

 

Tool-Support View(工具支援觀點)

工具支援觀點從開發環境支援例外處理的角度來探討為什麼例外處理哪麼難這個問題。從工具支援觀點來比較Java語言與C#語言,Java編譯器對checked exception會遵循handle-or-declare rule(請參考《C. C. Agile 聚會Sprint 6 精華報導》),因此在開發階段編譯器會提醒使用者有哪些「應該被處裡的例外沒有被關注到」。C#則沒有區分checked或是unchecked例外,因為針對未被捕捉的例外,編譯器並不會提供特別的提醒。

螢幕快照 2013-04-29 下午10.47.57

***

但是,Java語言的Tool-Support也造成兩個嚴重的後遺症:

  • Interface evolution problem   
  • Ignored checked exception

這兩個問題Teddy在部落格中談過很多次,就不再贅述了。

***

為了提高軟體的強健度,開發人員需要一個提醒機制,告知那些操作有可能產生例外,否則開發人員更容易忽略例外處理,只能等runtime發生錯誤時再回頭修補(還需要遇到有良心的開發人員才會回頭修補挑眉質疑。至於這個提醒機制,是否需要像是Java語言的做法,強制區分checked與unchecked例外,Teddy認為並非重點。但很可惜的是,在只支援unchecked例外的語言與開發環境中,對於「那些操作有可能產生例外」的提醒支援實在是太少了、實在是太少了實在是太少了

***

友藏內心獨白:這一集內容雖短,但含意深遠啊。

6 則留言:

  1. 學弟妹有論文題目可以做了

    回覆刪除
    回覆
    1. 例外處理的工具支援題目已經做了好幾年了啊...XD

      刪除
  2. 有沒有試過 Go 語言的 Exceptional Handling?

    回覆刪除
    回覆
    1. Hi Steven,

      我沒用過 Go...剛剛Google了一下,找到這篇討論http://stackoverflow.com/questions/7198037/exception-handling-in-google-go-language,其中提到『idiomatic Go style is to use error codes to tell the caller about errors』,這一點和 Java/C# 鼓勵使用 exception 而不要用 return code 的想法剛好相反。滿有趣的,有空我會去研究一下,謝謝。

      刪除
  3. 你好, 請問文中的Interface evaluation problem, 是指"interface evolution"嗎? 謝謝.

    回覆刪除
    回覆
    1. 您說的是對的,錯誤已修正,謝謝。

      刪除