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

基于集成學(xué)習(xí)的忽略成員的方法檢測(cè)策略

2023-10-12 01:10:10邊奕心王露穎
關(guān)鍵詞:特征文本檢測(cè)

邊奕心,王露穎,趙 松,朱 曉

(哈爾濱師范大學(xué) 計(jì)算機(jī)科學(xué)與信息工程學(xué)院,黑龍江 哈爾濱 150025)

0 引 言

由于移動(dòng)通信技術(shù)的迅猛發(fā)展,移動(dòng)應(yīng)用程序已經(jīng)成為軟件行業(yè)的發(fā)展主體。而代碼異味不僅存在于傳統(tǒng)桌面應(yīng)用程序中,也存在于Android應(yīng)用程序中。由于Android應(yīng)用程序與傳統(tǒng)桌面應(yīng)用程序在內(nèi)存、CPU、網(wǎng)絡(luò)、電池以及程序編寫(xiě)等方面的諸多差異,使得Android應(yīng)用程序中不僅存在傳統(tǒng)面向?qū)ο蟮拇a異味,還存在Android特有代碼異味(Android-specific code smells)。Android特有代碼異味的存在對(duì)Android應(yīng)用程序產(chǎn)生了諸多負(fù)面影響,比如能耗、安全性、穩(wěn)定性、內(nèi)存和啟用時(shí)間等,極大降低了用戶體驗(yàn)。隨著機(jī)器學(xué)習(xí)技術(shù)的發(fā)展,近年來(lái)很多學(xué)者嘗試使用不同的機(jī)器學(xué)習(xí)方法來(lái)檢測(cè)面向?qū)ο蟮拇a異味,并取得了很好的效果[1-7]。然而,目前還沒(méi)有使用機(jī)器學(xué)習(xí)算法來(lái)檢測(cè)Android特有代碼異味的相關(guān)研究。

為了檢驗(yàn)機(jī)器學(xué)習(xí)模型是否可用于檢測(cè)Android特有代碼異味,本文提出了基于集成學(xué)習(xí)的檢測(cè)策略。該策略將代碼度量與程序文本信息相結(jié)合作為特征集,避免模型受限于度量信息,無(wú)法學(xué)習(xí)到度量之外的程序特征,提高了單一模型的學(xué)習(xí)能力和泛化能力。此外,為了快速、準(zhǔn)確獲得機(jī)器學(xué)習(xí)所需的大量標(biāo)簽數(shù)據(jù),提出了一種基于Android項(xiàng)目構(gòu)建正負(fù)樣本的工具。能夠自動(dòng)生成機(jī)器學(xué)習(xí)模型需要的大量標(biāo)簽數(shù)據(jù)。

1 相關(guān)工作

1.1 忽略成員的方法

忽略成員的方法(member ignoring method,MIM)是指某個(gè)類中的方法,該方法即非空方法,也非靜態(tài)方法,但該方法沒(méi)有訪問(wèn)所在類的任何屬性[8]。MIM的存在對(duì)Android應(yīng)用程序有諸多負(fù)面影響,比如,增加程序的能耗,降低程序的可維護(hù)性等[8]。

迄今為止,研究人員提出了一些MIM的檢測(cè)方法。Rasool等[8]根據(jù)代碼異味的不同特征與定義選擇不同的度量,以預(yù)設(shè)閾值的方式為各個(gè)異味制定不同的檢測(cè)規(guī)則,來(lái)檢測(cè)異味MIM,并實(shí)現(xiàn)了工具DAAP。Nucci等[9]通過(guò)度量和簡(jiǎn)單的文本比較來(lái)檢測(cè)包括MIM在內(nèi)的15種Android特有代碼異味,并實(shí)現(xiàn)了工具aDoctor。隨后Iannone等[10]對(duì)aDoctor進(jìn)行了擴(kuò)展,使其能重構(gòu)包含MIM在內(nèi)的5種與能耗相關(guān)的異味。

綜上所述,目前的檢測(cè)方法主要采用傳統(tǒng)的程序靜態(tài)分析技術(shù),依賴于不同的代碼度量以及相應(yīng)的閾值檢測(cè)Android特有代碼異味。然而,基于規(guī)則的檢測(cè)方法,為找到合適每個(gè)度量的閾值,往往需要做大量的校準(zhǔn)工作。此外,同一規(guī)則可能與多種代碼異味相關(guān),這將導(dǎo)致不同檢測(cè)方法的檢測(cè)結(jié)果存在較大的差異。

