軟件故障定位_第1頁
軟件故障定位_第2頁
軟件故障定位_第3頁
軟件故障定位_第4頁
軟件故障定位_第5頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、傳統(tǒng)調(diào)試技術(shù)軟件開發(fā)者使用的典型的軟件調(diào)試技術(shù)主要有兩種 :(1) 在程序中插入打印語句使得程序輸出用以被分析的附加信息 , 可以對程 序的運行時狀態(tài)有一個粗略了解。一個通常的做法是插入打印語句以指 示某個控制條件到達了某個特定程序點 ; 另一個通常做法是插入打印語 句以輸出變量的值。當(dāng)程序被執(zhí)行的時候 , 程序生成可以被開發(fā)者檢查的 附加調(diào)試輸出。 缺點:調(diào)試輸出可能相當(dāng)?shù)拇?,打印語句的放置和輸出的 檢查都是非組織和臨時的 , 分析和放置位置也通常是基于直覺的(2) 另一種技術(shù)是使用符號調(diào)試器。 一個符號調(diào)試器是一個用來調(diào)試其他程 序的計算機程序 , 符號調(diào)試器支持例如斷點、 單步跳過、狀

2、態(tài)修改等。 斷 點允許程序員停止在某一個特定的程序點以檢查當(dāng)前狀態(tài); 單步跳過允許程序員前進到當(dāng)前斷點之后的下一條指令 , 并且在那條指令設(shè)置新的 斷點; 許多調(diào)試器還允許程序員不僅能夠查看變量的當(dāng)前狀態(tài) , 還能改變 它的值然后繼續(xù)執(zhí)行。 通常地, 開發(fā)者會在他感覺可能是程序錯誤位置的 地方設(shè)置斷點 ,然后他會檢查斷點處的狀態(tài) , 他還可以單步跳過程序查看 每一條語句在每一個執(zhí)行時的狀態(tài)變化。主要的定位方法故障定位技術(shù)有很多種 , 但是根據(jù)定位故障的過程中“是否需要運行軟件” 的準(zhǔn)則, 可以將故障定位技術(shù)分為以下兩類 :(1)基于靜態(tài)分析的故障定位技術(shù)(SABFL):靜態(tài)方法不用運行軟件,而

3、是依據(jù) 程序語言的語法和語義 ,靜態(tài)地分析軟件結(jié)構(gòu)和程序?qū)嶓w之間的依賴關(guān)系 , 以發(fā) 現(xiàn)不符合系統(tǒng)約束的程序?qū)嶓w , 從而進行故障定位。(2) 基于測試的故障定位技術(shù) (TBFL): 該方法首先需要設(shè)計測試用例 , 然后運 行軟件程序 , 最后根據(jù)軟件程序的動態(tài)執(zhí)行信息和輸出結(jié)果進行故障定位。其典 型思路是 : 將程序的失敗運行和成功運行進行對比 , 從而發(fā)現(xiàn)失敗運行中的哪些 點偏離了成功運行 , 找到的這些偏離點很有可能就是軟件故障位置所在。這些不 同定位方法都采用了各自不同的運行特征進行對比。 以下是基于測試的故障定位技術(shù):(一) 基于距離度量的故障定位方法:基本思想是 : 通過一定的距離

4、計算方法 , 從眾多的成功運行中找出與失敗運 行最相近的一個成功運行 ,利用某一種度量方法來計算此成功運行與失敗運行之 間的差異值 , 利用得出的最小差異值進行故障定位。該技術(shù)大都是在源程序上運 行大量的測試用例 , 并收集程序運行過程中的覆蓋信息 , 利用這些信息來進行故 障定位。此方法包括( 1 )Delta 調(diào)試技術(shù)把一次程序執(zhí)行看做是一系列程序狀態(tài)的轉(zhuǎn)變(程序狀態(tài)可以理解為在程序執(zhí)行某個時刻出現(xiàn)的變量以及這些變量的取值)。程序從初始狀態(tài)開始執(zhí)行 , 每執(zhí)行一步 , 程序當(dāng)前狀態(tài)就會發(fā)生改變 , 從當(dāng)前狀態(tài)轉(zhuǎn)換到下一個程序狀態(tài) , 如此進 行, 最后到達了個錯誤的狀態(tài) , 標(biāo)志著程序執(zhí)行

