999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種面向缺陷檢測過程的警報自動確認方法

2022-08-03 02:40:46孔焦龍金大海宮云戰
計算機測量與控制 2022年7期
關鍵詞:工程方法模型

孔焦龍,金大海, 宮云戰

(北京郵電大學 網絡與交換技術國家重點實驗室,北京 100876)

0 引言

軟件出現在現代生活的方方面面,從社交媒體到基礎設施。由于軟件正在變得越來越復雜,其不可避免的存在重大的缺陷,這些缺陷可能會給人類社會造成重大的損失[1]。然而,由于有限的預算以及緊張的日程安排,僅僅通過軟件測試來找出缺陷是不切實際的,因為這通常需要大量的時間來運行各種各樣的測試用例。靜態分析(SA,static analysis)能很好的彌補這一點,不需要運行程序也能檢驗程序源碼,并且可以考慮到所有可能的程序執行。但是,通過靜態分析在程序中找到的相關缺陷通常是不可判定的,這一點限制了靜態分析工具的實用性[2]。因此靜態分析工具報告出的有關代碼缺陷的警報信息中會存在一部分錯誤,本文稱之為誤報,人工確認潛在缺陷是一項費時費力的工作[3]。

為了減輕人工確認的負擔,大量能使這一過程自動化的方法已經被提出[4-5]。其中有通過設計并提取一系列的手工特征來訓練有效的分類模型,這些被提取的特征主要和源代碼的統計特征有關,包括McCabe metrics[6], Halstead metrics[7], 和CK metrics[8],然而當前文獻表明這些特征在表示源代碼深層語義信息的時候缺乏準確性。另外,之前大部分方法主要針對工程內的任務,即訓練集和測試集來自同一個工程。跨工程確認的一個主要的問題在于不同工程之間數據分布的差異性。因此,直接把基于源工程特征構建起來的模型應用到目標工程,大部分情況下無法達到令人滿意的效果。

最近,越來越多靜態分析和人工智能結合的研究成為了解決上述問題的重要手段。明確地說,基于深度學習的方法已被廣泛應用于特征的自動生成[9-13]。它們的主要思路是將從源代碼對應的語法樹(AST,abstract syntax tree)上獲取的符號序列表示為符合深度神經網絡的輸入形式,再利用神經網絡學到的特征去訓練更準確的分類模型。相關實驗結果表明基于深度學習的方法能夠更好的獲取軟件缺陷相關的語義特征,因此它們的表現會勝過僅使用手工特征的傳統方法。

本文提出一種面向缺陷檢測過程的自動確認方法,即基于缺陷模式狀態機[14]的檢測過程。通過搜集在檢測過程中與缺陷模式狀態機實例狀態轉換相關的指令集,提取指令集中所包含的細粒度的語法、語義信息并轉換為結構化的序列,將這些序列集合映射到高維向量空間后作為神經網絡的輸入,訓練出能有效自動確認警報的模型。該方法一定程度上可以抵消不同工程之間的特征分布差異,本文將其命名為State2Vec。

1 相關工作

1.1 缺陷模式狀態機

缺陷模式描述了程序的某種屬性,如果違反該屬性則生成一條缺陷。例如:若某處申請的資源在使用完后未釋放,則造成資源泄露缺陷(RL,resource leak);若對空指針解引用操作,會導致空指針引用缺陷(NPD,null pointer dereference)。

圖1 RL和NPD缺陷模式狀態機

缺陷模式狀態機包含多種缺陷模式,是對所有缺陷的一種統稱。若要對函數內部某些具體缺陷模式檢測,需要根據其各自的狀態機實例創建條件,創建相應實例。例如根據函數中每一處資源分配創建一個RL狀態機實例;對每一處可能被解引用的變量創建一個NPD狀態機實例。

1.2 基于缺陷模式狀態機的測試方法

定義2:檢查點(IP,inspection point)。設P是待測程序,將缺陷模式S分成N類,類,S={S1,S2,…,Sn},每類分成K種,Si={Si1,Si2,…,SiK}, 從P中計算出和S相匹配的檢查點的集合IP={IP1,IP2,…,IPm}。

