、 回溯類(backtracking)
、 排除類(cause eliminations)
原始類排錯方法是最常用也是最低效的方法,只有在萬般無奈的情況下才使用它,主要思想是“通過計算機找錯”。例如輸出存儲器、寄存器的內容,在程序安排若干輸出語句等,憑借大量的現場信息,從中找到出錯的線索,雖然最終也能成功,但難免要耗費大量的時間和精力。
回溯法能成功地用于程序的排錯。方法是從出現錯誤征兆處開始,人工地沿控制流程往回追蹤,直至發現出錯的根源,不幸的是程序變大后,可能的回溯路線顯著增加,以致人工進行完全回溯到望而不可及。
排除法基于歸納和演繹原理,采用“分治”的概念,首先懼與錯誤出現有關有所有數據,假想一個錯誤原因,用這些數據證明或反駁它;或者一次列出所有可能的原因,通過測試一一排除。只要某次測試結果說明某種假設已呈現倪端,則立即精化數據,乘勝追擊。
上述每一類方法均可輔以排錯工具。目前,調試編譯器、動態調試器(“追蹤器”)、測試用例自動生成器、存儲器映象及交叉訪問示圖等到一系列工具已廣為使用。然而,無論什么工具也替代不了一個開發人員在對完整的設計文檔和清晰的源代碼進行認真審閱和推敲之后所起的作用。此外,不應荒廢排錯過程中最有價值的一個資源,那就是開發小組中其他成員的評價和忠告,正所謂“當事者迷,旁觀者清”。
前面多次提到,修改一處老問題可能引入幾處新問題,有時程序越改越亂,但若能做到每次糾錯前都捫心自問三個問題,情況將大為改觀:
、 導致這個錯誤的原因在程序其他部分還可能存在嗎?
、 本次修改可能對程序中相關的邏輯和數據造成什么影響?引起什么問題?
、 上次遇到的類似問題是如何排除的?
文章來源于領測軟件測試網 http://www.kjueaiud.com/