肖 鵬,張旭升,楊豐玉,鄭 巍
南昌航空大學 軟件學院,南昌 330063
隨著軟件的復雜化和密集化的加劇,軟件漏洞已成為軟件安全的主要威脅[1]。由于產(chǎn)生軟件漏洞的原因多樣,如設計錯誤、編碼不規(guī)范、測試不足等,導致檢測和修復這些復雜、隱秘且多樣的漏洞成為一個挑戰(zhàn)。為使軟件遠離漏洞的困擾,人們提出漏洞檢測方法,通過漏洞檢測,幫助人們在軟件設計、編碼等工作中識別潛在風險,確定審查重心,以及指導軟件測試或調試工作有效開展,達到提高軟件安全與降低維護成本的目的[2]。
近年來,隨著人工智能技術快速發(fā)展,深度學習在漏洞數(shù)據(jù)挖掘和特征識別中顯現(xiàn)出了巨大潛能[3-4],并受到廣大學者的重視。基于深度學習的程序漏洞檢測方法成為當前漏洞檢測領域的一個研究熱點。該方法通過收集歷史程序源代碼與漏洞信息組成樣本數(shù)據(jù),采用深度學習算法在已有樣本數(shù)據(jù)上訓練漏洞檢測模型,以捕獲存在漏洞風險與其程序特征之間的關聯(lián),實現(xiàn)對漏洞風險的量化預估[5]。當前,基于深度學習算法識別代碼片段中的語句、語法及語義特征進行程序漏洞檢測是一種主流研究方法[6-7]。從采取的特征性質上主要劃分為兩類:(1)基于token 特征,將代碼視作由一系列的符號和詞匯構成的序列,利用自然語言處理領域的方法訓練深度學習模型。如Li等[7]將程序切片轉換成token序列后利用雙向長短期記憶網(wǎng)絡(long short-term memory,LSTM)訓練模型。Fan等[8]使用循環(huán)神經(jīng)網(wǎng)絡(recurrent neural network,RNN)結合注意力機對從源代碼的抽象語法樹(abstract syntax tree,AST)中提取節(jié)點信息獲得token 序列。Ray 等[9]通過計算token 序列的交叉熵來判別代碼的“異味”。(2)基于圖結構特征,采用圖神經(jīng)網(wǎng)絡從源代碼生成的控制依賴圖、數(shù)據(jù)依賴圖以及抽象語法樹中提取結構特征來構建漏洞檢測模型。Cheng等[10]根據(jù)程序的控制流信息提取程序切片,使用圖卷積神經(jīng)網(wǎng)絡(graph convolutional networks,GCN)構建用于識別與控制流相關的漏洞檢測模型。Cao 等[11]在控制依賴和數(shù)據(jù)依賴關系基礎上,融合函數(shù)間調用關系提取程序切片,并提出一種對流信息敏感的圖神經(jīng)網(wǎng)絡模型FS-GNN(flow-sensitive graph neural network),能夠有效檢測出與內(nèi)存相關的漏洞。Sikic 等[12]使用源程序的抽象語法樹作為圖結構,使用GCN 訓練深度學習模型來檢測程序是否有缺陷。Xu 等[13]使用bug 程序修復前后的源代碼構建抽象語法樹,根據(jù)樹的編輯距離對抽象語法樹進行剪枝獲得與程序缺陷相關的子樹,采用圖神經(jīng)網(wǎng)絡從子樹中提取結構特征,同時結合源程序的注釋、修復記錄等文本特征來訓練缺陷預測模型。段旭等[14]將程序轉換成包含語義特征信息的代碼屬性圖,編碼得到圖的特征向量后使用雙向LSTM 和注意力機制訓練漏洞檢測模型。
圖結構特征相比token 序列特征在表征上更具優(yōu)勢[15],但已有的研究仍存在以下兩個問題:(1)基于程序依賴圖的代碼結構在程序空間的上下文結構表征方面較弱;(2)所使用的圖神經(jīng)網(wǎng)絡模型(如GCN)沒有考慮過平滑問題,導致只能使用有限數(shù)量的隱層,無法學習更高階的信息。
針對上述問題,本文提出一種基于改進圖神經(jīng)網(wǎng)絡的程序漏洞檢測方法。首先在程序依賴關系圖基礎上,融合順序關系圖(order relationship graph,ORG),進一步完善程序切片圖結構表示,令代碼語句具備感知其上下文信息;在圖節(jié)點嵌入階段基于代碼語句的抽象語法樹生成保留代碼語句抽象語法結構特征的嵌入向量;最后使用深層圖卷積網(wǎng)絡并結合圖注意力機制,提出一種新的圖神經(jīng)網(wǎng)絡模型GCNIIAT(graph convolutional network II with attention),該模型能夠更加有效地識別程序切片的圖結構特征與漏洞的關聯(lián)。本文在軟件保證引用數(shù)據(jù)集(software assurance reference dataset,SARD)進行實例驗證,結果表明,PSG-GCNIIAT的漏洞檢測性能優(yōu)于目前主流的深度學習算法模型,證明了PSG-GCNIIAT能夠有效地提升程序漏洞檢測的能力。
程序切片是分析漏洞問題的一個關鍵技術,廣泛應用在漏洞檢測、故障定位等領域。在程序調試過程中分析不可能出現(xiàn)錯誤的代碼是沒有意義的,刪除程序中不重要的語句,使注意力集中在程序中可能包含漏洞的部分,可以極大減輕測試人員的工作負擔。程序切片可以通過分析程序的數(shù)據(jù)流和控制流來分解程序,剔除與敏感操作無關語句,從而減少冗余信息。
程序切片技術的基本思路為:將程序點P和變量集合V作為切片標準,提取源程序中與切片標準存在關聯(lián)的代碼語句集合從而構成程序切片。一個程序切片由那些與切片標準相關的語句組成,是可執(zhí)行的程序子集[16]。
圖神經(jīng)網(wǎng)絡(graph neural network,GNN)[17]是使用神經(jīng)網(wǎng)絡來學習圖結構數(shù)據(jù)的深層嵌入模型,由于能夠克服淺層網(wǎng)絡嵌入方法的缺陷而受到廣泛關注。GNN 采用信息傳遞神經(jīng)網(wǎng)絡(message passing neural network,MPNN)[18]架構,包含信息傳遞和讀出兩個階段,信息傳遞階段使用信息函數(shù)Mt和節(jié)點更新函數(shù)Ut來更新節(jié)點的隱藏狀態(tài)ht。然后在讀出階段使用一個讀出函數(shù)R來計算整個圖的表示。
GNN 在圖結構數(shù)據(jù)上的效果十分顯著,導致GNN研究火熱,近年來出現(xiàn)了許多GNN的變體,如圖卷積神經(jīng)網(wǎng)絡GCN[19],圖注意力神經(jīng)網(wǎng)絡(graph attention neural networks,GAT)[20]等。
本文以程序切片作為分析對象進行漏洞檢測研究。程序切片粒度漏洞檢測是一種細粒度檢測方法,相比于函數(shù)、類,它能提供更為精準的故障定位能力。同時,程序切片比單行語句包含更豐富的信息,由于剔除了程序中無關代碼,其代碼本身具有明顯的結構特征性。程序漏洞檢測流程如圖1所示。
圖1 漏洞檢測流程Fig.1 Vulnerability detection procedure
首先將源代碼轉化為AST進行程序語法分析,基于切片標準的控制依賴和數(shù)據(jù)依賴關系提取的代碼片段,并構造程序切片的程序依賴圖。然后在此基礎上構造順序關系圖,增強感知代碼語句上下文信息的能力。其次,在進行模型訓練前需要進一步采用節(jié)點嵌入的方法對程序切片的圖結構表示進行向量化。最后,采用基于圖的深度學習方法訓練漏洞檢測模型,本文使用深層圖卷積網(wǎng)絡GCNII[21]作為基礎學習架構,結合圖注意力機制構建GCNIIAT 模型,作為漏洞檢測模型對待檢測的程序切片進行漏洞檢測。
程序切片的圖結構表示通常使用控制依賴關系圖和數(shù)據(jù)依賴關系圖[22],控制依賴關系圖描述了程序語句之間的執(zhí)行關系,通常與邏輯控制語句(包含if else、for、while、switch、case等關鍵字)有關;數(shù)據(jù)依賴關系圖描述了程序中變量的定義與使用關系。
使用開源工具Joern 對源程序進行解析,獲得源程序的控制依賴關、數(shù)據(jù)依賴關系信息,構建程序依賴關系圖PDG。選擇敏感函數(shù)調用作為切片標準進行切片,得到描述程序切片PDG,切片包含的代碼語句集合稱為code gadget[6]。為了豐富程序切片的圖結構特征信息,本文提出一種新的圖結構表示順序關系ORG,ORG 描述代碼行語句在code gadget 中的順序關系,建立節(jié)點之間的順序關系能夠提升模型在感知code gadget在上下文環(huán)境中的特征信息。ORG的構建采用滑動窗口機制,根據(jù)code gadget 中的代碼行位置信息進行順序移動,過程如圖2所示。
圖2 ORG提取過程Fig.2 ORG create procedure
算法1 描述了ORG 構建的過程。算法的輸入是程序切片的行號集合LOCs 和上下文窗口大小window_size。對代碼行號集合LOCs進行排序,然后在LOCs上使用滑動窗口機制劃出設定大小的窗口,對窗口內(nèi)的行號構建表示順序關系的邊。
算法1構造順序關系圖ORG_create
得到程序切片的ORG 后,與程序依賴圖PDG 組成程序切片圖(program slice graph,PSG),以此豐富程序切片的結構信息,達到系統(tǒng)化表征程序切片的目的。
程序切片的圖結構表示不能直接作為圖神經(jīng)網(wǎng)絡的輸入,需要規(guī)范為標準輸入數(shù)據(jù)才能被學習模型用于檢測模型的構建。圖結構表示的規(guī)范分為圖節(jié)點特征向量化與構造描述PSG 的鄰接矩陣兩部分。通過圖節(jié)點嵌入方法,將圖節(jié)點特征映射到向量空間,達到圖節(jié)點信息向量化表示的目的,邊鄰接矩陣則通過PSG的邊來構建。
(1)圖節(jié)點特征向量化
本文使用InferCode[23]生成PSG 節(jié)點代碼行的初始特征向量。由于程序中的變量名可由程序員自定義,這會導致在生成代碼行特征向量時引入噪聲。為了解決這一問題,采用統(tǒng)一的符號表示對源程序包含的變量名詞匯進行符號化,以減少由程序變量的個性化命名所帶來的噪聲,更好地保留原始的代碼語義。對于自定義的變量名,使用VAR_number 來表示,對于自定義的函數(shù)名使用FUN_number來表示,number用變量名和函數(shù)名在代碼中出現(xiàn)的先后來計數(shù)表示。
完成對程序切片的符號化后,使用InferCode 生成代碼行語句的向量表示。InferCode 是一種自監(jiān)督學習算法,訓練過程不需要樣本的標簽,它可以將任意大小的代碼塊編碼為一個固定長度的向量。InferCode 借鑒了Doc2Vec 的思想,將代碼塊對應的AST 視為文檔,AST的子樹視為文檔中的單詞,通過AST預測其子樹來訓練一個可以將代碼塊進行編碼的編碼器。
對于給定的代碼塊集合,InferCode 生成對應的AST 集合{T1,T2,…,Tn},Ti的子樹集合為{…Tij…},其核心是最大化子樹Tij在Ti上下文中出現(xiàn)的概率和Pi,Pi的計算如公式(1)所示:
InferCode 使用基于樹的卷積神經(jīng)網(wǎng)絡(tree-based convolutional neural network,TBCNN)來獲得AST 節(jié)點初始編碼向量。通過卷積前向傳播進行特征提取和融合,使用注意力機制生成AST子樹編碼向量,最后使用softmax 計算所生成AST 子樹編碼向量與AST 編碼向量的交叉熵,經(jīng)反向傳播更新TBCNN的權重參數(shù),最終完成訓練的TBCNN模型作為代碼表征的編碼器可用于各種下游任務。
(2)構建邊鄰接矩陣
構建鄰接矩陣Apsg表示PSG的節(jié)點關系。PSG包含PDG和ORG兩種類型的邊集合Epdg和Eorg,通過遍歷程序切片的PSG,可得:
完成上述兩步得到代碼行語句的特征向量和描述PSG的鄰接矩陣即為圖結構表示規(guī)范化的結果,二者組成GCNIIAT模型的標準輸入數(shù)據(jù)。
GCN能夠有效地檢測出程序漏洞,然而文獻[21]指出GCN 存在過平滑問題導致只能使用有限數(shù)量的隱層,這會限制GCN學習更高階信息的能力。另一方面,程序漏洞檢測存在類間差異小的問題,即某些存在漏洞的程序切片與不存在漏洞的程序切片的差異非常小,而注意力機制可以在關鍵特征上賦予更多的注意力權重,從而指導模型根據(jù)關鍵的細微差異進行分類。因此本文提出GCNIIAT 方法,使用深度圖卷積網(wǎng)絡GCNII 結合圖注意力機制進一步來提升圖節(jié)點特征的表征與漏洞檢測的準確度。
GCNIIAT 首先通過GCNII 層和圖注意力層來學習節(jié)點特征的表征,隨后在卷積層使用卷積和池化對節(jié)點特征進行篩選,最后通過多層感知機訓練檢測模型,完成漏洞檢測任務。
2.4.1 GCNII層
GCNII 采用了ResNet[24]的殘差學習思想,在傳統(tǒng)GCN 中引入了初始殘差連接和恒等映射。GCNII 層使用公式(3)來學習獲得節(jié)點的表示向量:
對于輸入節(jié)點特征X,GCNII 首先經(jīng)過全連接層得到H(0),以此作為初始殘差按比例連接到后面的其他層,確保節(jié)點的最終表征都包含節(jié)點初始特征信息。然后類比ResNet 中的恒等映射,將單位矩陣I按比例加到權重矩陣Θ上,隨著層數(shù)增加,比例系數(shù)β不斷減小,表明當層數(shù)越深時越接近恒等變換。
2.4.2 圖注意力層
注意力機制核心是根據(jù)輸入數(shù)據(jù)自適應地關注相關性高的特征而忽略相性低的特征[25],圖注意力層的輸入是程序切片圖結構中頂點初始特征向量的集合X={x1,x2,…,xm},xi∈Rd,以及描述頂點之間關系的鄰接矩陣A。輸出的是新的頂點特征向量集合H′=,d′表示新的維度。在分配注意力時只分配給頂點i的相鄰頂集合Ni上,此時注意力相關系數(shù)aij由公式(4)計算得到:
總之,在科學哲學家所構建的科學理論中,蘇佩斯作為理論模型的首創(chuàng)者,不遺余力地對科學理論進行數(shù)學化的研究,薩普與范·弗拉森則將經(jīng)驗知識賦予模型之中,史納德等人將這兩種觀點加以融合,建立了一個比較完整的理論體系,并最終走向成熟。
其中,aT是前饋神經(jīng)網(wǎng)絡參數(shù),W是被所有hi共享的權值矩陣,LeakyReLU是激活函數(shù),[Wxi||Wxj]是對頂點i和頂點j的特征向量進行拼接。
為了使模型訓練過程更加穩(wěn)定,本文使用多頭注意力機制,對K個獨立的注意力機制計算結果求均值,最終可得到hi′:
表示第k階的注意力機制的注意力系數(shù)歸一化的結果,Wk表示第k階的注意力機制的權值矩陣。
2.4.3 卷積層
經(jīng)過GCNII 層和圖注意力層分別得節(jié)點特征集合H和H′,在卷積層通過卷積運算與池化操作,對節(jié)點信息進行篩選,進一步減小特征的空間大小,避免模型訓練過程中出現(xiàn)過擬合。具體過程如下:
式(6)表示使用MaxPool來篩選卷積窗口內(nèi)最重要的特征,式(7)和(8)分別表示對節(jié)點特征做卷積運算,其中為圖注意力層獲得的節(jié)點特征,表示對圖注意力層獲得的節(jié)點特征與GCNII 層獲得的節(jié)點特征進行拼接,卷積的層數(shù)為l。最終得到,然后將二者輸入多層感知機MLP,對結果計算點積并求均值,通過SigMoid函數(shù)實現(xiàn)最終的程序漏洞結果預測,如式(9)所示:
在訓練完檢測模型后,可用于對目標程序切片數(shù)據(jù)進行漏洞檢測。
實驗使用的源代碼數(shù)據(jù)來自于軟件保證參考數(shù)據(jù)集SARD,包含多種常見漏洞類型的源程序,是目前信息安全領域廣泛用于漏洞分析研究的一個基準數(shù)據(jù)集,已被廣泛應用于安全缺陷領域的研究工作,并且該數(shù)據(jù)集提供了真實且詳細地漏洞信息,可以定位漏洞發(fā)生的位置,從而為提取的程序切片設置漏洞標簽。本文選擇SARD 中最為常見的10 種漏洞類型的程序數(shù)據(jù)集作為實現(xiàn)對象,如表1所示。實驗過程將對每類數(shù)據(jù)集劃分為訓練數(shù)據(jù)集和測試數(shù)據(jù)集,比例分別為80%和20%。
表1 漏洞數(shù)據(jù)集Table 1 Vulnerability dataset
實驗選擇近幾年提出基于深度學習的程序漏洞檢測模型作為比較對象,分析它們在漏洞檢測任務上的性能表現(xiàn)。比較方法為:采用雙向長短期記憶神經(jīng)網(wǎng)絡Bi-LSTM 對切片tokens 學習的VulDeePecker,圖卷積神經(jīng)網(wǎng)絡GCN,基于門控循環(huán)單元的消息傳播模型——門控圖神經(jīng)網(wǎng)絡(gated graph neural network,GGNN),以及本文提出的GCNIIAT。
VulDeePecker 模型的Word2vec 詞向量模型中單詞向量維度為100,最小詞頻為1,迭代次數(shù)為10。
使用切片的平均詞匯數(shù)量作為上限,不足的情況使用0 向量補齊。VulDeePecker 中的BiLSTM 模型使用3層隱層,每層300個隱含節(jié)點,Dropout方法的節(jié)點保留概率為0.5,批處理大小為64。
對圖結構學習算法GCN、GGNN、GCNIIAT,在節(jié)點嵌入階段使用InferCode 生成代碼語句的嵌入向量,嵌入向量維度為100。GCN 與GGNN 算法的以傳統(tǒng)PDG作為程序切片圖結構進行訓練,GCNIIAT 使用融合ORG 后的PSG 作為程序切片圖結構進行訓練,其中ORG窗口為4。GCNIIAT在圖嵌入階段的GCNII層,設置輸入和輸出的特征維度都為100,隱層數(shù)量為5;圖注意力層的數(shù)量為3;池化過程卷積層層數(shù)為2。訓練過程使用批量訓練方式,每批128個樣本。
實驗使用四個常用評價指標:準確率、精準率、召回率和F值,來評估實驗的結果,計算公式如下所示:
公式中的TP指的是被分類器正確標記為有缺陷的樣本數(shù)量,F(xiàn)N指的是把有缺陷樣本標記為無缺陷的數(shù)量,F(xiàn)P指的是被分類器標記為有缺陷的無缺陷樣本數(shù)量,TN指的是被分類器正確標記為無缺陷的樣本數(shù)量。
考慮訓練中的隨機因素會對深度學習算法的輸出結果產(chǎn)生較大影響,實驗中對每個算法使用訓練數(shù)據(jù)集經(jīng)多輪迭代訓練使模型性能達到穩(wěn)定后應用在測試數(shù)據(jù)集上。實驗結果如表2所示。
表2 各數(shù)據(jù)集評價指標Table 2 Evaluation metrics of each dataset 單位:%
觀察每組實驗對象中表現(xiàn)最好的數(shù)值(表中加粗)可以看出,在所有10個實驗數(shù)據(jù)集中,GCNIIAT的準確率有9 次獲得最佳表現(xiàn),F(xiàn) 值在其中8 個數(shù)據(jù)集獲得最高值,在非最好數(shù)據(jù)時與最佳數(shù)據(jù)的差距也比較小。這表明本文提出的GCNIIAT在不同數(shù)據(jù)集對象上應用均能取得較好的漏洞檢測表現(xiàn)。
對比基于token特征的VulDeePecker模型和基于圖結構特征的模型GCN、GGNN、GCNIIAT的數(shù)據(jù),可以發(fā)現(xiàn)基于圖結構的模型的檢測結果均好于VulDeePecker,證明采用圖結構描述程序切片比采用token方法能夠獲得更好的漏洞檢測效果。程序切片本身是基于控制依賴和數(shù)據(jù)依賴進行切割的程序片段,程序切片的屬性特征更適合用圖結構表征。
從統(tǒng)計的角度觀測平均值分析算法的綜合性能發(fā)現(xiàn),GCNIIAT的準確率、精準率、召回率和F值指標的平均數(shù)分別達到95.1%、88.3%、90%和88.8%,在所有算法中平均值的指標均為最好。主要指標準確率和F值,比其他模型均有明顯的提升。綜合來看,GCNIIAT在所有算法中的表現(xiàn)無疑是出色的。如果采用平均值來量化衡量性能的提升,以比對其他算法的指標平均值作為衡量基準,本文提出GCNIIAT 算法在準確率指標上提升2.33%,F(xiàn)值上有7.48%的提升。
本文在傳統(tǒng)的PDG 上融合ORG,為了驗證它是否比傳統(tǒng)的PDG 更具有表征能力,進行對比實驗比較GCNIIAT 單獨使順序關系圖ORG、單獨使用程序依賴圖PDG和使用程序切片圖PSG三種情況下的F值,設置ORG窗口為4,實驗結果如圖3所示。
圖3 不同圖結構的F值Fig.3 F-measure of different graph structures
從實驗結果可以看出同時使用PDG 和ORG 時,F(xiàn)值普遍得到提升。程序漏洞的發(fā)生往往與其所處的上下文有關,代碼行所處的上下文由其與之前和之后一定范圍內(nèi)的代碼塊體現(xiàn)出來,對于一個程序切片,PDG能提供控制流和數(shù)據(jù)流的信息,而ORG 能進一步豐富代碼行所處的上下文信息。
PSG-GCNIIAT提升漏洞檢測性能的一個主要原因在于該方法在表征程序切片的圖結構中引入了ORG,使算法在感知程序切片結構時不再只考慮控制依賴關系和數(shù)據(jù)依賴關系,而是對切片中語句的前后上下文依賴關系也會關注。需要注意的是,ORG的提取使用了滑動窗口機制,采用不同大小的窗口對構建ORG 數(shù)據(jù)是有影響。窗口過小可能達不到預期提升的效果,太大會使模型參數(shù)增加,存在過擬合風險。因此,本文進一步對窗口大小參數(shù)進行分析。設置窗口大小的取值范圍是2到6,觀察不同數(shù)據(jù)集的F值,實驗結果如表3所示。
表3 不同窗口的F值Table 3 F-measure of different window size 單位:%
從實驗結果觀察窗口變化對不同數(shù)據(jù)集的影響,可以發(fā)現(xiàn)不同數(shù)據(jù)集受窗口變化的影響不盡相同。其中CWE020、CWE190、CWE476、CWE706 當窗口為4 時效果最好,CWE074、CWE369和CWE668受窗口影響的波動較大,而CWE020、CWE190 和CWE704 受窗口的影響較小,結果較穩(wěn)定??梢钥闯觯煌瑪?shù)據(jù)集的最佳窗口大小是有區(qū)別的。
從整體上看,窗口大小為4的時候,95%置信區(qū)間為88.8%±4.5%,比其他窗口大小的數(shù)據(jù)均要優(yōu)異。其次,窗口為3 和5 時,模型表現(xiàn)略低。窗口大小從2 變化到6,F(xiàn)值的數(shù)據(jù)趨勢為先增后降。
本文提出一種基于深層圖卷積網(wǎng)絡與圖注意的程序漏洞檢測方法PSG-GCNIIAT,該方法在傳統(tǒng)程序依賴圖的基礎上融合順序關系圖作為程序切片的圖結構PSG,并使用InferCode 生成圖節(jié)點代碼行的嵌入向量。此外,將GCNII 與圖注意力機制相結合,有效地提升了漏洞檢測模型的學習能力。本文選擇SARD 中10個常見程序漏洞數(shù)據(jù)集進行實驗,對PSG-GCNIIAT有效性進行了驗證。實驗結果表明,與近年來提出主要深度學習算法VulDeePecker、GCN、GGNN相比,PSG-GCNIIAT在準確率指標與F值指標上具有顯著優(yōu)勢,F(xiàn)值提升7.48%。綜合來看,PSG-GCNIIAT是一種性能表現(xiàn)優(yōu)異的程序切片粒度的漏洞檢測方法,出色的性能將為其為下游任務提供巨大的應用潛力,如為故障定位提供先驗知識。
本文對程序切片圖結構表示的圖節(jié)點特征向量嵌入有待進一步完善,特別是復雜的語法結構特征體現(xiàn)方面需要強化。如何從多個維度對程序切片代碼行語句進行嵌入,并進行有效地聚合,獲取信息更全面和系統(tǒng)的圖結構表征方法仍需要進一步研究。