定義3:警報點(AP,alarm point)。在IP集合中,每一條記錄由一個三元組{S,P,J}表示:S為靜態分析報告中一條記錄對應的缺陷模式。P為一個六元組,用于描述IP前5個分別表示工程名,變量名、變量出現的位置、文件名、行號、IP所在方法名,若兩個及以上相同變量出現在同一行代碼中,Index表示變量出現的索引。J表示對此 IP 自動確認后的結果,未進行缺陷確認前,該值為 NULL,缺陷確認后,真實缺陷(True),誤報(False Alarm)。

現對選定程序P缺陷檢測,首先選定要檢測的缺陷模式種類,根據各自條件創建相應的狀態機實例,新創建的實例初始狀態為$start,且實例之間互相獨立。接著結合數據流分析,采用對控制流圖進行迭代的方法,對當前節點各個實例可能的狀態集合進行迭代。數據流分析中,數據流信息通過建立和解方程來收集方程聯系程序不同點的信息。

基于缺陷模式狀態機的檢測過程如算法1所示,算法描述如下。

算法1:

輸入:程序控制流圖和缺陷模式描述狀態機

輸出:每個控制流節點的inStateSet[n]和outStateSet[n]

1:begin

2:for 每個控制流節點n do

3:inStateSet[n] ← ?/*初始化*/

4:outStateSet[n] ← ?

5:outStateSet[Entry] ← D{$start(Var[])} /*入口節點的初始狀態集合*/

6:statechange ← true

7:while statechange do begin

8:statechange ← false

9:for 除 Entry的每個節點n do begin

10:nStateSet[n] ← Up∈pred[n]outStateSet[p]

11:oldout ← outStateSet[n]

12:outStateSet[n] ← genState[n] U(inStateSet[n]-kill[n])

13:if outStateSet[n] ≠ oldout

14:hen statechange ← true

15:end

16:end

end

算法1中,輸入被測程序P的控制流圖以及狀態機描述文件,得到控制流各節點輸入及輸出的實例狀態集合。其中inStateSet[n] 表示進入節點n之前的所有實例狀態集合,outStateSet[n]表示通過節點n之后所有實例狀態集合。genState[n]表示在節點n處新產生得到的所有實例狀態集合,kill[n]表示在節點n處被注銷的所有實例的狀態集合。pred[n]表示節點n的入度節點集合,即n的前驅節點。

2 面向缺陷檢測過程的警報自動確認

本文基于缺陷模式狀態機的檢測機理提取相關指令集,并設計了一種新的細粒度的特征提取方法,結合程序語言處理的相關技術,提升在跨工程場景下警報確認的效果。本文將該自動確認方法命名為State2Vec,共計三部分。

State2Vec可分為以下三部分:1)基于缺陷模式狀態機的檢測機理提取相關指令集,通過提取狀態機實例沿著控制流計算過程中狀態發生改變的節點集合,得到相應的代碼段集合,稱之為相關指令集。2)設計并利用一種新的細粒度的特征提取方法,提取相關指令集所包含的細粒度的語法、語義信息。3)利用詞嵌入技術,將結構化的字符串序列映射到高維向量空間,作為神經網絡的輸入,并將合適的深度學習模型與之相結合,訓練得到可以學習缺陷語義特征的深度神經網絡。該方法整體流程如圖2所示。

圖2 State2Vec工作流程

2.1 基于缺陷模式狀態機的指令集提取方法

目前大部分缺陷語義相關的指令集提取技術都存在以下問題——關于程序特征的指令集序列通過人工建模的方式提取,這類方法的缺陷在于人工提取的指令集較為粗糙,無法準確獲取代碼深層次的語義信息。

本文采用面向缺陷檢測過程的指令集提取技術——將空指針引用、資源泄露等具體的程序缺陷抽象為一種缺陷模型, 通過缺陷模式狀態機的創建條件及程序語義確定是否創建該缺陷的狀態機實例,并通過在為源代碼構建的分析底層框架(控制流圖等)上迭代狀態引發狀態間的轉換檢測出程序中的潛在缺陷,在此缺陷檢測過程中,收集并提取導致狀態發生改變的控制流節點集合,這些節點對應的源代碼片段即為相關指令集。基于該原理的指令集提取過程如算法2所示。

算法2:

輸入 程序控制流圖和缺陷模式描述狀態機

輸出 缺陷模式狀態機實例狀態轉換對應的控制流節點集合

