国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于風(fēng)險(xiǎn)軌跡與復(fù)雜網(wǎng)絡(luò)的缺陷定位方法

2020-06-18 03:41王曙燕孫家澤
計(jì)算機(jī)工程 2020年6期
關(guān)鍵詞:測試用例調(diào)用軌跡

王曙燕,韓 雪,孫家澤

(西安郵電大學(xué) 計(jì)算機(jī)學(xué)院,西安 710121)

0 概述

隨著軟件復(fù)雜性的增加,軟件缺陷幾乎不可避免。程序調(diào)試在軟件開發(fā)與維護(hù)過程中是一項(xiàng)成本昂貴且復(fù)雜耗時(shí)的工作[1]。研究表明,軟件發(fā)展維護(hù)過程中50% ~80%的成本用于軟件測試和調(diào)試[2]。因此,如何有效快速定位軟件缺陷是保證軟件高質(zhì)量和可靠性的關(guān)鍵性工作。

當(dāng)程序輸出偏離預(yù)期輸出時(shí),通常說明程序中存在缺陷。傳統(tǒng)的軟件缺陷定位方法大多是在源碼中設(shè)置斷點(diǎn),在失敗的輸入上重新執(zhí)行程序,并檢查程序狀態(tài)以了解失敗的原因,但該方法依賴于程序員的主觀判斷,效率不高。為實(shí)現(xiàn)軟件缺陷定位自動(dòng)化,許多用于調(diào)試的自動(dòng)缺陷定位技術(shù)被提出。文獻(xiàn)[3]提出將程序切片技術(shù)用于軟件調(diào)試中,常被用來減少錯(cuò)誤的搜索范圍,但存在時(shí)間和空間復(fù)雜度過高的問題。文獻(xiàn)[4]提出基于覆蓋信息的錯(cuò)誤定位技術(shù),通過對(duì)成功和失敗測試用例執(zhí)行過程中的覆蓋信息進(jìn)行分析,計(jì)算語句可疑度,例如Tarantula[5]、Jaccard[6]和Ochiai[7]等方法,但這些方法會(huì)受到偶然性成功測試用例的影響[8],使定位效率降低。文獻(xiàn)[9]提出程序譜的概念,程序譜記錄了程序運(yùn)行過程的某方面信息,可用于跟蹤程序行為。文獻(xiàn)[10]通過對(duì)程序頻譜間差異和回歸缺陷的相關(guān)性進(jìn)行研究,實(shí)驗(yàn)結(jié)果表明有缺陷的程序在運(yùn)行過程中表現(xiàn)出行為異常的概率較大。文獻(xiàn)[11]根據(jù)程序光譜間的相似性進(jìn)行缺陷定位,但如果錯(cuò)誤語句不在可疑集合中,則定位效率會(huì)明顯降低。文獻(xiàn)[12]收集時(shí)間頻譜信息用于輔助缺陷定位,通過對(duì)比成功和失敗測試用例執(zhí)行的時(shí)間譜并找出差異,然而差異處存在缺陷的概率較大。文獻(xiàn)[13]通過構(gòu)建程序頻譜及其執(zhí)行結(jié)果之間的關(guān)系模型,提出基于條件概率的缺陷定位方法,總體定位效果顯著。但上述技術(shù)均是關(guān)注軟件局部特征而非全局特征,適用范圍相對(duì)較小。

為尋找通用的軟件缺陷定位方法,文獻(xiàn)[14]將復(fù)雜網(wǎng)絡(luò)理論引入軟件缺陷定位領(lǐng)域,提出基于中心度量的軟件缺陷定位方法,通過度中心性和結(jié)構(gòu)洞兩個(gè)度量值計(jì)算程序語句的懷疑度。文獻(xiàn)[15]根據(jù)錯(cuò)誤語句在通過測試執(zhí)行和測試執(zhí)行失敗過程中的距離對(duì)程序各語句進(jìn)行懷疑度計(jì)算,提出基于復(fù)雜網(wǎng)絡(luò)理論的軟件缺陷定位方法,該方法可同時(shí)對(duì)程序中的單個(gè)錯(cuò)誤和多個(gè)錯(cuò)誤進(jìn)行定位。

