国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于預訓練模型與BiLSTM-CNN的多標簽代碼壞味檢測方法

2024-10-25 00:00劉海洋張楊田泉泉王曉紅
河北工業(yè)科技 2024年5期

摘 要:為了提高多標簽代碼壞味檢測的準確率,提出一種基于預訓練模型與BiLSTM-CNN的多標簽代碼壞味檢測方法DMSmell(deep multi-smell)。首先,利用靜態(tài)分析工具獲取源代碼中的文本信息和結構度量信息,并采用2種檢測規(guī)則對代碼壞味實例進行標記;其次,利用CodeBERT預訓練模型生成文本信息對應的詞向量,并分別采用BiLSTM和CNN對詞向量和結構度量信息進行深度特征提?。蛔詈?,結合注意力機制和多層感知機,完成多標簽代碼壞味的檢測,并對DMSmell方法進行了性能評估。結果表明:DMSmell方法在一定程度上提高了多標簽代碼壞味檢測的準確率,與基于分類器鏈的方法相比,精確匹配率提高了1.36個百分點,微查全率提高了2.45個百分點,微F1提高了1.1個百分點。這表明,將文本信息與結構度量信息相結合,并利用深度學習技術進行特征提取和分類,可以有效提高代碼壞味檢測的準確性,為多標簽代碼壞味檢測的研究和應用提供重要的參考。

關鍵詞:軟件工程;代碼壞味;預訓練模型;多標簽分類;深度學習

中圖分類號:TP311 文獻標識碼:A

Multi-label code smell detection method based on

pre-trained model and BiLSTM-CNN

Abstract:

To improve the accuracy of multi-label code smell detection, a multi-label code smell detection method DMSmell (Deep Multi-Smell) based on pre-trained model and BiLSTM-CNN was proposed. Firstly, the static analysis tool was used to obtain the text information and structural metric information in the source code, and two detection rules were adopted to label the code smell instances; Secondly, the pre-training model of CodeBERT was used to generate the word vectors corresponding to the textut8pWeUEszebtBMQSf9uClT5IrYWpkQsyfW+EY/k9NlI=al information, and the deep feature extraction of the word vectors and the structural metric features were performed by using BiLSTM and CNN, respectively; Finally, the detection of multi-label code smell was accomplished by combining the attention mechanism and multi-layer perceptron, and the performance of the DMSmell method was evaluated. The results show that the DMSmell method improves the accuracy of multi-label code smell detection to a certain extent. Compared with the classifier chain-based method, the accurate match ratio has improved by 1.36 percentage points, the micro-recall rate has improved by 2.45 percentage points, and the micro-F1 has improved by 1.1 percentage points. The results show that the combination of textual information with structural metric information and the use of deep learning techniques for feature extraction and classification can effectively improve the accuracy of code smell detection, which provides an important reference for the research and application of multi-label code smell detection.

Keywords:

software engineering; code smell; pre-trained model; multi-label classification; deep learning

代碼壞味(code smell)是指低質量的代碼片段,它們可能不會直接導致代碼功能上的錯誤,但若未能及時發(fā)現(xiàn)并解決,可能會影響后期代碼的可讀性,導致代碼質量下降,增加軟件后期的維護成本。代碼壞味的檢測是確定軟件重構位置的前提條件,因此,代碼壞味檢測一直是軟件工程領域的研究熱點之一。