1:for n in G(N, E, Entry, Exit) do

2:inStateSet[n] ← ?

3:outStateSet[n] ← ? /*初始化*/

4:end

5:changeList ← List() /*聲明changeList用來存放狀態改變的控制流節點*/

6:outStateSet[Entry]←D{$start(Var[])}/*入口節點的初始狀態集合*/

7:statechange ← true

8:while statechange do

9:statechange ← false

10:for 除 Entry的每個節點n do

11:inStateSet[n] ←

12:Up∈pred[n]outStateSet[p]13:oldout ← outStateSet[n]outStateSet[n] ← gen[n]

14:U (inStateSet[n]-kill[n])if outStateSet[n] ≠oldout then /*滿足該條件時狀態發生改變*/

15:statechange ← true

16:changeList.add(n) /*將狀態改變的控制流節點放入list*/

17:end

18: end

19:end

20: return changeList

以bad函數的源碼為例,相關指令集提取的具體細節如圖3所示。bad函數共有5個控制流節點,在節點Entry處,狀態機實例處于start狀態;在節點n1處,結構體指針twoInts初始化為NULL,此時發生狀態轉換START->MAYNULL;在節點n2處,twoInts在位操作符&后發生解引用,此時狀態轉換MAYNULL->ERROR。因此,bad函數中與NPD警報相關的指令集為控制流節點n1、n2對應的代碼段。

圖3 bad函數相關指令集提取

2.2 基于指令集的細粒度特征提取方法

源代碼語句中細粒度結構信息在之前的方法中往往會被忽視。為了做一個簡單的解釋,本文引入兩個C語言函數為例,如圖4所示。兩個函數都有類型聲明type declaration 語句,if語句,以及函數調用function invocation語句。兩者唯一的區別在于if語句中操作符不同,使用單一的&操作符會使表達式的兩側均被計算,從而導致NPD缺陷,正如bad函數展示的那樣。但是在good函數中,使用&&操作符可以避免NPD缺陷,當表達式左側不滿足條件時,右側將不會被計算。現有的基于深度學習的方法大多只是根據上下文信息將代碼片段映射為字符串序列,這樣無法區別條件謂詞表達式中細微的區別。因此兩個函數的字符串序列表示也是一樣的,可以用序列[TYPE_DECLARATION, IF_STATEMENT, FUNCTION_INVOCATION]表示,但是它們的確認結果是完全相反的。

圖4 兩個C語言函數

本文提出一種新的細粒度的特征提取方法,可以準確地反映條件謂詞表達式中各操作符與操作數之間的細微區別。該方法從以下5種類型的語法樹節點中提取特征:1)Assignment Expression Node;2)Declaration Node;3)Function Invocation Node;4)SelectionStatement Node(例如 if、switch語句);5)IterationStatement Node(例如for、while語句);6)JumpStatement Node(例如return、break語句)。通過從這些節點及其子節點中提取操作符及操作數,再按照表達式從左到右的順序將他們排序,最后以該順序映射為定義好的字符串序列。

圖5列出了本文中使用的所有選定節點類型和原子指令,使用每個節點的名稱類型和原子指令作為標識符。考慮到函數和變量的名稱通常是特定于工程的,不同工程中具有相同名稱的函數可能實現不同的功能,為了保證跨工程確認的可行性,本文使用兩種類型名稱,表示庫函數和用戶定義函數分別標記函數調用節點而不是使用特定名稱,字符串LIBRARY_FUNCTION_INVOCATION和USER_DEFINE_FUNCTION_INVOCATION分別表示庫函數和用戶自定義函數調用。對于IP(Inspection Point)變量——在檢查點與缺陷直接相關的變量,本文用VAR_IP表示,其他變量用VAR_OTHER表示。

圖5 各節點類型和原子指令對應字符

以bad函數警報相關的指令集為例,將其映射為上下文相關的字符串序列,特征提取的詳細過程及結果如圖6所示。在該函數中,有一條NPD警報生成,在控制流節點n1和n2處缺陷模式狀態機實例發生狀態轉換,n1處狀態轉換為START->NULL,n2處狀態轉換為NULL->ERROR。

圖6 相關指令集特征提取

