欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于變量切片和關(guān)聯(lián)規(guī)則的軟件錯誤定位方法與流程

文檔序號:11729280閱讀:291來源:國知局
一種基于變量切片和關(guān)聯(lián)規(guī)則的軟件錯誤定位方法與流程

本發(fā)明屬于軟件測試技術(shù)領(lǐng)域,具體涉及到軟件錯誤定位問題,提供了一種基于變量切片和關(guān)聯(lián)規(guī)則的軟件錯誤定位方法,主要解決錯誤定位中效率低的問題,達(dá)到提高錯誤定位效率、降低測試成本的目的。



背景技術(shù):

隨著軟件在各行各業(yè)應(yīng)用的不斷普及與深入,軟件質(zhì)量逐漸成為行業(yè)競爭的核心力量之一。如何確保軟件質(zhì)量成為了開發(fā)人員和測試人員關(guān)注的焦點(diǎn),而軟件錯誤定位是調(diào)試過程中最昂貴、最耗時的活動之一,也是保證軟件質(zhì)量、提高調(diào)試效率、降低測試成本的關(guān)鍵性工作。

目前,軟件錯誤定位已經(jīng)成為國內(nèi)外研究的一個熱點(diǎn)。錯誤定位旨在找到隱含在程序源代碼中的錯誤指令、過程或數(shù)據(jù)定義,其粒度包含程序語句、基本塊、分支、函數(shù)或類。錯誤定位技術(shù)根據(jù)“是否需要運(yùn)行軟件”的準(zhǔn)則分為兩大類:基于測試的錯誤定位技術(shù)和基于靜態(tài)分析的錯誤定位技術(shù)。前者需要設(shè)計測試用例,然后運(yùn)行軟件程序,最后根據(jù)軟件程序的動態(tài)執(zhí)行信息和輸出結(jié)果進(jìn)行錯誤定位,然而動態(tài)分析方法在收集執(zhí)行信息時會產(chǎn)生較大的代價。后者不用運(yùn)行軟件,而是依據(jù)程序語言的語法和語義,靜態(tài)分析軟件結(jié)構(gòu)和程序?qū)嶓w之間的依賴關(guān)系,以發(fā)現(xiàn)不符合系統(tǒng)約束的程序?qū)嶓w,從而進(jìn)行錯誤定位。

軟件錯誤定位方法主要通過縮小錯誤搜索范圍來提高效率。程序切片技術(shù)通過去除與程序錯誤不相關(guān)的語句來縮小錯誤搜索范圍,但是計算動態(tài)程序切片時,需要進(jìn)行測試用例設(shè)計,切片后的程序?yàn)檎Z句集合,集合內(nèi)元素?zé)o先后次序,測試人員需要檢查切片中所有語句以定位錯誤,導(dǎo)致時間資源消耗較大,錯誤定位效率較低。基于覆蓋信息的錯誤定位方法以程序中語句或基本塊為研究對象,統(tǒng)計不同執(zhí)行軌跡的覆蓋信息進(jìn)行懷疑度計算,經(jīng)典的tarantula、ochiai和naish等方法通過計算語句懷疑度得出檢查語句的先后次序以定位錯誤,但是這些方法對執(zhí)行軌跡進(jìn)行了高度簡化并忽略了程序內(nèi)部固有的依賴關(guān)系,計算量大,時間代價較高,導(dǎo)致錯誤定位效率較低。

為此,本發(fā)明提出變量切片和關(guān)聯(lián)規(guī)則相結(jié)合的軟件錯誤定位方法以期提高軟件錯誤定位的效率。首先在系統(tǒng)依賴圖的基礎(chǔ)上進(jìn)行變量切片,通過分析程序執(zhí)行過程,可以發(fā)現(xiàn)語句之間存在關(guān)聯(lián),關(guān)聯(lián)分析技術(shù)能夠從大量程序執(zhí)行信息中獲取關(guān)聯(lián)語句,以此確定語句檢查優(yōu)先級次序,定位錯誤出現(xiàn)的位置。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明要解決的問題是:現(xiàn)有軟件錯誤定位方法時間資源消耗大、效率較低,難以滿足降低測試成本的需求,需要一種新的軟件錯誤定位方法,在減少計算量、降低時間資源消耗的情況下,有效提高軟件錯誤定位的效率。