1.2 使用機(jī)器學(xué)習(xí)方法檢測(cè)代碼異味

隨著機(jī)器學(xué)習(xí)技術(shù)的迅速發(fā)展,以及以Github開(kāi)源代碼庫(kù)為支撐的“Big Code”的出現(xiàn)[1],很多學(xué)者嘗試使用機(jī)器學(xué)習(xí)方法檢測(cè)代碼異味。目前已有一些研究使用機(jī)器學(xué)習(xí)方法檢測(cè)面向?qū)ο蟠a異味。王帆等[2]在C4.5算法中加入對(duì)稱不確定性,利用其計(jì)算條件屬性間的相關(guān)度,更新信息增益率的計(jì)算,提高代碼異味檢測(cè)精確度。艾成豪等[3]提出基于Stacking集成學(xué)習(xí)模型的代碼異味檢測(cè)方法,提高了單一模型的泛化能力。以上研究在訓(xùn)練模型時(shí),使用的特征集都是傳統(tǒng)的代碼度量。

近年來(lái),隨著深度學(xué)習(xí)模型在各個(gè)領(lǐng)域的卓越表現(xiàn),軟件工程領(lǐng)域的學(xué)者們開(kāi)始嘗試使用深度學(xué)習(xí)方法解決代碼異味檢測(cè)問(wèn)題。Liu等[4]提出一種基于卷積神經(jīng)網(wǎng)絡(luò)的檢測(cè)方法,用于檢測(cè)依戀情結(jié)異味。在此基礎(chǔ)上,Liu等[5]提出了一種基于卷積神經(jīng)網(wǎng)絡(luò)和長(zhǎng)短時(shí)記憶網(wǎng)絡(luò)的代碼異味檢測(cè)方法,檢測(cè)4種代碼異味。以上研究在訓(xùn)練模型時(shí),不僅使用了傳統(tǒng)的代碼度量,還結(jié)合了代碼文本信息(標(biāo)識(shí)符信息)。Sharma等[1]分別使用卷積神經(jīng)網(wǎng)絡(luò)、循環(huán)神經(jīng)網(wǎng)絡(luò)和自編碼器對(duì)4種代碼異味進(jìn)行檢測(cè)。Sharma認(rèn)為使用代碼度量作為模型的輸入,機(jī)器學(xué)習(xí)算法受限于度量信息,無(wú)法獲得度量以外的源代碼特征,影響模型的學(xué)習(xí)效果。此外,即便使用相同的度量,因?yàn)殚撝档牟煌瑢?dǎo)致不同檢測(cè)方法的檢測(cè)結(jié)果存在較大的差異。因此,Sharma沒(méi)有使用任何傳統(tǒng)的度量信息,而是使用程序文本信息作為模型的輸入,不同于Liu等[5]使用的文本信息(僅標(biāo)識(shí)符),Sharma將源代碼轉(zhuǎn)換為整數(shù),然后以數(shù)字向量形式表示程序的文本信息,這種文本信息涵蓋了程序的全部信息。

綜上所述,已有使用機(jī)器學(xué)習(xí)或者深度學(xué)習(xí)檢測(cè)代碼異味的方法都只關(guān)注面向?qū)ο蟠a異味。目前還沒(méi)有使用機(jī)器學(xué)習(xí)方法檢測(cè)Android特有代碼異味的相關(guān)研究。因此,為了檢驗(yàn)機(jī)器學(xué)習(xí)模型是否可以用于檢測(cè)Android特有代碼異味,針對(duì)異味MIM本文提出基于集成學(xué)習(xí)的檢測(cè)策略。

2 基于集成學(xué)習(xí)的MIM檢測(cè)策略

2.1 方法概述

本文提出一種基于集成學(xué)習(xí)的MIM檢測(cè)方法。該方法首先以開(kāi)源的Android應(yīng)用程序作為實(shí)驗(yàn)所需的代碼語(yǔ)料庫(kù),從中提取度量和文本信息。通過(guò)特征融合將兩種特征融合在一起,并與之相對(duì)應(yīng)的分類標(biāo)簽一起構(gòu)成MIM數(shù)據(jù)集。再對(duì)數(shù)據(jù)進(jìn)行歸一化,最后將得到的特征集送入的Stacking集成模型中進(jìn)行分類。圖1總結(jié)了本文異味檢測(cè)技術(shù)的主要流程。

