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

基于集成學習的忽略成員的方法檢測策略

2023-10-12 01:10:10邊奕心王露穎
計算機工程與設計 2023年9期
關鍵詞:特征文本檢測

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

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

0 引 言

由于移動通信技術的迅猛發展,移動應用程序已經成為軟件行業的發展主體。而代碼異味不僅存在于傳統桌面應用程序中,也存在于Android應用程序中。由于Android應用程序與傳統桌面應用程序在內存、CPU、網絡、電池以及程序編寫等方面的諸多差異,使得Android應用程序中不僅存在傳統面向對象的代碼異味,還存在Android特有代碼異味(Android-specific code smells)。Android特有代碼異味的存在對Android應用程序產生了諸多負面影響,比如能耗、安全性、穩定性、內存和啟用時間等,極大降低了用戶體驗。隨著機器學習技術的發展,近年來很多學者嘗試使用不同的機器學習方法來檢測面向對象的代碼異味,并取得了很好的效果[1-7]。然而,目前還沒有使用機器學習算法來檢測Android特有代碼異味的相關研究。

為了檢驗機器學習模型是否可用于檢測Android特有代碼異味,本文提出了基于集成學習的檢測策略。該策略將代碼度量與程序文本信息相結合作為特征集,避免模型受限于度量信息,無法學習到度量之外的程序特征,提高了單一模型的學習能力和泛化能力。此外,為了快速、準確獲得機器學習所需的大量標簽數據,提出了一種基于Android項目構建正負樣本的工具。能夠自動生成機器學習模型需要的大量標簽數據。

1 相關工作

1.1 忽略成員的方法

忽略成員的方法(member ignoring method,MIM)是指某個類中的方法,該方法即非空方法,也非靜態方法,但該方法沒有訪問所在類的任何屬性[8]。MIM的存在對Android應用程序有諸多負面影響,比如,增加程序的能耗,降低程序的可維護性等[8]。

迄今為止,研究人員提出了一些MIM的檢測方法。Rasool等[8]根據代碼異味的不同特征與定義選擇不同的度量,以預設閾值的方式為各個異味制定不同的檢測規則,來檢測異味MIM,并實現了工具DAAP。Nucci等[9]通過度量和簡單的文本比較來檢測包括MIM在內的15種Android特有代碼異味,并實現了工具aDoctor。隨后Iannone等[10]對aDoctor進行了擴展,使其能重構包含MIM在內的5種與能耗相關的異味。

綜上所述,目前的檢測方法主要采用傳統的程序靜態分析技術,依賴于不同的代碼度量以及相應的閾值檢測Android特有代碼異味。然而,基于規則的檢測方法,為找到合適每個度量的閾值,往往需要做大量的校準工作。此外,同一規則可能與多種代碼異味相關,這將導致不同檢測方法的檢測結果存在較大的差異。

1.2 使用機器學習方法檢測代碼異味

隨著機器學習技術的迅速發展,以及以Github開源代碼庫為支撐的“Big Code”的出現[1],很多學者嘗試使用機器學習方法檢測代碼異味。目前已有一些研究使用機器學習方法檢測面向對象代碼異味。王帆等[2]在C4.5算法中加入對稱不確定性,利用其計算條件屬性間的相關度,更新信息增益率的計算,提高代碼異味檢測精確度。艾成豪等[3]提出基于Stacking集成學習模型的代碼異味檢測方法,提高了單一模型的泛化能力。以上研究在訓練模型時,使用的特征集都是傳統的代碼度量。

近年來,隨著深度學習模型在各個領域的卓越表現,軟件工程領域的學者們開始嘗試使用深度學習方法解決代碼異味檢測問題。Liu等[4]提出一種基于卷積神經網絡的檢測方法,用于檢測依戀情結異味。在此基礎上,Liu等[5]提出了一種基于卷積神經網絡和長短時記憶網絡的代碼異味檢測方法,檢測4種代碼異味。以上研究在訓練模型時,不僅使用了傳統的代碼度量,還結合了代碼文本信息(標識符信息)。Sharma等[1]分別使用卷積神經網絡、循環神經網絡和自編碼器對4種代碼異味進行檢測。Sharma認為使用代碼度量作為模型的輸入,機器學習算法受限于度量信息,無法獲得度量以外的源代碼特征,影響模型的學習效果。此外,即便使用相同的度量,因為閾值的不同,導致不同檢測方法的檢測結果存在較大的差異。因此,Sharma沒有使用任何傳統的度量信息,而是使用程序文本信息作為模型的輸入,不同于Liu等[5]使用的文本信息(僅標識符),Sharma將源代碼轉換為整數,然后以數字向量形式表示程序的文本信息,這種文本信息涵蓋了程序的全部信息。

綜上所述,已有使用機器學習或者深度學習檢測代碼異味的方法都只關注面向對象代碼異味。目前還沒有使用機器學習方法檢測Android特有代碼異味的相關研究。因此,為了檢驗機器學習模型是否可以用于檢測Android特有代碼異味,針對異味MIM本文提出基于集成學習的檢測策略。

