本技術(shù)涉及軟件缺陷定位,尤其是涉及一種基于多動態(tài)程序執(zhí)行軌跡的軟件缺陷定位方法和系統(tǒng)。
背景技術(shù):
1、現(xiàn)有的缺陷定位技術(shù)通常依賴于程序執(zhí)行中的單一數(shù)據(jù)源,如代碼覆蓋率、測試用例結(jié)果或變異測試。這種方法雖然能夠為代碼行提供懷疑度計算,但由于信息來源單一,難以捕捉程序在運行過程中復(fù)雜的多維度動態(tài)行為,其中,多維度動態(tài)行為包含了程序在運行中產(chǎn)生的寄存器信息、堆信息、棧信息和指令信息這四個維度的動態(tài)行為。特別是在處理復(fù)雜系統(tǒng)或多線程并發(fā)環(huán)境時,這些技術(shù)容易錯過細(xì)粒度的缺陷,導(dǎo)致懷疑度計算的精度不足,從而影響缺陷定位的準(zhǔn)確性。
技術(shù)實現(xiàn)思路
1、本技術(shù)旨在提出一種基于多動態(tài)程序執(zhí)行軌跡的軟件缺陷定位方法和系統(tǒng),能夠捕捉程序在運行過程中復(fù)雜的多維度動態(tài)行為,提高軟件缺陷定位的準(zhǔn)確性。
2、第一方面,本技術(shù)實施例提供了一種基于多動態(tài)程序執(zhí)行軌跡的軟件缺陷定位方法,所述方法包括:
3、獲取待定位缺陷的源代碼及與所述待定位缺陷的源代碼對應(yīng)的測試用例;
4、捕獲所述待定位缺陷的源代碼執(zhí)行測試用例時產(chǎn)生的寄存器軌跡、堆軌跡、棧軌跡和指令軌跡;
5、根據(jù)第一時間步,將所述待定位缺陷的源代碼執(zhí)行測試用例時產(chǎn)生的寄存器軌跡、堆軌跡、棧軌跡和指令軌跡信息進行向量化,得到第一時序向量序列,其中,所述待定位缺陷的源代碼每執(zhí)行一條指令為一個所述第一時間步;
6、將所述第一時序向量序列輸入訓(xùn)練好的缺陷定位模型,得到每個所述第一時間步含缺陷的概率;
7、根據(jù)每個所述第一時間步含缺陷的概率與所述待定位缺陷的源代碼執(zhí)行測試用例時產(chǎn)生的寄存器軌跡、堆軌跡、棧軌跡和指令軌跡,確定缺陷定位報告。
8、與現(xiàn)有技術(shù)相比,本技術(shù)第一方面具有以下有益效果:
9、本方法通過捕獲待定位缺陷的源代碼執(zhí)行測試用例時產(chǎn)生的寄存器軌跡、堆軌跡、棧軌跡和指令軌跡;根據(jù)第一時間步,將待定位缺陷的源代碼執(zhí)行測試用例時產(chǎn)生的寄存器軌跡、堆軌跡、棧軌跡和指令軌跡信息進行向量化,得到第一時序向量序列,其中,待定位缺陷的源代碼每執(zhí)行一條指令為一個第一時間步;將第一時序向量序列輸入訓(xùn)練好的缺陷定位模型,得到每個第一時間步含缺陷的概率;根據(jù)每個第一時間步含缺陷的概率與待定位缺陷的源代碼執(zhí)行測試用例時產(chǎn)生的寄存器軌跡、堆軌跡、棧軌跡和指令軌跡,確定缺陷定位報告。如此,通過捕捉程序在執(zhí)行過程中復(fù)雜的多維度動態(tài)行為,不同軌跡信息的融合能夠幫助定位更廣泛類型的缺陷,而不僅僅局限于單一維度分析,能夠提高軟件缺陷定位的準(zhǔn)確性。
10、在一些實施方式中,通過如下方式得到訓(xùn)練好的缺陷定位模型:
11、獲取軟件缺陷定位數(shù)據(jù)集,所述軟件缺陷定位數(shù)據(jù)集包括多個項目的源代碼和與每個所述項目的源代碼對應(yīng)的測試用例;
12、捕獲所述軟件缺陷定位數(shù)據(jù)集中每個所述項目的源代碼執(zhí)行測試用例時產(chǎn)生的寄存器軌跡、堆軌跡、棧軌跡和指令軌跡;
13、根據(jù)第二時間步,將每個所述項目的源代碼執(zhí)行測試用例時產(chǎn)生的寄存器軌跡、堆軌跡、棧軌跡和指令軌跡信息進行向量化,得到第二時序向量序列集,其中,每個所述項目的源代碼每執(zhí)行一條指令為一個所述第二時間步;
14、采用所述第二時序向量序列集訓(xùn)練構(gòu)建好的缺陷定位模型,得到訓(xùn)練好的缺陷定位模型。
15、在一些實施方式中,所述獲取軟件缺陷定位數(shù)據(jù)集,包括:
16、收集代碼托管平臺上的項目的源代碼、測試用例、文檔、提交歷史記錄以及pullrequest;
17、根據(jù)所述pull?request,確定缺陷數(shù)量和缺陷位置;
18、基于所述缺陷數(shù)量、所述缺陷位置、所述源代碼、所述測試用例、所述文檔以及所述提交歷史記錄,構(gòu)建軟件缺陷定位數(shù)據(jù)集。
19、在一些實施方式中,所述訓(xùn)練好的缺陷定位模型包括輸入嵌入層、位置編碼層、多個堆疊的編碼層、全連接層以及激活函數(shù),所述將所述第一時序向量序列輸入訓(xùn)練好的缺陷定位模型,得到每個所述時間步對應(yīng)的缺陷定位結(jié)果,包括:
20、將所述第一時序向量序列輸入所述輸入嵌入層,得到輸入嵌入向量;
21、將所述輸入嵌入向量輸入所述位置編碼層進行位置編碼,得到位置編碼后的向量;
22、將所述位置編碼后的向量輸入至第一編碼層,得到所述第一編碼層的輸出結(jié)果;
23、將所述第一編碼層的輸出結(jié)果作為與所述第一編碼層連接的下一編碼層的輸入,直到所有編碼層編碼結(jié)束,得到多個堆疊的編碼層完成編碼后的最終結(jié)果;
24、將所述最終結(jié)果輸入所述全連接層,得到所述全連接層輸出的結(jié)果;
25、采用所述激活函數(shù)對所述全連接層輸出的結(jié)果進行歸一化,得到每個所述時間步對應(yīng)的缺陷定位結(jié)果。
26、在一些實施方式中,所述捕獲所述待定位缺陷的源代碼執(zhí)行測試用例時產(chǎn)生的寄存器軌跡、堆軌跡、棧軌跡和指令軌跡,包括:
27、采用qemu虛擬化平臺和gdb調(diào)試器捕獲所述待定位缺陷的源代碼執(zhí)行測試用例時產(chǎn)生的寄存器軌跡、堆軌跡、棧軌跡和指令軌跡。
28、在一些實施方式中,所述根據(jù)第一時間步,將所述待定位缺陷的源代碼執(zhí)行測試用例時產(chǎn)生的寄存器軌跡、堆軌跡、棧軌跡和指令軌跡信息進行向量化,得到第一時序向量序列,包括:
29、根據(jù)所述待定位缺陷的源代碼每執(zhí)行一條指令劃分一個第一時間步,劃分得到多個第一時間步;
30、對每個所述第一時間步內(nèi)的所述待定位缺陷的源代碼執(zhí)行測試用例時產(chǎn)生的寄存器軌跡、堆軌跡、棧軌跡和指令軌跡信息轉(zhuǎn)換成進行向量化,得到每個所述第一時間步對應(yīng)的第一時序向量;
31、將每個所述第一時間步對應(yīng)的第一時序向量按照時間順序排列,得到第一時序向量序列。
32、在一些實施方式中,所述根據(jù)每個所述第一時間步含缺陷的概率與所述待定位缺陷的源代碼執(zhí)行測試用例時產(chǎn)生的寄存器軌跡、堆軌跡、棧軌跡和指令軌跡,確定缺陷定位報告,包括:
33、根據(jù)每個所述第一時間步內(nèi)的所述待定位缺陷的源代碼執(zhí)行測試用例時產(chǎn)生的寄存器軌跡、堆軌跡、棧軌跡和指令軌跡,定位至所述待定位缺陷的源代碼的每行代碼;
34、將每個所述第一時間步內(nèi)的每行代碼與每個所述第一時間步含缺陷的概率進行對應(yīng),生成缺陷定位報告。
35、第二方面,本技術(shù)實施例還提供了一種基于多動態(tài)程序執(zhí)行軌跡的軟件缺陷定位系統(tǒng),所述系統(tǒng)包括:
36、數(shù)據(jù)獲取單元,用于獲取待定位缺陷的源代碼及與所述待定位缺陷的源代碼對應(yīng)的測試用例;
37、軌跡捕獲單元,用于捕獲所述待定位缺陷的源代碼執(zhí)行測試用例時產(chǎn)生的寄存器軌跡、堆軌跡、棧軌跡和指令軌跡;
38、向量化單元,用于根據(jù)第一時間步,將所述待定位缺陷的源代碼執(zhí)行測試用例時產(chǎn)生的寄存器軌跡、堆軌跡、棧軌跡和指令軌跡信息進行向量化,得到第一時序向量序列,其中,所述待定位缺陷的源代碼每執(zhí)行一條指令為一個所述第一時間步;
39、概率得到單元,用于將所述第一時序向量序列輸入訓(xùn)練好的缺陷定位模型,得到每個所述第一時間步含缺陷的概率;
40、缺陷定位單元,用于根據(jù)每個所述第一時間步含缺陷的概率與所述待定位缺陷的源代碼執(zhí)行測試用例時產(chǎn)生的寄存器軌跡、堆軌跡、棧軌跡和指令軌跡,確定缺陷定位報告。
41、第三方面,本技術(shù)實施例還提供了一種電子設(shè)備,包括至少一個控制處理器和用于與所述至少一個控制處理器通信連接的存儲器;所述存儲器存儲有可被所述至少一個控制處理器執(zhí)行的指令,所述指令被所述至少一個控制處理器執(zhí)行,以使所述至少一個控制處理器能夠執(zhí)行如上所述的一種基于多動態(tài)程序執(zhí)行軌跡的軟件缺陷定位方法。
42、第四方面,本技術(shù)實施例還提供了一種計算機可讀存儲介質(zhì),所述計算機可讀存儲介質(zhì)存儲有計算機可執(zhí)行指令,所述計算機可執(zhí)行指令用于使計算機執(zhí)行如上所述的一種基于多動態(tài)程序執(zhí)行軌跡的軟件缺陷定位方法。
43、可以理解的是,上述第二方面至第四方面與相關(guān)技術(shù)相比存在的有益效果與上述第一方面與相關(guān)技術(shù)相比存在的有益效果相同,可以參見上述第一方面中的相關(guān)描述,在此不再贅述。