圖1 融合文本信息和集成學(xué)習(xí)的MIM檢測(cè)方法

2.2 構(gòu)建數(shù)據(jù)集

本節(jié)詳細(xì)介紹生成標(biāo)簽數(shù)據(jù)集的過(guò)程及使用的工具。

2.2.1 實(shí)驗(yàn)對(duì)象獲取

在開(kāi)源代碼庫(kù)AndroZooOpen[11]中下載Android應(yīng)用程序,作為備選的代碼語(yǔ)料庫(kù)。AndroZooOpen是一個(gè)公開(kāi)的Android應(yīng)用程序集合,包括Gitbub、F-Droid和Google Play在內(nèi)的多個(gè)數(shù)據(jù)來(lái)源。AndroZooOpen目前包含76 466個(gè)由不同語(yǔ)言開(kāi)發(fā)的Android應(yīng)用程序。本文選擇主要由Java語(yǔ)言開(kāi)發(fā)的Android應(yīng)用程序,因?yàn)镴ava 是目前移動(dòng)應(yīng)用軟件開(kāi)發(fā)的主流語(yǔ)言之一,而且目前Android特有代碼異味的檢測(cè)工具只能檢測(cè)由Java語(yǔ)言開(kāi)發(fā)的應(yīng)用程序。

首先,從AndroZooOpen下載110個(gè)開(kāi)源Android應(yīng)用程序。然后,使用工具RepoReapers[12]去除低質(zhì)量的Android應(yīng)用程序。RepoReapers可以從8個(gè)方面對(duì)AndroZooOpen中的程序質(zhì)量進(jìn)行評(píng)分(分別是體系結(jié)構(gòu)、社區(qū)、持續(xù)集成、文件、提交歷史、許可證、問(wèn)題和單元測(cè)試)。如果待選應(yīng)用程序在7個(gè)方面的評(píng)分均大于零,則選取該程序。經(jīng)過(guò)篩選,最終確定70個(gè)Android應(yīng)用程序作為代碼語(yǔ)料庫(kù),這70個(gè)應(yīng)用程序共有747 264行代碼,9574個(gè)類和87 320個(gè)方法。

2.2.2 樣本生成

在圖像處理領(lǐng)域,研究者可以免費(fèi)獲得大量的有標(biāo)簽的圖像數(shù)據(jù)集,用以構(gòu)建模型的訓(xùn)練集。而在代碼異味檢測(cè)研究中,目前還沒(méi)有類似的資源可供研究者使用[1]。為了解決這個(gè)問(wèn)題,Liu等[4,5]和Sharma等[1]利用已有代碼異味檢測(cè)工具的輸出結(jié)果,構(gòu)建模型的訓(xùn)練集。本文借鑒這種方法,使用工具ASSD檢測(cè)異味MIM并自動(dòng)生成正、負(fù)樣本集。本文使用的工具ASSD是在檢測(cè)工具DAAP[8]源代碼的基礎(chǔ)上對(duì)其功能進(jìn)行擴(kuò)展,以自動(dòng)生成正負(fù)樣本。ASSD沒(méi)有改變DAAP的異味檢測(cè)規(guī)則,為區(qū)別于原DAAP工具,本文將改進(jìn)后的工具稱為ASSD,其流程如圖2所示。

圖2 ASSD自動(dòng)生成正負(fù)樣本集的流程

