








文章編號:1008-1542(2024)06-0636-07
摘" 要:
為了解決當前軟件重構領域深度學習模型預測性能研究的不足,提出了一種基于深度學習的軟件重構預測評估方法,以評估深度學習模型的重構預測性能。首先,采用靜態分析工具從303個Java項目中收集重構和非重構標簽實例,針對提取類、提取子類、提取超類、提取接口、移動類、重命名類以及移動和重命名類7種重構操作構建了7個由源代碼度量組成的數據集;其次,搭建卷積神經網絡模型、長短期記憶網絡模型、門控循環單元模型、多層感知機、自編碼器在數據集上進行訓練和測試;最后,根據每個模型的準確率、查準率、查全率和F1值對模型進行評估。結果表明,5種深度學習模型預測重構的準確率、查準率、查全率和F1值的平均值均在93%以上,預測提取子類的準確率最高,卷積神經網絡模型預測重構的平均準確率高于其他模型。卷積神經網絡模型
在軟件重構預測評估方面效果較好,為未來使用深度學習模型輔助完成重構推薦任務提供了參考。
關鍵詞:
軟件工程;深度學習;軟件重構;重構預測;源代碼度量
中圖分類號:
TP311.5
文獻標識碼:A
DOI:10.7535/hbkd.2024yx06008
收稿日期:2023-11-03;修回日期:2024-03-11;責任編輯:馮民
基金項目:
國家自然科學基金(61440012);河北省自然科學基金(F2023208001);河北省引進留學人員資助項目(C20230358)
第一作者簡介:
張亦弛(1999—),女,河北保定人,碩士研究生,主要從事智能軟件和性能優化方面的研究。
通信作者:
張楊,教授。E-mail:zhangyang@hebust.edu.cn
張亦弛,張楊,李彥磊,等.
基于深度學習的軟件重構預測評估方法
[J].河北科技大學學報,2024,45(6):636-642.
ZHANG Yichi,ZHANG Yang,LI Yanlei,et al.
Software refactoring prediction evaluation method based on deep learning models
[J].Journal of Hebei University of Science and Technology,2024,45(6):636-642.
Software refactoring prediction evaluation method
based on deep learning models
ZHANG Yichi,ZHANG Yang,LI Yanlei,ZHENG Kun,LIU Wei
(School of Information Science and Engineering, Hebei University of Science and Technology,
Shijiazhuang, Hebei 050018, China)
Abstract:
Aiming at the lack of research on the performance of deep learning models in predicting software refactoring in the current field, a deep learning-based software refactoring prediction evaluation method was proposed to assess the refactoring predictive performance of these models. Firstly, refactoring and non-refactoring labeled instances were collected from 303 Java projects using static analysis tools, and seven datasets comprising source code metrics were constructed for seven refactoring operations: extracting class, extracting subclass, extracting super class, extracting interface, moving class, renaming class, and moving and renaming class. Secondly, convolutional neural network (CNN), long short-term memory (LSTM) network, gated recurrent unit (GRU) model, multilayer perceptron(MLP), and autoencoder(AE) were trained and tested on the datasets. Finally, each model was evaluated based on accuracy, precision, recall, and F1-measure.The results show that the average accuracy, precision, recall, and F1-measure of the five deep learning models for predicting refactoring are all above 93%, with the highest accuracy in predicting the extract subclass refactoring, and the CNN model has a higher average accuracy compared to other models. The CNN model is efficient for software refactoring prediction evaluation, which provides reference for future utilization of deep learning models in assisting with completing refactoring recommendation tasks.
Keywords:
software engineering; deep learning; software refactoring; refactoring prediction; source code metrics
重構預測是開發人員進行軟件重構前的一個重要階段[1],通過分析軟件系統的特征和歷史數據,預測出哪些代碼需要進行重構。重構在不改變軟件外部行為的前提下調整代碼的內部結構,可以改善代碼的質量,提高軟件的可維護性和可擴展性[2-3]。
目前已有一些研究將深度學習應用于重構預測領域。ALENEZI等[4]首次采用門控循環單元(gate recurrent unit, GRU)算法開發了一個重構預測模型,在由7個開源Java項目組成的數據集上對類級別的重構操作進行預測,結果表明GRU模型能有效地預測代碼重構。KUMAR等[5]采用徑向基函數神經網絡(radial basis function network, RBFN)和多層感知機(multilayer perceptron, MLP)深度學習分類器在5個開源Java項目上進行方法級的重構預測,RBFN和MLP的預測準確率達到80%。CUI等[6]針對移動方法重構提出了一種推薦方法,從2個公開數據集中提取方法的結構信息和語義信息,訓練卷積神經網絡(convolutional neural network, CNN)模型和循環神經網絡(recurrent neural network, RNN)模型[7]的2種變體:循環神經網絡和長短期記憶網絡(RNN-LSTM)分類器和RNN-GRU分類器,以指導方法移動到合適的類。PEREIRA等[8]訓練CNN、RNN、長短期記憶網絡(long short-term memory, LSTM)等4種深度學習模型來預測一種方法是否應該進行提取方法類型的重構,發現LSTM模型取得最高平均準確率65.17%。
但目前的研究仍存在以下2個問題:一方面,軟件工程中部分使用率較高的深度學習模型在軟件重構領域的預測性能還未被探索;另一方面,缺乏基于多種深度學習模型與源代碼度量特征的大規模研究,哪種深度學習模型的重構預測性能更好仍需進一步研究。基于此,
本文提出一種基于深度學習的軟件重構預測評估方法,旨在評估深度學習模型的重構預測性能。
1" 重構預測評估方法
該評估方法是一個多步驟的過程。首先從GitHub中選取303個Java項目;其次采用RefactoringMiner[9]重構挖掘工具提取項目歷史提交中的7種重構標簽實例和非重構標簽實例,使用源代碼度量提取工具chidamber and kemerer (CK)[10]對重構和非重構實例的源代碼進行分析,提取36種源代碼度量信息;將源代碼度量信息和標簽相對應,構建7個初始數據集D1、D2、D3、D4、D5、D6、D7,分別用于預測提取類、提取子類、提取超類、提取接口、移動類、重命名類以及移動和重命名類7種重構操作;對初始數據集進行數據清洗、特征選擇、數據平衡處理,對處理后的7個數據集依次按4∶1的比例劃分為訓練集和測試集;搭建CNN、GRU、LSTM、MLP、AE 5種深度學習模型在訓練集上訓練,所得到的模型在測試集上預測重構;最終得到每個模型在每個數據集上預測的準確率、查準率、查全率和F1值,根據這些指標評估模型的重構預測性能。圖1為重構預測評估方法概述圖。
2" 實驗數據與評估標準
2.1" 數據的收集
為了使模型在工業環境中更具有通用性,本文選取GitHub庫[11]中星標數前1 000個Java項目,刪除其中的非實際應用項目以及在提交歷史中挖掘到的重構數據不足2 000條的項目,最終保留303個跨領域的大規模Java項目(其中部分項目已被用于重構預測領域)。
首先,提取標簽實例。使用RefactoringMiner工具[12]收集項目提交歷史中應用的提取類、提取子類、
提取超類、提取接口、移動類、重命名類以及移動和重命名類7種重構作為重構標簽;采用啟發式規則[13]收集連續50次被精確修改且未被RefactoringMiner檢測到重構操作的類作為非重構標簽實例。
其次,收集源代碼度量。使用CK工具提取36種源代碼度量作為數據集的特征。為了表示類的耦合性,選取類耦合度(CBO)、緊密結合類(TCC)等度量;為了表示類的復雜性,選取代碼行數(LOC)、權重方法類(WMC)、響應因子計數(RFC)、類中方法數等度量[9]。大量研究已經證實重構軟件系統與代碼質量度量之間的相關性[14-20]。
最后,將標簽與源代碼度量對應結合,得到分別用于預測提取類、提取子類、提取超類、提取接口、移動類、重命名類以及移動和重命名類的7個數據集,記為D1、D2、D3、D4、D5、D6、D7。
2.2" 數據預處理
1)對數據集進行去除異常值、缺失值、重復值等預處理。
2)為降低模型訓練的過擬合的風險并提高模型的泛化能力,使用基于方差的特征選擇技術[22]對特征進行篩選。經多次實驗,本文將方差的閾值設為5,刪除方差低于5的特征,以減少特征空間的維度。
3)采用SMOTE(synthetic minority over-sampling technique)[23]人工合成過采樣技術按照1∶1的正負樣本比例對少數類進行過采樣,生成新的樣本,解決數據集不平衡的問題。
經上述3步預處理,得到本實驗的數據集D1—D7,其最終樣本數分別為6 090、6 090、6 090、6 090、40 964、13 510、6 090。
2.3" 評估指標
為評估各模型的預測性能,選取準確率(Accuracy)、查準率(Precision)、查全率(Recall)和F1值(F1- measure)作為評估指標。
準確率是模型正確預測的樣本數量與總樣本數量之間的比例,能夠衡量模型整體預測的準確性,計算公式為
Accuracy=TP+TNTP+FP+TN+FN 。(1)
查準率是指預測結果中,被正確預測為正樣本的樣本數占所有預測為正樣本的樣本數的比例,計算公式為
Precision=TPTP+FP 。(2)
查全率是指在原始樣本的所有真實正樣本中,被正確預測為正樣本的樣本數占所有真實正樣本數的比例,計算公式為
Recall=TPTP+FN 。(3)
F1值為查準率和查全率的加權平均值,取值范圍在0到1之間,值越接近1表示模型性能越好,計算公式為
F1=2×Precision×RecallPrecision+Recall ,(4)
式中:TP(true positive)和TN(true negative)分別為樣本正類和樣本負類;FP(1 positive)為將錯誤樣本分成正確樣本的數量;FN(1 negative)為將正確樣本分成錯誤樣本的數量。公式中,TP、FP、TN、FN之和為總樣本的數量。
3" 模型訓練與參數設置
首先,搭建CNN、LSTM、GRU、MLP、AE 5種深度學習模型以及隨機森林、決策樹、邏輯回歸、樸素貝葉斯4種基線模型,這4種機器學習模型已被ANICHE等[13]證實了在重構預測領域的有效性;其次,在數據集D1—D7上使用9種模型進行
訓練和測試,對于一個給定重構操作R的二分類模型,給定代碼元素e(即源代碼指標),如果e應該進行重構R,模型的預測結果將為1;如果e不應該進行重構R,模型的預測結果將為0。
本實驗在一臺配置為2.7 GHz英特爾酷睿i7 CPU和16 GB主存的工作站上進行,該工作站運行的是64位的Windows 11系統。實驗中使用的是Python 3.8.16版本、TensorFlow 2.9.1版本、Keras 2.9.0版本。在實驗參數配置中,5種深度學習模型的迭代次數均設為60次,選擇Adam作為優化器,CNN、LSTM、GRU模型的損失函數為squared_hinge,MLP和AE模型的損失函數為categorical_crossentropy,輸出維度為1,學習率設置為0.000 001,批尺寸(batch_size)設置為16,正則化(dropout)設置為0.5。模型的其他參數設置詳見表1。
4" 實驗結果與分析
本文通過分析4個方面來評估深度學習模型預測重構的性能,即:1)深度學習模型的重構預測性能;2)深度學習模型與機器學習模型的重構預測性能對比;3)SMOTE技術對深度學習模型重構預測性能的提升效果;4)方差選擇技術對深度學習模型重構預測性能的提升效果。
4.1" 深度學習模型的重構預測性能
本實驗使用準確率、查準率、查全率和F1值作為模型性能的評估標準,表2給出了在數據集D1—D7上CNN、LSTM、GRU、MLP、AE模型預測重構的準確率(以下表中簡稱為Acc)、查準率(以下表中簡稱為Pre)、查全率(以下表中簡稱為Re)和F1值,以及每個模型預測重構的準確率、查準率、查全率和F1值的平均值。
從表2中可以看出:
1)CNN、GRU、LSTM、AE、MLP模型的平均準確率分別為97.6%、96.6%、95.4%、94.4%、93.2%,5種模型預測重構的準確率的平均值均在93%以上。
2)5種模型均在D2上達到最高的預測準確率,分別為99.1%、99.0%、98.3%、98.6%、97.9%,同時查準率、查全率和F1值也最高。
3)CNN模型在D1—D7上的準確率均高于GRU、LSTM、AE、MLP模型。
結果證明深度學習模型能夠有效預測軟件重構,模型預測提取子類重構時準確性最高,CNN模型是5種深度學習模型中預測最準確的模型。
4.2" 深度學習模型與機器學習模型的重構預測性能對比
深度學習模型和機器學習模型預測重構的結果如表3所示。其中,準確率、查準率、查全率和F1值均取模型在D1—D7上的平均值。
從表3可以看出,CNN模型的預測性能優于其他8個模型;GRU、LSTM、AE模型的預測性能與機器學習模型相比,優于決策樹、邏輯回歸、樸素貝葉斯,低于隨機森林;MLP模型的預測性能優于邏輯回歸和樸素貝葉斯。
4.3" SMOTE技術對深度學習模型重構預測性能的提升效果
表4為CNN模型在應用SMOTE技術前的數據集上預測正、負樣本的準確率、查準率、查全率和F1值,表5為CNN模型在應用SMOTE技術后的數據集上預測正、負樣本的準確率、查準率、查全率和F1值。
從表4可以看出,CNN模型在D2(without SMOTE)上預測正樣本的準確率比預測負樣本的準確率低25.38個百分點,在D4(without SMOTE)上預測正樣本的準確率比預測負樣本的準確率低14.05個百分點,在D5(without SMOTE)上預測正樣本的準確率比預測負樣本的準確率高11.85個百分點,造成這種結果的原因是數據集中正負樣本的不平衡。從表5可以看出,CNN模型在采用了SMOTE技術的數據集上預測正、負樣本的準確率最多相差3.83個百分點,正、負樣本的預測結果較接近,有效提升了模型對少數樣本預測的準確性。
將5種深度學習模型在采用SMOTE技術的數據集與不平衡數據集上的預測結果進行對比,準確率、查準率、查全率、F1值均取模型在數據集D1—D7上的預測結果的平均值,見表6。
從表6可以看出,在數據集應用SMOTE技術后,CNN、GRU、LSTM、AE、MLP模型的準確率分別提升了1.9、2.0、0.9、0.78、0.03個百分點,查準率分別提高了2.69、2.13、1.34、2.83、1.46個百分點,查全率分別提高了5.58、6.94、5.21、3.82、5.45個百分點,F1值分別提高了4.49、4.92、3.54、3.36、3.84個百分點。這表明對數據集應用SMOTE技術能夠提升深度學習模型預測重構的準確性。
4.4" 方差選擇技術對深度學習模型重構預測性能的提升效果
表7為應用方差選擇技術前后CNN、GRU、LSTM模型預測重構的準確率、查準率、查全率、F1值,預測結果均取模型在D1—D7上的平均值。
從表7可以看出,CNN、GRU、LSTM模型基于全部特征預測重構的準確率分別為97.02%、96.16%、94.27%,應用方差選擇技術后預測重構的準確率分別為97.56%、96.57%、95.39%。應用方差選擇技術對原始的36個特征進行篩選后,CNN、GRU、LSTM模型預測重構的準確率分別提高了0.54、0.41、1.12個百分點,查準率分別提高了0.55、0.41、1.20個百分點,查全率分別提高了0.54、0.41、1.12個百分點,F1值分別提高了0.54、0.42、1.12個百分點。
實驗結果表明,對數據集應用方差選擇技術能夠提升深度學習模型預測重構的準確性。方差選擇技術通過過濾掉方差很小的冗余特征,使模型可以更專注于學習真正與任務相關的特征,降低模型訓練出現過擬合的風險,從而提高模型的預測性能。
5" 結" 語
提出了一種基于深度學習的軟件重構預測評估方法,該方法提供了7個基于源代碼度量的針對類級重構預測的數據集;搭建了CNN、LSTM、GRU、MLP、AE 5種應用廣泛的深度學習模型,通過在數據集上訓練和測試,對每個模型的重構預測性能進行了評估。結果證明深度學習模型能夠有效地預測重構,模型預測提取子類重構最準確,CNN模型是5種深度學習模型中預測最準確的模型。研究結果為未來深度學習模型輔助完成重構推薦任務提供了參考依據。
本文只針對類級的重構操作進行了預測,未來還要完善對方法級和變量級重構操作的預測,以評估深度學習模型預測多級別重構類型的適用性,并結合Attention機制搭建更為復雜的深度學習模型,以進一步提高深度學習模型在重構預測領域的準確性。
參考文獻/References:
[1]" DALLAL J A.Identifying refactoring opportunities in object-oriented code:A systematic literature review[J].Information and Software Technology,2015,58:231-249.
[2]" FOWLER M.Refactoring-Improving the Design of Existing Code[M].Boston:Addison-Wesley,1999.
[3]" KIM M,ZIMMERMANN T,NAGAPPAN N.A field study of refactoring challenges and benefits[C]//Proceedings of the ACM SIGSOFT 20th International Symposium on the Foundations of Software Engineering.North Carolina:Association for Computing Machinery,2012.DOI: 10.1145/2393596.2393655.
[4]" ALENEZI M,AKOUR M,QASEM O A.Harnessing deep learning algorithms to predict software refactoring[J].Telecommunication Computing Electronics and Control (TELKOMNIKA),2020,18(6):2977-2982.
[5]" KUMAR L,SATAPATHY S M,MURTHY L B.Method level refactoring prediction on five open-source Java projects using machine learning techniques[C]//Proceedings of the 12th Innovations in Software Engineering Conference.New York:ACM,2019:1-10.
[6]" CUI Di,WANG Siqi,LUO Yong,et al.RMove: Recommending move method refactoring opportunities using structural and semantic representations of code[C]//2022 IEEE International Conference on Software Maintenance and Evolution (ICSME).Limassol:IEEE,2022:281-292.
[7]" CHO K,van MERRINBOER B,GULCEHRE C,et al.Learning phrase representations using RNN encoder-decoder for statistical machine translation[C]//In Proceedings of the 2014 Conference on Empirical Methods in Natural Language Processing. Doha:ACL,2014:1724-1734.
[8]" PEREIRA L R R,PEREIRA D L,DURELLI R S.Realizing refactoring prediction through deep learning[C]//Proceedings of the 3rd Brazilian Workshop on Intelligent Software Engineering.Porto Alegre:Sociedade Brasileira de Computao,2023:7-12.
[9]" TSANTALIS N,KETKAR A S,DIG D.RefactoringMiner 2.0[J]. IEEE Transactions on Software Engineering,2020.DOI: 10.1109/TSE.2020.3007722.
[10]ANICHE M.Java code metrics calculator(CK)[DB/OL].[2023-06-27].https://github.com/mauricioaniche/ck.
[11]ALSHARA Z,SALMAN H E,SHATNAWI A,et al.ML-augmented automation for recovering links between pull-requests and issues on GitHub[J].IEEE Access,2023,11:5596-5608.
[12]TSANTALIS N,MANSOURI M,ESHKEVARI L,et al.Accurate and efficient refactoring detection in commit history[C]//2018 IEEE/ACM 40th International Conference on Software Engineering (ICSE).Gothenburg:IEEE,2018:483-494.
[13]ANICHE M,MAZIERO E,DURELLI R,et al.The effectiveness of supervised machine learning algorithms in predicting software refactoring[J].IEEE Transactions on Software Engineering,2022,48(4):1432-1450.
[14]KATAOKA Y,IMAI T,ANDOU H,et al.A quantitative evaluation of maintainability enhancement by refactoring[C]//International Conference on Software Maintenance 2002 Proceedings.Montreal:IEEE,2002:576-585.
[15]MENS T,TOURWE T.A survey of software refactoring[J].IEEE Transactions on Software Engineering,2004,30(2):126-139.
[16]SHATNAWI R,LI W.An empirical assessment of refactoring impact on software quality using a hierarchical quality model[J].International Journal of Software Engineering and Its Applications,2011,5(4):127-150.
[17]ALENEZI M,AKOUR M,HUSSIEN A,et al.Test suite effectiveness: An indicator for open source software quality[C]//2016 2nd International Conference on Open Source Software Computing (OSSCOM).Beirut:IEEE,2016:1-5.
[18]SCALABRINO S,BAVOTA G,VENDOME C,et al.Automatically assessing code understandability: How far are we?[C]//2017 32nd IEEE/ACM International Conference on Automated Software Engineering (ASE).Urbana:IEEE,2017:417-427.
[19]ALENEZI M,AKOUR M,AL S H.The impact of co-evolution of code production and test suites through software releases in open source software systems[J].International Journal of Innovative Technology and Exploring Engineering,2019,9(1):2737-2739.
[20]ALOMAR E A,MKAOUER M W,OUNI A,et al.On the impact of refactoring on the relationship between quality attributes and design metrics[C]//2019 ACM/IEEE International Symposium on Empirical Software Engineering and Measurement (ESEM).Porto de Galinhas:IEEE,2019:1-11.
[21]紀銘涵,齊林,張楊,等.面向異步機制的自動重構方法研究[J].河北科技大學學報,2021,42(5):499-507.
JI Minghan,QI Lin,ZHANG Yang,et al.An automated refractoring approach for asynchronous mechanism[J].Journal of Hebei University of Science and Technology,2021,42(5):499-507.
[22]CHANDRASHEKAR G,SAHIN F.A survey on feature selection methods[J].Computers amp; Electrical Engineering,2014,40(1):16-28.
[23]CHAWLA N V,BOWYER K W,HALL L O,et al.SMOTE: Synthetic minority over-sampling technique[J].Journal of Artificial Intelligence Research,2002,16(1):321-357.