三種bug定位方法

1、定位bug產生的過程

測試用例的執(zhí)行,基本上是程序運行過程bug產生的開始,若測試結果與期望結果有出入,即出現了錯誤征兆,定位bug過程首先要找出bug產生的原因,然后對bug進行修正。因此定位bug過程有兩種可能:一種可能是找到了bug產生原因并提給開發(fā)去糾正;另一種可能是測試過程中程序產生的bug原因不明,測試或開發(fā)人員只得做某種推測,然后再設計測試用例證實這種推測,若一次推測失敗,再做第二次推測,直到發(fā)現并糾正bug。

定位查找bug是一個相當艱苦的過程,究其原因除了開發(fā)人員心理方面的障礙外,還因為隱藏在程序中的錯誤具有下列特殊的性質:

(1)錯誤的外部征兆遠離引起錯誤的內部原因,對于高度耦合的程序結構此類現象更為嚴重;

(2)糾正一個bug造成了另一bug現象(暫時)的消失;

(3)某些bug征兆只是假象;

(4)因操作時疏忽造成的某些bug征兆不易追蹤;

(5)bug是不是程序引起的;

(6)輸入條件難以精確地再構造(例如,某些實時應用的輸入次序不確定);

(7)bug征兆時有時無,此現象對嵌入式系統(tǒng)尤其普遍;

(8)bug是由于把任務分布在若干臺不同處理機上運行而造的。

在軟件bug定位過程中,可能遇到大大小小、形形色色的問題,隨著問題的增多,測試人員的壓力也隨之增大,過分地緊張致使開發(fā)人員在解決一個問題的同時又引入更多的新問題。

盡管查找bug,定位bug不是一門好學的技術(有時人們更愿意稱之為藝術),但還是有若干行之有效的方法和策略,下面介紹幾種bug定位方法。

2、定位方法

無論采用哪種定位方法,目標只有一個,即發(fā)現并排除引起錯誤的原因,這要求測試人員能把直觀想象與系統(tǒng)評估很好的結合起來。

常用的定位策略分為三類:

①原始類(brute force)

②回溯類(backtracking)

③排除類(causeeliminations)

原始類定位方法是最常用也是最低效的方法,只有在萬般無奈的情況下才使用它,主要思想是“通過計算機找錯”。例如輸出存儲器、寄存器的內容,在程序安排若干輸出語句等,憑借大量的現場信息,從中找到出錯的線索,雖然最終也能成功,但難免要耗費大量的時間和精力

回溯法能成功地用于程序的排錯。方法是從出現bug征兆處開始,人工地沿控制流程往回追蹤,直至發(fā)現出錯的根源,不幸的是程序變大后,可能的回溯路線顯著增加,以致人工進行完全回溯到望而不可及。

排除法基于歸納和演繹原理,采用“分治”的概念,首先確定所有與bug出現有關的所有數據,設想一個導致bug的原因,用這些數據證明或反駁它;或者一次列出所有可能的原因,通過測試一一排除。只要某次測試結果說明某種假設已呈現倪端,則立即精化數據,乘勝追擊。

上述每一類方法均可利用一些測試工具,開發(fā)工具。目前,調試編譯器、動態(tài)調試器(“追蹤器”)、測試用例自動生成器、存儲器映象及交叉訪問示圖等到一系列工具已廣為使用。然而,無論什么工具也替代不了一個開發(fā)人員在對完整的設計文檔和清晰的源代碼進行認真審閱和推敲之后所起的作用。此外,不應省略掉代碼走查過程中最有價值的一個資源,那就是開發(fā)小組中其他成員的評價和忠告,正所謂“當事者迷,旁觀者清”。

前面有提到,修改一處老問題可能引入幾處新問題,有時程序越改越亂,但若能做到每次糾錯前都捫心自問三個問題,情況將大為改觀:

①導致這個錯誤的原因在程序其他部分還可能存在嗎?

②本次修改可能對程序中相關的邏輯和數據造成什么影響?引起什么問題?

③上次遇到的類似問題是如何排除的?為什么這次又重新出現了?





文章內容略有作修改,引自http://wenku.baidu.com/view/543a89cf482fb4daa48d4b49

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,836評論 6 540
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 99,275評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,904評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,633評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,368評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,736評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,740評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,919評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 49,481評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,235評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,427評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,968評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,656評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,055評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,348評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,160評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,380評論 2 379

推薦閱讀更多精彩內容

  • 文章來自:http://blog.csdn.net/mj813/article/details/52451355 ...
    好大一只鵬閱讀 9,212評論 2 126
  • 1.問:你在測試中發(fā)現了一個 bug ,但是開發(fā)經理認為這不是一個 bug ,你應該怎樣解決。 首先,將問題提...
    qianyewhy閱讀 9,285評論 4 123
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,712評論 25 708
  • 做完一套試卷,打開空間,看到了今日自己寫下的短詩《流浪漢》下面有一條評論,“每天都會看看,你是不是又...
    柴道一閱讀 332評論 0 0
  • 在生活中時常會有些“尷尬”的事兒,比如常見的人但就是叫不出名字;在嘴邊的旋律可總是記不清詞;整天掛在嘴邊的字,卻不...
    江蘇家學寶閱讀 198評論 0 0