日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

软件构造-犯错的艺术——健壮性与正确性,异常,防御式编程,debugging与test的思考与总结...

發布時間:2024/7/5 编程问答 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 软件构造-犯错的艺术——健壮性与正确性,异常,防御式编程,debugging与test的思考与总结... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

健壯性與正確性

健壯性與正確性是不同的——一個傾向于使程序盡可能保持運行,即使遇到錯誤,一個傾向于使程序盡可能正確,不在意保持運行

異常

異常分為兩種——checked exception與unchecked exception

二者的區別在于:

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

?

?

?異常使用的注意事項

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

關于異常的LSP原則

  • 如果子類型中override了父類型中的函數,那么子類型中方法拋出的異常不能比父類型拋出的異常類型更廣泛
  • 子類型方法可以拋出更具體的異常,也可以不拋出任何異常
  • 如果父類型的方法未拋出異常,那么子類型的方法也不能拋出異常。

那么結合我之前對繼承關系的理解,——前置條件不能加強,后置條件不能減弱

如果父類拋出了一個異常,子類拋出一個更具體的異常——?

這我能理解。因為異常也可以看做方法的后置條件,后置條件不能減弱,固異常變得更加具體是完全符合的

如果父類拋出了一個異常,子類可以不拋出異常————???

那么這個就只能夠理解為”不拋出任何異常是比拋出某一種異常更加具體的條件。”, 我們可以就這樣理解,不跑出異常相當于把異常拋出的條件無限加強。

?

?防御式編程

防御式編程(Avoiding debugging),顧名思義,就是為了減少bug的出現而采用的一系列措施。

第一道防線:不讓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

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

?

?白盒測試與黑盒測試

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

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

?

轉載于:https://www.cnblogs.com/giere/p/11074043.html

總結

以上是生活随笔為你收集整理的软件构造-犯错的艺术——健壮性与正确性,异常,防御式编程,debugging与test的思考与总结...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。