相對(duì)而言,基于語句粒度的缺陷定位分析研究較多,而基于函數(shù)這一粒度進(jìn)行分析的缺陷定位研究較少。從實(shí)際情況看,程序中出現(xiàn)的多數(shù)缺陷是由函數(shù)內(nèi)部的語句間邏輯錯(cuò)誤引起,因此以函數(shù)為研究對(duì)象定位軟件缺陷更符合生產(chǎn)環(huán)境[16]。面向?qū)ο蟪绦?文獻(xiàn)[17]指出如果某個(gè)方法僅出現(xiàn)在程序通過或失敗程序中,此方法可行性不高。文獻(xiàn)[18]通過挖掘控制流異常對(duì)缺陷進(jìn)行定位,該方法可有效定位缺陷函數(shù)。文獻(xiàn)[19]將缺陷報(bào)告和源代碼方法體用向量表示,計(jì)算其余弦距離并排序,提出的MethodLocator技術(shù)可有效定位缺陷函數(shù)。針對(duì)以函數(shù)為分析粒度進(jìn)行缺陷定位效率不高的問題,本文提出基于風(fēng)險(xiǎn)軌跡與復(fù)雜網(wǎng)絡(luò)的缺陷定位方法(Defect Location Based on Risk Trace and Complex Network,DRC),以期在滿足對(duì)大規(guī)模軟件缺陷定位需求的同時(shí),提高軟件缺陷定位效率。

1 程序風(fēng)險(xiǎn)軌跡獲取

在程序執(zhí)行時(shí)動(dòng)態(tài)輸入多個(gè)測試用例,獲取運(yùn)行過程中的函數(shù)調(diào)用序列,根據(jù)測試用例在不同缺陷版本程序的執(zhí)行結(jié)果,為待測程序選擇目標(biāo)序列和可疑序列,提取風(fēng)險(xiǎn)軌跡并檢測可疑函數(shù)候選集。

1.1 函數(shù)調(diào)用序列獲取

函數(shù)調(diào)用序列(Function Call Sequence,FCS)指程序在特定輸入下函數(shù)之間調(diào)用關(guān)系的全信息。本文主要分析函數(shù)調(diào)用序列的3個(gè)部分:函數(shù)間的調(diào)用關(guān)系,函數(shù)間調(diào)用次數(shù)及函數(shù)調(diào)用的時(shí)間順序。

定義1(函數(shù)調(diào)用關(guān)系) FC=a→b[calls="count"],其中,a與b均為函數(shù)名,a稱為主調(diào)函數(shù),b稱為被調(diào)函數(shù),a→b表示函數(shù)a調(diào)用函數(shù)b,calls="count"表示a函數(shù)調(diào)用b函數(shù)count次。

動(dòng)態(tài)獲取函數(shù)調(diào)用序列,如圖1所示。利用C程序代碼追蹤工具Pvtrace[20],通過定制特殊的分析函數(shù),可獲取函數(shù)運(yùn)行過程中的地址信息。然后將分析函數(shù)與待測程序一起編譯,就可獲取一個(gè)調(diào)用路徑可追蹤的新程序。將設(shè)計(jì)好的多個(gè)測試用例動(dòng)態(tài)輸入調(diào)用路徑可追蹤的程序中,多次運(yùn)行程序,得到函數(shù)運(yùn)行時(shí)所對(duì)應(yīng)的地址序列文件,利用可將指令地址轉(zhuǎn)換為函數(shù)名的工具Addr2line,把地址信息轉(zhuǎn)換為對(duì)應(yīng)的函數(shù)名稱,Pvtrace可以通過分析函數(shù)執(zhí)行序列得到函數(shù)間的調(diào)用序列dot文件。

圖1 函數(shù)調(diào)用序列獲取流程

1.2 風(fēng)險(xiǎn)軌跡提取

若程序P在測試用例ti上執(zhí)行對(duì)應(yīng)預(yù)期輸出結(jié)果為oi,實(shí)際輸出結(jié)果為pi,根據(jù)測試用例在程序上執(zhí)行是否通過可以定義目標(biāo)序列和可疑序列。

定義2(目標(biāo)序列) 如果pi=oi,則說明程序在測試用例ti上執(zhí)行通過,所對(duì)應(yīng)的函數(shù)調(diào)用序列稱為目標(biāo)序列Scorrect。

