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