節點n1對應代碼行是聲明語句,對應語法樹節點Declaration Node類型,twoIntsStruct是結構體類型,twoInts是一個結構體指針,twoInts是IP變量,且初始化為NULL,因此節點n1相關指令可以映射為字符串序列{DECLARATION,STRUCT_TYPE,POINTER,VAR_IP,NULL}。

節點n2對應代碼行是選擇語句,對應語法樹節點SelectionStatement Node類型, twoInts->intOne是其他變量,“!=”和“#”是比較操作符,“&”是位操作符,“5”是常數,因此節點n2相關指令可以映射為字符串序列{IF_SELECTION,VAR_IP,NOT_EQUAL,NULL,INCLUSIVE_AND,VAR_OTHER,EQUAL,CONSTANT}。

2.3 字符串編碼以及深度神經網絡的構建和訓練

2.3.1 字符串向量編碼

因為字符串序列無法直接作為神經網絡的輸入,需要通過詞嵌入技術將其轉換為數值向量。本文首先統計字符串的總類,將每一種字符串都對應一個正整數索引,從1開始。由于低維的整數無法有效描述字符串序列中的結構及上下文信息,本文將其映射到高維的向量空間,并且有著相似上下文的字符串在高維向量空間中的分布會更加接近。

(1)

因為Word2vec本質上也是訓練神經網絡,本文采用隨機梯度下降(SGD,stochastic gradient descent)進行優化。最終每一個字符串都被表示成了一個n維向量Rn,n的大小可以自己設置,本文將n設置為150,負采樣樣本大小k設置為100。

由于字符串序列的長度存在差異,而神經網絡的輸入要求每一個樣本的長度相同,本文需要對長度較短的序列進行填充(padding),將多個padding字符串填充在較短的序列末尾,使其長度和樣本中最長的字符串序列相同,padding字符串用n維零向量表示。

2.3.2 訓練模型及警報自動確認

循環神經網絡(RNN,recurrent neural networks)是一個在時間上傳遞的神經網絡,網絡的深度就是時間的長度。該神經網絡是專門用來處理時間序列問題的,能夠提取時間序列的信息。如果是前向神經網絡,每一層的神經元信號只能夠向下一層傳播,樣本的處理在時刻上是獨立的。對于循環神經網絡而言,神經元在這個時刻的輸出可以直接影響下一個時間點的輸入,該神經網絡能夠處理時間序列方面的問題。因此,RNN對具有序列特性的數據非常有效,它能挖掘時序信息以及語義信息,利用這種能力,使深度學習模型在解決語音識別、語言模型、機器翻譯以及時序分析等NLP領域的問題有所突破。同樣,RNN網絡也可以應用到程序語言處理(PLP,program language process)問題中。

因為模型的輸入是存在上下文依賴關系的向量序列,本文選擇RNN作為基本模型,通過調整RNN的種類,具體表現為長短期記憶網絡(LSTM,long-short term memory)與門控循環單元網絡(GRU,gated recurrent unit)。 RNN的層數為兩層,RNN的方向為雙向,并與邏輯回歸(LR,logistic regression)分類器結合。首先把5個開源工程中所有的警報人工確認好,按照State2Vec的前兩步映射為對應的字符串序列,接著按照第三步將每種出現的字符串訓練為詞向量,將每一條字符串序列轉換為向量集合,并在它們末尾以零向量填充,數據集構建完成。開始進行工程內的自動確認實驗,將5個工程的數據集依次分為訓練集和測試集,再分別用5個工程的訓練集訓練,調整RNN的類型搭配,分別訓練出LSTM和GRU類型的RNN模型,再分析不同的模型在不同工程測試集內的自動確認情況。挑選出效果最好的模型,進行跨工程的實驗。因為在同一工程內,訓練集和測試集樣本的分布可以認為在同一向量空間,本文提出的細粒度的特征提取方法也是盡可能縮小不同工程間樣本在向量空間中分布的差異性。因此,在使用此特征提取方法的前提下,工程內確認效果更好的模型理論上在跨工程確認場景中也會取得更好的效果。跨工程實驗的訓練集是某4個工程全部樣本的集合,測試集是另一個工程的全部樣本,實驗過程中依次將每個工程的全部樣本作為測試集。

3 實驗

3.1 實驗構建