定義3(可疑序列) 如果pi≠oi,則說明程序在測試用例ti上執(zhí)行不通過,所對(duì)應(yīng)的函數(shù)調(diào)用序列稱為可疑序列Sdoubt。

定義4(風(fēng)險(xiǎn)軌跡) 通過對(duì)比目標(biāo)序列和可疑序列,提取可疑序列與目標(biāo)序列不一致序列的集合稱為風(fēng)險(xiǎn)軌跡Trisk。

對(duì)于特定的輸入,程序函數(shù)調(diào)用序列是固定的。存在缺陷的程序在執(zhí)行測試用例時(shí)可能會(huì)導(dǎo)致函數(shù)調(diào)用序列發(fā)生異常,將目標(biāo)序列和可疑序列進(jìn)行對(duì)比找出程序風(fēng)險(xiǎn)軌跡,分析并提取可疑函數(shù)集,依次檢測并定位缺陷函數(shù)。通過運(yùn)行正確的程序可獲取目標(biāo)序列,也可能在大多情況下無法獲得一個(gè)正確的軟件版本,但卻可以得到含有不同缺陷版本的軟件。在回歸測試中,對(duì)比多個(gè)含缺陷版本的程序,同一個(gè)測試用例可能在一個(gè)版本中執(zhí)行失敗,在另一個(gè)版本中執(zhí)行成功,在程序執(zhí)行成功中的函數(shù)調(diào)用序列就是目標(biāo)序列[21]。假設(shè)程序P在回歸測試中的版本是P1,P2,…,Pn。如果測試用例t在P1中運(yùn)行失敗,在Pi(1

1.3 風(fēng)險(xiǎn)軌跡分析

本文主要分析函數(shù)間的調(diào)用關(guān)系、函數(shù)間調(diào)用次數(shù)及函數(shù)調(diào)用的時(shí)間順序3種函數(shù)調(diào)用信息。當(dāng)可疑序列與目標(biāo)序列調(diào)用關(guān)系或調(diào)用次數(shù)不一致時(shí),異常位置的主調(diào)函數(shù)很可能存在缺陷。當(dāng)可疑序列與目標(biāo)序列調(diào)用時(shí)間順序不一致時(shí),說明異常位置的上一調(diào)用序列有很大嫌疑,以致異常處函數(shù)調(diào)用時(shí)間順序異常。如果可疑序列與目標(biāo)序列同時(shí)出現(xiàn)函數(shù)間的調(diào)用關(guān)系、調(diào)用次數(shù)及調(diào)用時(shí)間順序不一致時(shí),則認(rèn)為調(diào)用關(guān)系和調(diào)用次數(shù)異常對(duì)程序缺陷影響更大,可忽略調(diào)用時(shí)間順序異常,因?yàn)檎{(diào)用時(shí)間順序不一致可由多種因素造成,提取可疑函數(shù)候選集時(shí),只考慮調(diào)用關(guān)系和調(diào)用次數(shù)異常。

在獲取待測程序目標(biāo)序列和可疑序列后,利用Linux文本比對(duì)命令diff找出程序風(fēng)險(xiǎn)軌跡,diff命令會(huì)在可疑序列與目標(biāo)序列不一致處打上標(biāo)記,共有3種情況:1)不一致處標(biāo)記為“|”,表示可疑序列與目標(biāo)序列對(duì)應(yīng)行調(diào)用信息(調(diào)用關(guān)系或次數(shù))有所不同,提取不一致位置的主調(diào)函數(shù)作為可疑函數(shù);2)不一致處標(biāo)記為“<”或“>”,表示可疑序列與目標(biāo)序列調(diào)用時(shí)間順序(調(diào)用序列個(gè)數(shù))不同,提取發(fā)生異常處上一位置的主調(diào)函數(shù)和被調(diào)函數(shù)作為可疑函數(shù);3)無標(biāo)記,說明目標(biāo)序列和可疑序列完全相同,不提取可疑函數(shù)。

將提取的可疑函數(shù)fsuspect按其在調(diào)用序列的執(zhí)行次序排列,作為可疑函數(shù)候選集Tsuspect={fsuspect1,fsuspect2,…,fsuspectn|n≥1},然后依次檢測,定位缺陷函數(shù)。

