調試

調試程序員


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

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

  1. 利用內存信息輸出來調試
    編程語言

  2. 根據通常的額「在程序中插入打印語句」建議來調試ide

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

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

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

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

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

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

第二種類型,可能比內存信息輸出要好一些,由於可能顯示程序的的動態狀態。可是一樣存在不少缺點。

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

●它所產生的需求分析數量很是龐大

●可能對小程序有效,但若是應用到大程序成本就至關高。

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

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

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

概括法調試

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

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

  2. 組織數據。概括就是從特殊到通常,第二部就是組織相關數據,以便觀察線索的模式。

  3. 作出假設。研究線索之間的聯繫,利用線索結構裏可能的模式作出一個或多個關於錯誤緣由的假設。若是還沒法退出錯誤,則須要更多的假設。

  4. 證實假設。

演繹法調試

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

  1. 列出全部可能的緣由或假設。

  2. 利用數據排除全部可能的緣由

  3. 提煉剩下的假設

  4. 證實剩下的假設

回朔法調試

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

測試法調試

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

話句話說,當發現某個被懷疑的錯誤的症狀以後,須要編寫測試用例,儘可能肯定錯誤的位置。

調試的原則

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

定位錯誤的原則

  1. 動腦筋

  2. 若是遇到了僵局,就留到稍後解決

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

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

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

相關文章
相關標籤/搜索