目前具有代表性的代碼壞味檢測工具有PMD,iPlasma[1]和JDeodorant[2]。這些檢測工具采用啟發(fā)式規(guī)則的方法,具備簡單、便捷的特點,并得到了廣泛的應用,但是僅依靠工具開發(fā)人員預先定義的啟發(fā)式規(guī)則難以覆蓋所有代碼壞味。此外,不同工具的開發(fā)人員對同一代碼壞味的定義有不同的理解,這會導致最終的檢測結果缺乏一致性和可靠性。為了解決上述問題,研究人員嘗試使用機器學習算法來完成代碼壞味檢測。SANDOUKA等[3]構建了一個用于檢測上帝類和長方法的Python代碼壞味數(shù)據(jù)集,并在該數(shù)據(jù)集上用6種機器學習模型進行實驗以檢測其性能,得出了不同的機器學習模型對不同代碼壞味類型具有不同性能表現(xiàn)的結論。此外,BRDAR等[4]提出基于半監(jiān)督學習的檢測方法,將手動標記的代碼壞味數(shù)據(jù)集與未標記的代碼片段相結合來訓練半監(jiān)督模型,并在2種代碼壞味上進行了方法性能評估。結果表明,該方法略優(yōu)于基于監(jiān)督學習的檢測方法,證明了半監(jiān)督學習方法在代碼壞味檢測方面的巨大潛力。隨著深度學習技術在圖像識別、自然語言處理等領域的廣泛應用,研究人員將深度學習代替機器學習用于代碼壞味檢測。如YU等[5]提出一種基于圖神經網絡的特征依戀檢測方法,將代碼結構度量信息和調用關系轉換為圖的形式,并利用圖神經網絡模型進行訓練和檢測,結果表明,該方法的平均微F1值達到了78.90%,比基準方法高出37.98%,提高了特征依戀代碼壞味的檢測水平。

在軟件開發(fā)過程中,同一代碼片段往往存在多種代碼壞味問題。上述的單標簽檢測方法無法做到準確識別和標記多種代碼壞味,從而導致開發(fā)人員難以有效進行重構。因此,研究者提出運用多標簽代碼壞味檢測來解決此問題。GUGGULOTHU等[6]提出使用多標簽分類方法來檢測給定代碼片段的多種代碼壞味,該研究中將NUCCI等[7]工作中的數(shù)據(jù)集合并成多標簽數(shù)據(jù)集,并比較了分類器鏈方法和標簽組合方法在多標簽代碼壞味檢測上的性能表現(xiàn)。結果表明,分類器鏈方法的性能優(yōu)于標簽組合方法,且平均準確率為91%。KIYAK等[8]提出使用機器學習算法來檢測多標簽代碼壞味,并驗證了5種不同基分類器的性能。結果表明,隨機森林分類器在2個多標簽數(shù)據(jù)集上的性能明顯優(yōu)于其他分類器。王繼娜等[9]提出一種基于排序損失的集成分類器鏈ECC(ensemble of classifier chains)多標簽代碼壞味檢測方法,該方法以排序損失最小為目標,并選取隨機森林算法作為基分類器,通過多次迭代ECC方法來優(yōu)化代碼壞味檢測的順序問題,進而提高檢測準確率。結果表明,ECC方法優(yōu)于現(xiàn)有的多標簽代碼壞味檢測方法。

雖然現(xiàn)有的方法在多標簽代碼壞味檢測上已經取得一定的成效,但仍存在以下2個方面的問題:1) 目前存在的多標簽代碼壞味檢測方法都是基于機器學習算法,缺乏基于深度學習的多標簽代碼壞味檢測方法的研究;2) 現(xiàn)有的多標簽數(shù)據(jù)集[10]僅包含源代碼的結構度量信息,缺乏源代碼的文本信息,且數(shù)據(jù)量較小,不足以支撐深度學習模型的訓練。

針對上述多標簽代碼壞味檢測存在的問題,本文構建了一個將源代碼度量信息和文本信息相結合的多標簽數(shù)據(jù)集,并提出一種基于預訓練模型與BiLSTM-CNN的多標簽代碼壞味檢測方法,該方法采用多個深度學習模型相結合的方式,提高了多標簽代碼壞味檢測的準確率。

1 方法提出

本文提出一種基于預訓練模型與BiLSTM-CNN的多標簽代碼壞味檢測方法DMSmell,基本框架如圖1所示。首先,從GitHub上選擇了多個領域的Java實際應用程序作為語料庫;其次,遍歷抽象語法樹獲得源代碼的文本信息,并采用iPlasma靜態(tài)分析工具獲取結構度量信息;然后,應用2種規(guī)則對每個代碼壞味實例標記多個標簽,并將文本信息、結構度量信息以及標簽信息相結合生成多標簽數(shù)據(jù)集,以此作為DMSmell模型的輸入,該模型中的BiLSTM負責文本信息的全局特征提取,CNN負責結構度量信息的深層次特征提?。蛔詈?,將BiLSTM與CNN提取的重要特征進行融合,并以多層感知機(multilayer perceptron)作為多標簽分類器,從而實現(xiàn)多標簽代碼壞味檢測。