2 DRC方法

2.1 復(fù)雜網(wǎng)絡(luò)圖構(gòu)建

由于復(fù)雜網(wǎng)絡(luò)在解決復(fù)雜問題方面的魯棒性和自適應(yīng)性,因此在過去的幾十年中受到來自不同領(lǐng)域研究工作者的極大興趣與廣泛關(guān)注。最重要的是,復(fù)雜網(wǎng)絡(luò)具有很強(qiáng)的數(shù)學(xué)背景,使得復(fù)雜網(wǎng)絡(luò)成為理解系統(tǒng)復(fù)雜性的重要工具。復(fù)雜網(wǎng)絡(luò)的研究成果為探索大規(guī)模軟件系統(tǒng)提供有力支撐,利用網(wǎng)絡(luò)的觀點(diǎn)看待軟件系統(tǒng)得到了眾多研究者的認(rèn)同。復(fù)雜網(wǎng)絡(luò)為缺陷定位提供了新思路[22],在不深究程序內(nèi)部細(xì)節(jié)的情況下,從整體和全局的角度探究與軟件缺陷相關(guān)的信息量。本文將函數(shù)作為分析對(duì)象研究缺陷定位,隨著粒度變大,網(wǎng)絡(luò)結(jié)構(gòu)越來越簡單,從而能忽略一些局部的細(xì)節(jié)問題,獲得更通用的研究結(jié)果。

在函數(shù)動(dòng)態(tài)調(diào)用關(guān)系圖中位于葉節(jié)點(diǎn)的函數(shù)不會(huì)調(diào)用其他函數(shù),導(dǎo)致函數(shù)調(diào)用序列發(fā)生異常的可能性很小,基于風(fēng)險(xiǎn)軌跡的分析忽略此類缺陷。在檢測完畢分析風(fēng)險(xiǎn)軌跡提取的可疑函數(shù)集后未發(fā)現(xiàn)缺陷函數(shù)或目標(biāo)序列與可疑序列并無異常時(shí),將待測程序的函數(shù)調(diào)用序列中函數(shù)名作為節(jié)點(diǎn),函數(shù)間調(diào)用關(guān)系作為邊為程序建復(fù)雜網(wǎng)絡(luò)圖,求其節(jié)點(diǎn)出度值(Out Degree,OD)。OD值代表該節(jié)點(diǎn)調(diào)用其他節(jié)點(diǎn)的個(gè)數(shù)(即該函數(shù)調(diào)用其他函數(shù)的個(gè)數(shù)),在函數(shù)動(dòng)態(tài)調(diào)用關(guān)系圖中處于葉節(jié)點(diǎn)的函數(shù)出度值為0。出度值計(jì)算方式如下:

其中,對(duì)于節(jié)點(diǎn)Ni,復(fù)雜網(wǎng)絡(luò)記錄了該節(jié)點(diǎn)指出的鄰接節(jié)點(diǎn)Nj,j為節(jié)點(diǎn)Ni所指出的所有鄰接節(jié)點(diǎn)序號(hào),n為復(fù)雜網(wǎng)絡(luò)中的節(jié)點(diǎn)總數(shù),OD(i)為節(jié)點(diǎn)Ni的出度值,oij為節(jié)點(diǎn)Ni是否指向節(jié)點(diǎn)Nj,如果節(jié)點(diǎn)Ni指向節(jié)點(diǎn)Nj,則oij= 1,否則oij= 0。

將OD值從小到大排列,若出現(xiàn)多個(gè)OD值相同的節(jié)點(diǎn),則按其在輸入數(shù)據(jù)文件中的執(zhí)行次序排列,在排序后的缺陷函數(shù)候選列表中去除分析風(fēng)險(xiǎn)軌跡時(shí)已檢測過的函數(shù),生成缺陷函數(shù)候選集Tfault,在Tfault中依次檢測并定位缺陷函數(shù)。

2.2 DRC方法實(shí)現(xiàn)流程