5、失敗。 每一個程序狀態(tài)都它的前一 個狀態(tài)衍生而來 ,但是,可能只有一小部分狀態(tài)與計算下一個狀態(tài)是相關(guān)的 , 同理, 也并不是所有程序狀態(tài)都與執(zhí)行失敗相關(guān)。Delta調(diào)試最重要的步驟就是找出與程序執(zhí)行失敗相關(guān)的那些狀態(tài),得到一條原 因-結(jié)果鏈。比較一次成功執(zhí)行和一次失敗執(zhí)行的狀態(tài)序列,它們之間的差別就是 一條原因-結(jié)果鏈。采用二分法將原因-結(jié)果鏈上的狀態(tài)應(yīng)用到成功的執(zhí)行路徑中 如果運行成功,就表示那一部分代碼不存在故障,否則,那部分代碼可能是可疑的 故障點。經(jīng)過這樣的反復(fù)測驗,最終可以將可疑故障點縮小到一個非常小的范圍。優(yōu)點:delta調(diào)試完全依賴于對程序狀態(tài)的研究,而不考慮對程序結(jié)構(gòu)的分 析不

6、僅可以找出程序中的錯誤,還提供了糾錯方案。缺點:對于大部分程序而言, 一次執(zhí)行涉及到成千上萬個狀態(tài),比較程序狀態(tài)的做法只適用于較小的程序。(2) “并集模型”:在失敗運行的覆蓋語句集中查找可疑故障語句。 其思想是, 從失敗運行的覆蓋語句集中去掉那些出現(xiàn)在成功運行的覆蓋語句集的并集。如果 給定一個成功運行的集合S和一個失敗運行f,將S中出現(xiàn)的語句覆蓋集的并集記為失敗運行中出現(xiàn)的語句覆蓋集記為該模型的計算公式如式所示f Us。(3)“交集模型”:找到能判別這個失敗運行的特征,其思想是:從所有成功運 行的覆蓋.語句集的交集中去掉那些出現(xiàn)在失敗運行的覆蓋語句集 /中的語句,將 得到的差異語句集作為可疑

7、語句集。其計算公式如式所示 :s-f。缺點:并集模型和交集模型的定位效果不是很理想。因為很多時候故障語句會同時出現(xiàn)在失敗運行和成功運行中,當(dāng)我們對這些語句集合進行集合運算時, 故障語句經(jīng)常會被誤刪。特別是當(dāng)大量運行存在的情況下,利用該方法得到的結(jié) 果集極有可能是空集或者根本就不包含故障語句。(4)近鄰模型該方法首先選擇一個失敗運行,然后找到一個與此失敗運行的覆蓋信息最 相近的成功運行。利用失敗運行和與其最相近的成功運行,從失敗運行的執(zhí)行語 句集中將那些出現(xiàn)在成功執(zhí)行語句集中的語句剔除,剩余的其他語句集即可作為 故障報告。近鄰模型提供了兩種方法來度量失敗運行和成功運行之間覆蓋信息的 相似程度。一

8、種叫做 bi nary dista ncing,計算所選擇的失敗運行與一個特殊的成功運行之間的差異語句集合。該方法可以定義為“失敗運行與成功運行執(zhí)行語 句集的不對稱距離的基數(shù)或者對稱距離的基數(shù)”。另一種是記錄每一個運行所執(zhí) 行到的每一條語句(或基本塊)的執(zhí)行次數(shù),然后按照執(zhí)行次數(shù)對語句進行排序, 計算兩個運行得到的有序序列之間的距離,該距離是將其中一個序列轉(zhuǎn)化為另一 個序列時所花費的代價。優(yōu)點:近鄰模型得出的結(jié)論是:用近鄰模型選擇的成功運行通常比隨機選擇 的成功運行更有利于故障定位,而且該模型在定位故障方面比并集和交集模型更 好。缺點:近鄰模型通過計算兩類運行(成功運行和失敗運行)的語句集合之

9、間 的距離來尋找與失敗運行最相近的成功運行,但是它卻無法區(qū)分執(zhí)行了相同語句 但是語句執(zhí)行順序不一樣的運行。近鄰模型的改進:Wang等人在的近鄰模型基礎(chǔ)上提出了一種新的差異度量 方法,即利用程序控制流所對應(yīng)的兩條路徑,求解兩條路徑之間的最小差異作為 故障報告。它針對近鄰模型不能識別語句執(zhí)行順序的不足提出將語句執(zhí)行順序作 為衡量執(zhí)行序列相似度的因素之一,將某條語句的一個執(zhí)行實例看做一個事件 那么每個運行就可以看作是多個事件的執(zhí)行序列,對失敗運行的事件執(zhí)行序列和 成功運行的事件執(zhí)行序列進行對齊比較操作,得出這兩個運行中分支走向不同的 分支事件,這就是Wang等人方法中使用的“差異”。還給出了定性判斷

