读书笔记软件调试之道 :问题的核心-重现问题
生活随笔
收集整理的這篇文章主要介紹了
读书笔记软件调试之道 :问题的核心-重现问题
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
聲明:本文檔的內(nèi)容主要來源于書籍《軟件調(diào)試修煉之道》作者Paul Butcher,屬于讀書筆記。
重現(xiàn)第一,提問第二
問題重現(xiàn)是實證過程的最強大武器,如果不能重現(xiàn)問題,你也無法證明修復(fù)了它
首先按照缺陷報告的描述的步驟來做, 抓住重點,包含三個控制因素
軟件本身:確保你使用的軟件版本和bug提交的版本一致,使用相同的編譯工具和相同的編譯參數(shù)。
軟件運行環(huán)境:如果要與外界環(huán)境交互,則確保使用相同外部系統(tǒng)。比如測距儀,需要在同樣的光照環(huán)境、溫度和供電方式。
提供的輸入:如果軟件代碼的運行和配置參數(shù)相關(guān),則應(yīng)該使用相同配置。
?
控制輸入之詳細說明
軟件的輸入可能時本地文件,也可能是用戶的一系列操作或者是第三方設(shè)備
推測可能的輸入:
- 回溯工作:錯誤位置明確時,該方法可能可以重現(xiàn)問題,或者提供有效線索
- 探測可能輸入值:利用邊界值分析法和分支覆蓋法,經(jīng)驗表明,這兩處最易出錯
- 利用錯誤條件:編碼時,人的天性是關(guān)注正常的情況,于是未處理的錯誤條件很可能誘發(fā)一系列bug,因此模擬錯誤條件可能可以重現(xiàn)問題
- 引入隨機性:選取一系列不同的輸入值,也叫模糊測試。該模糊測試器的關(guān)鍵特征是,可以根據(jù)一些列規(guī)則重新創(chuàng)建曾經(jīng)的輸入,以便能夠隨意重現(xiàn)問題
記錄輸入值:
- 程序日志:在JAVA中有日志功能,可以打開或者關(guān)閉,C語言可以采用獨立文本
- 外部日志:這個在客戶端和服務(wù)器端的軟件中采用,獨立的系統(tǒng)可以忽略
注意負載和壓力:
- 有些缺陷只有軟件在某種壓力下運行是才能表現(xiàn)出來,這個在服務(wù)器端軟件最明顯,其必須通過壓力測試;測距儀軟件需要注意的在電池電量供應(yīng)不足情況下,是否會運行出錯!
改進問題重現(xiàn)
如何才能讓問題重現(xiàn)即可靠又方便,并且代價最小?
- 最小化反饋周期:
- 將問題重現(xiàn)最小化:第一次就做到最小化不太可能,需要逐步刪除不必要的方面,縮小問題重現(xiàn)的范圍。
- 最大限度的減少重現(xiàn)所需的時間:有些bug只是需要時間來重現(xiàn),因此需要采取措施使其早些發(fā)生,比如懷疑資源泄露,則可以故意營造資源耗盡的局面。
將不確定的缺陷變?yōu)榇_定的:
- 軟件之美在于它的確定性,不確定性往往有以下幾個原因:
- 開始于不可預(yù)知的狀態(tài):比如C/C++程序,使用未初始化的內(nèi)存或變量。
- 與外部系統(tǒng)進行交互:這種情況,最好的選擇是使用你能控制的東西代替外部系統(tǒng),比如使用串口助手模擬外設(shè)發(fā)送指令。
- 故意使用隨機性:軟件中的隨機函數(shù),都是偽隨機,只要種子一樣,結(jié)果就相同
- 多線程:PC端的軟件叫多線程,嵌入式端一般叫多任務(wù),可以采取措施增加競爭情況,是問題更容易實現(xiàn)
自動化:
- 采用自動化測試,不但可以加快進程還可以見笑犯錯誤的幾率
- 自動化測試:需要構(gòu)建自動化測試框架和用戶借口測試工具
- 重放日志文件:如果bug重現(xiàn)需要通過日志,則需要通過重放日志構(gòu)造相同的操作序列
迭代:
- 在診斷過程中,隨著獲得軟件運行信息越來越多,你可以使用這些信息不斷改進你的重現(xiàn)。逐步縮小導(dǎo)致bug發(fā)生的范圍,比如縮小到一個函數(shù)、一個變量、一段語句。 通過反復(fù)優(yōu)化確保你的重現(xiàn)問題的程序既方便又可靠!
如果真的不能重現(xiàn)怎么辦?
缺陷真的存在嗎?
- 用戶一般不會惡意報告缺陷,極有可能是軟件出錯了,也有可能是不清楚為何這樣,誤解了軟件的一些方面。
在相同的區(qū)域解決不同的問題
- 重現(xiàn)問題的區(qū)域還有其它缺陷嗎?如果有,也要一查到底。這樣做可以清理這個區(qū)域的代碼、使你從整體上更好的了解代碼,并找到重現(xiàn)問題的關(guān)鍵因素。
讓其他人參與其中
- 開發(fā)人員很容易有盲點,其工作重點是讓編寫的軟件可以正確運行,而不是證明這個軟件有缺陷,因此讓別人參與進來時必要的。
充分利用用戶群體
- 如果缺陷出現(xiàn)在外部系統(tǒng)中,獲取應(yīng)該讓用戶為你收集重要信息,不過這種方法往往并不理想。
推測
- 雖然實證方法是最好的,但是其不是唯一的解決辦法,純邏輯推理就是其中一種。該方法費時費力,在其它方法無效時,往往可以起到作用。該方法需要把自己融入到軟件中,執(zhí)行到每一步時,考慮有哪些錯誤的可能性,并嘗試解釋你跟蹤的缺陷。
總結(jié)
以上是生活随笔為你收集整理的读书笔记软件调试之道 :问题的核心-重现问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【wxPython 安装指南:error
- 下一篇: 视频分析与多模态融合之一,为什么需要多模