頻譜信息去冗優(yōu)化的軟件缺陷定位方法
【專利摘要】本發(fā)明提供一種頻譜信息去冗優(yōu)化的軟件缺陷定位方法,通過(guò)運(yùn)行測(cè)試用例,收集程序運(yùn)行結(jié)果信息即頻譜信息;對(duì)所得頻譜信息進(jìn)行去冗優(yōu)化處理,利用頻譜信息計(jì)算可疑度;根據(jù)可疑度值的大小對(duì)語(yǔ)句進(jìn)行降序排列,根據(jù)已排序的語(yǔ)句序列逐個(gè)進(jìn)行排錯(cuò),直至找到引發(fā)程序異常的語(yǔ)句。本發(fā)明在基于頻譜的錯(cuò)誤定位方法中,在利用覆蓋信息表進(jìn)行可疑度計(jì)算之前,對(duì)頻譜信息進(jìn)行去冗余處理,利用有效的頻譜信息進(jìn)行可疑度計(jì)算,提高根據(jù)可疑度進(jìn)行缺陷定位的可靠性,進(jìn)而提高軟件缺陷定位的效率。
【專利說(shuō)明】頻譜信息去冗優(yōu)化的軟件缺陷定位方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種頻譜信息去冗優(yōu)化的軟件缺陷定位方法,屬于軟件測(cè)試領(lǐng)域。
【背景技術(shù)】
[0002]多年來(lái),人們?cè)谌毕荻ㄎ坏难芯恐刑岢隽嗽S多方法,主要通過(guò)程序的靜態(tài)信息和動(dòng)態(tài)信息來(lái)定位程序錯(cuò)誤。但獲得靜態(tài)信息的開(kāi)銷較大,對(duì)于大型軟件,全面的靜態(tài)分析甚至是不現(xiàn)實(shí)的,而動(dòng)態(tài)信息的收集只要是運(yùn)行測(cè)試用例,并不會(huì)給測(cè)試帶來(lái)過(guò)多的開(kāi)銷。同時(shí),由于動(dòng)態(tài)信息包含了程序運(yùn)行時(shí)的信息,與利用靜態(tài)信息的方法相比,可以提供更準(zhǔn)確的結(jié)果。
[0003]利用程序頻譜信息進(jìn)行缺陷定位,是目前比較切實(shí)有效的軟件缺陷定位方法,程序頻譜是一種表示程序運(yùn)行時(shí)覆蓋情況的信息,反應(yīng)程序運(yùn)行某一特征的代碼剖面信息。程序頻譜與程序行為之間存在著一定的關(guān)系,通過(guò)研究運(yùn)行失敗測(cè)試用例得到的頻譜信息與運(yùn)行成功測(cè)試用例得到的頻譜信息之間的差異性可為軟件缺陷定位提供幫助。對(duì)于程序的單條語(yǔ)句,被失效測(cè)試用例執(zhí)行的越多,成功的測(cè)試用例執(zhí)行的越少,語(yǔ)句含有錯(cuò)誤的可能性就越大,發(fā)生錯(cuò)誤的概率就越大。利用這種特征對(duì)程序語(yǔ)句被成功測(cè)試用例以及失敗測(cè)試用例的覆蓋情況進(jìn)行統(tǒng)計(jì)分析,找出含有缺陷的程序語(yǔ)句。
[0004]對(duì)基于程序頻譜的程序定位方法,可以從多角度采取優(yōu)化策略提高軟件缺陷定位的效率:第一,提高選取測(cè)試用例集的有效性;第二,盡量減少收集程序頻譜的開(kāi)銷;第三,提高可以度算法的精確度性。在以往的優(yōu)化策略的基礎(chǔ)上,如何提出一種新的優(yōu)化策略,對(duì)覆蓋信息表進(jìn)行去冗優(yōu)化,提高依賴程序語(yǔ)句可疑度進(jìn)行缺陷定位的可靠性,從而達(dá)到提高軟件缺陷定位的效率是在基于程序頻譜的程序定位方法的優(yōu)化過(guò)程中應(yīng)當(dāng)予以考慮并解決的問(wèn)題。
【發(fā)明內(nèi)容】
[0005]本發(fā)明對(duì)已有缺陷定位方法采取優(yōu)化策略產(chǎn)生一種新的錯(cuò)誤定位方法,使缺陷定位的效率更高。通過(guò)運(yùn)行測(cè)試用例,收集程序運(yùn)行結(jié)果信息即頻譜信息,對(duì)頻譜信息進(jìn)行去冗優(yōu)化處理,利用頻譜信息進(jìn)行可疑度計(jì)算,根據(jù)可疑度值的大小對(duì)語(yǔ)句進(jìn)行降序排列,最后根據(jù)已排序的語(yǔ)句序列逐個(gè)進(jìn)行排錯(cuò),直到找到引發(fā)程序異常的語(yǔ)句。
[0006]本發(fā)明的技術(shù)解決方案是:
[0007]一種頻譜信息去冗優(yōu)化的軟件缺陷定位方法,
[0008]通過(guò)運(yùn)行測(cè)試用例,收集程序運(yùn)行結(jié)果信息即頻譜信息;
[0009]對(duì)所得頻譜信息進(jìn)行去冗優(yōu)化處理,利用頻譜信息計(jì)算可疑度;
[0010]根據(jù)可疑度值的大小對(duì)語(yǔ)句進(jìn)行降序排列,根據(jù)已排序的語(yǔ)句序列逐個(gè)進(jìn)行排錯(cuò),直至找到弓I發(fā)程序異常的語(yǔ)句。
[0011]優(yōu)選地,S1、獲取可執(zhí)行的待測(cè)程序以及測(cè)試用例集;
[0012]S2、執(zhí)行測(cè)試用例,獲取程序執(zhí)行的動(dòng)態(tài)信息;[0013]S3、收集所有測(cè)試用例的運(yùn)行情況,并進(jìn)行去冗余處理,生成無(wú)冗余覆蓋信息表;
[0014]S4、根據(jù)覆蓋信息表進(jìn)行語(yǔ)句可疑度計(jì)算;
[0015]S5、根據(jù)可疑度值,對(duì)程序語(yǔ)句進(jìn)行降序排列,根據(jù)排序的語(yǔ)句序列進(jìn)行缺陷定位。
[0016]優(yōu)選地,步驟SI具體為:
[0017]S11、獲取待測(cè)的可執(zhí)行程序P ;
[0018]S12、將程序P的每條語(yǔ)句進(jìn)行編號(hào),按序編為S1, S2, S3,…,S」,...,Sn,將編號(hào)集合記為S,其中S」表示程序P的第j條語(yǔ)句,η為程序語(yǔ)句的總條數(shù);
[0019]S13、獲取測(cè)試用例集,記為L(zhǎng)istsuites ;
[0020]S14、對(duì)Listsuites中的測(cè)試用例進(jìn)行編號(hào),按序編為
[0021]test” test2, test3,...,test”..., testm,其中 testj 表不測(cè)試用例集 Listsuites中的第i條測(cè)試用例,m為測(cè)試用例的總條數(shù)。
[0022]優(yōu)選地,步驟S2具體為:
[0023]S21、根據(jù)測(cè)試用例的 編號(hào)按序從Listsuites中讀取測(cè)試用例testi ;
[0024]S22、根據(jù)測(cè)試用例的輸入以及執(zhí)行條件執(zhí)行讀取的測(cè)試用例test ;
[0025]S23、在測(cè)試用例執(zhí)行過(guò)程中對(duì)覆蓋語(yǔ)句以及未覆蓋的語(yǔ)句用“O”和“I”進(jìn)行區(qū)分標(biāo)記,“O”表示語(yǔ)句沒(méi)有被當(dāng)前測(cè)試用例執(zhí)行,“ I ”表示語(yǔ)句被當(dāng)前測(cè)試用例執(zhí)行;
[0026]S24、判定測(cè)試用例運(yùn)行結(jié)果;
[0027]S25、收集測(cè)試用例test的運(yùn)行情況,記為
[0028]Fttesti] (T(S1), T(S2), T (S3)...T (Sj)...T (Sn),R},,即頻譜信息,其中,T(Sj)表示語(yǔ)句S」被當(dāng)前測(cè)試用例覆蓋的情況,R表示當(dāng)前測(cè)試用例的運(yùn)行通過(guò)情況;
[0029]S26、判斷測(cè)試用例集中的所有的測(cè)試用例是否均被運(yùn)行,如果“是”,轉(zhuǎn)步驟S27,否則轉(zhuǎn)步驟S21 ;
[0030]S27、收集所有測(cè)試用例的執(zhí)行情況。
[0031]優(yōu)選地,步驟S24具體為:
[0032]S241、獲取當(dāng)前測(cè)試用例test在程序中的實(shí)際運(yùn)行結(jié)果;
[0033]S242、獲取當(dāng)前測(cè)試用例test的預(yù)期運(yùn)行結(jié)果;
[0034]S243、判斷實(shí)際運(yùn)行結(jié)果與預(yù)期結(jié)果是否相同,如果“是”,轉(zhuǎn)步驟S244,否則轉(zhuǎn)步驟S245 ;
[0035]S244、運(yùn)行結(jié)果記為0,記入R中,R表示測(cè)試用例運(yùn)行結(jié)果情況;
[0036]S245、運(yùn)行結(jié)果記為1,記入R中,R表示測(cè)試用例運(yùn)行結(jié)果情況。
[0037]優(yōu)選地,步驟S3具體為:
[0038]S31、首個(gè)測(cè)試用例默認(rèn)處理;
[0039]S32、將 FF[testJ (Test1, T(S1), T (S2), T (S3)...T (Sj)...T (Sn), R}記入覆蓋信息表G,G由
[0040]FF [testj (Test1,T (S1),T (S2),T (S3)...T (Sj)...T (Sn),R}累積生成;
[0041]S33、獲取下一條測(cè)試用例的執(zhí)行情況
[0042]F [testj {T (S1),T (S2),T (S3)...T (Sj)...T (Sn),R};
[0043]S34、判定 Fbesti] {T (S1),T (S2),T (S3)…T (Sj)…T (Sn),R}是否與覆蓋信息表 G已有行F[test]相同,如果“是”,轉(zhuǎn)步驟S35,否則轉(zhuǎn)步驟S37 ;
[0044]S35、判定測(cè)試tesh為非有效測(cè)試用例;
[0045]S36、刪除 FEtestJIT(S1),T(S2) ,T(S3)...T(Sj)...T(Sn),R};
[0046]S37、判定測(cè)試用例tesh為有效測(cè)試用例;
[0047]S38、對(duì)有效測(cè)試用例test進(jìn)行編號(hào),編為T(mén)est1,表示第I個(gè)有效測(cè)試用例;
[0048]S39、拓展testi運(yùn)行結(jié)果為
[0049]FF [testj (Test1, F [testj {T (S1),T (S2),T (S3)...T (Sj)...T (Sn),R}},
[0050]即FF [testj (Test1, T (S1),T (S2),T (S3)...T (Sj)...T (Sn),R};
[0051]S310、將 FFttesti] (Test1, T (S1),T (S2),T (S3)...T (Sj)...T (Sn),R}記入覆蓋信息表G中;
[0052]S311、判斷Listsuites中所有測(cè)試用例是否都被執(zhí)行,如果“是”,轉(zhuǎn)步驟S312,否則轉(zhuǎn)步驟S33 ;
[0053]S312、獲得最終覆蓋信息表G。
[0054]優(yōu)選地,步驟S31具體為:
[0055]默認(rèn)第一個(gè)測(cè)試用例test:為有效測(cè)試用例;
[0056]對(duì)第一個(gè)有效測(cè)試用例test:進(jìn)行編號(hào),記為T(mén)est1,表不第一個(gè)有效測(cè)試用例;
[0057]拓展有效測(cè)試用例的執(zhí)行情況為
[0058]FF [testj (Test1,F(xiàn) [testj {T (S1),T (S2),T (S3)...T (Sj)...T (Sn),R}},
[0059]即為FF [testj (Test1,T (S1),T (S2),T (S3)...T (Sj)...T (Sn),R}。
[0060]優(yōu)選地,步驟S4具體為:
[0061]S41、針對(duì)S」語(yǔ)句,收集執(zhí)行完測(cè)試用例集Listsuites所提供的<arf,
aep, anf,anp>,其中,
【權(quán)利要求】
1.一種頻譜信息去冗優(yōu)化的軟件缺陷定位方法,其特征在于: 通過(guò)運(yùn)行測(cè)試用例,收集程序運(yùn)行結(jié)果信息即頻譜信息; 對(duì)所得頻譜信息進(jìn)行去冗優(yōu)化處理,利用頻譜信息計(jì)算可疑度; 根據(jù)可疑度值的大小對(duì)語(yǔ)句進(jìn)行降序排列,根據(jù)已排序的語(yǔ)句序列逐個(gè)進(jìn)行排錯(cuò),直至找到引發(fā)程序異常的語(yǔ)句。
2.如權(quán)利要求1所述的頻譜信息去冗優(yōu)化的軟件缺陷定位方法,其特征在于: s1、獲取可執(zhí)行的待測(cè)程序以及測(cè)試用例集; s2、執(zhí)行測(cè)試用例,獲取程序執(zhí)行的動(dòng)態(tài)信息; s3、收集所有測(cè)試用例的運(yùn)行情況,并進(jìn)行去冗余處理,生成無(wú)冗余覆蓋信息表; s4、根據(jù)覆蓋信息表進(jìn)行語(yǔ)句可疑度計(jì)算; s5、根據(jù)可疑度值,對(duì)程序語(yǔ)句進(jìn)行降序排列,定位缺陷語(yǔ)句。
3.如權(quán)利要求1所述的頻譜信息去冗優(yōu)化的軟件缺陷定位方法,其特征在于,步驟SI具體為: s11、獲取待測(cè)的可執(zhí)行程序P; s12、將程序P的每條語(yǔ)句進(jìn)行編號(hào),按序編為S1,S2, S3,..., Sj,..., Sn,將編號(hào)集合記為S,其中S」表示程序P的第j條語(yǔ)句,η為程序語(yǔ)句的總條數(shù); s13、獲取測(cè)試用例集,記為L(zhǎng)istsuites; SHjfListsuites中的測(cè)試用例進(jìn)行編號(hào),按序編為 test^ test2, test3, , test^ , testm,其中 testi 表不測(cè)試用例集 Listsuites 中的第i條測(cè)試用例,m為測(cè)試用例的總條數(shù)。
4.如權(quán)利要求1所述的頻譜信息去冗優(yōu)化的軟件缺陷定位方法,其特征在于,步驟S2具體為: s21、根據(jù)測(cè)試用例的編號(hào)按序從Listsuites中讀取測(cè)試用例tesh; s22、根據(jù)測(cè)試用例的輸入以及執(zhí)行條件執(zhí)行讀取的測(cè)試用例test; s23、在測(cè)試用例執(zhí)行過(guò)程中對(duì)覆蓋語(yǔ)句以及未覆蓋的語(yǔ)句用“O”和“I”進(jìn)行區(qū)分標(biāo)記,“O”表示語(yǔ)句沒(méi)有被當(dāng)前測(cè)試用例執(zhí)行,“ I ”表示語(yǔ)句被當(dāng)前測(cè)試用例執(zhí)行; s24、判定測(cè)試用例運(yùn)行結(jié)果; s35、收集測(cè)試用例tesh的運(yùn)行情況,記為 Fttesti] {T (S1),T (S2),T (S3)…T (Sj)…T (Sn),R},即頻譜信息,其中,T (Sj)表示語(yǔ)句Sj被當(dāng)前測(cè)試用例覆蓋的情況,R表示當(dāng)前測(cè)試用例的運(yùn)行通過(guò)情況; s26、判斷測(cè)試用例集中的所有的測(cè)試用例是否均被運(yùn)行,如果“是”,轉(zhuǎn)步驟S27,否則轉(zhuǎn)步驟S21 ; s27、收集所有測(cè)試用例的執(zhí)行情況。
5.如權(quán)利要求4所述的頻譜信息去冗優(yōu)化的軟件缺陷定位方法,其特征在于,步驟S24具體為: s241、獲取當(dāng)前測(cè)試用例test在程序中的實(shí)際運(yùn)行結(jié)果; s242、獲取當(dāng)前測(cè)試用例test的預(yù)期運(yùn)行結(jié)果; s243、判斷實(shí)際運(yùn)行結(jié)果與預(yù)期結(jié)果是否相同,如果“是”,轉(zhuǎn)步驟S244,否則轉(zhuǎn)步驟S245 ;S244、運(yùn)行結(jié)果記為O,記入R中,R表示測(cè)試用例運(yùn)行結(jié)果情況; S245、運(yùn)行結(jié)果記為1,記入R中,R表示測(cè)試用例運(yùn)行結(jié)果情況。
6.如權(quán)利要求1所述的頻譜信息去冗優(yōu)化的軟件缺陷定位方法,其特征在于,步驟S3具體為: S31、首個(gè)測(cè)試用例默認(rèn)處理;
S32、將FF [testj (Test1, T (S1),T (S2),T (S3)...T (Sj)...T (Sn),R}記入覆蓋信息表 G,G 由 FF [testj ITest1,T (S1),T (S2),T (S3)...T (Sj)...T (Sn),R}累積生成; S33、獲取下一條測(cè)試用例的執(zhí)行情況
F [testj {T (S1),T (S2),T (S3)...T (Sj)...T (Sn),R};
S34、判定F [testj {T (S1),T (S2),T (S3)...T (Sj)...T (Sn),R}是否與覆蓋信息表 G 已有行F[test]相同,如果“是”,轉(zhuǎn)步驟S35,否則轉(zhuǎn)步驟S37 ; S35、判定測(cè)試test為非有效測(cè)試用例;
S36、刪除Fttesti] {T (S1),T (S2),T (S3)...T (Sj)...T (Sn),R}; S37、判定測(cè)試用例test為有效測(cè)試用例; S38、對(duì)有效測(cè)試用例test進(jìn)行編號(hào),編為T(mén)est1,表示第I個(gè)有效測(cè)試用例; S39、拓展test運(yùn)行結(jié)果為
FF[testj (Test1, F[testj {T (S1),T (S2),T (S3)...T (Sj)...T (Sn),R}},
即 FFEtesti] (Test1, T(S1), T(S2), T (S3)...T (Sj)...T (Sn), R};
S310、將FFttesti] ITest1, T(S1),T(S2),T (S3)...T (Sj)...T (Sn),R}記入覆蓋信息表G中; S311、判斷Listsuites中所有測(cè)試用例是否都被執(zhí)行,如果“是”,轉(zhuǎn)步驟S312,否則轉(zhuǎn)步驟S33 ; S312、獲得最終覆蓋信息表G。
7.如權(quán)利要求6所述的頻譜信息去冗優(yōu)化的軟件缺陷定位方法,其特征在于,步驟S31具體為: 默認(rèn)第一個(gè)測(cè)試用例test為有效測(cè)試用例; 對(duì)第一個(gè)有效測(cè)試用例test:進(jìn)行編號(hào),記為T(mén)est1,表不第一個(gè)有效測(cè)試用例; 拓展有效測(cè)試用例的執(zhí)行情況為
FF[testJ ITest1, Fttest1] (T(S1), T (S2),T (S3)...T(Sj)...T (Sn),R}},
即為 FF[testj ITest1,T (S1),T (S2),T (S3)...T (Sj)...T (Sn),R}。
8.如權(quán)利要求1-7任一項(xiàng)所述的頻譜信息去冗優(yōu)化的軟件缺陷定位方法,其特征在于,步驟S4具體為: S41、針對(duì)&語(yǔ)句,收集執(zhí)行完測(cè)試用例集Listsuites所提供的<aef,aep, anf,anp>,其中,
9.如權(quán)利要求1-7任一項(xiàng)所述的頻譜信息去冗優(yōu)化的軟件缺陷定位方法,其特征在于,步驟S5具體為: S51、語(yǔ)句排序;
獲取語(yǔ)句編號(hào)序列S:S1; S2,S3...Sj...Sn; 獲取語(yǔ)句序列S中相應(yīng)語(yǔ)句的可疑度值序列z:z1; z2,z3...Zj...Zn,其中τ、表示第j條語(yǔ)句的可疑度值; 根據(jù)Z中可疑度值進(jìn)行降序排列; 根據(jù)已排序的Z序列,對(duì)S進(jìn)行排序; S52、錯(cuò)誤定位。
10.如權(quán)利要求9所述的頻譜信息去冗優(yōu)化的軟件缺陷定位方法,其特征在于,步驟S52具體為: S521、獲取重新排序的S序列; S522、按序獲取S中的編號(hào)Sj;S523、查看程序P的語(yǔ)句S」是否含有缺陷,如果“是”,轉(zhuǎn)步驟S524,否則轉(zhuǎn)步驟S522; S524、確定程序語(yǔ)句S」為缺陷語(yǔ)句,缺陷定位成功。
【文檔編號(hào)】G06F11/36GK104008051SQ201410210134
【公開(kāi)日】2014年8月27日 申請(qǐng)日期:2014年5月16日 優(yōu)先權(quán)日:2014年5月16日
【發(fā)明者】張衛(wèi)豐, 張曉紅, 王云, 王子元, 周?chē)?guó)強(qiáng), 張迎周 申請(qǐng)人:南京郵電大學(xué)