DAAP是目前檢測(cè)異味種類最多、檢測(cè)準(zhǔn)確度最好的Android特有代碼異味檢測(cè)工具。DAAP可以檢測(cè)包括MIM在內(nèi)的25種Android特有代碼異味,無(wú)論在檢測(cè)的異味種類還是檢測(cè)精度方面,都優(yōu)于知名的檢測(cè)工具aDoctor[8],并且DAAP是完全開(kāi)源的工具,使用者不僅可以免費(fèi)獲得,而且可以在其基礎(chǔ)上進(jìn)行功能擴(kuò)展,以滿足不同的需求。因此,本文首選DAAP檢測(cè)MIM異味。但是,由于DAAP的檢測(cè)結(jié)果只能定位到類級(jí)別,而MIM屬于方法級(jí)別的異味。因此,本文在DAAP的基礎(chǔ)上,對(duì)其功能進(jìn)行擴(kuò)展,開(kāi)發(fā)了ASSD。ASSD首先利用JavaParser將待分析的Java源代碼解析生成抽象語(yǔ)法樹(shù),然后根據(jù)檢測(cè)規(guī)則遍歷語(yǔ)法樹(shù),輸出異味。圖2中虛線部分所示為DAAP工具,虛線外的功能是本文擴(kuò)展的功能。ASSD不僅可以將檢測(cè)出的MIM異味定位到所在的方法,而且還可以將每個(gè)存在MIM的方法和不存在MIM的方法提取到單獨(dú)的文件夾中,生成正負(fù)樣本集,即存放有異味方法的文件夾為正樣本集,存放無(wú)異味方法的文件夾為負(fù)樣本集。因此,ASSD從異味檢測(cè)到樣本生成完全自動(dòng)完成。

由于檢測(cè)規(guī)則自身的局限性,檢測(cè)工具在檢測(cè)異味的過(guò)程中會(huì)產(chǎn)生一定數(shù)量的誤檢。因此,為了保證輸入模型數(shù)據(jù)的準(zhǔn)確性,本文采用人工復(fù)檢方法,對(duì)ASSD輸出的代碼異味進(jìn)行檢查,去除誤檢。

2.2.3 提取特征

分類器的特征集由兩部分構(gòu)成:代碼度量和代碼文本信息。

(1)提取代碼度量特征

代碼度量表示程序的結(jié)構(gòu)信息,是代碼異味檢測(cè)研究中常用的判斷依據(jù)[13]。本文選擇代碼度量作為模型的部分輸入特征。度量指標(biāo)選擇檢測(cè)工具DAAP檢測(cè)MIM異味時(shí)使用的度量指標(biāo),分別為NSM(被檢測(cè)方法是非靜態(tài)方法)、AM(被檢測(cè)方法所訪問(wèn)的內(nèi)部成員的個(gè)數(shù))和FACC(被檢測(cè)方法所訪問(wèn)的內(nèi)部屬性的個(gè)數(shù))。本文使用ASSD提取其中的度量值,其數(shù)據(jù)集格式如圖3所示。

圖3 度量數(shù)據(jù)格式

(2)提取文本信息特征

Sharma等[1]認(rèn)為,只使用代碼度量作為特征集,模型受限于度量信息,無(wú)法學(xué)習(xí)到度量之外的程序特征。因此,Sharma使用工具Tokenizer將源代碼轉(zhuǎn)換為整數(shù),用數(shù)字向量表示程序文本信息,并將這些數(shù)字向量作為模型的特征集。Tokenizer可以將源代碼轉(zhuǎn)換為整數(shù),不同的代碼信息匹配不同的整數(shù),圖4為一小段Java方法和相應(yīng)的由Tokernizer產(chǎn)生的整數(shù)。

圖4 Tokenizer標(biāo)記MIM示例

本文參考Sharma等的方法,將ASSD輸出的標(biāo)簽樣本集中的源代碼轉(zhuǎn)換成數(shù)字向量,用這些數(shù)字向量表示代碼文本信息,作為模型輸入的部分特征集,其數(shù)據(jù)集如圖5所示。

圖5 文本信息數(shù)據(jù)格式

此外,在對(duì)Tokernizer提取的代碼文本特征統(tǒng)計(jì)和分析中發(fā)現(xiàn),80%的方法中不會(huì)超過(guò)61個(gè)元素。為了避免因特征過(guò)多而導(dǎo)致的維度爆炸,在本文中將模型輸入的單個(gè)樣本中的代碼文本特征個(gè)數(shù)固定在61個(gè),即只針對(duì)被檢測(cè)方法中的61個(gè)元素進(jìn)行預(yù)處理,將方法中元素少于61個(gè)以全零向量來(lái)做補(bǔ)零擴(kuò)展。

2.2.4 特征融合