DRC方法實(shí)現(xiàn)流程如圖2所示,其主要模塊為:1)獲取風(fēng)險(xiǎn)軌跡模塊,在執(zhí)行程序時(shí)動(dòng)態(tài)輸入測試用例集,獲取運(yùn)行過程中的函數(shù)調(diào)用序列,為待測程序找出目標(biāo)序列和可疑序列,對(duì)比找出風(fēng)險(xiǎn)軌跡;2)分析風(fēng)險(xiǎn)軌跡模塊,主要對(duì)風(fēng)險(xiǎn)軌跡的異常信息進(jìn)行分析,提取可疑函數(shù)集;3)定位缺陷函數(shù)模塊,檢測可疑函數(shù)集并直接定位缺陷函數(shù),或者針對(duì)風(fēng)險(xiǎn)軌跡模塊定位不足的問題,融合復(fù)雜網(wǎng)絡(luò)相關(guān)度量進(jìn)行二次定位,最終定位缺陷函數(shù)。

圖2 DRC方法流程

DRC方法實(shí)現(xiàn)步驟具體如下:

步驟1獲取函數(shù)調(diào)用序列。將待測程序Pf和其他任一含缺陷版本的程序P′f分別與分析函數(shù)一起編譯,獲取兩個(gè)調(diào)用路徑可追蹤的新程序,將設(shè)計(jì)好的測試用例集動(dòng)態(tài)輸入路徑可追蹤的程序中,記錄測試結(jié)果通過或失敗。

步驟2獲取目標(biāo)序列和可疑序列。在測試用例集中找出測試用例t,使得t在Pf上運(yùn)行不通過,在P′f上運(yùn)行通過。將t在Pf執(zhí)行過程中的函數(shù)調(diào)用序列稱為可疑序列,在P′f執(zhí)行過程中的函數(shù)調(diào)用序列稱為目標(biāo)序列。

步驟3分析風(fēng)險(xiǎn)軌跡。利用Linux文本比對(duì)命令diff找出程序風(fēng)險(xiǎn)軌跡,根據(jù)diff命令在不一致處的標(biāo)記類型提取可疑函數(shù)集,并依次檢測定位缺陷函數(shù)。如果可疑序列和目標(biāo)序列一致,則轉(zhuǎn)到步驟4。

步驟4定位缺陷函數(shù)。如果步驟3執(zhí)行完未定位到缺陷函數(shù),將待測程序的函數(shù)調(diào)用序列作為輸入數(shù)據(jù)文件,以函數(shù)名作為節(jié)點(diǎn)、函數(shù)間調(diào)用關(guān)系作為邊為程序建立復(fù)雜網(wǎng)絡(luò)圖,求其節(jié)點(diǎn)OD值并排序,去除上一步已檢測過的函數(shù)生成缺陷函數(shù)候選集,最終定位缺陷函數(shù)。

3 實(shí)例分析

下文以西門子數(shù)據(jù)集的replace(字符串匹配替換程序)測試集中6個(gè)缺陷版本程序(v1和v2、v7和v8、v20和v21)為例,具體說明DRC方法的實(shí)現(xiàn)過程。

將以上版本程序分別與分析函數(shù)進(jìn)行編譯,獲取對(duì)應(yīng)調(diào)用路徑可追蹤的程序,將測試集提供的測試用例動(dòng)態(tài)傳入路徑可追蹤的程序并記錄測試結(jié)果(通過或失敗),可獲得多組函數(shù)調(diào)用序列。為方便統(tǒng)計(jì)本文實(shí)驗(yàn)在相鄰缺陷版本程序中找到待測程序目標(biāo)序列,例如,若要檢測v1版本中的缺陷函數(shù),則要在v2版本找到目標(biāo)序列。目標(biāo)序列和可疑序列所對(duì)應(yīng)的測試用例不唯一,只需找出一個(gè)測試用例即可。在v1和v2、v7和v8、v20和v21中,在測試用例集中找到符合條件的第一個(gè)測試用例分別為t205、t29和t290。

