本發(fā)明涉及代碼重構(gòu),特別是一種基于深度學習的代碼自動重構(gòu)方法。
背景技術(shù):
1、在軟件系統(tǒng)開發(fā)中過程中,為了給軟件系統(tǒng)擴展新的功能,需要不停地堆砌軟件系統(tǒng)的源代碼,若不及時對源代碼進行維護,源代碼會朝著越來越混亂的方向演進,因此,為軟件系統(tǒng)開發(fā)新代碼的同時需要對源代碼進行重構(gòu)。
2、現(xiàn)有的源代碼重構(gòu)方法需要開發(fā)人員手動從軟件系統(tǒng)配置庫中下載最新源代碼并導入至本地的開發(fā)工具,在開發(fā)工具中逐個剝離源代碼中不需要的代碼,并檢查剩余源代碼中是否存在語法錯誤,若存在語法錯誤,需要進一步修改語法錯誤,才能夠得到重構(gòu)后的源代碼。可見,現(xiàn)有的源代碼重構(gòu)方法需要開發(fā)人員進行大量的手動操作,降低了源代碼重構(gòu)的效率。
技術(shù)實現(xiàn)思路
1、本發(fā)明的目的是為了解決上述問題,設計了一種基于深度學習的代碼自動重構(gòu)方法。
2、實現(xiàn)上述目的本發(fā)明的技術(shù)方案為,一種基于深度學習的代碼自動重構(gòu)方法,該方法包括如下步驟:
3、步驟一,構(gòu)建模型庫,基于深度學習算法構(gòu)建適用于不同代碼分析的重構(gòu)分析模型,將構(gòu)建好的多個重構(gòu)分析模型作為模型庫部署到建模開發(fā)平臺;
4、步驟二,觸發(fā)源代碼重構(gòu)機制,用戶獲取原始源代碼并將獲取的原始源代碼加載至建模開發(fā)平臺,然后在建模開發(fā)平臺上通過主動或者被動的方式觸發(fā)源代碼重構(gòu)機制,其中,主動觸發(fā)方式是由人工選定原始源代碼中的一部分并手動啟動源代碼重構(gòu)機制的方式,被動觸發(fā)方式是建模開發(fā)平臺在原始源代碼加載的過程中識別到重構(gòu)特征后自動啟動源代碼重構(gòu)機制的方式;
5、步驟三,源代碼的處理和分析,對建模開發(fā)平臺中的待重構(gòu)原始源代碼進行數(shù)據(jù)處理和分析并得到數(shù)據(jù)結(jié)果,將數(shù)據(jù)結(jié)果中的要素進行排列與組合,從而得到數(shù)據(jù)結(jié)果不同的表現(xiàn)形式,模型庫根據(jù)數(shù)據(jù)結(jié)果不同的表現(xiàn)形式自動選取相關(guān)的重構(gòu)分析模型,相關(guān)的重構(gòu)分析模型對數(shù)據(jù)結(jié)果的不同表現(xiàn)形式進行識別和處理并生成對應的重構(gòu)建議,建模開發(fā)平臺將數(shù)據(jù)結(jié)果不同的表現(xiàn)形式以及對應生成的重構(gòu)建議呈現(xiàn)給用戶;
6、步驟四,實施重構(gòu),用戶對數(shù)據(jù)結(jié)果不同的表現(xiàn)形式以及對應生成的重構(gòu)建議進行判斷和篩選,然后根據(jù)選定的重構(gòu)建議完成重構(gòu)操作,最終獲得目標代碼。
7、所述步驟一中構(gòu)建模型庫的過程如下:
8、a、構(gòu)建代碼庫,從開源項目或者內(nèi)部開源項目中收集和獲取代碼并利用獲取的代碼構(gòu)建代碼庫;
9、b、特征提取,對代碼庫內(nèi)的代碼進行特征提取并獲得與代碼對應的特征數(shù)據(jù),將與代碼對應的特征數(shù)據(jù)進行分類和調(diào)整,分類和調(diào)整的規(guī)則是依據(jù)與代碼對應的特征數(shù)據(jù)之間的關(guān)聯(lián)性大小進行分類,再將分類后的與代碼對應的特征數(shù)據(jù)進行排列與組合形成多種數(shù)據(jù)模式;
10、c、構(gòu)建模型庫,采用多個深度學習模型對經(jīng)過分類和調(diào)整的特征數(shù)據(jù)進行處理和分析,根據(jù)處理和分析結(jié)果選取適合的深度學習模型作為特征數(shù)據(jù)對應的重構(gòu)分析模型,利用得到的多個重構(gòu)分析模型構(gòu)建模型庫;
11、d、訓練和評估,對模型庫內(nèi)的多個重構(gòu)分析模型分別進行訓練和評估并調(diào)整超參數(shù);
12、e、部署和迭代,將模型庫內(nèi)的多個重構(gòu)分析模型均部署到建模開發(fā)平臺上,收集用戶對重構(gòu)結(jié)果的反饋,然后根據(jù)反饋結(jié)果定期更新重構(gòu)分析模型、調(diào)整模型架構(gòu)和參數(shù)。
13、所述代碼庫內(nèi)的代碼需要進行標記和預處理,代碼經(jīng)過標記和預處理后能夠滿足特征提取的需要。
14、所述特征提取的方式包括:代碼嵌入、抽象語法樹(ast)以及代碼的上下文,利用代碼嵌入、抽象語法樹(ast)以及代碼的上下文等方式獲得與代碼對應的特征數(shù)據(jù)。
15、所述與代碼對應的特征數(shù)據(jù)在分類和調(diào)整后需要經(jīng)過多個深度學習模型的處理并對處理后得到的結(jié)果進行分析,根據(jù)分析的結(jié)果選定適合的深度學習模型作為重構(gòu)分析模型,重構(gòu)分析模型需要經(jīng)過訓練、評估和超參數(shù)調(diào)整后才能夠?qū)嵤┎渴?,特征?shù)據(jù)與重構(gòu)分析模型之間是一對一的映射關(guān)系或者一對多的映射關(guān)系,深度學習模型包括:循環(huán)神經(jīng)網(wǎng)絡(rnn)模型、長短期記憶人工神經(jīng)網(wǎng)絡(lstm)模型、深度學習構(gòu)架(transformer)或圖神經(jīng)網(wǎng)絡模型。
16、所述深度學習模型對與代碼對應的特征數(shù)據(jù)的處理過程為:
17、輸入層:將與代碼對應的特征數(shù)據(jù)作為模型的輸入;
18、隱藏層:通過多個隱藏層來捕獲與代碼對應的特征數(shù)據(jù)中的數(shù)據(jù)模式,即捕獲與代碼對應的特征數(shù)據(jù)經(jīng)過分類和調(diào)整后形成的數(shù)據(jù)模式;
19、輸出層:依據(jù)捕獲的數(shù)據(jù)模式輸出重構(gòu)建議。
20、所述重構(gòu)分析模型的訓練過程是將代碼庫中經(jīng)過標記和預處理的代碼分離出一部分作為訓練集,使用訓練集內(nèi)的數(shù)據(jù)來訓練所述重構(gòu)分析模型,整個訓練過程涉及多個訓練周期和參數(shù)調(diào)整周期;所述重構(gòu)分析模型的評估是將代碼庫中經(jīng)過標記和預處理的代碼分離出一部分作為驗證集,利用驗證集來評估所述重構(gòu)分析模型的性能,評估的指標包括但不限于準確率、召回率、f1分數(shù);所述重構(gòu)分析模型的超參數(shù)調(diào)整是通過網(wǎng)格搜索方式、隨機搜索方式或貝葉斯優(yōu)化方式來調(diào)整模型的超參數(shù)。
21、所述步驟二中獲取原始源代碼的渠道是從代碼配置庫中加載或者從開源項目中加載。
22、所述步驟三中對建模開發(fā)平臺中的待重構(gòu)原始源代碼進行數(shù)據(jù)處理的方式包括但不限于:去除注釋、空格等無關(guān)信息,將代碼轉(zhuǎn)換為統(tǒng)一的格式和表示方式;對建模開發(fā)平臺中的待重構(gòu)原始源代碼進行分析的方式包括但不限于:提取原始源代碼中關(guān)鍵要素,將提取的關(guān)鍵要素進行排列和組合,進而獲得多種不同的數(shù)據(jù)結(jié)果表現(xiàn)形式,并根據(jù)上述關(guān)鍵要素識別出原始原代碼中潛在的問題;所述重構(gòu)建議包括但不限于:代碼結(jié)構(gòu)優(yōu)化、算法優(yōu)化、代碼風格改進。
23、所述步驟四中用戶實施的重構(gòu)操作和重構(gòu)過程將作為重構(gòu)結(jié)果的反饋被建模開發(fā)平臺記錄,重構(gòu)結(jié)果的反饋將用于豐富代碼庫并對重構(gòu)分析模型進行迭代優(yōu)化。
24、與現(xiàn)有技術(shù)相比,本發(fā)明具有以下有益效果:
25、1、本發(fā)明利用深度學習模型對代碼進行自動分析并獲得重構(gòu)分析模型,然后對原始源代碼進行處理和分析得到數(shù)據(jù)結(jié)果,再依據(jù)數(shù)據(jù)結(jié)果結(jié)合重構(gòu)分析模型對原始源代碼的重構(gòu)過程進行智能分析并得到重構(gòu)建議,進而提升用戶對原始源代碼的重構(gòu)效率,降低重構(gòu)的工作量。
26、2、本發(fā)明根據(jù)用戶的請求利用重構(gòu)分析模型對原始源代碼進行分析并得到對應的重構(gòu)建議,然后通過重構(gòu)建議實現(xiàn)原始源代碼的自動重構(gòu)得到用戶所需的目標源代碼,從而實現(xiàn)的代碼重構(gòu)的智能化,減少代碼重構(gòu)過程中的操作難度。
1.一種基于深度學習的代碼自動重構(gòu)方法,其特征在于,該方法包括如下步驟:
2.根據(jù)權(quán)利要求1所述的一種基于深度學習的代碼自動重構(gòu)方法,其特征在于,所述步驟一中構(gòu)建模型庫的過程如下:
3.根據(jù)權(quán)利要求2所述的一種基于深度學習的代碼自動重構(gòu)方法,其特征在于,所述代碼庫內(nèi)的代碼需要進行標記和預處理,代碼經(jīng)過標記和預處理后能夠滿足特征提取的需要。
4.根據(jù)權(quán)利要求3所述的一種基于深度學習的代碼自動重構(gòu)方法,其特征在于,所述特征提取的方式包括:代碼嵌入、抽象語法樹以及代碼的上下文,利用代碼嵌入、抽象語法樹以及代碼的上下文的方式獲得與代碼對應的特征數(shù)據(jù)。
5.根據(jù)權(quán)利要求4所述的一種基于深度學習的代碼自動重構(gòu)方法,其特征在于,所述與代碼對應的特征數(shù)據(jù)依據(jù)其形成的數(shù)據(jù)模式選定適合的深度學習模型作為重構(gòu)分析模型。
6.根據(jù)權(quán)利要求5所述的一種基于深度學習的代碼自動重構(gòu)方法,其特征在于,所述深度學習模型對與代碼對應的特征數(shù)據(jù)進行處理的過程為:
7.根據(jù)權(quán)利要求5所述的一種基于深度學習的代碼自動重構(gòu)方法,其特征在于,所述重構(gòu)分析模型的訓練過程是將代碼庫中經(jīng)過標記和預處理的代碼分離出一部分作為訓練集,使用訓練集內(nèi)的數(shù)據(jù)來訓練模型;所述重構(gòu)分析模型的評估是將代碼庫中經(jīng)過標記和預處理的代碼分離出一部分作為驗證集,利用驗證集來評估所述重構(gòu)分析模型的性能;所述重構(gòu)分析模型的超參數(shù)調(diào)整是通過網(wǎng)格搜索方式、隨機搜索方式或貝葉斯優(yōu)化方式來調(diào)整所述重構(gòu)分析模型的超參數(shù)。
8.根據(jù)權(quán)利要求1所述的一種基于深度學習的代碼自動重構(gòu)方法,其特征在于,所述步驟二中獲取原始源代碼的渠道是從代碼配置庫中加載或者從開源項目中加載。
9.根據(jù)權(quán)利要求1所述的一種基于深度學習的代碼自動重構(gòu)方法,其特征在于,所述步驟三中對建模開發(fā)平臺中的待重構(gòu)原始源代碼進行數(shù)據(jù)處理的方式包括但不限于:去除無關(guān)信息、將代碼轉(zhuǎn)換為統(tǒng)一的格式和表示方式;對建模開發(fā)平臺中的待重構(gòu)原始源代碼進行分析的方式包括但不限于:提取原始源代碼中的關(guān)鍵要素,并將提取的關(guān)鍵要素進行排列和組合,進而獲得多種不同的表現(xiàn)形式;所述步驟三中的重構(gòu)建議包括但不限于:代碼結(jié)構(gòu)優(yōu)化、算法優(yōu)化、代碼風格改進。
10.根據(jù)權(quán)利要求1所述的一種基于深度學習的代碼自動重構(gòu)方法,其特征在于,所述步驟四中用戶實施的重構(gòu)操作和重構(gòu)過程都將作為重構(gòu)結(jié)果的反饋被建模開發(fā)平臺記錄,重構(gòu)結(jié)果的反饋將用于豐富代碼庫并對重構(gòu)分析模型進行迭代優(yōu)化。