盡管已有檢測(cè)方法均使用代碼度量作為特征集[16],但是,代碼度量只能提供程序的結(jié)構(gòu)信息,為了提高機(jī)器學(xué)習(xí)模型的學(xué)習(xí)效果,本文在代碼度量的基礎(chǔ)上,融入了代碼文本信息。融合過(guò)程如下:將兩組數(shù)據(jù)讀入到numpy數(shù)組中,利用MIM在Android應(yīng)用程序中的位置信息作為匹配鍵對(duì)代碼度量和文本信息進(jìn)行合并。此外,為避免重復(fù)樣本數(shù)據(jù)對(duì)實(shí)驗(yàn)結(jié)果的影響,還需對(duì)相同的樣本數(shù)據(jù)進(jìn)行去重操作。刪除重復(fù)數(shù)據(jù)后,得到一個(gè)含有2552條正樣本和3265條負(fù)樣本的數(shù)據(jù)集。其中,每條樣本由3個(gè)代碼度量、61個(gè)文本信息和1個(gè)異味標(biāo)簽組成,共65個(gè)元素,樣本格式如圖6所示。

圖6 樣本格式

2.3 數(shù)據(jù)歸一化

(1)

2.4 Stacking 集成學(xué)習(xí)模型的構(gòu)建

不同的機(jī)器學(xué)習(xí)模型對(duì)代碼異味檢測(cè)的效果是不同的,為了使不同的模型之間能夠取長(zhǎng)補(bǔ)短,增強(qiáng)模型的泛化能力,從而避免單一模型預(yù)測(cè)性能不佳、魯棒性較差的特點(diǎn)。本文構(gòu)建了一種兩層結(jié)構(gòu)的Stacking集成學(xué)習(xí)模型,如圖7所示。

圖7 Stacking 集成學(xué)習(xí)模型流程

Stacking模型的第一層選擇XGBoost、隨機(jī)森林和決策樹(shù)作為基分類器。它們之間存在異構(gòu)性,且各自對(duì)MIM的檢測(cè)效果也較為優(yōu)異。以這3種機(jī)器模型作為基分類器,可以使Stacking模型通過(guò)不同的學(xué)習(xí)策略,學(xué)習(xí)到更多的特征,實(shí)現(xiàn)模型間的互補(bǔ)性,有助于提升模型整體的檢測(cè)效果。由于模型第二層的輸入是由基分類器的預(yù)測(cè)結(jié)果所組成的數(shù)據(jù)集,不再是原數(shù)據(jù)集。所以,在模型訓(xùn)練時(shí),可能會(huì)發(fā)生過(guò)擬合的情況。這是由于第一層基分類器在提取數(shù)據(jù)特征時(shí),使用較復(fù)雜的非線性變換所導(dǎo)致的[15]。因此,在選取第二層元分類器時(shí),本文與艾成豪等[3]和Tang等[15]一樣選擇邏輯回歸作為元分類器。該分類器結(jié)構(gòu)簡(jiǎn)單且可以使用正則化進(jìn)一步防止過(guò)擬合的情況發(fā)生,常被用于處理二分類問(wèn)題。它的實(shí)現(xiàn)過(guò)程如算法1所示:

算法1:Stacking 集成學(xué)習(xí)模型

輸入:歸一化后的數(shù)據(jù)集

輸出:MIM檢測(cè)結(jié)果

(1)將原始數(shù)據(jù)集D隨機(jī)劃分成3份,分別表示為D1、D2和D3;

(2)通過(guò)交叉驗(yàn)證的方法,確定各個(gè)模型的最優(yōu)參數(shù);

(5)將D*作為第2層檢測(cè)模型的輸入,對(duì)元模型進(jìn)行訓(xùn)練,得到最終的檢測(cè)結(jié)果。

3 實(shí)驗(yàn)設(shè)計(jì)與結(jié)果分析

實(shí)驗(yàn)環(huán)境如下:操作系統(tǒng)是windows 10處理器是Intel Core CPU i7-5500,內(nèi)存是4 GB,實(shí)驗(yàn)工具為PyCharm和IntelliJ IDEA中完成,編程語(yǔ)言為Python和Java。在實(shí)驗(yàn)過(guò)程中,采用十折交叉驗(yàn)證對(duì)模型進(jìn)行驗(yàn)證。此外,實(shí)驗(yàn)相關(guān)數(shù)據(jù)已上傳至https://github.com/18745332164/MIMDetection。本文主要圍繞以下3個(gè)問(wèn)題進(jìn)行實(shí)驗(yàn)研究:

RQ1:融合代碼文本信息是否能提高模型的檢測(cè)性能?若僅以單一特征作為模型的輸入,其檢測(cè)性能會(huì)有何變化?