若要檢測v1的缺陷函數(shù),首先將測試用例t205傳入v1和相鄰版本v2中,分別獲取可疑序列和目標(biāo)序列,然后用diff進(jìn)行分析比對(duì),找出風(fēng)險(xiǎn)軌跡。如圖3所示,[label="xcalls"]表示函數(shù)間調(diào)用x次。分析風(fēng)險(xiǎn)軌跡,根據(jù)異常標(biāo)記,忽略序列調(diào)用時(shí)間順序異常,提取可疑函數(shù)集Tsuspect={dodash,subline,amatch,patsize},按可疑函數(shù)候選集中次序依次檢測,檢測第1次就定位出缺陷函數(shù),即定位成功。

圖3 diff標(biāo)記的v1和v2調(diào)用序列結(jié)果

若要檢測v7的缺陷函數(shù),首先將測試用例t29傳入v7和相鄰版本v8中,分別獲取可疑序列和目標(biāo)序列。然后用diff進(jìn)行分析比對(duì),找出風(fēng)險(xiǎn)軌跡。如圖4所示,分析風(fēng)險(xiǎn)軌跡,根據(jù)異常標(biāo)記,忽略main函數(shù)異常,提取可疑函數(shù)集Tsuspect={makepat,int_set_2,dodash,addstr},按可疑函數(shù)候選集的次序依次檢測,檢測第2次就定位出缺陷函數(shù),即定位成功。

圖4 diff標(biāo)記的v7和v8調(diào)用序列結(jié)果

若要檢測v20的缺陷函數(shù),則首先將測試用例t290傳入v20和相鄰版本v21中,分別獲取可疑序列和目標(biāo)序列。然后用diff進(jìn)行分析比對(duì),發(fā)現(xiàn)目標(biāo)序列與可疑序列完全一樣,此時(shí),將處理后的可疑序列文件作為數(shù)據(jù)輸入文件,在Cytoscape平臺(tái)上建立復(fù)雜網(wǎng)絡(luò)圖,求其函數(shù)節(jié)點(diǎn)OD值。表1是程序中各函數(shù)節(jié)點(diǎn)的出度值及缺陷函數(shù)檢測次序(其中“—”表示main函數(shù)無需檢測),按檢測優(yōu)先級(jí)次序檢測,檢測第2次就定位到缺陷函數(shù)。

表1 函數(shù)節(jié)點(diǎn)出度值及檢測優(yōu)先級(jí)

4 實(shí)驗(yàn)結(jié)果與分析

4.1 實(shí)驗(yàn)設(shè)置

為驗(yàn)證本文方法的有效性,選用西門子套件的4個(gè)子測試集作為評(píng)測程序,基本信息如表2所示。

表2 評(píng)測程序信息

實(shí)驗(yàn)程序均采用shell腳本和Python語言編寫,計(jì)算機(jī)配置為Intel(R) Core(TM) i7-8550U CPU@1.80 GHz,內(nèi)存為8 GB,使用的GCC版本為5.4.0。測試執(zhí)行結(jié)果與程序集提供無缺陷程序的輸出進(jìn)行比較,若一致則通過,否則為失敗。

4.2 實(shí)驗(yàn)結(jié)果

為驗(yàn)證本文方法的有效性,選擇同樣基于函數(shù)粒度級(jí)別的缺陷定位方法Combine和Upper與本文DRC方法進(jìn)行比較。表3是在replace數(shù)據(jù)集上這3種方法的定位結(jié)果,replace數(shù)據(jù)集有30個(gè)缺陷版本的程序,由于其中1個(gè)缺陷在宏定義上,因此忽略此缺陷版本。

表3 Combine、Upper與DRC方法缺陷定位結(jié)果比較

由表3可以看出,本文方法不執(zhí)行所有測試用例,平均需執(zhí)行700個(gè)測試用例。由表4可知,定位到的缺陷函數(shù)平均檢測數(shù)少于Combine和Upper方法,且穩(wěn)定性好,定位效果優(yōu)于Combine與Upper方法。

表4 Combine、Upper與DRC方法缺陷定位性能比較