2 方法實現(xiàn)

2.1 數(shù)據(jù)集生成

為了使數(shù)據(jù)集多樣化,本文從GitHub上選取了單元測試、文本編輯、數(shù)據(jù)庫系統(tǒng)等多個領域的開源項目作為語料庫,所選取的項目總代碼行數(shù)有150多萬行,包含18 544個類和144 964個方法。數(shù)據(jù)集形式如圖2所示。

為了獲取文本信息,本文使用了一個自動提取工具[11],該工具可自動將源程序進行抽象語法樹解析,再通過一個具體的訪問者類遍歷所有抽象語法樹節(jié)點,進而獲取包名稱、類名稱以及方法名稱。

結構度量信息是代碼壞味檢測研究中常用的判斷依據(jù),在檢測不同代碼壞味時結構度量信息往往扮演著不同的角色,不同結構度量信息通常被賦予不同的權重。本文使用靜態(tài)分析工具iPlasma獲取了結構度量信息,并選取了20種結構度量信息,這些結構度量信息涵蓋了代碼規(guī)模、復雜度、內聚度以及耦合度4個方面的代碼結構特征,其詳細介紹如表1所示。

因為在軟件開發(fā)中特征依戀和長方法是較為常見且被廣泛研究和探討的代碼壞味[12],所以本文選用這2種代碼壞味作為研究對象。

為了對數(shù)據(jù)集中的代碼壞味實例進行標記,本文盡可能選擇多種被廣泛應用的檢測規(guī)則。表2給出了2種代碼壞味的描述以及判定規(guī)則。本文通過編寫一段程序自動完成對于多種檢測規(guī)則識別的代碼壞味進行標記,只有當樣本符合所有檢測規(guī)則時

才會被標記為1(表示有壞味),其他情況下該樣本均被標記為0(表示無壞味)。得到的多標簽代碼壞味形式類似于One-Hot編碼[6],如(1, 0)表示當前樣本中有特征依戀、無長方法壞味。最終,通過多名實驗室人員運行編寫的自動檢測程序,對生成的多標簽數(shù)據(jù)集進行了檢測,包括重復樣本和異常值的識別,以保證數(shù)據(jù)標簽的準確性。例如,對于數(shù)據(jù)集中可能存在的重復樣本,通過自動檢測程序進行精準定位,然后由實驗人員進行確認和刪除。

2.2 特征提取

本文依據(jù)駝峰式命名法(CamelCase)和下劃線命名法(UnderScoreCase)對文本信息進行分詞,對切分后的每個單詞序列進行數(shù)據(jù)清洗,以去除文本信息中的特殊符號和無用字符等無關信息,并將處理后的單詞序列進行token化處理生成token序列。

在將token序列轉化成詞向量時,不同于大多數(shù)多標簽壞味檢測方法采用Glove和Word2Vec等詞嵌入模型,本文使用CodeBERT預訓練模型。該模型是針對源代碼的預訓練模型,它通過在大規(guī)模代碼庫上進行訓練,能夠更好地理解代碼的語法和結構[15]。

使用BiLSTM模型對詞向量進行全局特征提取[16],通過對文本信息進行上下文建模,全面捕捉其中的語義關系。此過程不僅將原始的高維詞向量信息整合為更緊湊的低維向量,而且這個向量包含了代碼中標識符的語義和上下文特征。這將為后續(xù)模型提供更為全面的信息,以便更有效地進行代碼壞味的分析和檢測。