10、任意兩個 差異之間的大小的差異度量方法。根據(jù)最小差異選擇一個與失敗運行最相似的成 功運行,用二者之間的差異作為故障報告。優(yōu)點:對分支語句故障的定位效果比 近鄰模型要好。缺點:對于賦值語句故障的定位效果卻不甚理想。 當(dāng)程序故障并 不包含在最小差異中時,利用該方法進行故障定位將得不到理想的效果。(二)基于排序的故障定位方法上面的方法的相同點在于:認(rèn)為程序中只有一部分語句是可疑的故障點,賦 予它們相同的故障可疑值,認(rèn)為應(yīng)該花費同樣多的代價檢查這些可疑點。而另一 類研究則認(rèn)為:程序中的每一部分都是可疑的故障點,根據(jù)它們在運行時的參與 度和表現(xiàn)不同,賦予它們不同的故障可疑值,然后將故障可疑值降序排列,程

11、序員 按照排序由大到小檢查程序,直至找到故障。基于排序的故障定位方法的思想是:通過分析程序的動態(tài)運行信息來進行 故障定位。它通常是比較兩類運行(成功運行和失敗運行)中程序狀態(tài)特征的統(tǒng)計 信息,直接定位到故障語句。該技術(shù)的區(qū)別在于使用哪些程序運行特征來進行對 比分析。目前常用的程序?qū)嶓w主要有:語句和分支,它們的主要載體是程序頻譜信 息,主要利用程序頻譜(信息來獲取程序?qū)嶓w的特征信息。利用這些信息來計算程 序?qū)嶓w(語句或分支)的可疑度,然后根據(jù)可疑度大小對被檢測的程序?qū)嶓w (語句 或分支)進行降序排序。開發(fā)人員在調(diào)試的過程中可以根據(jù)排序表從前至后始查 找程序故障,起到了一定的輔助作用。(1)Tar

12、antula 方法釆用的思想是:如果一條語句在失敗的執(zhí)行中出現(xiàn)的次數(shù)比在成功的執(zhí)行中 出現(xiàn)的次數(shù)多的話,那么該語句是故障語句的可能性就比較大。試題的懷疑度具 體算法如下:SuSPiCine除p(%f(e%f(e)其中,% f (e)表示失效測試用例中執(zhí)行語句數(shù)/失效測試用例的總數(shù),p(e)表示成功測試用例中執(zhí)行語句數(shù)/成功測試用例的總數(shù)。Tarantula是目前大家公認(rèn)的最好的基于統(tǒng)計的故障定位方法。缺點:該方法要求兩種測試用例要能夠覆蓋盡可能多的代碼。此外,Tara ntula 方法難以發(fā)現(xiàn)像賦值語句這樣的程序初始化錯誤。也不能區(qū)分一個失效測試用例在另一個測 試用例中的作用,或者一個成功測試

13、用例在另一個測試用例中的作用。多程序譜模型(LOUPE):這種方法是對Tarantula 的一種改進,即在 Tarantula所使用的程序譜上增加了依賴對的覆蓋信息構(gòu)成了多程序譜。所謂多程序譜就是加入了程序執(zhí)行過程中控制依賴和數(shù)據(jù)依賴的覆蓋信息 ,并根據(jù)這些 信息來總體計算某個語句的可疑值。(2)Wong 方法Wong等人認(rèn)為隨著語句成功執(zhí)行次數(shù)的增加,其對可疑度貢獻率逐漸減小。 該方法將語句i成功執(zhí)行次數(shù)劃分為3個區(qū)間0,2,3,10,11,+00)。區(qū)間0,2貢獻率權(quán)重為1,區(qū)間3,10的權(quán)重為 0.1,區(qū)間11,+00)貢獻率權(quán)重為 a (a0.1),其可疑度計算公式為: SUSpici