針對模型的構建和訓練,本文使用Pytorch框架進行實驗,版本為1.7.1,python版本為3.8.5,實驗在服務器上運行,服務器環境如下:Ubuntu 18.04.5 LTS,Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10 GHz,160 GB RAM,GPU TITAN Xp (12 GB memory)。

3.1.1 數據準備

本文用5個開源C工程(如表1所示)中人工標簽好的警報作為數據集,從近期的研究方法[16-18]中挑選了4個工程,它們的警報由SA工具測出,已通過人工確認打上標簽。最后,本文制作了基于android-4.0 C 語言源碼的漏洞數據庫,通過SA工具DTS[19]對其C源碼分析得到警報,再人工確認并打上標簽。這些工程代碼行數從1 991到325 164 1不等,警報數量從74到5 235不等,警報中陽性比例(確認結果為True)最小占50.0%,最大占87.3%。

表1 5個開源C工程基本信息

3.1.2 實驗表現度量元

過去的研究[20-21]表明,當數據集中正負樣本比例不平衡時,用精準率(precision)和召回率(recall)來衡量實驗的表現是存在問題的,因為它們對正負樣本的分布比較敏感。同時,LR閾值(threshold)的設置也會對它們產生影響。因此,本文采用曲線下面積(AUC,area under curve)來度量模型自動確認的表現。

在二分類實驗中,本文一般關注4個指標:1)真陽性(TP,true positive):數據集中本身既是缺陷也被模型預測為缺陷的警報的數量;2)假陽性(FP,false positive):數據集中本身不是缺陷卻被模型預測為缺陷的警報的數量;3)真陰性(TN,true negative):數據集中本身既不是缺陷也被模型預測為非缺陷的警報的數量;4)假陰性(FN,false negative):數據集中本身是缺陷卻被模型預測為非缺陷的警報的數量。AUC表示受試者工作特征(ROC,receiver operating characteristic)曲線下的面積,ROC曲線是基于樣本的真實類別和預測概率來畫的。具體來說,ROC曲線的x軸是假陽性率(FPR,false positive rate),y軸是真陽性率(TPR,true positive rate),FPR和TPR的計算見示(2)和式(3)。

FPR=FP/(FP+TN)

(2)

TPR=TP/(TP+FN)

(3)

AUC的值在區間[0,1]內,值越接近1,說明模型的表現越好。若接近0.5,說明分類器近似于隨機分類。若小于0.5,這種情況說明分類器趨向把正樣本分類為負樣本,負樣本分類為正樣本。AUC的計算方法同時考慮了分類器對于正例和負例的分類能力,在樣本不平衡的情況下,依然能夠對分類器做出合理的評價。

3.1.3 實驗參數設置

1)詞向量訓練相關參數:詞典大小是63,即一共有63種字符串。通過詞嵌入映射成的高維向量維度設置為150,學習率( LR,Learning Rate)設置為0.1,訓練時每一批數據數量為128,優化器選擇SGD,迭代次數Epoch為5次。

2)RNN相關參數:工程內確認實驗時,對比雙層雙向LSTM和雙層雙向GRU,隱層神經元均設置為100個。訓練時每一批數據數量為64,LR=0.01,優化器選擇SGD,迭代次數Epoch為200次。跨工程確認實驗時,選擇工程內確認實驗效果較好的模型,其他參數設置不變。

3.1.4 實驗過程

本文先分別用5個工程進行工程內的缺陷確認實驗。采用十折交叉驗證的方法,先將每個工程的數據集均分為十份,輪流將其中九份作為訓練集,剩下一份作為測試集,共實驗十次,并取十次結果的平均值。在跨工程實驗中,訓練集是某4個工程全部樣本的集合,測試集是另一個工程的全部樣本,并依次將每個工程的全部樣本作為測試集。再訓練之前工程內實驗效果更好的一組RNN模型,計算在不同工程下的AUC值。同時,基于這些工程引入對比試驗。

為了評價在跨工程任務上的表現,本文挑選了兩組基準,與它們的實驗結果對比。

1)LR:一種傳統的方法,基于28種通用的度量元特征,這些特征的完整定義在[22]中有詳細介紹。

2)FRM-TL:一種基于路徑變量特征(PVC,path-variable characteristic)等級匹配的跨工程缺陷確認模型[16]。