通過靜態(tài)分析工具提取的結構度量信息只包含一些代碼的基本信息,其表達能力有限,無法提供代碼的細粒度特征和潛在問題,因此本文使用CNN模型來提取結構度量信息中的深層次特征。本文將提取到的結構度量信息作為輸入,Conv1d層可以在每個時刻上應用一組卷積核,學習提取不同的特征,再將輸入數(shù)據(jù)的特征表示擴展到更豐富的空間中,增加輸出的維度,這可以幫助捕獲輸入數(shù)據(jù)中更豐富的特征,提高模型的表達能力。卷積操作具有權重共享的特性,可以減少模型需要計算的參數(shù)量,降低CNN模型的復雜度[17]。此外,引入激活函數(shù)增加各層之間的非線性關系,并通過歸一化處理,避免梯度消失,從而提高模型的訓練速度。最后,CNN模型輸出自動特征提取結果。

2.3 多標簽代碼壞味檢測

多標簽代碼壞味檢測流程如圖3所示。

首先,將BiLSTM提取的文本特征信息與CNN提取的度量特征信息在合并層進行特征融合。這一融合操作旨在結合文本和代碼結構的豐富信息,以更全面地捕捉代碼壞味的特征。然后,利用注意力機制[18]對特征信息和預期標簽進行映射,以計算每個特征信息對檢測代碼壞味的重要程度。通過這種方式,DMSmell能夠更加精準地聚焦于對預測結果至關重要的特征,同時有效抑制無關特征的干擾,并對信息進行加權求和計算,進而為每個特征重新分配權重系數(shù)。最后,利用一個多層感知機實現(xiàn)多標簽分類,采用sigmoid作為激活函數(shù),將輸出結果與閾值函數(shù)ft=0.5(X)比較得到每個標簽的0/1的檢測值。

3 方法評估

3.1 實驗環(huán)境

所有實驗均在同一臺主機上進行,該主機在硬件配置上采用了主頻為2.8 GHz的Intel Core處理器、Nvidia GTX 1060 GPU,以及16 GB內存。在軟件方面,運行64位Windows 10操作系統(tǒng),并使用Python 3.7和PyTorch 1.10作為深度學習的支持環(huán)境。為了保證實驗的可復現(xiàn)性,所有模型和數(shù)據(jù)集均可在https://github.com/HyLiu-cn/DMSmell/中獲取。

在實驗參數(shù)配置中,迭代次數(shù)為30,選擇Adam作為優(yōu)化器,學習率設置為0.000 1,批處理大小為128行。多標簽數(shù)據(jù)集采用隨機劃分操作,比例為7∶3。表 3給出了實驗模型及其配置信息。

3.2 性能評估指標

為了驗證DMSmell方法的有效性,本文參考了文獻[19],并選取了5個多標簽分類方法的評估指標:漢明損失、精確匹配率、微查準率、微查全率和微F1。

1)漢明損失 評估錯誤分類的標簽個數(shù)比率,即預測錯誤的標簽數(shù)在整個樣本標簽總數(shù)中的占比,見式(1)。

式中:t為樣本數(shù);y′i為第i個實例的預測標簽值;yi為第i個實例的真實標簽值;△表示異或運算。

2)精確匹配率 計算預測標簽與真實標簽完全相同的比率,見式(2)。

式中:[[·]]只有·成立時為1,否則為0。

3)微查準率 計算公式見式(3)。

式中:p為標簽個數(shù);TP為真陽性;FP為假陽性。

4)微查全率 計算公式見式(4)。

式中:FN為假陰性。

5)微F1 計算公式見式(5)。

3.3 DMSmell方法檢測結果分析

采用DMSmell方法在本文構建的多標簽數(shù)據(jù)集上進行了訓練與檢測。表4為DMSmell方法檢測結果。由表4可知:DMSmell方法的漢明損失為0.026 9,這意味著平均每個樣本只有很少的標簽預測錯誤;精確匹配率達到了94.76%;微查準率為93.46%;微查全率為98.00%,這意味著DMSmell方法在預測不同類別的標簽時具有較高的識別準確率,并能夠捕捉到更多的真正例,漏檢率較低;在同時考慮了查準率和查全率的微F1指標上,DMSmell方法取得了95.68%的結果,表明模型在綜合性能方面表現(xiàn)出色。