本發(fā)明的技術(shù)方案為:采用一種縮小軟件調(diào)試范圍的變量切片技術(shù)和分析程序語句相關(guān)性的關(guān)聯(lián)規(guī)則算法相結(jié)合的針對java程序的錯誤定位方法。首先針對java程序語句進(jìn)行變量切片,將所有變量切片行號信息作為事務(wù)數(shù)據(jù)庫;然后利用關(guān)聯(lián)分析得到關(guān)聯(lián)規(guī)則集合,根據(jù)置信度和支持度由高到低的排列順序,生成檢查語句優(yōu)先級次序;最后依據(jù)語句優(yōu)先級次序越靠前越優(yōu)先被檢查的原則定位錯誤出現(xiàn)的位置。

本發(fā)明的特征在于包括以下步驟:

(1)對于一個包含錯誤且可執(zhí)行代碼總行數(shù)為n的java程序pfault進(jìn)行預(yù)處理,得到系統(tǒng)依賴圖;在系統(tǒng)依賴圖上針對pfault中某一條包含m個變量的語句進(jìn)行變量切片,得到程序切片數(shù)據(jù)varslice.dot;varslice.dot文件由集合t表示為t={fname,label,fillcolor,si→sj},其中fname為pfault中執(zhí)行變量切片語句所屬方法的名稱;label為變量切片語句,label="varnumi:var=value",其中varnumi(1≤i≤n)為切片行號,var為變量名,value為變量值;fillcolor表示語句是否包含在變量切片結(jié)果內(nèi),fillcolor={yellow,gray},yellow表示該語句屬于變量切片執(zhí)行結(jié)果,gray表示該語句不屬于變量切片執(zhí)行結(jié)果;si→sj為語句si和sj的依賴指向關(guān)系;執(zhí)行一次變量切片可以獲得一個.dot文件,將每個.dot文件中fillcolor取yellow值的label所對應(yīng)的變量切片行號集合varnum作為.txt文件的一條記錄,其中varnum={varnum1,varnum2...varnumi,...varnumn};從所有變量切片數(shù)據(jù).dot文件中依次提取varnum,構(gòu)成變量切片行號信息varslice.txt,該信息的記錄數(shù)為執(zhí)行變量切片的次數(shù);

(2)將varslice.txt作為事務(wù)數(shù)據(jù)庫d,通過掃描d計算每個變量切片行號varnumi的頻數(shù)slicenum1,每個varnumi都是候選1項集的集合c1的成員;假設(shè)最小支持度計數(shù)為min_support,可以確定頻繁1項集的集合l1,它由滿足slicenum1≥min_support的候選1項集組成;使用連接操作l1×l1產(chǎn)生候選2項集的集合c2,它由個2項集組成;掃描d中事務(wù),累計c2中每個候選項集的支持計數(shù)slicenum2,然后確定頻繁2項集的集合l2,它由c2中滿足slicenum2≥min_support的候選2項集組成;令c3=l2×l2,從c3中刪除具有非頻繁子集的候選項集,再累計c3中每個候選項集的支持計數(shù)slicenum3,掃描d中事務(wù)確定頻繁3項集的集合l3,l3由c3中滿足slicenum3≥min_support的候選3項集組成;以此類推,利用產(chǎn)生候選集的連接步li×li和刪除具有非頻繁子集的候選集的剪枝步逐層搜索,直至ci=φ終止,即得到了所有的頻繁項集frevarslice={c1,c2,c3,...ci-1};

(3)對于每個頻繁項集cj(1≤j≤i-1),可以得到2j-2個非空真子集s,假設(shè)最小置信度為min_confidence,支持度計數(shù)為support_count,若滿足則獲取到語句之間蘊(yùn)含的關(guān)聯(lián)規(guī)則relatelisti,表示為以及關(guān)聯(lián)規(guī)則數(shù)目relatelistnum;

