調試

調試


調試是執行一次成功的測試用例之後所要進行的工作。所謂成功的測試,是指它可以證明程序沒有實現預期的功能,調試包含兩個錯誤。一:確定程序中可疑錯誤的準確性質和位置。二:修改錯誤。

暴力法調試(分三種類型)

  1. 利用內存信息輸出來調試

  2. 根據一般的額“在程序中插入打印語句”建議來調試

  3. 使用自動化的調試根據進行調試

第一種類型是最缺乏效率的暴力調試法

●難以在內存區域與源程序的變量之間建立聯繫

●即使對於複雜程度較低的程序,內存信息也會產生數量非常龐大的數據,好多數據都與調試無關。

●內存信息只能顯示程序的靜態快照,僅能顯示出某一時刻程序的狀態,爲了發現錯誤還需要研究動態狀態。

●內存信息輸出很少可以精確地在錯誤發生的地方,因此無法顯示錯誤發生的時序狀態,錯誤發生到輸出信息這段時間執行的活動,可能會掩蓋掉髮現錯誤所需要的線索。

第二種類型,可能比內存信息輸出要好一些,因爲可能顯示程序的的動態狀態。但是同樣存在很多缺點。

●它不是鼓勵我們去思考程序中的問題,只要是碰運氣的方法

●它所產生的需求分析數量非常龐大

●可能對小程序有效,但如果應用到大程序成本就相當高。

●它要求我們修改程序這些修改可能會掩蓋掉錯誤、改變關鍵的時序關係,或者會引入新的錯誤。

第三種類型自動化調試工具的工作機制類似於在程序中插入打印語句,但不是修改程序本身。可以使用編程語言的調試功能,或使用特殊交互調試工具來分析程序動態狀態。調試工具的一個共同的功能是設置斷點,使程序在執行到某條特定的語句或改變了某個特定變量的值是暫停執行。然後程序員就可以檢查程序的當前狀態了。

暴力法調試的主要問題在於他們忽略了思考的過程

歸納法調試

歸納法是一種特殊的思考過程,可以從細節到全局,也就是線索出發。歸納法調試步驟如下:

  1. 確定相關數據。調試人員犯的主要錯誤是未能將所有數據考慮進去第一步是列舉出所有知道程序執行的正確和不正確之處。不正確之處就是症狀。未能引起症狀出現的測試用例提供了額外的有價值的線索。

  2. 組織數據。歸納就是從特殊到一般,第二部就是組織相關數據,以便觀察線索的模式。

  3. 做出假設。研究線索之間的聯繫,利用線索結構裏可能的模式做出一個或多個關於錯誤原因的假設。如果還無法退出錯誤,則需要更多的假設。

  4. 證明假設。

演繹法調試

演繹過程是從一個普遍的理論和前提出發,使用排除和精煉過程達到一個結論

  1. 列出所有可能的原因或假設。

  2. 利用數據排除所有可能的原因

  3. 提煉剩下的假設

  4. 證明剩下的假設

回朔法調試

沿着程序的邏輯結構回溯不正確的結果。直到找到程序邏輯出錯的位置。使用這個過程,可以確定程序中從狀態符合預期值的位置點,到第一個狀態不符合預期值的位置點。

測試法調試

考慮兩種類型的測試用例:1.供測試的測試用例,目的是暴露出以前尚未發生的錯誤。2.供調試的測試用例目的是提供有用的信息,供定位某個被懷疑的錯誤之處。

話句話說,當發現某個被懷疑的錯誤的症狀之後,需要編寫測試用例,儘量確定錯誤的位置。

調試的原則

調試原則其實也是心理學原則。由於調試過程有兩部分組成,即定位錯誤與修改錯誤。

定位錯誤的原則

  1. 動腦筋

  2. 如果遇到了僵局,就留到稍後解決

  3. 如果遇到了困境,就把問題描述給他人聽

  4. 僅將測試工具作爲第二種手段

  5. 避免使用實驗法——僅將其作爲最後的手段















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章