以上數(shù)據(jù)表明,DMSmell方法在本文的多標簽數(shù)據(jù)集上能有效檢測出多個壞味類型,并展現(xiàn)出了優(yōu)異的性能。

3.4 與分類器鏈方法的比較

由于先前多標簽代碼壞味檢測工作均采用分類器的方法,故本文將DMSmell方法與基于分類器鏈的檢測方法[20]進行比較。為了使比較更加公平,2種方法均在同一數(shù)據(jù)集上進行訓練,并使用Random Forest作為基分類器。

表5展示了在相同數(shù)據(jù)集下DMSmell方法與分類器鏈方法的檢測結果的比較。其中,DMSmell方法的漢明損失值較分類器鏈法0.033 5低,為0.026 9,意味著其能夠更準確地檢測出代碼中的多種壞味。同時,DMSmell的精確匹配率較分類器鏈法提高了1.36個百分點,對于微查全率,DMSmell方法則較分類器鏈法的95.55%提高到98.00%,提高了2.45個百分點,這進一步表明DMSmell方法在多標簽代碼壞味檢測方面的有效性。此外,本文也觀察到分類器鏈方法的微查準率(93.62%)略高于DMSmell方法的微查準率(93.46%)。但通過觀察綜合指標微F1發(fā)現(xiàn),DMSmell方法提升了1.1個百分點,這一結果表明本文的方法存在很小的誤報,但在整體性能上要優(yōu)于分類器鏈方法。

實驗結果表明,DMSmell方法在檢測多標簽代碼壞味方面優(yōu)于現(xiàn)有的多標簽代碼壞味檢測方法,更適用于多標簽代碼壞味的檢測。

4 結 語

本文提出了一種基于預訓練模型與BiLSTM-CNN的多標簽代碼壞味檢測方法DMSmell,將源代碼的結構度量信息和文本信息相結合,并且采用基于深度學習的方法進行代碼壞味檢測,提高了多標簽代碼壞味檢測的準確率。

1)DMSmell方法在處理文本信息方面利用預訓練模型代替了傳統(tǒng)的Work2vec方式,并利用傳統(tǒng)的BiLSTM和CNN分別獲取了文本信息和結構度量信息中深層次的特征,實現(xiàn)了更高效的特征表示學習。

2)本研究構建了一個公開的可進行多標簽代碼壞味檢測的數(shù)據(jù)集,其中包含源代碼的文本信息和結構度量信息,為后續(xù)研究人員在代碼壞味檢測領域的進一步研究提供了豐富的數(shù)據(jù)支持。

3)DMSmell方法與基于分類器鏈的檢測方法相比,在精確匹配率、微查全率和微F1上分別提高了1.36個百分點,2.45個百分點和1.1個百分點,表明DMSmell方法優(yōu)于現(xiàn)有的基于分類器鏈的多標簽代碼壞味檢測方法。

本文提出的DMSmell方法可以有效地對多標簽代碼壞味進行檢測,但本文所構建的數(shù)據(jù)集并不能代表所有領域,且僅選取了2種方法級代碼壞味,并未考慮其他類型的代碼壞味。因此,在未來工作中,將盡可能選擇更多來自不同領域的開源項目,以確保數(shù)據(jù)的多樣性,同時也要考慮其他高共現(xiàn)性的代碼壞味進行檢測,以進一步提高DMSmell方法的檢測性能。

參考文獻/References:

[1] FOKAEFS M,TSANTALIS N,STROULIA E,et al.JDeodorant: Identification and application of extract class refactorings[C]//2011 33rd International Conference on Software Engineering (ICSE).Honolulu:IEEE,2011:1037-1039.

[2] CRISTINA M,RADU M,MIHANCEA P F.iPlasma:An integrated platform for quality assessment of object-oriented design[C]//Proceedings of the 21st IEEE International Conference on Software Maintenance.Budapest:IEEE,2005:77-80.

[3] SANDOUKA R,ALJAMAAN H.Python code smells detection using conventional machine learning models[J].PeerJ Computer Science,2023,9:e1370.