(4)將所有關(guān)聯(lián)規(guī)則totalrelatelist={relatelist1,relatelist2,...relatelisti,...relatelistnum}按照置信度由高到低的次序重新排列,可以得到排序關(guān)聯(lián)規(guī)則seqrelatelist={relatelist1',relatelist2',...relatelisti',...relatelistnum'},其中第i條關(guān)聯(lián)規(guī)則relatelisti'表示為

(5)對步驟(4)的排序關(guān)聯(lián)規(guī)則seqrelatelist進(jìn)行分類,置信度相同的劃分為同一類,形成集合{confidence1=varnum1,varnum11,...varnum1i;confidence2=varnum2,varnum22,...varnum2i;...confidencek=varnumk,varnumkk,...varnumki},其中根據(jù)置信度的排列順序生成檢查語句優(yōu)先級次序insequence={varnum1,varnum11,...varnum1i;varnum2,varnum22,...varnum2i;...varnumk,varnumkk,...varnumki};

(6)對于未在關(guān)聯(lián)規(guī)則內(nèi)的語句按照支持度由高到低進(jìn)行排列并分類,支持度相同的劃分為同一類,形成集合{support(k+1)=varnum(k+1),varnum(k+1)(k+1),...varnum(k+1)j;support(k+2)=varnum(k+2),varnum(k+2)(k+2),...varnum(k+2)j;...support(k+m)=varnum(k+m),varnum(k+m)(k+m),...varnum(k+m)j},其中support(k+m)∈slicenum1;根據(jù)支持度的排列順序生成關(guān)聯(lián)規(guī)則外的檢查語句優(yōu)先級次序outsequence={varnum(k+1),varnum(k+1)(k+1),...varnum(k+1)j;varnum(k+2),varnum(k+2)(k+2),...varnum(k+2)j;...varnum(k+m),varnum(k+m)(k+m),...varnum(k+m)j};

(7)依據(jù)步驟(5)和步驟(6)得到總的檢查語句優(yōu)先級次序prioritysequence=insequence∪outsequence,依據(jù)語句優(yōu)先級次序越靠前越優(yōu)先被檢查的原則,可以定位到程序pfault中錯誤出現(xiàn)的具體位置。

本發(fā)明的特點(diǎn)在于:(1)采用基于程序內(nèi)部固有的數(shù)據(jù)依賴和控制依賴關(guān)系、縮小軟件調(diào)試范圍的變量切片技術(shù);(2)將變量切片技術(shù)結(jié)合關(guān)聯(lián)規(guī)則算法得到語句之間蘊(yùn)含的關(guān)聯(lián)規(guī)則;(3)通過排序策略生成排序關(guān)聯(lián)規(guī)則和檢查語句優(yōu)先級次序,從而進(jìn)行錯誤定位。

本發(fā)明的有益效果為:

目前,解決軟件錯誤定位問題的方法很多,傳統(tǒng)的軟件錯誤定位方法主要通過縮小錯誤搜索范圍來提高效率。從不同角度出發(fā)且被廣泛應(yīng)用的錯誤定位技術(shù)主要包括基于距離度量的delta調(diào)試技術(shù)、并集模型、交集模型、近鄰模型,基于排序度量的懷疑度計算tarantula方法、改進(jìn)的徑向基函數(shù)神經(jīng)網(wǎng)絡(luò)wong方法,基于程序切片的靜態(tài)切片、動態(tài)切片技術(shù),基于概率度量的統(tǒng)計分析、sober方法以及基于模型度量的診斷方法等。

其中,程序切片技術(shù)的理論已經(jīng)相當(dāng)成熟,主要有靜態(tài)切片和動態(tài)切片,前向切片和后向切片等,由于程序切片與程序有關(guān),在軟件的編碼和調(diào)試階段,當(dāng)出現(xiàn)錯誤時通過程序切片可以快速對程序中的錯誤進(jìn)行定位,這樣引起錯誤的代碼就被限定在這個程序切片里,從而縮小了軟件調(diào)試范圍,協(xié)助測試人員更加有效地定位程序錯誤。在實(shí)用的程序切片工具方面,主要包括關(guān)注c程序的wisconsin、chopshop、ghinsu、unravel,適用于ada語言的pss/ada,支持oberon-2語言的theoberonslicingtool(ost),應(yīng)用于oopql語言環(huán)境的jato以及針對java程序的動態(tài)切片工具dsfl、spyder等,但是這些工具中開源的較少,尤其針對java語言的靜態(tài)切片工具就更為少見。

