軟件構造-犯錯的藝術——健壯性與正確性,異常,防護式編程,debugging與test的思考與總結

 

健壯性與正確性

健壯性與正確性是不一樣的——一個傾向於使程序儘量保持運行,即便遇到錯誤,一個傾向於使程序儘量正確,不在乎保持運行java

異常

異常分爲兩種——checked exception與unchecked exception編程

兩者的區別在於:ide

  • checked exception須要顯式的處理,說白了就是編程者必需要麼用catch抓住它,而後在try中想辦法處理掉,要麼顯式的將這個異常扔到調用的上一級方法,也就是甩鍋。總而言之,你永遠不能無視checked exception
  • unchecked exception則徹底相反,你不捕捉不到它們。由於這些異常一旦產生,就像接到了燙手山芋同樣,容不得咱們再把他保留著或者throw到上一級方法,這些異常會在其產生的地方直接停止程序,並在控制檯打印錯誤信息。

 

 

 異常使用的注意事項

  • catch 不能獨立於 try 存在。
  • 在 try/catch 後面添加 finally 塊並不是強制性要求的。
  • try 代碼後不能既沒 catch 塊也沒 finally 塊。
  • try, catch, finally 塊之間不能添加任何代碼。

關於異常的LSP原則

  • 若是子類型中override了父類型中的函數,那麼子類型中方法拋出的異常不能比父類型拋出的異常類型更普遍
  • 子類型方法能夠拋出更具體的異常,也能夠不拋出任何異常
  • 若是父類型的方法未拋出異常,那麼子類型的方法也不能拋出異常。

那麼結合我以前對繼承關係的理解,——前置條件不能增強,後置條件不能減弱函數

若是父類拋出了一個異常,子類拋出一個更具體的異常——?測試

這我能理解。由於異常也能夠看作方法的後置條件,後置條件不能減弱,固異常變得更加具體是徹底符合的debug

若是父類拋出了一個異常,子類能夠不拋出異常————???3d

那麼這個就只可以理解爲」不拋出任何異常是比拋出某一種異常更加具體的條件。」, 咱們能夠就這樣理解,不跑出異常至關於把異常拋出的條件無限增強。對象

 

 防護式編程

防護式編程(Avoiding debugging),顧名思義,就是爲了減小bug的出現而採用的一系列措施。blog

第一道防線:不讓bug產生

聽起來很厲害哈哈哈哈,說得倒輕巧。繼承

其實這第一道防線的意思就是減小bug的一些編程技巧,好比說:

  • 靜態檢查
  • 動態檢查
  • 使用immutable的對象
  • 使用immutable的引用

第二道防線:縮小bug的影響範圍

也就是老生常談的fail fast

使用Assertion是一個重要技巧,可是哪些東西須要使用asserrtion呢,這也有一些套路的

  • 須要assert的
    • 方法參數的條件(前置條件)
    • 方法的返回值的條件(後置條件)
  •   不須要assert的
    • java中的算式等從語法角度不會犯錯的(也就是不要試圖用assert尋找虛擬機的錯誤)
    • 外部的錯誤(好比說用戶的輸入,文件的存在性等,這個咱們管不着)

其它方法

  • Incremental Development
  • Modularity
  • Encapsulation

Debugging

 。。。。。。(這裏真的沒有什麼內容啊)

Testing

測試用例很重要,可是也很繁瑣。本學期軟件構造課的實驗中,對我來講的最大的噩夢就是爲本身的代碼寫test用例了。

如何選擇測試用例

簡而言之,就是經過對方法的輸入空間和解空間,根據方法的特性來設定測試用例。

一個簡單的例子:

若是要測試BigInteger.multiply(BigInteger b)

 

如何劃分?

  • 正值,負值與0
  • 很小的值,很大的值
  • 特殊值(好比0,-1,1)

而後只要按照這些劃分來寫測試用例便可。

這是一個很淺顯的例子,事實上ppt與mit的reading中都明確給出了關於等價類劃分的一套證實,但我認爲若是要理解測試用例的書寫,只須要理解

  • 錯誤常常發生在邊界條件處
  • 對每一種狀況選擇一個表明元素

便可。

Documenting test strategy

選擇測試用例的劃分是編程時常常用到的技巧,可是對於考試題來講,還必須會將測試用例書寫下來才行。不要到考場上才慌慌張張想着怎麼排版按什麼格式

 

 白盒測試與黑盒測試

黑盒測試就是在不知道方法的內部實現的狀況下,只根據前置條件和後置條件對方法進行測試,這是最經常使用的。

而白盒測試則是對方法的內部實現進行測試 例子?

相關文章
相關標籤/搜索