亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于深度學(xué)習(xí)的軟件缺陷預(yù)測模型①

        2021-01-22 05:41:12邵培南
        關(guān)鍵詞:軟件缺陷源代碼度量

        陳 凱,邵培南

        (中國電子科技集團(tuán)第三十二研究所,上海 201808)

        1 引言

        隨著現(xiàn)代軟件的不斷發(fā)展,軟件可靠性已經(jīng)成為評價軟件的關(guān)鍵因素.軟件規(guī)模的不斷擴(kuò)展和功能的日益增強(qiáng),軟件復(fù)雜度不斷上升,軟件缺陷出現(xiàn)的概率也不斷上升,從而導(dǎo)致軟件的失敗.為了幫助開發(fā)人員和測試人員及時找到軟件缺陷,軟件缺陷預(yù)測已經(jīng)成為軟件工程領(lǐng)域、數(shù)據(jù)挖掘領(lǐng)域的研究方向之一.軟件缺陷預(yù)測技術(shù)可以在一定程度上預(yù)測軟件中是否存在著缺陷,以此幫助相關(guān)團(tuán)隊(duì)快速了解軟件的整體情況和質(zhì)量,制定相關(guān)策略測試和改善軟件,提高軟件的可靠性和穩(wěn)定性.

        基于此,許多研究人員前赴后繼潛心研究軟件缺陷預(yù)測技術(shù)并嘗試通過機(jī)器學(xué)習(xí)的方法來檢測軟件中是否存在著缺陷.傳統(tǒng)軟件缺陷預(yù)測[1]是以手工獲取軟件度量特征的基礎(chǔ)進(jìn)行分類學(xué)習(xí),而特征選擇的方法直接影響軟件缺陷預(yù)測的準(zhǔn)確性和穩(wěn)定性.而在以往的軟件缺陷預(yù)測研究中,通常使用靜態(tài)軟件度量作為代碼的特征,靜態(tài)軟件度量[1]主要包括以下幾種方法:

        (1)代碼度量

        代碼度量是最直接、應(yīng)用最普遍的度量方式.通過對源代碼相關(guān)指標(biāo)的簡單計(jì)數(shù)得到度量值.度量包括總行數(shù)、代碼行數(shù)目、注釋行數(shù)目、空白行數(shù)目和代碼及注釋行總數(shù)目等,通過對總行數(shù)、代碼行數(shù)、注釋行數(shù)等不同的處理方式,度量結(jié)果就會不同.

        (2)McCabe 度量

        McCabe 度量是一種基于程序流程圖的復(fù)雜性度量方法,度量的是程序的復(fù)雜性,主要包括圈復(fù)雜度、基本復(fù)雜度、設(shè)計(jì)復(fù)雜度等.

        (3)Halstead 度量

        Halstead 度量考慮了程序中出現(xiàn)的操作數(shù)和運(yùn)算符,具體有程序長度、操作符出現(xiàn)的總數(shù)量、操作數(shù)出現(xiàn)的總數(shù)量、程序容量、程序難度、程序級別、程序工作量等.

        (4)CK 度量

        CK 度量是面向?qū)ο蟪绦虻亩攘?具體包括類方法復(fù)雜度帶權(quán)和(WMC)、類在繼承樹中的最大深度(DIT)、繼承樹中類的直接子類個數(shù)(NOC)等.

        根據(jù)代碼的實(shí)際情況,選擇合適的度量方法,或在各種度量方法中選擇合適的指標(biāo)組成新的特征集合,然后根據(jù)從歷史軟件源碼中提取出來的特征構(gòu)建如邏輯回歸、隨機(jī)森林、支持向量機(jī)等分類器,對新版本的軟件源碼進(jìn)行軟件缺陷預(yù)測,以此來幫助編程人員找到可能包含缺陷的部分.

        然而,傳統(tǒng)軟件缺陷預(yù)測方法使用靜態(tài)代碼度量作為特征,未能充分考慮潛藏在代碼中的語義特征,這無疑會對缺陷預(yù)測造成影響.而抽象語法樹能夠表達(dá)出源代碼的語義,已經(jīng)有相關(guān)的論文[2]證實(shí)了其可以用于源碼的完整性和缺陷的檢測.抽象語法樹是基于源代碼采用樹狀結(jié)構(gòu)來描述代碼上下文之間的關(guān)系,其中包含了程序模塊的語法結(jié)構(gòu)和語義信息.從抽象語法樹中提取表征用于軟件缺陷預(yù)測,可以充分考慮到代碼的語法語義特征.

        近年來,深度學(xué)習(xí)作為數(shù)據(jù)挖掘的技術(shù)之一得到了充足的研究.在軟件缺陷預(yù)測領(lǐng)域,深度學(xué)習(xí)同樣可以用于挖掘代碼中隱含的特征.Iqbal 等[3]介紹了用靜態(tài)度量的方法獲得特征,然后用4 種方法對特征進(jìn)行投票,選取出最合適的特征,然后構(gòu)建一個多層感知機(jī)(MLP)網(wǎng)絡(luò)來對樣本進(jìn)行學(xué)習(xí)分類.Wang 等[2]介紹了用多層受限玻爾茲曼機(jī)疊加而成的深度置信網(wǎng)絡(luò)(DBN),自動提取源代碼中的語法語義特征,并用提取出來的特征構(gòu)建軟件缺陷預(yù)測模型.Li 等[4]利用卷積神經(jīng)網(wǎng)絡(luò)(CNN)提取源碼特征后,將其與傳統(tǒng)靜態(tài)特征進(jìn)行連結(jié),構(gòu)建邏輯回歸分類器來對軟件缺陷進(jìn)行預(yù)測.然而,這些方法依然存在著數(shù)據(jù)挖掘不足的問題,所使用的網(wǎng)絡(luò)大多是簡單模型,CNN 也僅使用單層卷積層.基于這種情況,本文以抽象語法樹為特征來源,提出了一種卷積神經(jīng)網(wǎng)路模型來進(jìn)行軟件缺陷預(yù)測,并利用Promise 官網(wǎng)上的歷史工程數(shù)據(jù)來對模型進(jìn)行實(shí)驗(yàn),取得了較好的結(jié)果.

        2 基于抽象語法樹的代碼表征

        能否從源代碼中提取到合適的特征,是影響軟件缺陷預(yù)測性能的一個關(guān)鍵因素.在過去的研究中,常常用靜態(tài)軟件度量的方法來處理源代碼,忽視了潛藏在代碼中的語義特征.而本文使用了一種基于抽象語法樹的方法來獲取代碼表征.

        2.1 抽象語法樹

        抽象語法樹(Abstract Syntax Tree,AST)是源代碼關(guān)于抽象語法結(jié)構(gòu)的樹狀表示,源代碼中的每一種結(jié)構(gòu)都表征為樹上的結(jié)點(diǎn).之所以說是抽象的,是因?yàn)锳ST 并不會將源代碼的細(xì)節(jié)表示出來,例如,一串For語句,在結(jié)點(diǎn)中就記錄為“ForStatement”以及一些關(guān)鍵要素,而具體循環(huán)的內(nèi)容并不會被記錄下來.另外,抽象語法樹并不依賴源代碼語言的語法,也就是說,語法分析時所采用的是上下文無關(guān)文法,因?yàn)樵趯懳姆〞r,通常會對文法進(jìn)行等價的轉(zhuǎn)換(消除左遞歸,二義性,回溯等),這樣會在文法分析時引入一些冗余成分,對后續(xù)階段造成不好的影響.

        抽象語法樹能有效保存代碼的語法結(jié)構(gòu)和語義信息.如圖1所示,代碼a 和代碼b 十分相似,且有著幾乎一樣的靜態(tài)代碼度量,也就是說,他們有著幾乎一樣的特征,在特征空間中,它們的距離會非常小,用分類器分類的話,很有可能將兩份代碼歸為一類,但顯然代碼a 是沒有缺陷的,而代碼b 是有缺陷的,這就造成了錯誤的檢測結(jié)果.圖2展示兩份代碼的抽象語法樹,代碼a 的抽象語法樹比代碼b 的抽象算法樹多了兩個結(jié)點(diǎn),在提取表征向量時,兩份代碼在序列上就會有一定的區(qū)別,而這種區(qū)別就可以方便模型區(qū)分兩種代碼,得到更好的軟件缺陷預(yù)測性能.

        圖1 抽象語法樹示例代碼

        2.2 提取表征向量

        本文使用了一款開源的Python 依賴包Javalang來對源代碼進(jìn)行解析,它提供了一個基于Java 語言規(guī)范的詞法分析器和解析器,可以構(gòu)造Java 源代碼的抽象語法樹.在得到源代碼的抽象語法樹后,按照深度優(yōu)先的順序來遍歷AST 的所有節(jié)點(diǎn),然后主要選擇以下3 類結(jié)點(diǎn)作為抽象語法樹的表征向量元素:

        (1)表示為方法調(diào)用的結(jié)點(diǎn)

        (2)表示為聲明的結(jié)點(diǎn),包括方法聲明、類聲明、接口聲明等

        (3)控制流結(jié)點(diǎn),譬如說條件分支、循環(huán)控制等

        根據(jù)結(jié)點(diǎn)的類型,我們選取不同的要素來作為結(jié)點(diǎn)的特征.對于第1 類結(jié)點(diǎn),我們使用結(jié)點(diǎn)對應(yīng)的方法名來作為結(jié)點(diǎn)在特征向量中的標(biāo)識;第2 類結(jié)點(diǎn)選擇結(jié)點(diǎn)的名稱來作為標(biāo)識;第3 類控制流結(jié)點(diǎn)選擇節(jié)點(diǎn)的類型來作為標(biāo)識,比如表征條件分支的結(jié)點(diǎn),記錄結(jié)點(diǎn)的類型名“IfStatement”作為該結(jié)點(diǎn)的特征.表1列出了本文所使用的所有的結(jié)點(diǎn)類型.

        由此,我們可以得到一棵樹即一份代碼的表征向量.

        2.3 整數(shù)向量映射

        從抽象語法樹中獲得的表征向量不能直接用于神經(jīng)網(wǎng)絡(luò),訓(xùn)練神經(jīng)網(wǎng)絡(luò)需要輸入整數(shù)向量,所以我們需要在獲得的特征和整數(shù)之間建立一個映射,將表征向量轉(zhuǎn)換為整數(shù)向量.

        為了在獲得的特征和整數(shù)之間建立映射,我們建立一個字典[2]將表征和正整數(shù)一一對應(yīng)起來.將訓(xùn)練樣本和測試樣本中的代碼全部提取為表征向量后,統(tǒng)計(jì)各個特征的頻率,將其轉(zhuǎn)換為對應(yīng)的整數(shù).假設(shè)不同的特征的數(shù)量是m,每個特征都有著對應(yīng)的整數(shù),那么正整數(shù)的范圍也是1~m.具體的,在從訓(xùn)練樣本和測試樣本中提取表征向量后,首先,計(jì)算各個特征在所有樣本中出現(xiàn)的頻數(shù),并且根據(jù)頻數(shù)將它們排列;然后,為排列好的特征建立一個序列字典,頻數(shù)高的特征排在前面,這意味著出現(xiàn)頻率越高的特征對應(yīng)的正整數(shù)越?。粯?gòu)建完字典后,就可以將之前的表征向量轉(zhuǎn)化為整數(shù)向量.但因?yàn)樯窠?jīng)網(wǎng)絡(luò)的輸入要求有固定的長度,為了避免向量過于稀疏,選擇適當(dāng)?shù)南蛄块L度對向量進(jìn)行處理.如果一個向量的長度小于設(shè)定的長度,那么我們就在向量末尾添0,而0 在神經(jīng)網(wǎng)絡(luò)的計(jì)算過程中沒有意義;如果一個向量的長度大于設(shè)定的長度,那就在向量中尋找最大的正整數(shù)將它刪去,因?yàn)樽畲蟮恼麛?shù)對應(yīng)的是頻數(shù)最小的特征,循環(huán)往復(fù),直到向量的長度符合設(shè)定的長度.由此,我們得到了每份源代碼對應(yīng)的整數(shù)向量.圖3給出了從源代碼到整數(shù)向量的全部流程.

        圖2 示例代碼的抽象語法樹

        表1 使用到的所有結(jié)點(diǎn)類型

        圖3 從源代碼到得到整數(shù)向量的流程圖(①從源代碼中解析出抽象語法樹;②從抽象語法樹中提取表征向量;③根據(jù)提取的特征構(gòu)建字典;④將表征向量映射為整數(shù)向量)

        3 卷積神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)與結(jié)構(gòu)

        卷積神經(jīng)網(wǎng)絡(luò)是一種含卷積計(jì)算且具有深度結(jié)構(gòu)的前饋式神經(jīng)網(wǎng)絡(luò),具有表征學(xué)習(xí)、深度挖掘數(shù)據(jù)的能力.卷積神經(jīng)網(wǎng)絡(luò)已經(jīng)被證實(shí)在圖像處理、語音識別、自然語言處理等領(lǐng)域有著不錯的性能表現(xiàn).而且,卷積神經(jīng)網(wǎng)絡(luò)的隱含層內(nèi)的卷積核參數(shù)共享、層與層之間的稀疏連接使得卷積神經(jīng)網(wǎng)絡(luò)能夠以較小的計(jì)算量對格點(diǎn)化特征.

        3.1 數(shù)據(jù)預(yù)處理

        在軟件缺陷預(yù)測領(lǐng)域,數(shù)據(jù)分類不均衡問題是普遍存在的,如何處理這種不均衡問題也是具有挑戰(zhàn)性的.在獲得的數(shù)據(jù)集中,往往有缺陷的樣本數(shù)是要少于沒有缺陷的樣本數(shù),如果直接用這樣的樣本對模型進(jìn)行訓(xùn)練,訓(xùn)練出來的模型往往會對樣本數(shù)量較少的類別的識別能力較弱,在軟件缺陷預(yù)測時,模型便會偏向沒有缺陷的結(jié)果.因此,我們需要對數(shù)據(jù)進(jìn)行預(yù)處理以彌補(bǔ)數(shù)據(jù)集分類不均衡帶來的偏差.

        一般而言,針對數(shù)據(jù)集中存在的樣本分類不均衡問題,通常采用過采樣或欠采樣的方法來使得數(shù)據(jù)集中各類的樣本數(shù)量達(dá)到均衡.欠采樣是從多數(shù)樣本中隨機(jī)選擇和少數(shù)樣本一樣數(shù)量的樣本,以此構(gòu)建分類平衡的數(shù)據(jù)樣本,但這樣會大大減少數(shù)據(jù)的訓(xùn)練樣本,造成信息的損失,會造成模型的欠擬合,因此我們選擇過采樣的方法來處理分類不均衡問題.由于AST 數(shù)值向量并非是特征向量,所以類似像SMOTE[5]等基于樣本間的歐式距離來生成新樣本的分類不均衡處理方法并不一定適用.因此,在這里,我們采取簡單的隨機(jī)過采樣的方法來對數(shù)據(jù)進(jìn)行預(yù)處理,在少數(shù)樣本即有缺陷的樣本中隨機(jī)選擇進(jìn)行復(fù)制,使得有缺陷的樣本數(shù)量和沒有缺陷的樣本數(shù)量保持一致,以此保證數(shù)據(jù)類別間的均衡.具體的算法如算法1 所示.

        算法1.隨機(jī)過采樣算法輸入:分類不均衡的數(shù)據(jù)集D輸出:分類均衡的數(shù)據(jù)集D'(1)初始化已復(fù)制樣本集合C 為空集.(2)將數(shù)據(jù)集D 復(fù)制,組成數(shù)據(jù)集D'.(3)在數(shù)據(jù)集D 中篩選出有缺陷的樣本集d.(4)在數(shù)據(jù)集d 中隨機(jī)選擇樣本a,如果a 不在已復(fù)制樣本集合C 中,將樣本a 加入數(shù)據(jù)集D'和已復(fù)制樣本集合C;如果已復(fù)制樣本集C 的大小和d 一樣,則清空C.(5)重復(fù)步驟(4)直至數(shù)據(jù)集D'中無缺陷樣本和有缺陷樣本數(shù)量保持一致.

        3.2 網(wǎng)絡(luò)結(jié)構(gòu)

        首先介紹所要構(gòu)建的網(wǎng)絡(luò)中用到的基礎(chǔ)卷積塊Inception 塊[6],這個卷積模塊的結(jié)構(gòu)如圖4所示.

        圖4 Inception 塊

        如圖4所示,Inception 塊含有4 條并行的網(wǎng)絡(luò)線路.前三條線路所使用的卷積核大小分別是1×1、3×3、5×5,以用來抽取不同空間尺寸下的信息,第2,3 層會先對輸入做1×1 卷積操作以減少輸入通道數(shù),以降低模型復(fù)雜度.第4 條線路會先使用3×3 最大池化層,然后接一個1×1 卷積層來改變通道數(shù).并且,根據(jù)4 條線路的具體情況,設(shè)置合適的填充來使得輸入和輸出的高和寬一致.最后將每條線路的輸出在通道維上連結(jié),以此完成卷積的功能,將結(jié)果輸入到下一層.相較于普通的卷積層,Inception 塊因?yàn)槭褂昧? 個卷積層和1 個池化層,能夠更深層次的挖掘數(shù)據(jù)中的特征,以此幫助模型進(jìn)行更好的學(xué)習(xí)分類.

        為了能夠更深層次地挖掘出潛藏在向量中的語法語義特征,本文基于GoogLeNet[7]設(shè)計(jì)了一個卷積神經(jīng)網(wǎng)絡(luò),GoogLeNet 最初設(shè)計(jì)出來是用來進(jìn)行圖像處理的,在ImageNet 圖像識別挑戰(zhàn)賽中大放異彩,GoogLeNet 串聯(lián)了多個Inception 塊來對圖像進(jìn)行深度挖掘,以此進(jìn)行更好的分類.本文基于GoogLeNet 設(shè)計(jì)一個卷積神經(jīng)網(wǎng)絡(luò),具體的網(wǎng)絡(luò)結(jié)構(gòu)如圖5所示,除了最后的輸出層使用Sigmoid 函數(shù)作為激活函數(shù)外,其他層的激活函數(shù)均使用ReLU 函數(shù),并且根據(jù)實(shí)際情況調(diào)整網(wǎng)絡(luò)中各個層的參數(shù),網(wǎng)絡(luò)整體分為主要分為以下3 個部分:

        (1)輸入層:輸入層主要是一個嵌入層[8],嵌入層的主要作用是將輸入的整數(shù)向量中的整數(shù)元素轉(zhuǎn)換成整數(shù)向量,使得向量可以進(jìn)行卷積操作.嵌入層有兩個重要參數(shù):嵌入層字典的大小(num_embeddings)和每個產(chǎn)出向量的大小(embedding_dim).這里,本文將num_embeddings 設(shè)置為2.3 節(jié)構(gòu)建的字典中所含有的特征的數(shù)量,將embedding_dim 設(shè)置為2.3 節(jié)中通過映射得到的整數(shù)向量的長度.將長度為n的整數(shù)向量輸入到嵌入層,嵌入層將給出一個n×n的矩陣向量.并且,為了提高內(nèi)存利用率和訓(xùn)練模型的速度,本文選擇分批量進(jìn)行訓(xùn)練,設(shè)置每次訓(xùn)練樣本個數(shù)(批尺寸,Batch_Size)為16,即一次輸入16 個樣本進(jìn)行訓(xùn)練.

        (2)卷積部分:卷積部分是網(wǎng)絡(luò)的主體部分,共由5 個模塊組成.模塊與模塊之間使用步幅為2 的3×3 最大池化層來減小輸出高度.第1 個模塊包含3 層的3×3 卷積層;第2 個模塊使用2 個卷積層,首先接一個64 通道的1×1 卷積層,然后接了一個將通道數(shù)擴(kuò)大3 倍的3×3 卷積層;第3 個模塊串聯(lián)了2 個完整的Inception 塊;第4 模塊串聯(lián)了5 個Inception 塊;第5 模塊串聯(lián)了2 個Inception 塊.通過多層的不同空間尺寸的卷積操作,來深度挖掘數(shù)據(jù)中的特征,從而進(jìn)行性能更好穩(wěn)定性更高的學(xué)習(xí)分類.

        (3)輸出層:輸出層主要是根據(jù)之前卷積層輸出的結(jié)果來輸出分類結(jié)果.首先使用一個全局平均池化層來將每個通道的高和寬都變成1,然后接上一個全連接層,輸出通道數(shù)為標(biāo)簽類別數(shù),最后,連結(jié)一個Sigmoid函數(shù)構(gòu)建邏輯回歸分類器來計(jì)算程序代碼的缺陷概率,從而得到分類結(jié)果.

        圖5 網(wǎng)絡(luò)結(jié)構(gòu)圖

        3.3 模型優(yōu)化

        之前,我們在數(shù)據(jù)預(yù)處理時采用隨機(jī)過采樣的方法來解決數(shù)據(jù)分類不均衡問題,提升了模型的泛化能力,但是這樣也有一定的過擬合的風(fēng)險(xiǎn),因此我們選擇使用丟棄法(Dropout)[9],通過隨機(jī)丟棄一部分神經(jīng)元來避免過擬合.在訓(xùn)練過程中,隨機(jī)丟棄一部分隱藏層神經(jīng)單元,即所有神經(jīng)單元都有可能被清零,這樣就減少了神經(jīng)元之間的依賴性,輸出層的計(jì)算也無法過度依賴任何一個隱含層神經(jīng)元,從而在訓(xùn)練模型時起到正則化的作用,用來應(yīng)對過擬合.在測試模型時,為了拿到更加準(zhǔn)確的結(jié)果,我們不使用丟棄法.

        另外,在訓(xùn)練模型的過程中,為了得到最優(yōu)的模型參數(shù),我們需要根據(jù)損失函數(shù)的梯度不斷地對參數(shù)進(jìn)行迭代,這里我們選擇使用Adam[10]優(yōu)化器來更新參數(shù).Adam 算法結(jié)合了AdaGrad 和RMSProp 兩種優(yōu)化算法的優(yōu)點(diǎn)[10],能夠自動調(diào)整學(xué)習(xí)率,并且參數(shù)的更新不受梯度的伸縮變換影響.Adam 算法能夠從梯度均值及梯度平方兩個角度進(jìn)行自適應(yīng)地調(diào)節(jié),綜合考慮梯度的一階矩估計(jì)和二階矩估計(jì)計(jì)算出更新步長,而不是直接由當(dāng)前梯度決定.

        4 實(shí)驗(yàn)與結(jié)果分析

        4.1 數(shù)據(jù)集

        為了評估訓(xùn)練出來的模型的性能,本文從Promise[11]上下載了5 個工程,總共11 個項(xiàng)目,組成6 組軟件缺陷預(yù)測任務(wù),用于模型的測試.在同一軟件工程中,將舊版本的工程項(xiàng)目作為訓(xùn)練集,將新版本的工程項(xiàng)目作為測試集,根據(jù)測試結(jié)果來評估模型的預(yù)測能力.例如,對于Camel 工程,我們將Camel 1.4 版本的工程代碼用來訓(xùn)練模型,然后用Camel 1.6 版本的代碼用來測試模型.表2列出了測試時所使用的軟件項(xiàng)目的基本信息.

        表2 測試使用的工程信息

        另外,在數(shù)據(jù)集中,每個項(xiàng)目不僅含有工程的源代碼,還統(tǒng)計(jì)了源代碼的靜態(tài)代碼度量和缺陷注釋,度量方法主要是針對面向?qū)ο缶幊痰撵o態(tài)代碼度量,具體的指標(biāo)內(nèi)容如表3所示.這些指標(biāo)可以用于其他的軟件缺陷預(yù)測方法,來和本文模型進(jìn)行比較.

        表3 數(shù)據(jù)集中所使用的20 個靜態(tài)代碼度量

        4.2 評估指標(biāo)

        本文采用AUC[12]和F1-measure[13]這兩個指標(biāo)來評估模型性能,AUC 主要用來評估模型的識別缺陷的能力,而F1-measure 主要用來評估模型的穩(wěn)定性.

        在二分類的學(xué)習(xí)預(yù)測過程中,根據(jù)分類結(jié)果可以將其分為4 類:(1)若一個實(shí)例為正類且被預(yù)測為正類,即為真正類(True Positive,TP);(2)若一個實(shí)例為正類但被預(yù)測負(fù)類,即為假負(fù)類(False Negative,FN);(3)若一個實(shí)例為負(fù)類但被預(yù)測為正類,即為假正類(False Positive,FP);(4)若一個實(shí)例為負(fù)類且被預(yù)測為負(fù)類,即為真負(fù)類(True Negative,TN).基于這4 個數(shù)據(jù),可以得到擊中概率(TPR)和虛報(bào)概率(FPR),其計(jì)算公式如式(1)和式(2)所示:

        然后以FPR為橫軸,TPR為縱軸,就可以繪制出ROC 曲線,而ROC 曲線下的面積就是AUC.根據(jù)AUC 的定義,識別能力更好的模型對應(yīng)著更高的TPR和更低的FPR,所以有AUC 值越大的預(yù)測方法越好.

        F1-measure 是精確率(P)和召回率(R)的調(diào)和平均,其中精確率和召回率的計(jì)算公式如式(3)和式(4)所示:

        通常情況下,我們希望精確率越高越好,召回率也越高越好,但事實(shí)上這兩個指標(biāo)在某些情況下是矛盾的,而F1-measure 則綜合考慮了這兩個指標(biāo).F1-measure的計(jì)算公式如式(5)所示.

        另外,用于評估軟件缺陷預(yù)測模型的指標(biāo)還有很多,例如MCC[14]和G-mean[15],MCC 考慮所有的有缺陷數(shù)據(jù)和無缺陷數(shù)據(jù)來綜合評估預(yù)測結(jié)果和真實(shí)結(jié)果之間的關(guān)系,G-mean 是在數(shù)據(jù)不平衡時十分有參考價值的一個指標(biāo),但因?yàn)锳UC 和F1-measure 綜合評估了模型的準(zhǔn)確性和穩(wěn)定性,具有廣泛的代表意義.

        4.3 實(shí)驗(yàn)方法

        為了能夠正確估計(jì)模型對于軟件缺陷預(yù)測的性能,將本文提出的模型與以下3 種方法進(jìn)行比較:

        (1)靜態(tài)代碼度量+邏輯回歸(LR):以數(shù)據(jù)集中提供的20 個靜態(tài)代碼度量作為代碼特征,并用邏輯回歸的方法進(jìn)行分類

        (2)深度置信網(wǎng)絡(luò)+邏輯回歸(DBN)[2]:使用深度置信網(wǎng)絡(luò)從源代碼中提取特征,然后使用邏輯回歸的方法進(jìn)行分類

        (3)卷積神經(jīng)網(wǎng)絡(luò)+邏輯回歸(CNN)[4]:利用單層卷積神經(jīng)網(wǎng)絡(luò)對源代碼進(jìn)行特征提取,然后使用邏輯回歸分類器得到分類結(jié)果

        對于傳統(tǒng)軟件缺陷預(yù)測算法,因?yàn)槭褂玫氖?0 個靜態(tài)代碼度量所構(gòu)成的特征向量,所以在數(shù)據(jù)預(yù)處理時,可以使用SMOTE 方法進(jìn)行過采樣來處理數(shù)據(jù)集分類不均衡問題;而對于DBN、CNN 和本文模型,只能簡單地采用隨機(jī)過采樣的方法來對數(shù)據(jù)進(jìn)行預(yù)處理.

        本文使用Python 環(huán)境以及深度學(xué)習(xí)框架PyTorch來實(shí)現(xiàn)本文提出的模型,所有的實(shí)驗(yàn)均在一臺帶有NVIDIA GTX 1080 的Linux 服務(wù)器上運(yùn)行.此外,因?yàn)殡S機(jī)過采樣和丟棄法都具有一定的隨機(jī)性,因此實(shí)驗(yàn)中每個方法都執(zhí)行10 次,取平均值來進(jìn)行模型性能的比較.

        4.4 實(shí)驗(yàn)結(jié)果及分析

        本文采用AUC 和F1-measure 來比較4 種方法在6 組預(yù)測任務(wù)上的性能.表4和表5分別記錄了這4 種方法關(guān)于AUC 和F1-measure 的實(shí)驗(yàn)結(jié)果,每次測試任務(wù)的表現(xiàn)最好的已在表格中加粗.

        表4 4 種方法關(guān)于6 項(xiàng)測試任務(wù)的AUC

        表5 4 種方法關(guān)于6 項(xiàng)測試任務(wù)的F1-measure

        表3和表4分別列出了4 種方法關(guān)于每個測試任務(wù)的AUC 值和F1-measure.AUC 評估了模型分類的準(zhǔn)確性,而F1-measure 評估了模型的穩(wěn)定性.從表3和表4中我們可以看到,總體而言,本文提出的模型在軟件缺陷預(yù)測性能方面和模型穩(wěn)定性明顯優(yōu)于LR、DBN和CNN 的.而本文模型的AUC 和F1-measure 的均值也都高于其他方法,這也證實(shí)了本文提出模型的合理性和可行性.此外,從兩張表中我們可以看出,相較于傳統(tǒng)的軟件缺陷預(yù)測方法,應(yīng)用深度學(xué)習(xí)方法在軟件缺陷預(yù)測性能和模型穩(wěn)定性上都得到一定的提高.這也證實(shí)了,在軟件缺陷預(yù)測性能方面,深度學(xué)習(xí)方法優(yōu)于傳統(tǒng)的機(jī)器學(xué)習(xí)方法.

        綜上所述,針對傳統(tǒng)軟件缺陷預(yù)測方法中對源代碼語義特征挖掘不足的問題,本文測試實(shí)驗(yàn)結(jié)果表明,在軟件缺陷預(yù)測領(lǐng)域,相比于傳統(tǒng)的預(yù)測方法,應(yīng)用深度學(xué)習(xí)方法得到了一定的提高.而本文也根據(jù)前人的工作,提出了用多層卷積神經(jīng)網(wǎng)絡(luò)對基于抽象語法樹得到的表征向量進(jìn)行分類學(xué)習(xí),有效提高了缺陷預(yù)測的準(zhǔn)確性.

        5 結(jié)束語

        本文針對傳統(tǒng)軟件缺陷預(yù)測方法應(yīng)用靜態(tài)代碼度量而忽視代碼語義的缺點(diǎn),從代碼的抽象語法樹中提取出向量,再利用卷積神經(jīng)網(wǎng)絡(luò)深度挖掘數(shù)據(jù)的能力挖掘代碼中的語法語義特征,從而對軟件缺陷進(jìn)行學(xué)習(xí)分類.并且,通過與LR、DBN、MLP 方法的實(shí)驗(yàn)比較,由AUC 和F1_measure 兩個指標(biāo)我們可以看出本文提出的模型在軟件缺陷預(yù)測性能上得到了一定的提高.然而,關(guān)于數(shù)據(jù)集分類不均衡、模型優(yōu)化等問題,本文的處理方法相對粗糙,這也是未來需要繼續(xù)研究的方向.

        猜你喜歡
        軟件缺陷源代碼度量
        有趣的度量
        人工智能下復(fù)雜軟件源代碼缺陷精準(zhǔn)校正
        模糊度量空間的強(qiáng)嵌入
        基于TXL的源代碼插樁技術(shù)研究
        基于源文件可疑度的靜態(tài)軟件缺陷檢測方法研究
        迷向表示分為6個不可約直和的旗流形上不變愛因斯坦度量
        基于NPE-SVM的軟件缺陷預(yù)測模型
        軟件源代碼非公知性司法鑒定方法探析
        開源程序的軟件缺陷分布特征的量化分析研究
        揭秘龍湖產(chǎn)品“源代碼”
        日韩秘 无码一区二区三区| 久久96国产精品久久久| 久久www色情成人免费观看| 乱码一二区在线亚洲| 免费福利视频二区三区 | 午夜国产在线精彩自拍视频| 在线观看一区二区三区在线观看| 国产av一区二区三区无码野战| 无码人妻av一区二区三区蜜臀| 久久精品国产99久久丝袜| 中文字幕国产精品专区| 日韩av精品视频在线观看| 老妇女性较大毛片| 最新亚洲人AV日韩一区二区| 亚洲图文一区二区三区四区| 丰满人妻一区二区三区视频| 99精品一区二区三区无码吞精| 亚洲AV无码精品色欲av| 人妖与人妖免费黄色片| 久久国产劲爆∧v内射| 亚洲国产长腿丝袜av天堂| 狠狠亚洲婷婷综合色香五月| 日韩精品人妻视频一区二区三区| 十八禁视频网站在线观看| 爽爽午夜影视窝窝看片| 2020最新国产激情| 99在线视频这里只有精品伊人| 97久久草草超级碰碰碰| 国产成人精品精品欧美| 精品女同一区二区三区免费播放 | 加勒比hezyo黑人专区| 日本少妇被黑人xxxxx| 国产精品女同一区二区久久| 久久国产精品免费一区二区三区| 久久99精品久久久久久噜噜 | 无码国产日韩精品一区二区| 中文字幕丰满人妻被公强| 人禽杂交18禁网站免费| 在线va免费看成| 青青草极品视频在线播放| 夜夜骚久久激情亚洲精品|