基于覆蓋信息的錯誤定位方法以程序中語句或基本塊為研究對象,統(tǒng)計不同執(zhí)行軌跡的覆蓋信息,進(jìn)行懷疑度計算。tarantula方法、ochiai方法、wong方法、dstar方法和naish等方法通過計算語句懷疑度得出檢查語句的先后次序以定位錯誤。

程序切片技術(shù)能夠在一定程度上縮小檢查語句的范圍,減少檢查不相關(guān)語句帶來的時間資源消耗,但切片后的語句集合里并不包括優(yōu)先級次序,故測試人員需要按照切片中語句的自然順序逐個檢查,在效率上優(yōu)勢并不明顯。而關(guān)聯(lián)規(guī)則能夠從大量程序執(zhí)行信息中獲取語句錯誤的相關(guān)信息,反映出執(zhí)行軌跡中語句和執(zhí)行結(jié)果的關(guān)系。為此,本發(fā)明將程序切片技術(shù)和關(guān)聯(lián)規(guī)則算法相結(jié)合,在得到變量切片后進(jìn)行關(guān)聯(lián)分析,得到檢查語句優(yōu)先級次序以定位錯誤,達(dá)到提高錯誤定位效率的目的。

下面以典型實(shí)例的實(shí)驗(yàn)結(jié)果證實(shí)該方法的有效性和可行性:

測試程序選用5個輕量級java單錯誤版本程序作為基準(zhǔn),其基本信息如表1所示,其中第1—3列分別為程序名稱、描述和可執(zhí)行代碼行數(shù)(不包含注釋行)。

表1測試程序描述

對比實(shí)驗(yàn)選取經(jīng)典的tarantula、ochiai、jarcard、dstar、wong和naish2共6種計算懷疑度方法(計算公式如(1)—(6)所列)作為評測數(shù)據(jù)集,錯誤類型為植入錯誤。

通過執(zhí)行變量切片并進(jìn)行關(guān)聯(lián)分析,獲得的實(shí)驗(yàn)結(jié)果如表2、表3、圖5、圖6所示。

其中,表2的第2—9列分別表示加載soot類所消耗的時間、進(jìn)行指向分析需要的時間、程序依賴圖中方法的數(shù)目、分析方法所消耗的時間、系統(tǒng)依賴圖中結(jié)點(diǎn)的數(shù)目、控制依賴數(shù)目、數(shù)據(jù)依賴數(shù)目以及成功構(gòu)造系統(tǒng)依賴圖所需要的時間。

表2執(zhí)行變量切片過程的時間復(fù)雜度

由表2和圖5可以看出程序規(guī)模越大、結(jié)構(gòu)越復(fù)雜,在執(zhí)行變量切片的過程中所消耗的時間資源越多。

表3的第2—5列分別為執(zhí)行變量切片數(shù)目、由關(guān)聯(lián)規(guī)則算法得到的關(guān)聯(lián)規(guī)則數(shù)目和執(zhí)行時間以及在關(guān)聯(lián)規(guī)則算法中設(shè)置的最小支持度參數(shù)。

表3執(zhí)行關(guān)聯(lián)分析結(jié)果

由表3可以看出,在采用輕量級java程序進(jìn)行實(shí)驗(yàn)的過程中,變量切片數(shù)隨著程序規(guī)模的增加而增加。關(guān)聯(lián)規(guī)則數(shù)目反映的是語句之間的聯(lián)系程度,數(shù)目越多表示語句之間聯(lián)系越緊密。

本發(fā)明采用檢查到錯誤語句的累積檢查語句數(shù)與可執(zhí)行代碼數(shù)的比值這一錯誤定位代價指標(biāo)對錯誤定位的效率進(jìn)行評價,比值越小表示錯誤定位的效果越好。由于檢查語句中可能存在多條語句檢查次序相同的情況,故本發(fā)明采用對均值情況進(jìn)行對比分析。最好的情況是在同一優(yōu)先級的前提下,檢查第一條語句就定位到錯誤,最壞的情況是在檢查到最后一條語句才定位到錯誤,均值的情況是兩者的平均值。由圖6可以看出,在均值情況下,本發(fā)明方法的錯誤定位效率優(yōu)勢明顯,僅需平均檢查10%左右的代碼即可定位到錯誤位置,比基于覆蓋信息的tarantula、ochiai、jarcard、dstar、wong和naish2方法的錯誤定位效率高且穩(wěn)定性良好。

