本公開涉及計算機,具體而言,涉及一種代碼缺陷檢測方法、裝置、計算機設(shè)備及存儲介質(zhì)。
背景技術(shù):
1、隨著計算機技術(shù)的快速發(fā)展,各行各業(yè)對計算機軟件的需求不斷增加。軟件中存在的安全缺陷給計算機系統(tǒng)留下了巨大的安全隱患。
2、隨著軟件規(guī)模和復(fù)雜度逐漸增加,常規(guī)的代碼缺陷檢測方法難以保證代碼缺陷檢測的效率和準確性。因此,如何實現(xiàn)代碼缺陷的快速定位是計算機安全領(lǐng)域的重要問題。
技術(shù)實現(xiàn)思路
1、本公開實施例至少提供一種代碼缺陷檢測方法、裝置、計算機設(shè)備及存儲介質(zhì)。
2、第一方面,本公開實施例提供了一種代碼缺陷檢測方法,包括:
3、獲取待檢測代碼;
4、將所述待檢測代碼輸入至訓(xùn)練好的缺陷檢測模型中,得到所述待檢測代碼的缺陷檢測結(jié)果;
5、所述缺陷檢測模型是按照以下步驟訓(xùn)練得到的:
6、獲取目標代碼,以及所述目標代碼的歷史缺陷信息;
7、確定所述目標代碼中各個代碼語句之間的控制依賴關(guān)系,以及各個變量之間的數(shù)據(jù)依賴關(guān)系;
8、根據(jù)所述各個代碼語句之間的控制依賴關(guān)系和所述各個變量之間的數(shù)據(jù)依賴關(guān)系,對所述目標代碼進行切片處理,得到各個代碼片段,并確定各個所述代碼片段的特征信息;
9、基于所述歷史缺陷信息和所述代碼片段的特征信息,對待訓(xùn)練的缺陷檢測模型進行調(diào)參,直至得到訓(xùn)練好的缺陷檢測模型。
10、一種可選的實施方式中,根據(jù)所述各個代碼語句之間的控制依賴關(guān)系和各個變量之間的數(shù)據(jù)依賴關(guān)系,對所述目標代碼進行切片處理,得到各個代碼片段,并確定各個所述代碼片段的特征信息,包括:
11、根據(jù)所述各個代碼語句之間的控制依賴關(guān)系和所述各個變量之間的數(shù)據(jù)依賴關(guān)系,構(gòu)建程序依賴圖;所述程序依賴圖中包含的節(jié)點為代碼語句或變量;所述程序依賴圖中包含的節(jié)點之間的邊為代碼語句之間的控制依賴關(guān)系或變量之間的數(shù)據(jù)依賴關(guān)系;
12、根據(jù)所述程序依賴圖,確定各個節(jié)點的屬性特征;
13、根據(jù)所述各個節(jié)點的屬性特征,對所述節(jié)點進行聚類,得到多個節(jié)點簇,并按照所述節(jié)點簇對所述目標代碼進行切分處理,得到各個代碼塊;
14、針對每個代碼塊,以該代碼塊對應(yīng)的節(jié)點簇的中心點為關(guān)鍵節(jié)點,對所述代碼塊進行雙向切片處理,得到代碼片段,并確定所述代碼片段中包含的節(jié)點的屬性特征。
15、一種可選的實施方式中,根據(jù)所述各個節(jié)點的屬性特征,對所述節(jié)點進行聚類,得到多個節(jié)點簇,包括:
16、根據(jù)所述各個節(jié)點的屬性特征,生成所述目標代碼對應(yīng)的鄰接矩陣和度矩陣;所述鄰接矩陣用于表示各個節(jié)點之間的連通關(guān)系;所述度矩陣用于表示每個節(jié)點連接的節(jié)點的數(shù)量;
17、對所述鄰接矩陣和所述度矩陣進行歸一化處理,得到拉普拉斯矩陣,并計算得到所述拉普拉斯矩陣的特征值和特征向量;
18、基于所述拉普拉斯矩陣的前預(yù)設(shè)數(shù)量個特征值對應(yīng)的特征向量,生成特征向量矩陣;
19、對所述特征向量矩陣的行向量進行基于無監(jiān)督學(xué)習算法的聚類,得到多個節(jié)點簇。
20、一種可選的實施方式中,針對每個代碼塊,以該代碼塊對應(yīng)的節(jié)點簇的中心點為關(guān)鍵節(jié)點,對所述代碼塊進行雙向切片處理,得到代碼片段,包括:
21、針對每個代碼塊,以該代碼塊對應(yīng)的節(jié)點簇的中心點為關(guān)鍵節(jié)點,從所述關(guān)鍵節(jié)點出發(fā),沿著所述程序依賴圖向前遍歷,確定與所述關(guān)鍵節(jié)點具有關(guān)聯(lián)關(guān)系的第一目標節(jié)點,以及沿著所述程序依賴圖向后遍歷,確定與所述關(guān)鍵節(jié)點具有關(guān)聯(lián)關(guān)系的第二目標節(jié)點;
22、基于所述關(guān)鍵節(jié)點、所述第一目標節(jié)點、以及所述關(guān)鍵節(jié)點與所述第一目標節(jié)點之間的邊,生成前向代碼切片;基于所述關(guān)鍵節(jié)點、所述第二目標節(jié)點、以及所述關(guān)鍵節(jié)點與所述第二目標節(jié)點之間的邊,生成后向代碼切片;
23、基于所述前向代碼切片和所述后向代碼切片,得到代碼片段。
24、一種可選的實施方式中,基于所述歷史缺陷信息和所述代碼片段的特征信息,對待訓(xùn)練的缺陷檢測模型進行調(diào)參,包括:
25、對所述歷史缺陷信息進行特征表示,得到歷史缺陷特征向量;
26、根據(jù)所述代碼片段中包含的節(jié)點的屬性特征,得到代碼片段特征向量;
27、對所述歷史缺陷特征向量和所述代碼片段特征向量進行特征融合處理,得到融合特征向量;
28、基于所述融合特征向量,對待訓(xùn)練的缺陷檢測模型進行調(diào)參。
29、一種可選的實施方式中,所述歷史缺陷信息包括缺陷類型、缺陷頻率和缺陷嚴重性;
30、對所述歷史缺陷信息進行特征表示,得到歷史缺陷特征向量,包括:
31、對所述缺陷類型進行獨熱編碼,得到缺陷類型特征向量;
32、對所述缺陷頻率進行歸一化處理,得到缺陷頻率特征向量;
33、對所述缺陷嚴重性進行獨熱編碼,得到缺陷嚴重性特征向量;
34、基于所述缺陷類型特征向量、所述缺陷頻率特征向量和所述缺陷嚴重性特征向量,得到歷史缺陷特征向量。
35、一種可選的實施方式中,所述缺陷檢測模型包括多頭自注意力模塊、第一殘差網(wǎng)絡(luò)模塊、前饋網(wǎng)絡(luò)模塊和第二殘差網(wǎng)絡(luò)模塊;
36、基于所述歷史缺陷信息和所述代碼片段的特征信息,對待訓(xùn)練的缺陷檢測模型進行調(diào)參,直至得到訓(xùn)練好的缺陷檢測模型,包括:
37、將所述融合特征向量進行輸入嵌入表示,得到查詢query矩陣、鍵key矩陣和值value矩陣;所述查詢query矩陣和所述鍵key矩陣包含所述融合特征向量中的位置信息;所述值value矩陣包含所述融合特征向量中的數(shù)值信息;
38、將所述查詢query矩陣、鍵key矩陣和值value矩陣輸入至所述多頭自注意力模塊,得到多頭自注意力結(jié)果;
39、將所述多頭自注意力結(jié)果和所述融合特征向量輸入至所述第一殘差網(wǎng)絡(luò)模塊,得到第一處理結(jié)果;
40、將所述第一處理結(jié)果輸入至所述前饋網(wǎng)絡(luò)模塊,得到第二處理結(jié)果;
41、將所述第一處理結(jié)果和所述第二處理結(jié)果輸入至所述第二殘差網(wǎng)絡(luò)模塊,得到第三處理結(jié)果,并對所述第三處理結(jié)果進行解碼,得到所述代碼片段的缺陷檢測結(jié)果;
42、基于所述第三處理結(jié)果,對待訓(xùn)練的缺陷檢測模型進行調(diào)參,直至得到訓(xùn)練好的缺陷檢測模型。
43、第二方面,本公開實施例還提供一種代碼缺陷檢測裝置,包括:
44、獲取模塊,用于獲取待檢測代碼;
45、輸入模塊,用于將所述待檢測代碼輸入至訓(xùn)練好的缺陷檢測模型中,得到所述待檢測代碼的缺陷檢測結(jié)果;所述缺陷檢測模型是按照以下步驟訓(xùn)練得到的:獲取目標代碼,以及所述目標代碼的歷史缺陷信息;確定所述目標代碼中各個代碼語句之間的控制依賴關(guān)系,以及各個變量之間的數(shù)據(jù)依賴關(guān)系;根據(jù)所述各個代碼語句之間的控制依賴關(guān)系和所述各個變量之間的數(shù)據(jù)依賴關(guān)系,對所述目標代碼進行切片處理,得到各個代碼片段,并確定各個所述代碼片段的特征信息;基于所述歷史缺陷信息和所述代碼片段的特征信息,對待訓(xùn)練的缺陷檢測模型進行調(diào)參,直至得到訓(xùn)練好的缺陷檢測模型。
46、第三方面,本公開實施例還提供一種計算機設(shè)備,包括:處理器、存儲器和總線,所述存儲器存儲有所述處理器可執(zhí)行的機器可讀指令,當計算機設(shè)備運行時,所述處理器與所述存儲器之間通過總線通信,所述機器可讀指令被所述處理器執(zhí)行時執(zhí)行上述第一方面,或第一方面中任一種可能的實施方式中的步驟。
47、第四方面,本公開實施例還提供一種計算機可讀存儲介質(zhì),該計算機可讀存儲介質(zhì)上存儲有計算機程序,該計算機程序被處理器運行時執(zhí)行上述第一方面,或第一方面中任一種可能的實施方式中的步驟。
48、本公開實施例的提供代碼缺陷檢測方法,進行代碼缺陷檢測的模型是將歷史缺陷信息和代碼片段的特征信息作為輸入進行訓(xùn)練的,通過結(jié)合歷史缺陷信息和代碼片段的特征信息進行自注意力學(xué)習,訓(xùn)練得到的缺陷檢測模型可以更加準確地識別出待檢測代碼中的缺陷;另外,在訓(xùn)練過程中,通過基于各個代碼語句之間的控制依賴關(guān)系和各個變量之間的數(shù)據(jù)依賴關(guān)系,對代碼進行切片處理,得到更細粒度的代碼片段,使得訓(xùn)練得到缺陷檢測模型對待檢測代碼中的缺陷進行更加精準的定位。
49、關(guān)于上述代碼缺陷檢測裝置、計算機設(shè)備、及計算機可讀存儲介質(zhì)的效果描述參見上述代碼缺陷檢測方法的說明,這里不再贅述。
50、為使本公開的上述目的、特征和優(yōu)點能更明顯易懂,下文特舉較佳實施例,并配合所附附圖,作詳細說明如下。