簡介
排錯是隔離、定位、認識和解決問題的一種形式。
排錯在系統管理、電子工程和軟體工程等領域有廣泛套用。排錯過程一般要求參與者熟悉系統的正常運作狀態及近期的變更歷史,並通過系統排除的方法將問題一步步簡化。排錯設計,就是設計出一種排錯程式來解決系統管理等方面的問題。
排錯步驟
在軟體測試過程中暴露出一個錯誤之後,必須進一步診斷和改正程式中的錯誤。這種排錯過程,一般由以下幾個步驟來完成:
(1)從錯誤的外部表現形式入手,確定程式中出錯的位置;
(2)研究有關部分程式,找出錯誤的內在原因;
(3)修改設計和代碼,以便排除這個錯誤;
(4)重複進行暴露了這個錯誤的原始測試或某些有關測試,以便確認該錯誤是否被排除以及是否引進了新的錯誤;
(5)如果所做的修正無效,則撤消這次改動,重複上述過程,直到找到。一·個有效的解決辦法為止。
排錯是軟體開發過程中最為艱巨的一種腦力勞動。排錯開始,開發人員僅僅面對著錯誤的外幫表現形式,要想在組成程式的眾多元素(
語句、
數據結構等)中找出錯誤的根源並加以修正,往往需要絞盡腦汁,有時甚至要憑個人的經驗和直覺才行。
排錯方法
排錯的關鍵在於推斷程式內部的錯誤位置及原因,為此,一般可以採用以下方法:
(1)試探法
軟體開發人員分析錯誤的外在表現形式,猜想程式內部故障的大概位置,然後想辦法獲取被懷疑位置附近的信息進行判斷。這樣一次一次進行試探、分析,直到定位和修正為止。
試探法一般要浪費大量的時間和精力,效率很低。
(2)回溯法
回溯法是從發現錯誤“症狀"的地方開始,人工地沿程式的控制路徑向後追溯源程式代碼,直到發現錯誤根源並糾正為止。
回溯法一般對小程式比較有效。隨著程式規模的增加,應該回溯的路徑數目越來越多,以致無法進行人工的徹底回溯。
(3)歸納法
歸納法是一種從特殊推斷一般的系統化思考方法。這種方法適用於排錯,開發人員首先要收集並組織與錯誤有關的測試數據,分析其規律並歸納出錯誤原因假設。然後再用原始測試數據或新的測試,證明這種假設的正確性。
(4)演繹法
演繹法是一種從一般原理或前提出發,經過排除和精化的過程來推導出結論。這種方法用於排錯,開發人員必須首先根據已有的測試數據,構想出所有可能產生錯誤的原因。然後再用原始測試數據或新的測試逐個排除不正確的假設。最後再用測試數據證明餘下假設的正確性。
歸納法和演繹法是較為常用的排錯方法。
測試與排錯工具
目前已有許多測試工具和排錯工具(程式)可以提高測試過程的目動化程度,對於這些工具的合理使角能夠大大提高測試和排錯工作的效率。下面簡單介紹幾個:
(1)靜態分析工具
一般來說,通過運行程式來發現錯誤的過程叫動態調試。而靜態分析不需要運行被檢查的程式,只要執行一個檢查其它翟序錯誤的程式,這個程式就是靜態流分析工具。它對程式的控制流和數據流進行分析!瓠而發琚常見的錯誤。運行靜態分析工具時,工具程式在它作完靜態分析後能夠產生一個分析報告,從分析報告中即可發現錯誤和錯誤的原因。
(2)監視工具
這類工具在程式的適當位置安插了一些“探測器”,以使對程式進行監視,它們可以產生帶有統計數字的報告,以供分析、排錯之用。
(3)互動式排錯工具
許多分時系統中的工具軟體具有一些標準排錯功能。例如,允許程式設計師在終端上顯示記憶體並設定斷點,使程式執行到斷點處暫停。
應儘量採用排錯工具,但測試與排錯最積極的因素依然是人。