通過以上分析和實(shí)例驗(yàn)證,本發(fā)明方法錯誤定位效率優(yōu)于其他方法,原因在于本發(fā)明方法基于變量切片,將程序中語句的執(zhí)行軌跡和語句之間潛在的關(guān)聯(lián)關(guān)系聯(lián)系起來,生成檢查語句優(yōu)先級次序,從而定位出錯誤的位置,該方法穩(wěn)定性良好,是一種有效改善調(diào)試效率、降低測試成本的軟件錯誤定位方法。

附圖說明

圖1是本發(fā)明方法的流程圖

圖2是驗(yàn)證方法的一個java實(shí)例程序

圖3是java實(shí)例程序從.dot文件提取的變量切片信息varslice.txt

圖4是由java實(shí)例程序的varslice.txt得到的頻繁項集frevarslice及支持度計數(shù)

圖5是5個典型java程序執(zhí)行變量切片獲得的數(shù)據(jù)信息和時間資源消耗情況的對比圖

圖6是本發(fā)明方法和基于懷疑度公式方法的錯誤定位效率的對比圖

具體實(shí)施方式

以圖2的實(shí)例程序?yàn)槔齺碚f明本發(fā)明的具體實(shí)施過程。

如圖1,本發(fā)明將變量切片技術(shù)和關(guān)聯(lián)分析算法相結(jié)合進(jìn)行錯誤定位,其具體步驟如下:

(1)對圖2所示程序源代碼.java進(jìn)行編譯,將其轉(zhuǎn)換為字節(jié)碼.class形式后,利用soot中提供的spark流和指向分析方法,進(jìn)行控制流和數(shù)據(jù)流分析,分析方法個數(shù)以及結(jié)點(diǎn)數(shù)目;結(jié)合控制依賴圖和數(shù)據(jù)依賴圖構(gòu)建系統(tǒng)依賴圖,在該依賴圖上進(jìn)行變量切片。

執(zhí)行變量切片獲取的數(shù)據(jù)信息為:

test.slicer.classic.compareloadsootclassesin13.6s

finishpoints-toanalysisin1.1s

[pdg]0:<test.slicer.classic.compare:voidmain(java.lang.string[])>--1.8s,23nodes

[pdg]1:<test.slicer.classic.compare:intsub(int,int,int)>--0.0s,8nodes

[sdg]2methodsanalyzedin1.8s

[dependencecount]nodes31,ctrl29,stack23

[sdg]sdgsuccessfullyconstructedin9.5s

對s6:x=x/z;執(zhí)行變量切片:

對變量x執(zhí)行切片:

slicingresult:

#0encompare.main

6:x=x/z

2:x=5

對變量z執(zhí)行切片:

slicingresult:

#0encompare.main

6:x=x/z

4:z=5

從所有變量切片數(shù)據(jù).dot文件中依次提取varnum,構(gòu)成變量切片行號信息varslice.txt,針對實(shí)例程序,得到執(zhí)行變量切片的次數(shù)為25,如圖3所示;

(2)將varslice.txt作為事務(wù)數(shù)據(jù)庫d,利用產(chǎn)生候選集的連接步li×li和刪除非頻繁集候選的剪枝步逐層搜索,直至頻繁項集c6=φ終止,得到了所有的頻繁項集frevarslice={c1,c2,c3,c4,c5},如圖4所示;

(3)在步驟(2)的基礎(chǔ)上進(jìn)行關(guān)聯(lián)分析,獲取語句之間蘊(yùn)含的關(guān)聯(lián)規(guī)則totalrelatelist,并得到關(guān)聯(lián)語句之間的置信度;實(shí)例程序得到138條關(guān)聯(lián)規(guī)則;

(4)對于實(shí)例程序,按照置信度由高到低的排序策略得到排序關(guān)聯(lián)規(guī)則seqrelatelist;