3.2 實驗結果及分析

3.2.1 工程內缺陷確認實驗結果及分析

工程內缺陷確認(WPDI,within project defect identification)反映了當數據集和驗證集在向量空間同一區域分布時,State2Vec方法的檢測結果,基于各個工程得到的AUC值如表2所示。

表2 工程內缺陷確認實驗結果

可以發現,在uucp,sphinxbase和android這3個工程中,GRU組的確認效果會更好一些,而在spell和barcode這兩個工程中,LSTM組的效果更好。具體來看,spell和barcode數據集中警報數量分別為74和129,是5個數據集中最少的。樣本數量的不充足,導致模型一定程度上欠擬合,在GRU組中,spell和barcode的AUC值分別為0.750和0.762,低于LSTM組的0.796和0.805。在uucp,sphinxbase和android數據集中,警報的數量分別為545,240和5235,此時LSTM組的AUC值分別為0.818,0.807和0.865,均低于GRU組的0.843,0.816和0.887。根據該發現可以得出,當數據集中警報數量足夠多時,選擇GRU作為神經網絡的基本單元,可以更有效地學習特征,達到更好的分類效果。在后續跨工程缺陷確認的實驗中,訓練集和驗證集的警報數量都會大幅度提升,選擇GRU作為基本單元更加符合實驗場景。

3.2.2 跨工程缺陷確認實驗結果及分析

跨工程缺陷確認(CPDI,cross project defect identification)反映了當訓練集和驗證集在向量空間不同區域分布時,State2Vec方法的檢測結果。將該方法與LR和FRM-TL兩組基準對比,各方法在各個工程上所得ROC曲線如圖7~11所示,并將各方法實驗結果的AUC值記錄在表3中。在表3中,若State2Vec的實驗結果好于基準FRM-TL,則將State2Vec列的數據加粗,若好于基準LR,則加入下劃線。

表3 跨工程缺陷確認實驗結果

圖7 uucp數據集上各方法跨工程缺陷確認ROC曲線

圖8 spell數據集上各方法跨工程缺陷確認ROC曲線

圖9 barcode數據集上各方法跨工程缺陷確認ROC曲線

圖10 sphinxbase數據集上各方法跨工程缺陷確認ROC曲線

圖11 android數據集上各方法跨工程缺陷確認ROC曲線

可以發現,在uucp,barcode,sphinxbase和android這4個工程中,使用State2Vec方法確認結果,AUC值分別為0.643,0.556,0.692,0.618,確認效果均好于基準FRM-TL的0.608,0.539,0.598,0.598,以及基準LR的0.561,0.546,0.525,0.559。但在工程spell中,State2Vec的AUC值為0.607,低于FRM-TL的0.637,高于LR的0.546。

由此得出,當警報訓練集和驗證集分布在向量空間的不同區域時,State2Vec的確認效果會受到一定程度的限制。與WPDI的結果相比,CPDI的AUC值在5個工程中分別下降了23.72%,5.93%,27.03%,15.20%和30.32%。 但是與FRM-TL的CPDI表現相比,State2Vec方法在工程uucp,barcode以及android上確認效果均有小幅度提升,提升幅度依次為5.76%,3.15%和3.34%;在工程sphinxbase上有較大的提升,提升幅度為15.72%;但是在工程spell中,AUC值下降了4.70%,這是因為工程spell的警報數據集中僅含NPD和MLF兩種缺陷模式,而由其他4個工程構成的警報訓練集中包含多種缺陷模式,因此通過學習含有多種缺陷模式的警報數據集中的語義信息,無法準確地將所學知識遷移到目標域,導致指標AUC在工程spell的警報驗證集上下降。與LR相比,該方法在工程uucp,spell,sphinxbase,android上確認效果均有較大幅度的提升,AUC指標提升幅度依次為14.62%,12.83%,31.81%,10.55%;在工程barcode上有輕微的提升,提升幅度為1.83%。

4 結束語

本文提出State2Vec方法,該方法面向缺陷模式狀態機的檢測過程,先收集導致缺陷模式狀態機狀態發生改變的指令集,再通過特征提取將指令集轉換成設計好的字符串序列,最后通過詞嵌入技術將字符串映射到高維向量空間。實驗證明,State2Vec方法可以較為有效的提取不同工程中的狀態指令集,通過定義并構建結構化的可以表示指令集語法及語義信息的字符串序列,加以詞嵌入技術將字符串集合映射到高維向量空間,并以此訓練神經網絡模型,使得模型能有效學習指令集中的特征,一定程度上提升了在CPDI任務場景中的泛化能力。