2 基于集成學習的MIM檢測策略

2.1 方法概述

本文提出一種基于集成學習的MIM檢測方法。該方法首先以開源的Android應用程序作為實驗所需的代碼語料庫,從中提取度量和文本信息。通過特征融合將兩種特征融合在一起,并與之相對應的分類標簽一起構成MIM數據集。再對數據進行歸一化,最后將得到的特征集送入的Stacking集成模型中進行分類。圖1總結了本文異味檢測技術的主要流程。

圖1 融合文本信息和集成學習的MIM檢測方法

2.2 構建數據集

本節詳細介紹生成標簽數據集的過程及使用的工具。

2.2.1 實驗對象獲取

在開源代碼庫AndroZooOpen[11]中下載Android應用程序,作為備選的代碼語料庫。AndroZooOpen是一個公開的Android應用程序集合,包括Gitbub、F-Droid和Google Play在內的多個數據來源。AndroZooOpen目前包含76 466個由不同語言開發的Android應用程序。本文選擇主要由Java語言開發的Android應用程序,因為Java 是目前移動應用軟件開發的主流語言之一,而且目前Android特有代碼異味的檢測工具只能檢測由Java語言開發的應用程序。

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

2.2.2 樣本生成

在圖像處理領域,研究者可以免費獲得大量的有標簽的圖像數據集,用以構建模型的訓練集。而在代碼異味檢測研究中,目前還沒有類似的資源可供研究者使用[1]。為了解決這個問題,Liu等[4,5]和Sharma等[1]利用已有代碼異味檢測工具的輸出結果,構建模型的訓練集。本文借鑒這種方法,使用工具ASSD檢測異味MIM并自動生成正、負樣本集。本文使用的工具ASSD是在檢測工具DAAP[8]源代碼的基礎上對其功能進行擴展,以自動生成正負樣本。ASSD沒有改變DAAP的異味檢測規則,為區別于原DAAP工具,本文將改進后的工具稱為ASSD,其流程如圖2所示。

圖2 ASSD自動生成正負樣本集的流程

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

由于檢測規則自身的局限性,檢測工具在檢測異味的過程中會產生一定數量的誤檢。因此,為了保證輸入模型數據的準確性,本文采用人工復檢方法,對ASSD輸出的代碼異味進行檢查,去除誤檢。

2.2.3 提取特征

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

(1)提取代碼度量特征

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

圖3 度量數據格式

(2)提取文本信息特征

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

圖4 Tokenizer標記MIM示例

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

圖5 文本信息數據格式

此外,在對Tokernizer提取的代碼文本特征統計和分析中發現,80%的方法中不會超過61個元素。為了避免因特征過多而導致的維度爆炸,在本文中將模型輸入的單個樣本中的代碼文本特征個數固定在61個,即只針對被檢測方法中的61個元素進行預處理,將方法中元素少于61個以全零向量來做補零擴展。

2.2.4 特征融合

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

圖6 樣本格式

2.3 數據歸一化

(1)

2.4 Stacking 集成學習模型的構建

不同的機器學習模型對代碼異味檢測的效果是不同的,為了使不同的模型之間能夠取長補短,增強模型的泛化能力,從而避免單一模型預測性能不佳、魯棒性較差的特點。本文構建了一種兩層結構的Stacking集成學習模型,如圖7所示。

圖7 Stacking 集成學習模型流程

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

算法1:Stacking 集成學習模型

輸入:歸一化后的數據集

輸出:MIM檢測結果

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

(2)通過交叉驗證的方法,確定各個模型的最優參數;

(5)將D*作為第2層檢測模型的輸入,對元模型進行訓練,得到最終的檢測結果。

3 實驗設計與結果分析

實驗環境如下:操作系統是windows 10處理器是Intel Core CPU i7-5500,內存是4 GB,實驗工具為PyCharm和IntelliJ IDEA中完成,編程語言為Python和Java。在實驗過程中,采用十折交叉驗證對模型進行驗證。此外,實驗相關數據已上傳至https://github.com/18745332164/MIMDetection。本文主要圍繞以下3個問題進行實驗研究:

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

RQ2:Stacking集成學習模型對MIM的檢測性能是否有提高?

RQ3:本文提出的檢測方法是否優于現有的檢測方法?

3.1 模型評價指標

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

(2)

(3)

(4)

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

此外,由于實驗數據集呈現不平衡狀態,本文引入G值對模型進行更全面的評估,該指標能夠更直觀評價類不平衡的表現,其計算方法如式(5)所示

(5)

3.2 實驗設計

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

實驗二:為了回答RQ2,將融合代碼度量和文本信息的特征集作為模型輸入的數據集,采用十折交叉驗證的方法分別對3個機器學習模型以及由它們所集成的Stacking模型進行驗證。最后比較4種檢測方法的查準率、查全率、F1值和G值。

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

表1 10個Android應用程序及相關信息

3.3 實驗結果分析