RQ2:Stacking集成學(xué)習(xí)模型對(duì)MIM的檢測(cè)性能是否有提高?

RQ3:本文提出的檢測(cè)方法是否優(yōu)于現(xiàn)有的檢測(cè)方法?

3.1 模型評(píng)價(jià)指標(biāo)

本文使用常用的查準(zhǔn)率、查全率和F1值對(duì)模型進(jìn)行評(píng)估,它們的計(jì)算方法如式(2)~式(4)所示

(2)

(3)

(4)

其中,式(2)和式(3)中的TP(true positive)為被檢測(cè)為正的正樣本數(shù);FP(false positive)為被檢測(cè)為正的負(fù)樣本數(shù);FN(false negative)為被檢測(cè)為負(fù)的正樣本數(shù)。

此外,由于實(shí)驗(yàn)數(shù)據(jù)集呈現(xiàn)不平衡狀態(tài),本文引入G值對(duì)模型進(jìn)行更全面的評(píng)估,該指標(biāo)能夠更直觀評(píng)價(jià)類不平衡的表現(xiàn),其計(jì)算方法如式(5)所示

(5)

3.2 實(shí)驗(yàn)設(shè)計(jì)

實(shí)驗(yàn)一:為了回答RQ1,分別以2.2節(jié)構(gòu)建的融合兩類特征的數(shù)據(jù)集、僅代碼度量和僅文本信息的數(shù)據(jù)集作為6個(gè)機(jī)器學(xué)習(xí)模型(XGBoost、隨機(jī)森林、決策樹(shù)、支持向量機(jī)、樸素貝葉斯和K最鄰近)的輸入,使用十折交叉驗(yàn)證對(duì)模型進(jìn)行驗(yàn)證。最后,使用查準(zhǔn)率、查全率、F1值和G值對(duì)不同特征輸入下的6種檢測(cè)模型的檢測(cè)效果進(jìn)行比較。

實(shí)驗(yàn)二:為了回答RQ2,將融合代碼度量和文本信息的特征集作為模型輸入的數(shù)據(jù)集,采用十折交叉驗(yàn)證的方法分別對(duì)3個(gè)機(jī)器學(xué)習(xí)模型以及由它們所集成的Stacking模型進(jìn)行驗(yàn)證。最后比較4種檢測(cè)方法的查準(zhǔn)率、查全率、F1值和G值。

實(shí)驗(yàn)三:為了回答RQ3,首先,從Palomba等[9]提出的一個(gè)開(kāi)源Android應(yīng)用程序數(shù)據(jù)集(共60個(gè)Android應(yīng)用程序)中選取了10個(gè)開(kāi)源Android應(yīng)用程序作為待測(cè)試程序。其中,這10個(gè)應(yīng)用程序與模型訓(xùn)練階段的70個(gè)應(yīng)用程序沒(méi)有重疊。表1列出了所用的10個(gè)開(kāi)源Android項(xiàng)目的詳細(xì)信息。然后,將新的測(cè)試集輸入已訓(xùn)練好的Stacking分類器進(jìn)行MIM異味檢測(cè)。此外,為了進(jìn)行對(duì)比,本文使用檢測(cè)工具DAAP和aDoctor分別對(duì)這10個(gè)應(yīng)用程序進(jìn)行MIM異味檢測(cè)。為準(zhǔn)確評(píng)價(jià)兩檢測(cè)工具的檢測(cè)結(jié)果,本文以Palomba等[16]提出的MIM異味目錄作為參考,最后使用查準(zhǔn)率、查全率、F1值和G值對(duì)3種檢測(cè)方法的檢測(cè)效果進(jìn)行比較。

表1 10個(gè)Android應(yīng)用程序及相關(guān)信息

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

RQ1:表2為不同機(jī)器學(xué)習(xí)模型在不同特征下對(duì)異味MIM的檢測(cè)結(jié)果。根據(jù)表2的結(jié)果可以看出:

表2 不同模型在不同特征下的MIM檢測(cè)結(jié)果

(1)融合文本信息后,6種分類器對(duì)MIM的檢測(cè)性能綜合排名為:XGBoost>隨機(jī)森林>決策樹(shù)>樸素貝葉斯>支持向量機(jī)>K最鄰近。

