調試的關鍵在於推斷程序內部的錯誤位置及原因,可以采用以下方法:
1、分析和推理
設計人員和開發人員根據軟件缺陷問題的信息, 分析和推理調試軟件。
(1)根據軟件程序架構自頂向下縮小定位范圍, 確定可能發生問題的軟件組件。
(2)根據軟件功能,軟件運行時序定位軟件問題。
(3)根據算法原理,分析和確定缺陷問題發生的 根源。
2、歸納類比法
歸納法是一種從特殊推斷一般的系統化思考方法,歸納法調試的基本思想是:從一些線索(錯誤征兆)着手,通過分析它們之間的關系來找出錯誤。該方法主要是根據積累的工作經驗和案例處理調試工作。
(1)根據工作經驗和比對程序設計中類似問題的 處理方式進行調試工作。
(2)咨詢相關部門和有經驗的相關人員。
(3)查找相關文檔和案例,為處理問題提供思路 和方法。 在軟件開發過程中,通常對每個缺陷問 題進行跟蹤管理,將解決問題的方案和過程詳細記錄。
(4)收集出錯的信息,列出數據,包括輸入,輸出,歸納整理,發現規律,從線索除法,尋找線索之間的聯系。也就意味着:從特殊到一般。歸納調試的步驟可以概括為以下一個圖
3、跟蹤回朔
在小程序中常用的一種有效的調試方法,一旦發現了錯誤,人們先分析錯誤的征兆,確定最先發現“症狀“的位置然后,人工沿程序的控制流程,向回追蹤源程序代碼,直到找到錯誤根源或確定錯誤產生的范圍,例如,程序中發現錯誤處是某個打印語句,通過輸出值可推斷程序在這一點上變量的值,再從這一點出發,回溯程序的執行過程,反復思考:“如果程序在這一點上的狀態(變量的值)是這樣,那么程序在上一點的狀態一定是這樣···“直到找到錯誤所在。
在軟件開發通常采用基線與版本管理。 基線為 程序代碼開發提供統一的開發基點,基線的建立有助 於分清楚各個階段存在的問題,便於對缺陷問題定位。 軟件版本在軟件產品的開發過程中生成了一個版本 樹。 軟件產品實際上是某個軟件版本,新產品的開發 通常是在某個軟件版本的基礎上進行開發。
(1)開發過程中發現有問題,可以回退至版本樹上的穩定版本,查找問題根源。
(2)通過基線版本序列可以追蹤產品的各種問 題,可以重新建立基於某個版本的配置,可以重現軟件 開發過程中的軟件缺陷和各種問題,進行定位並查找 問題根源。
4、增量調試
軟件開發大多采用軟件配置管理和持續集成 技術。 開發人員每天將評代碼提交到版本庫。 持續集 成人員完成集成構建工作。 可以通過控制持續集成的 粒度(構建時間間隔),控制開發人員提交到版本庫的 程序代碼量,從而便於對缺陷問題定位。 通常每天晚 上進行持續集成工作,發現問題時,開發人員實際上只需要調試處理當天編寫的代碼。
5、寫出能重現問題的最短代碼
采用程序切片和插樁技術寫出能重現問題的最短 代碼調試軟件模塊。
(1)程序切片
程序切片是通過在特定位置消除那些不影響表達 式計算的所有語句,把程序減少到最小化形式,並仍能 產生給定的行為。 使用切片技術,可以把一個規模較 大並且較復雜的軟件模塊轉換成多個切片程序。 這些 切片程序相對原來的程序,簡單並且易於調試和測試。
(2)程序插樁
程序插樁方法是在被測程序中插入某些語句或者 程序段來獲取各種信息。 通過這些信息進一步了解執 行過程中程序的一些動態特性。 一個軟件組件的獨立 調試和測試需要采用插樁技術,該組件調用或運行需 要樁模塊。 在軟件模塊的調試過程中程序切片和程序插樁可 以結合起來使用。
6、日志追蹤技術
日志是一種記錄機制,軟件模塊持續集成構建過 程中,日志文件記錄了有用信息。 若構建失敗,通過查 看日志文件,將信息反饋給相關人員進行軟件調試。
7、調試和測試融合的技術
(1)測試驅動開發
測試驅動開發是一種不同於傳統軟件開發流程的 開發方法。 在編寫某個功能的代碼之前先編寫測試代 碼,然后編寫測試通過的功能代碼,這有助於編寫簡潔 可用和高質量的代碼。
(2)開發與測試融合
程序開發人員除了進行程序代碼的編寫,白盒測 試,也要完成基本的功能測試設計和執行。 這樣有助 於程序開發人員更好地開展調試工作。 程序開發人員 可以通過交叉測試來解決測試心理學的問題(不能自 己測試自己)。 采用這種模式測試人員的數量會減少,專業的測 試人員去做其他復雜的測試工作。 研發中的很多低級 缺陷會盡早在開發過程中被發現,從而減少缺陷后期 發現的成本。
8、強行排錯
這種調試方法目前使用較多,效率較低,它不需要過多的思考,比較省腦筋。例如:
(1)通過內存全部打印來調試,在這大量的數據中尋找出錯的位置。
(2)在程序特定位置設置打印語句,把打印語句插在出錯的源程序的各個關鍵變量改變部位,重要分支部位,子程序調用部位,跟蹤程序的執行,監視重要變量的變化
(3)自動調用工具,利用某些程序語言的調試功能或專門的交互式調試工具,分析程序的動態過程,而不必修改程序。
應用以上任一種方法之前,都應當對錯誤的征兆進行全面徹底的分析,得出對出錯位置及錯誤性質的推測,再使用一種適當的調試方法來檢驗推測的正確性。
9、演繹法調試
演繹法是一種從一般原理或前提出發,經過排除和精華的過程來推導出結論的思考方法,演繹法排錯是測試人員首先根據已有的測試用例,設想及枚舉出所有可能出錯的原因作為假設,然后再用原始測試數據或新的測試,從中逐個排除不可能正確的假設,最后,再用測試數據驗證余下的假設確是出錯的原因。
(1) 列舉所有可能出錯原因的假設,把所有可能的錯誤原因列成表,通過它們,可以組織,分析現有數據
(2) 利用已有的測試數據,排除不正確的假設
仔細分析已有的數據,尋找矛盾,力求排除前一步列出所有原因,如果所有原因都被排除了,則需要補充一些數據(測試用例),以建立新的假設。
(3)改進余下的假設
利用已知的線索,進一步改進余下的假設,使之更具體化,以便可以精確地確定出錯位置
(4)證明余下的假設