在日常的開發過程中構建某新的軟件項目的警報數據庫時,通常缺少足夠的歷史數據,或者能夠用于訓練模型的警報數據較為稀疏,導致無法基于同項目警報自動確認技術構建警報數據庫,此時可以采用State2Vec方法,利用歷史項目的警報數據庫構建該新項目的警報數據庫。

在接下來的工作中,會在更多實際的工程上構建缺陷數據庫,用新的數據集檢驗本文方法的可行性,以及該方法在新的數據集上是否依舊存在較好的泛化能力。因為大多數的程序語言都有語法樹和控制流圖,也會將該方法拓展到其他程序語言上。另外,未來也考慮構建結構更復雜的神經網絡模型,比如將循環神經網絡與卷積神經網絡(CNN,convolutional neural network)結合,使模型能夠更好的學習代碼中的語義特征,從而達到更好的分類效果。

猜你喜歡
工程方法模型
一半模型
重要模型『一線三等角』
重尾非線性自回歸模型自加權M-估計的漸近分布
3D打印中的模型分割與打包
子午工程
太空探索(2016年6期)2016-07-10 12:09:06
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
工程
捕魚
工程
主站蜘蛛池模板: 91麻豆国产在线| 狠狠亚洲五月天| 久996视频精品免费观看| 国产v欧美v日韩v综合精品| 手机在线看片不卡中文字幕| 久久精品中文字幕免费| 亚洲成av人无码综合在线观看| 香蕉eeww99国产在线观看| 中文字幕亚洲电影| 亚洲福利视频一区二区| 欧美区在线播放| 国产地址二永久伊甸园| 全午夜免费一级毛片| 欧美成一级| 婷五月综合| 免费99精品国产自在现线| 精品国产乱码久久久久久一区二区| 国产精品欧美日本韩免费一区二区三区不卡 | 亚洲中文字幕日产无码2021| 波多野结衣中文字幕一区| 日韩欧美中文字幕在线精品| 国产人成午夜免费看| 欧美另类精品一区二区三区| 成人韩免费网站| 国产毛片久久国产| 欧洲日本亚洲中文字幕| 青青操视频在线| 伊人久久久久久久久久| 午夜福利网址| 午夜国产小视频| 手机看片1024久久精品你懂的| 一区二区影院| 天堂在线视频精品| 麻豆AV网站免费进入| 日韩免费毛片视频| 亚洲欧美日韩动漫| 激情無極限的亚洲一区免费| 欧美成人二区| 亚洲制服中文字幕一区二区| 天堂网亚洲系列亚洲系列| 日韩无码黄色网站| 日韩亚洲综合在线| 久久精品中文字幕少妇| 欧美黑人欧美精品刺激| 国产Av无码精品色午夜| 亚洲日韩高清在线亚洲专区| 亚洲精品在线观看91| 色综合天天操| 亚洲第一黄色网址| 伊人婷婷色香五月综合缴缴情| 国产杨幂丝袜av在线播放| 中文天堂在线视频| 国产91丝袜在线播放动漫| 99久久人妻精品免费二区| 香蕉色综合| 99国产精品国产| 97视频在线观看免费视频| 制服丝袜在线视频香蕉| 真实国产精品vr专区| 亚洲国产成人自拍| 久久午夜影院| 国产精品美女自慰喷水| 综合天天色| 亚洲男人在线| 国产又色又爽又黄| 幺女国产一级毛片| 无码久看视频| 自拍亚洲欧美精品| 18禁影院亚洲专区| 亚洲综合极品香蕉久久网| 高潮毛片无遮挡高清视频播放 | 久久精品人人做人人爽97| 99热最新网址| 亚洲AV无码一区二区三区牲色| 四虎影视无码永久免费观看| 欧美精品二区| a免费毛片在线播放| 欧美A级V片在线观看| 亚洲三级a| 精品国产自在现线看久久| 91麻豆国产视频| 免费无码AV片在线观看中文|