(5)對步驟(4)的排序關(guān)聯(lián)規(guī)則seqrelatelist進(jìn)行分類,置信度相同的劃分為同一類,形成集合{1.00=5,2,3,4,10;0.89=6;},生成檢查語句優(yōu)先級次序insequence為{5,2,3,4,10,6},故

檢查的第1條語句是:第5行,第2行,第3行,第4行,第10行;

檢查的第6條語句是:第6行;

其中,最小支持度根據(jù)程序的規(guī)模、結(jié)構(gòu)、復(fù)雜性設(shè)定為7。

(6)對于未在關(guān)聯(lián)規(guī)則內(nèi)的語句按照支持度由高到低進(jìn)行排列得到8:5;7:4;9:4;11:4;12:4;15:3;13:1;16:1;17:1;將支持度相同的劃分為同一類,形成集合{5=8;4=7,9,11,12;3=15;1=13,16,17;},生成關(guān)聯(lián)規(guī)則外的檢查語句優(yōu)先級次序outsequence為{8,7,9,11,12,15,13,16,17},故

檢查的第7條語句是:第8行;

檢查的第8條語句是:第7行,第9行,第11行,第12行;

檢查的第12條語句是:第15行;

檢查的第13條語句是:第13行,第16行,第17行。

(7)依據(jù)步驟(5)和步驟(6)得到總的檢查語句優(yōu)先級次序prioritysequence=insequence∪outsequence,即prioritysequence={5,2,3,4,10,6,8,7,9,11,12,15,13,16,17},依據(jù)語句優(yōu)先級次序越靠前越優(yōu)先被檢查的原則,可以定位到錯誤出現(xiàn)的具體位置(如表4所示)以及錯誤定位代價結(jié)果:6/17=35.29%。

表4錯誤定位結(jié)果

本發(fā)明涉及的基本思想可以完整體現(xiàn)在表5的實(shí)例程序中,其中基于覆蓋信息的語句檢查次序是在構(gòu)造8個測試用例(t1-t8)的基礎(chǔ)上,通過比較懷疑度tarantula方法和基于動態(tài)切片和關(guān)聯(lián)分析的錯誤定位方法flar得到的,*表示該條語句被覆蓋,第一列行號中si表示第i條語句,s6為錯誤語句,t/f表示執(zhí)行測試用例結(jié)果為成功(t)/失敗(f)。本發(fā)明方法在執(zhí)行變量切片的基礎(chǔ)上進(jìn)行關(guān)聯(lián)分析,定位到錯誤需要檢查語句數(shù)i—j中,i表示最好情況下只需檢查i條語句即可定位到錯誤,j表示最壞情況下需要檢查j條語句才能定位到錯誤,均值為(i+j)/2,表示平均需要檢查的語句數(shù)目。錯誤定位代價為平均需要檢查的語句數(shù)目與可執(zhí)行代碼總行數(shù)的比值,值越小表示錯誤定位的效率越高。

表5實(shí)例程序

表6為本發(fā)明方法與基于懷疑度公式的檢查語句數(shù)和錯誤定位代價對比,可以看出在均值情況下,本發(fā)明方法與ochiai方法、dstar方法錯誤定位效率相當(dāng),優(yōu)于tarantula方法、flar方法、jarcard方法、wong方法和naish2方法。

表6方法對比

通過實(shí)例驗(yàn)證,可以看出變量切片和關(guān)聯(lián)規(guī)則相結(jié)合的軟件錯誤定位方法能夠有效改善軟件調(diào)試效率,降低軟件測試成本。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
双峰县| 临泽县| 兰西县| 息烽县| 阿克苏市| 二连浩特市| 桦甸市| 华宁县| 仪征市| 新安县| 眉山市| 万荣县| 朔州市| 三穗县| 富锦市| 尖扎县| 汝州市| 石泉县| 邻水| 黑山县| 北京市| 兰州市| 宜宾市| 石泉县| 龙胜| 恭城| 五原县| 大城县| 阳春市| 赤壁市| 宜城市| 稷山县| 静宁县| 北票市| 江源县| 平果县| 京山县| 英超| 盐源县| 崇州市| 鲁山县|