(2)當(dāng)以代碼度量和文本信息共同作為特征輸入時(shí),除K最鄰近對(duì)MIM的檢測(cè)結(jié)果較僅以代碼度量為特征輸入的檢測(cè)結(jié)果降低了以外。其余5種機(jī)器學(xué)習(xí)模型對(duì)異味MIM的檢測(cè)結(jié)果,均優(yōu)于僅以代碼度量為特征輸入和僅以文本信息作為特征輸入的模型檢測(cè)結(jié)果。其中,在融合文本信息后,決策樹(shù)的檢測(cè)性能提高的最為明顯,其F1值提高了4.1%=(86.86%-82.76%)、 G值提高了3.59%=(87.29%-83.70%)。

(3)當(dāng)僅以單一特征作為機(jī)器學(xué)習(xí)模型的輸入時(shí),以代碼度量作為特征輸入的分類器,其檢測(cè)效果均優(yōu)于以代碼文本信息作為特征輸入的分類器。以代碼度量作為輸入數(shù)據(jù)集時(shí),6種分類器對(duì)MIM的檢測(cè)性能綜合排名為:XGBoost>隨機(jī)森林>決策樹(shù)>支持向量機(jī)>樸素貝葉斯>K最鄰近。

XGBoost、隨機(jī)森林和決策樹(shù)無(wú)論是以代碼度量作為特征集,還是以代碼度量和文本信息作為特征集,其檢測(cè)效果均優(yōu)于其它分類器。故為避免由單一模型泛化導(dǎo)致模型檢測(cè)性能不佳的問(wèn)題,本文選擇XGBoost、隨機(jī)森林和決策樹(shù)作為后續(xù)Stacking集成學(xué)習(xí)模型的基分類器。

RQ2:表3列出了文本信息融合后單一模型和Stacking 集成學(xué)習(xí)模型的性能比較。根據(jù)表3的結(jié)果可以看出:相對(duì)于單一機(jī)器學(xué)習(xí)模型,Stacking集成學(xué)習(xí)模型的檢測(cè)效果更好,在F1值和G值上都有一定提升。

表3 文本信息融合后單一模型和Stacking集成學(xué)習(xí)模型的比較結(jié)果

從理論層面來(lái)分析Stacking集成模型優(yōu)于單一模型的原因,是因?yàn)镾tacking集成學(xué)習(xí)模型能發(fā)揮各模型的自身優(yōu)勢(shì),從不同的角度來(lái)學(xué)習(xí)數(shù)據(jù),屏除預(yù)測(cè)結(jié)果較差的環(huán)節(jié)。從模型優(yōu)化的角度來(lái)分析,單一模型在訓(xùn)練優(yōu)化的過(guò)程中,通常會(huì)陷入局部最小點(diǎn)的風(fēng)險(xiǎn),有的局部最小點(diǎn)通常會(huì)導(dǎo)致模型的泛化性能不佳,而通過(guò)集成多個(gè)基學(xué)習(xí)模型可以減少此風(fēng)險(xiǎn)發(fā)生的概率,提高檢測(cè)性能。

RQ3:表4列出了3種檢測(cè)方法對(duì)表1中的10個(gè)Android應(yīng)用程序檢測(cè)結(jié)果的平均值。根據(jù)表4的結(jié)果可以看出:在相同測(cè)試程序的前提下,對(duì)異味MIM的檢測(cè)效果,本文方法在查準(zhǔn)率、查全率、F1值和G值上都優(yōu)于DAAP和aDoctor。其中,本文所提方法較DAAP的查全率提高的最為明顯,平均提高了43.12%=(97.98%-54.86%)。

表4 不同方法間的平均比較結(jié)果

不同方法對(duì)10個(gè)Android應(yīng)用程序中的異味MIM的具體檢測(cè)結(jié)果如圖8所示。

圖8 不同方法在10個(gè)Android應(yīng)用程序上的檢測(cè)結(jié)果

從圖8中可以看出本文所提出的檢測(cè)方法明顯優(yōu)于DAAP和aDoctor。其中,對(duì)應(yīng)用程序aLogCat中的異味MIM檢測(cè)效果最好,F(xiàn)1值達(dá)到97.44%、G值達(dá)到97.47%。

以上實(shí)驗(yàn)結(jié)果表明,使用本文方法檢測(cè)Android特有代碼異味MIM取得了很好的結(jié)果,驗(yàn)證了本文所提檢測(cè)模型的有效性。