14、ness (e) = f (e) - f (passed(e)f(i)表示語句i失敗執(zhí)行的次數(shù),可以計算出語句i成功執(zhí)行對可疑度的貢獻值,最后用語句失敗執(zhí)行貢獻值減去成功執(zhí)行貢獻值,即可得到該語句i的可疑度。 例如,一個語句失敗執(zhí)行的次數(shù)為 5,它對可疑度的貢獻值為 5,成功執(zhí)行的次數(shù) 為6,它對可疑度的貢獻值為2.4,最后得到語句i的可疑度為5-2.4=2.6。缺點: 受測試用例集中正確測試用例數(shù)和錯誤測試用例數(shù)之比影響較大。(三) 程序切片方法(1) 靜態(tài)切片程序切片是一種常用的調(diào)試方法,通過切片減少調(diào)試搜索的范圍,一個測試 用例執(zhí)行結(jié)果失效是由于程序語句中執(zhí)行了不正確的變量值而引起的,這

15、種錯誤往往出現(xiàn)在與該變量語句配對的靜態(tài)切片中。切片方法是一種最初的比較直觀的方法,故障會出現(xiàn)在一個失效的測試用例執(zhí)行的切片中。公式:dice = Sf -Sp表示在測試用例中失效執(zhí)行的語句的集合除去測試用例中成功執(zhí)行的語句的集 合,即于它們的差集。缺點:這種技術(shù)的缺點是可能出現(xiàn)某些可疑語句不包含在切片中的情況,定位效果不理想。問題是如果切片規(guī)模較大時,有效性會降低,而且這種算法的時間開銷 會很大,最重要的是,他無法對在切片中的語句進行可疑度排名而直觀的提供給 開發(fā)人員作為參考。(2) 動態(tài)切片為了彌補靜態(tài)切片的不足,引入了動態(tài)切片方法.定義切片準(zhǔn)則:靜態(tài)切片不關(guān)心程序的輸入,它的切片準(zhǔn)則形如,

16、 其中i為程序中的一條語句,V表示該語句中使用的變量集合;與靜態(tài)切片不同, 動態(tài)切片需要一個特定的輸入,它的切片準(zhǔn)出形如v1,i, V,其中I表示程序的一 個輸入,i和V所表示的意思與靜態(tài)切片準(zhǔn)則相同。定義切片:根據(jù)切片準(zhǔn)則,通過抽取與切片準(zhǔn)則存在數(shù)據(jù)依賴或控制依賴關(guān)系的 語句,得到的一個程序片段,叫做原程序的一個切片.減少了故障定位的檢查范圍。 優(yōu)點:在故障定位過程中,往往需要忽略那些對暴露故障無關(guān)的語句,而程序切片 正是對程序做了這樣的提取,讓程序員集中精力去檢查那些與錯誤相關(guān)的代碼。 缺點:對于大型程序而言,經(jīng)過各種切片算法得到的切片往往非常大,反而會降低 其效率。Naish等人將其應(yīng)用

17、到軟件故障定位中,并根據(jù)切片方法提出語句可疑度2x計算公式:suspk r 0 usness(i=Jailed + jailed _+ passed i總的來說,基于排序的故障定位技術(shù)大概有三個步驟:1)收集某種粒度的實體的程序執(zhí)行路徑;2)分析成功的執(zhí)行路徑和失敗的執(zhí)行路徑,計算每個實體的 故障可疑值;3)按照故障可疑值降序排列程序?qū)嶓w,作為程序員檢查程序的依據(jù)。 這種技術(shù)根據(jù)程序不同部分在程序執(zhí)行時的表現(xiàn)行為和參與度,給每個部分賦予 不同的故障可疑值,建議程序員對程序故障可疑值的大小花費不同的代價檢查程 序。(四) 概率統(tǒng)計分析方法(1) 基于統(tǒng)計的定位方法SBI(statistical

18、bug isolatio n),通過計算一個謂詞P能夠蘊含程序失效的可能性 Failure(p)來定位,用公式表示如下:Failure (p)= failure( p)failure ( p)+ pas3sd(p)Passed(p)表示P背觀測到為真的成功測試用例個數(shù),failure(p) 表示p被觀測 到為真的失效測試用例個數(shù)。優(yōu)點:SBI方法能夠隔離程序中的多重錯誤。缺點: 只是記錄一個實體在執(zhí)行過程中是否被覆蓋到 ,不足以捕獲每個測試用例的行 為信息。(2)SOBER?法:改善SBI的不足。它記錄每一個運行中每個實體的執(zhí)行次數(shù),構(gòu)造了一個失效和成功測試用例行為的統(tǒng)計模型,使用這個統(tǒng)計模型評估每個實 體以確定它們是否可疑。SOBER!義賦值偏差來估計在每個運行時謂詞被賦值為 真的幾率。更確切地,如果P是一個謂詞,口P)是它在每次運行時被賦值為真可能性,(P)= nt/(nt+nf)其中nt

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論