RQ1:表2為不同機器學習模型在不同特征下對異味MIM的檢測結果。根據表2的結果可以看出:

表2 不同模型在不同特征下的MIM檢測結果

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

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

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

XGBoost、隨機森林和決策樹無論是以代碼度量作為特征集,還是以代碼度量和文本信息作為特征集,其檢測效果均優于其它分類器。故為避免由單一模型泛化導致模型檢測性能不佳的問題,本文選擇XGBoost、隨機森林和決策樹作為后續Stacking集成學習模型的基分類器。

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

表3 文本信息融合后單一模型和Stacking集成學習模型的比較結果

從理論層面來分析Stacking集成模型優于單一模型的原因,是因為Stacking集成學習模型能發揮各模型的自身優勢,從不同的角度來學習數據,屏除預測結果較差的環節。從模型優化的角度來分析,單一模型在訓練優化的過程中,通常會陷入局部最小點的風險,有的局部最小點通常會導致模型的泛化性能不佳,而通過集成多個基學習模型可以減少此風險發生的概率,提高檢測性能。

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

表4 不同方法間的平均比較結果

不同方法對10個Android應用程序中的異味MIM的具體檢測結果如圖8所示。

圖8 不同方法在10個Android應用程序上的檢測結果

從圖8中可以看出本文所提出的檢測方法明顯優于DAAP和aDoctor。其中,對應用程序aLogCat中的異味MIM檢測效果最好,F1值達到97.44%、G值達到97.47%。

以上實驗結果表明,使用本文方法檢測Android特有代碼異味MIM取得了很好的結果,驗證了本文所提檢測模型的有效性。

4 結束語

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

猜你喜歡
特征文本檢測
“不等式”檢測題
“一元一次不等式”檢測題
“一元一次不等式組”檢測題
如何表達“特征”
在808DA上文本顯示的改善
不忠誠的四個特征
當代陜西(2019年10期)2019-06-03 10:12:04
基于doc2vec和TF-IDF的相似文本識別
電子制作(2018年18期)2018-11-14 01:48:06
抓住特征巧觀察
小波變換在PCB缺陷檢測中的應用
文本之中·文本之外·文本之上——童話故事《坐井觀天》的教學隱喻
主站蜘蛛池模板: 一级高清毛片免费a级高清毛片| 亚洲综合婷婷激情| 免费又爽又刺激高潮网址| 亚洲成a人片| 久久99蜜桃精品久久久久小说| 国产剧情国内精品原创| 在线看片国产| 中国精品久久| 久久一色本道亚洲| 91在线国内在线播放老师| 亚洲品质国产精品无码| 免费国产一级 片内射老| 天天爽免费视频| 日韩美女福利视频| 97无码免费人妻超级碰碰碰| 国产男女免费完整版视频| 精品欧美一区二区三区久久久| 成人国产精品网站在线看| 国产精品女主播| 国产精品网址在线观看你懂的| 激情亚洲天堂| 久久久91人妻无码精品蜜桃HD| 国产成人精品高清在线| 久久黄色小视频| 99久久精品国产自免费| 天天综合色网| 国产在线自在拍91精品黑人| 99久久免费精品特色大片| V一区无码内射国产| 国产欧美日韩在线一区| 男女精品视频| 欧美国产菊爆免费观看 | 激情无码视频在线看| 成年人国产视频| 日韩毛片免费| 国产九九精品视频| 欧美色伊人| 国产精品一区二区国产主播| 视频一区亚洲| 亚洲性日韩精品一区二区| 天天摸天天操免费播放小视频| 一区二区午夜| 草逼视频国产| 国产精品不卡片视频免费观看| 国产国模一区二区三区四区| 亚洲三级电影在线播放| 欧美精品啪啪一区二区三区| 97se亚洲综合在线| 国产在线精品网址你懂的| 全部免费特黄特色大片视频| 中文字幕在线日韩91| 亚洲三级视频在线观看| 中文字幕伦视频| 九九久久精品国产av片囯产区| 亚洲最黄视频| 久久99热66这里只有精品一 | 视频一本大道香蕉久在线播放 | 精品视频91| 波多野吉衣一区二区三区av| 国产欧美日韩综合在线第一| 狠狠色狠狠综合久久| 国产v精品成人免费视频71pao| 中文字幕乱码二三区免费| 亚洲熟女中文字幕男人总站| 久久亚洲国产一区二区| 免费激情网站| 狠狠v日韩v欧美v| 无遮挡国产高潮视频免费观看 | 国产手机在线ΑⅤ片无码观看| 亚洲AV无码乱码在线观看裸奔| 国产高清自拍视频| 亚洲欧美日韩久久精品| 免费看美女毛片| 国产成人精品高清不卡在线| 亚洲欧美日韩久久精品| 亚洲欧美天堂网| 免费在线播放毛片| 人禽伦免费交视频网页播放| 亚洲伦理一区二区| 亚洲一区精品视频在线 | 性网站在线观看| 久久久久亚洲AV成人人电影软件|