[4] BRDAR I,VLAJKOV J,SLIVKA J,et al.Semi-supervised detection of long method and god class code smells[C]//2022 IEEE 20th Jubilee International Symposium on Intelligent Systems and Informatics (SISY).Subotica:IEEE,2022:403-408.

[5] YU Dongjin,XU Yihang,WENG Lehui,et al.Detecting and refactoring feature envy based on graph neural network[C]//2022 IEEE 33rd International Symposium on Software Reliability Engineering (ISSRE).Charlotte:IEEE,2022:458-469.

[6] GUGGULOTHU T,MOIZ S A.Code smell detection using multi-label classification approach[J].Software Quality Journal,2020,28(3):1063-1086.

[7] NUCCI D D,PALOMBA F,TAMBURRI D A,et al.Detecting code smells using machine learning techniques: Are we there yet?[C]//2018 IEEE 25th International Conference on Software Analysis,Evolution and Reengineering (SANER).Campobasso:IEEE,2018:612-621.

[8] KIYAK E O,BIRANT D,BIRANT K U.Comparison of Multi-Label classification algorithms for code smell detection[C]//2019 3rd International Symposium on Multidisciplinary Studies and Innovative Technologies (ISMSIT).Ankara:IEEE,2019:1-6.

[9] 王繼娜,陳軍華,高建華.基于排序損失的ECC多標簽代碼異味檢測方法[J].計算機研究與發(fā)展,2021,58(1):178-188.

WANG Jina,CHEN Junhua,GAO Jianhua.ECC Multi-Label code smell detection method based on ranking loss[J].Journal of Computer Research and Development,2021,58(1):178-188.

[10]AMORIM L,COSTA E,ANTUNES N,et al.Experience report:Evaluating the effectiveness of decision trees for detecting code smells[C]//2015 IEEE 26th International Symposium on Software Reliability Engineering (ISSRE).Gaithersbury:IEEE,2015:261-269.

[11]ZHANG Yang,GE Chuyan,HONG Shuai,et al.DeleSmell:Code smell detection based on deep learning and latent semantic analysis[J].Knowledge-Based Systems,2022,255:109737.

[12]ZHANG Yang,GE Chuyan,LIU Haiyang,et al.Code smell detection based on supervised learning models:A survey[J].Neurocomputing,2024,565:127014.

[13]TRIFU A,MARINESCU R.Diagnosing design problems in object oriented systems[C]//12th Working Conference on Reverse Engineering (WCRE′05).Pittsburgh:IEEE,2005:10.

[14]MARINESCU R.Measurement and quality in object-oriented design[C]//Proceedings of the 21st IEEE International Conference on Software Maintenance.Budapes:IEEE,2005:701-704.

[15]FENG Zhangyin,GUO Daya,TANG Duyu,et al.Codebert:A pre-trained model for programming and natural languages[C]//Findings of the Association for Computational Linguistics:EMNLP 2020.Online:ACL,2020:1536-1547.

[16]郝超,裘杭萍,孫毅.融合BERT和圖注意力網絡的多標簽文本分類[J].計算機系統(tǒng)應用,2022,31(6):167-174.

HAO Chao,QIU Hangping,SUN Yi.Incorporating BERT and graph attention network for multi-label text classification[J].Computer Systems & Applications,2022,31(6):167-174.

[17]GUO Shanshan,CHEN Shiyu,LI Yanjie.Face recognition based on convolutional neural network and support vector machine[C]//2016 IEEE International Conference on Information and Automation (ICIA).Ningbo:IEEE,2016:1787-1792.

[18]VASWANI A,SHAZEER N,PARMAR N,et al.Attention is all you need[C]//Advances in Neural Information Processing Systems 30.Long Beach:NIPS,2017:5998-6008.

[19]GIBAJA E,VENTURA S.A tutorial on multilabel learning[J].ACM Computing Surveys,2015,47(3):1-38.

[20]READ J,PFAHRINGER B,HOLMES G,et al.Classifier chains for multi-label classification[J].Machine Learning,2011,85(3):333-359.