由圖5可以看出,相較于Combine和Upper方法,本文DRC方法定位效率明顯提高,僅需檢測20%的函數(shù)即可定位出90%的缺陷函數(shù),而Combine、Upper方法檢測同樣數(shù)量的函數(shù)可定位出的缺陷函數(shù)分別是69%和79%,與這兩種方法相比,缺陷定位代價(jià)分別降低了22.2%和12.5%。圖6展示了本文DRC方法在4個(gè)不同量級(jí)程序上的缺陷定位效果,結(jié)果表明,程序規(guī)模越大,該方法對(duì)缺陷的定位越有效,定位效果隨程序規(guī)模的擴(kuò)大而提高,更適用于大規(guī)模程序。圖7為本文DRC方法在4種不同量級(jí)的程序上,通過分析風(fēng)險(xiǎn)軌跡和建立復(fù)雜網(wǎng)絡(luò)圖定位到的缺陷函數(shù)比例。其中,分析風(fēng)險(xiǎn)軌跡平均可以定位58%的缺陷,建立復(fù)雜網(wǎng)絡(luò)圖平均可以定位42%的缺陷。由此表明,程序缺陷在大多情況下會(huì)導(dǎo)致函數(shù)調(diào)用序列發(fā)生異常。

圖5 Combine、Upper和DRC方法的缺陷定位效率比較

圖6 DRC方法在不同量級(jí)程序下的缺陷定位效率

圖7 DRC方法的缺陷相關(guān)度

5 結(jié)束語

目前,基于函數(shù)粒度的缺陷定位方法大多是先統(tǒng)計(jì)程序中函數(shù)調(diào)用過程中的全信息,再結(jié)合概率論或數(shù)據(jù)挖掘的方法定位缺陷。這些方法消耗時(shí)間資源與所需測試用例數(shù)量均較多,并且將獲取的信息應(yīng)用于概率論或數(shù)據(jù)挖掘中的方法較為復(fù)雜,在大型軟件中效率不高且可操作性不強(qiáng)。本文以函數(shù)為分析粒度進(jìn)行研究,通過分析程序風(fēng)險(xiǎn)軌跡,提出對(duì)不同類型的異常序列進(jìn)行可疑函數(shù)抽取的策略,并針對(duì)基于風(fēng)險(xiǎn)軌跡定位會(huì)忽略葉函數(shù)節(jié)點(diǎn)的缺陷,結(jié)合復(fù)雜網(wǎng)絡(luò)相關(guān)度量,定位此類缺陷。根據(jù)軟件風(fēng)險(xiǎn)軌跡異常信息給出不同異常類型的優(yōu)先級(jí),通過對(duì)西門子測試集多個(gè)程序進(jìn)行測試,并與同樣以函數(shù)為分析粒度的Combine和Upper缺陷定位方法進(jìn)行對(duì)比,實(shí)驗(yàn)結(jié)果表明,本文方法在節(jié)省時(shí)間資源消耗的情況下,提高了缺陷定位效率,且在大型軟件上可操作性更強(qiáng)。由于本文實(shí)驗(yàn)程序中僅含單個(gè)錯(cuò)誤,因此后續(xù)將在含多個(gè)錯(cuò)誤的程序上驗(yàn)證DRC方法的有效性,并且復(fù)雜網(wǎng)絡(luò)中的其他度量(如緊密度中心性、介數(shù)中心性等)在軟件缺陷定位領(lǐng)域的應(yīng)用也將是下一步研究的重點(diǎn)。

猜你喜歡
測試用例調(diào)用軌跡
回歸測試中測試用例優(yōu)化技術(shù)研究與探索
基于SmartUnit的安全通信系統(tǒng)單元測試用例自動(dòng)生成
軌跡
軌跡
核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
軌跡
進(jìn)化的軌跡(一)——進(jìn)化,無盡的適應(yīng)
基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
基于依賴結(jié)構(gòu)的測試用例優(yōu)先級(jí)技術(shù)
利用RFC技術(shù)實(shí)現(xiàn)SAP系統(tǒng)接口通信
平果县| 佛教| 安溪县| 龙南县| 靖江市| 且末县| 黑水县| 项城市| 军事| 武宁县| 城市| 运城市| 精河县| 天镇县| 栾川县| 龙州县| 剑阁县| 德惠市| 句容市| 吉水县| 武城县| 遂宁市| 荣昌县| 清水县| 乌拉特前旗| 诸城市| 滁州市| 靖州| 麦盖提县| 农安县| 册亨县| 鄂伦春自治旗| 哈巴河县| 新泰市| 高邮市| 贞丰县| 昆山市| 安陆市| 青州市| 崇阳县| 湘阴县|