4 結(jié)束語(yǔ)

本文提出一種基于集成學(xué)習(xí)的MIM檢測(cè)策略。該策略首先將代碼度量與文本信息相融合作為特征集,避免模型因受度量信息的限制,無(wú)法學(xué)習(xí)到度量之外的程序特征。然后,為了避免單一機(jī)器學(xué)習(xí)模型的局限,提高模型的泛化能力,本文構(gòu)建了Stacking集成學(xué)習(xí)模型。然后,將特征集輸入所構(gòu)建的集成學(xué)習(xí)模型中進(jìn)行異味檢測(cè)。實(shí)驗(yàn)結(jié)果表明,融合文信息的方法和Stacking集成學(xué)習(xí)算法有更好的查準(zhǔn)率、查全率、F值以及G值。此外,為了快速、準(zhǔn)確生成機(jī)器學(xué)習(xí)模型所需的大量樣本集,本文還實(shí)現(xiàn)了一種可以利用開(kāi)源Android項(xiàng)目自動(dòng)構(gòu)建正負(fù)樣本的工具ASSD。本文只介紹了1種Android特有代碼異味的檢測(cè),后續(xù)也會(huì)對(duì)更多類型的異味進(jìn)行檢測(cè)。

猜你喜歡
特征文本檢測(cè)
“不等式”檢測(cè)題
“一元一次不等式”檢測(cè)題
“一元一次不等式組”檢測(cè)題
如何表達(dá)“特征”
在808DA上文本顯示的改善
不忠誠(chéng)的四個(gè)特征
基于doc2vec和TF-IDF的相似文本識(shí)別
電子制作(2018年18期)2018-11-14 01:48:06
抓住特征巧觀察
小波變換在PCB缺陷檢測(cè)中的應(yīng)用
文本之中·文本之外·文本之上——童話故事《坐井觀天》的教學(xué)隱喻
主站蜘蛛池模板: 国产精品xxx| 91久草视频| 午夜精品影院| 国产最新无码专区在线| 欧美一区精品| 少妇极品熟妇人妻专区视频| 日韩中文欧美| 国产精品30p| 老色鬼久久亚洲AV综合| 欧美性猛交一区二区三区| 欧洲在线免费视频| 欧美成人午夜影院| 国产打屁股免费区网站| 国产欧美日韩91| 91黄色在线观看| 成人久久18免费网站| 国产一级视频久久| 免费在线视频a| 国产三级毛片| 午夜欧美在线| 日韩精品高清自在线| 国产精品大白天新婚身材| 91年精品国产福利线观看久久| 精品国产欧美精品v| 婷婷亚洲最大| 免费全部高H视频无码无遮掩| 免费无码网站| 国产精品太粉嫩高中在线观看| 91精品啪在线观看国产| 精品少妇人妻av无码久久| 91丝袜乱伦| 中文字幕永久在线看| 日韩a级毛片| 成人国产免费| 久热re国产手机在线观看| 久久精品娱乐亚洲领先| 国产产在线精品亚洲aavv| 刘亦菲一区二区在线观看| 国产一区二区三区视频| 国产精品毛片一区视频播| 亚洲a级毛片| 国产偷倩视频| AV不卡无码免费一区二区三区| 成人91在线| 久久成人免费| 免费毛片a| 精品一区二区无码av| 夜色爽爽影院18禁妓女影院| 中文一级毛片| a色毛片免费视频| 不卡的在线视频免费观看| 韩日免费小视频| 亚洲全网成人资源在线观看| 91麻豆国产视频| 国产黄色片在线看| 欧美视频二区| 亚洲二区视频| 欧美精品一区在线看| 亚洲一区无码在线| 国产中文在线亚洲精品官网| 国产精品视频系列专区| 成年片色大黄全免费网站久久| 高清无码手机在线观看| 色国产视频| 青青操视频在线| 国产福利大秀91| 国产精品第页| 久久黄色免费电影| 国产99精品视频| 天天干天天色综合网| 国产91线观看| 996免费视频国产在线播放| 99久久99这里只有免费的精品| 成人综合在线观看| 国产情侣一区| 国产精品天干天干在线观看| 日韩欧美国产三级| 国产免费好大好硬视频| 亚洲精品无码av中文字幕| 人妻无码一区二区视频| 日韩精品毛片| 久久国产精品嫖妓|