1. 程式人生 > >第八章《除錯》筆記心得

第八章《除錯》筆記心得

      除錯是執行一次成功的測試後所要進行的工作。除錯包括兩個步驟:第一步,確定程式中可疑錯誤的準確性質和位置。第二部,修改錯誤。

一、暴力法除錯

      特點:不需要過多思考,耗費腦力較少,效率低下

  1. 利用記憶體資訊輸出來除錯
  2. 在程式中插入列印語句除錯
  3. 使用自動化的除錯工具進行除錯(設定斷點等)

      這些問題如果應用在大型程式中,除錯效率會非常低下,一般只作為備用方法。

二、歸納法除錯

        歸納法是線索(即錯誤症狀或測試用例的結果)出發,尋找線索之間的聯絡。

        使用歸納法除錯的過程如下:

  1. 確定相關資料:列舉所有知道的程式執行的正確和不正確之處。那些相似卻不相同,有的引起症狀有的未引起症狀的測試用例會提供很多有價值的線索。
  2. 組織資料:組織相關資料,以便觀察線索間的模式,尤其重要的是找到矛盾點。可以利用“是什麼”、“在何處”、“多大程度”列表,從而對資料進行總結觀察,做出假設。
  3. 做出假設:利用線索結構裡可能的模式做出一個或者多個關於錯誤原因的假設。如果有多個假設存在,首先選擇最有可能的一個。
  4. 證明假設:如果忽略這一步,接下來可能只能修正症狀,而不能解決問題本身。所以應該將假設和最初的資料或線索進行比較,來證明假設的合理性,以確定這些假設完全可以解釋這些線索的存在。如果無法解釋,這些假設要麼是不完整或無效的,要麼還有更多錯誤的存在。
  5. 解決問題:解決問題後仍然需要做迴歸測試以確保問題和錯誤修復沒有引入其他錯誤。

三、演繹法除錯

      演繹的過程是從一些普遍的理論或者前提觸發,使用排除和精煉的過程,達到一個結論。過程如下:

  1. 列舉所有可能的原因或假設:第一步是建立一份所有想象得到的錯誤線索的清單,線索不需要有完整的假設,可以純粹是一些猜測。
  2. 利用資料排除可能的原因:詳細檢查所有的資料,儘量排除所有可能的原因。如果排除後,剩下的原因多餘一條,選擇最有可能的一條。
  3. 提煉剩下的假設:利用現有的線索提煉這個推測,即細節化、具體化
  4. 證明剩下的假設:此步驟與歸納法中的第四步一樣。
  5. 修復問題:此步驟與歸納法中的第五步一樣。

四、回溯法除錯

      在小型程式中定位錯誤的一種有效方法是沿著程式的邏輯結構回溯不正確的結果,直至找到程式邏輯出錯的位置。

即從程式產生不正確結果的地方開始,逆向執行程式,重複使用“如果程式在此處的狀態是這個樣子的,那麼在上面位置的狀態就必然是那樣的”的過程,很快就能定位出錯誤。

五、測試法除錯

      當發現了某個被懷疑的錯誤的症狀之後,我們需要編寫與原先有所變化的測試用例,儘量確定錯誤的位置。實際上,這個方法經常和歸納法或演繹法一起使用。

總結:所有的測試方法都有一個共同的方法,就是“思考”!修改錯誤時,要注意應該糾正錯誤本身,而不是其症狀,並且應該意識到,改正錯誤會可能引入新錯誤。抱著嚴謹的態度去思考,才能向著精確和高效的道路上邁進。