日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

读书笔记软件调试之道 :问题的核心-重现问题

發(fā)布時(shí)間:2023/12/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 读书笔记软件调试之道 :问题的核心-重现问题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

聲明:本文檔的內(nèi)容主要來源于書籍《軟件調(diào)試修煉之道》作者Paul Butcher,屬于讀書筆記。

重現(xiàn)第一,提問第二

問題重現(xiàn)是實(shí)證過程的最強(qiáng)大武器,如果不能重現(xiàn)問題,你也無法證明修復(fù)了它

首先按照缺陷報(bào)告的描述的步驟來做, 抓住重點(diǎn),包含三個(gè)控制因素

軟件本身:確保你使用的軟件版本和bug提交的版本一致,使用相同的編譯工具和相同的編譯參數(shù)。

軟件運(yùn)行環(huán)境:如果要與外界環(huán)境交互,則確保使用相同外部系統(tǒng)。比如測(cè)距儀,需要在同樣的光照環(huán)境、溫度和供電方式。

提供的輸入:如果軟件代碼的運(yùn)行和配置參數(shù)相關(guān),則應(yīng)該使用相同配置。

?

控制輸入之詳細(xì)說明

軟件的輸入可能時(shí)本地文件,也可能是用戶的一系列操作或者是第三方設(shè)備

推測(cè)可能的輸入:

  • 回溯工作:錯(cuò)誤位置明確時(shí),該方法可能可以重現(xiàn)問題,或者提供有效線索
  • 探測(cè)可能輸入值:利用邊界值分析法和分支覆蓋法,經(jīng)驗(yàn)表明,這兩處最易出錯(cuò)
  • 利用錯(cuò)誤條件:編碼時(shí),人的天性是關(guān)注正常的情況,于是未處理的錯(cuò)誤條件很可能誘發(fā)一系列bug,因此模擬錯(cuò)誤條件可能可以重現(xiàn)問題
  • 引入隨機(jī)性:選取一系列不同的輸入值,也叫模糊測(cè)試。該模糊測(cè)試器的關(guān)鍵特征是,可以根據(jù)一些列規(guī)則重新創(chuàng)建曾經(jīng)的輸入,以便能夠隨意重現(xiàn)問題

記錄輸入值:

  • 程序日志:在JAVA中有日志功能,可以打開或者關(guān)閉,C語言可以采用獨(dú)立文本
  • 外部日志:這個(gè)在客戶端和服務(wù)器端的軟件中采用,獨(dú)立的系統(tǒng)可以忽略

注意負(fù)載和壓力:

  • 有些缺陷只有軟件在某種壓力下運(yùn)行是才能表現(xiàn)出來,這個(gè)在服務(wù)器端軟件最明顯,其必須通過壓力測(cè)試;測(cè)距儀軟件需要注意的在電池電量供應(yīng)不足情況下,是否會(huì)運(yùn)行出錯(cuò)!

改進(jìn)問題重現(xiàn)

如何才能讓問題重現(xiàn)即可靠又方便,并且代價(jià)最小?

  • 最小化反饋周期:
  • 將問題重現(xiàn)最小化:第一次就做到最小化不太可能,需要逐步刪除不必要的方面,縮小問題重現(xiàn)的范圍。
  • 最大限度的減少重現(xiàn)所需的時(shí)間:有些bug只是需要時(shí)間來重現(xiàn),因此需要采取措施使其早些發(fā)生,比如懷疑資源泄露,則可以故意營(yíng)造資源耗盡的局面。

將不確定的缺陷變?yōu)榇_定的:

  • 軟件之美在于它的確定性,不確定性往往有以下幾個(gè)原因:
  • 開始于不可預(yù)知的狀態(tài):比如C/C++程序,使用未初始化的內(nèi)存或變量。
  • 與外部系統(tǒng)進(jìn)行交互:這種情況,最好的選擇是使用你能控制的東西代替外部系統(tǒng),比如使用串口助手模擬外設(shè)發(fā)送指令。
  • 故意使用隨機(jī)性:軟件中的隨機(jī)函數(shù),都是偽隨機(jī),只要種子一樣,結(jié)果就相同
  • 多線程:PC端的軟件叫多線程,嵌入式端一般叫多任務(wù),可以采取措施增加競(jìng)爭(zhēng)情況,是問題更容易實(shí)現(xiàn)

自動(dòng)化:

  • 采用自動(dòng)化測(cè)試,不但可以加快進(jìn)程還可以見笑犯錯(cuò)誤的幾率
  • 自動(dòng)化測(cè)試:需要構(gòu)建自動(dòng)化測(cè)試框架和用戶借口測(cè)試工具
  • 重放日志文件:如果bug重現(xiàn)需要通過日志,則需要通過重放日志構(gòu)造相同的操作序列

迭代:

  • 在診斷過程中,隨著獲得軟件運(yùn)行信息越來越多,你可以使用這些信息不斷改進(jìn)你的重現(xiàn)。逐步縮小導(dǎo)致bug發(fā)生的范圍,比如縮小到一個(gè)函數(shù)、一個(gè)變量、一段語句。 通過反復(fù)優(yōu)化確保你的重現(xiàn)問題的程序既方便又可靠!

如果真的不能重現(xiàn)怎么辦?

缺陷真的存在嗎?

  • 用戶一般不會(huì)惡意報(bào)告缺陷,極有可能是軟件出錯(cuò)了,也有可能是不清楚為何這樣,誤解了軟件的一些方面。

在相同的區(qū)域解決不同的問題

  • 重現(xiàn)問題的區(qū)域還有其它缺陷嗎?如果有,也要一查到底。這樣做可以清理這個(gè)區(qū)域的代碼、使你從整體上更好的了解代碼,并找到重現(xiàn)問題的關(guān)鍵因素。

讓其他人參與其中

  • 開發(fā)人員很容易有盲點(diǎn),其工作重點(diǎn)是讓編寫的軟件可以正確運(yùn)行,而不是證明這個(gè)軟件有缺陷,因此讓別人參與進(jìn)來時(shí)必要的。

充分利用用戶群體

  • 如果缺陷出現(xiàn)在外部系統(tǒng)中,獲取應(yīng)該讓用戶為你收集重要信息,不過這種方法往往并不理想。

推測(cè)

  • 雖然實(shí)證方法是最好的,但是其不是唯一的解決辦法,純邏輯推理就是其中一種。該方法費(fèi)時(shí)費(fèi)力,在其它方法無效時(shí),往往可以起到作用。該方法需要把自己融入到軟件中,執(zhí)行到每一步時(shí),考慮有哪些錯(cuò)誤的可能性,并嘗試解釋你跟蹤的缺陷。

總結(jié)

以上是生活随笔為你收集整理的读书笔记软件调试之道 :问题的核心-重现问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。