一種對程序代碼進(jìn)行重構(gòu)操作組合的方法
【專利摘要】本發(fā)明提供一種對程序代碼進(jìn)行重構(gòu)操作組合的方法,包括以下步驟:步驟a:重構(gòu)操作組合初始化步驟;步驟b:抽取前置、后置關(guān)鍵程序代碼元素步驟;步驟c:標(biāo)記依賴關(guān)系步驟;步驟d:標(biāo)記可交換關(guān)系與重排序步驟;步驟e:標(biāo)記可優(yōu)化能力步驟;步驟f:優(yōu)化操作步驟;步驟g:導(dǎo)出優(yōu)化后的程序代碼步驟;其中所述依賴關(guān)系包括完全依賴關(guān)系、完全部分依賴關(guān)系、部分完全依賴關(guān)系、部分部分依賴關(guān)系;其中所述可交換關(guān)系包括無條件交換關(guān)系、條件交換關(guān)系。該方法具有重構(gòu)效率高、處理靈活、優(yōu)化徹底等特點。
【專利說明】一種對程序代碼進(jìn)行重構(gòu)操作組合的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及代碼重構(gòu)技術(shù),尤其是一種對程序代碼進(jìn)行重構(gòu)操作組合的方法。
【背景技術(shù)】
[0002]重構(gòu)是指在不改變“軟件之可察行為”的前提下,通過調(diào)整程序內(nèi)部結(jié)構(gòu)設(shè)計,讓代碼更容易理解、更容易修改,重構(gòu)為極限編程、快速編程等提供了保障與支持,但關(guān)于重構(gòu)工具的研究卻還停留在探索階段。重構(gòu)操作工具有eclipse (針對Java程序的集成開發(fā)工具)重構(gòu)等,但這類工具嚴(yán)重地依賴于代碼工作者的指令操作,運行效率低。
[0003]代碼重構(gòu)過程往往不是獨立進(jìn)行的,重構(gòu)經(jīng)常伴隨著多個步驟的同時進(jìn)行,合理地組織多個重構(gòu)操作之間的組合執(zhí)行順序是重構(gòu)執(zhí)行的關(guān)鍵。本發(fā)明研究一種對程序代碼進(jìn)行重構(gòu)操作組合的方法,為智能化重構(gòu)操作奠定了基礎(chǔ),具有重構(gòu)效率高等特點。
【發(fā)明內(nèi)容】
[0004]本發(fā)明提供一種對程序代碼進(jìn)行重構(gòu)操作組合的方法,包括以下步驟:
步驟a:重構(gòu)操作組合初始化步驟;載入待優(yōu)化的重構(gòu)操作組合,讀取用戶自定義的初始重構(gòu)操作組合配置,所述初始重構(gòu)操作組合滿足所有前置條件檢查要求,對所有前置條件合法性進(jìn)行驗證,確保初始重構(gòu)組合可正確運行;
步驟b:抽取前置、后置關(guān)鍵程序代碼元素步驟;根據(jù)所述用戶自定義的初始重構(gòu)操作組合,抽取組合中各重構(gòu)操作的前置關(guān)鍵程序代碼元素與后置關(guān)鍵程序代碼元素;所述前置關(guān)鍵程序代碼元素代表重構(gòu)操作作用前的程序代碼元素狀態(tài),所述后置關(guān)鍵程序代碼元素代表重構(gòu)操作作用后的程序代碼元素狀態(tài);
步驟c:標(biāo)記依賴關(guān)系步驟;通過遍歷重構(gòu)操作組合中的具體重構(gòu)操作,同時分析初始重構(gòu)組合的前置和后置關(guān)鍵程序代碼元素,如果一對重構(gòu)操作中的后者前置條件滿足依賴于前者重構(gòu)執(zhí)行的結(jié)果,則用標(biāo)識來標(biāo)記各重構(gòu)操作間的依賴關(guān)系;
步驟d:標(biāo)記可交換關(guān)系與重排序步驟;如果一對重構(gòu)操作中的前者與后者順序交換后,重構(gòu)操作組合執(zhí)行的結(jié)果不變,則認(rèn)為這兩個重構(gòu)操作間存在可交換的關(guān)系,用標(biāo)識來標(biāo)記各重構(gòu)操作間的可交換關(guān)系;并根據(jù)各重構(gòu)操作間的可交換關(guān)系對重構(gòu)操作組合進(jìn)行交換操作,即對重構(gòu)組合進(jìn)行重排序操作后得到新重構(gòu)操作組合;
步驟e:標(biāo)記可優(yōu)化能力步驟;對所述新重構(gòu)操作組合進(jìn)行步驟c操作,調(diào)整所述新重構(gòu)操作組合間的依賴關(guān)系,由所述新重構(gòu)操作組合及各重構(gòu)操作間的依賴關(guān)系,通過重構(gòu)組合優(yōu)化規(guī)則得出所述新重構(gòu)操作組合的可優(yōu)化能力,并用標(biāo)識進(jìn)行標(biāo)記;
步驟f:優(yōu)化操作步驟;將重構(gòu)組合優(yōu)化規(guī)則應(yīng)用于所述新重構(gòu)操作組合進(jìn)行優(yōu)化操作;如果優(yōu)化操作進(jìn)程中斷或阻斷,則退回初始狀態(tài)避免死循環(huán)操作;
步驟g:導(dǎo)出優(yōu)化后的程序代碼步驟;導(dǎo)出對所述新重構(gòu)操作組合優(yōu)化操作后的程序代碼。
[0005]其中所述依賴關(guān)系包括完全依賴關(guān)系、完全部分依賴關(guān)系、部分完全依賴關(guān)系、部分部分依賴關(guān)系。
[0006]其中所述可交換關(guān)系包括無條件交換關(guān)系、條件交換關(guān)系。
[0007]其中所述重構(gòu)組合優(yōu)化規(guī)則包括組合壓縮規(guī)則和歸并重組規(guī)則。
[0008]本發(fā)明的技術(shù)效果是:
1、重構(gòu)效率高,處理過程靈活,重構(gòu)組合高度簡化,重構(gòu)操作復(fù)雜度大大降低;
2、支持大量重構(gòu)操作同時執(zhí)行,適用于批量的重構(gòu)操作,重構(gòu)性能明顯提升;
3、設(shè)定了重構(gòu)組合優(yōu)化規(guī)則,優(yōu)化實施自左向右,過程清晰,系統(tǒng)資源占用少、出錯響應(yīng)速度快;
4、實現(xiàn)過程簡單,可行性強,易操作、易上手,為自動化、智能化重構(gòu)奠定了良好的基礎(chǔ)。
【專利附圖】
【附圖說明】
[0009]圖1為本發(fā)明的代碼重構(gòu)操作步驟圖。
[0010]圖2為本發(fā)明的總體架構(gòu)流程圖。
【具體實施方式】
[0011]如圖1所示,本發(fā)明的代碼重構(gòu)操作步驟圖,本發(fā)明提供的一種對程序代碼進(jìn)行重構(gòu)操作組合的方法,包括步驟:
步驟a:重構(gòu)操作組合初始化步驟;載入待優(yōu)化的重構(gòu)操作組合,讀取用戶自定義的初始重構(gòu)操作組合配置,所述初始重構(gòu)操作組合滿足所有前置條件檢查要求,對所有前置條件合法性進(jìn)行驗證,確保初始重構(gòu)組合可正確運行;
步驟b:抽取前置、后置關(guān)鍵程序代碼元素步驟;根據(jù)所述用戶自定義的初始重構(gòu)操作組合,抽取組合中各重構(gòu)操作的前置關(guān)鍵程序代碼元素與后置關(guān)鍵程序代碼元素;所述前置關(guān)鍵程序代碼元素代表重構(gòu)操作作用前的程序代碼元素狀態(tài),所述后置關(guān)鍵程序代碼元素代表重構(gòu)操作作用后的程序代碼元素狀態(tài);
步驟c:標(biāo)記依賴關(guān)系步驟;通過遍歷重構(gòu)操作組合中的具體重構(gòu)操作,同時分析初始重構(gòu)組合的前置和后置關(guān)鍵程序代碼元素,如果一對重構(gòu)操作中的后者前置條件滿足依賴于前者重構(gòu)執(zhí)行的結(jié)果,則用標(biāo)識來標(biāo)記各重構(gòu)操作間的依賴關(guān)系;
步驟d:標(biāo)記可交換關(guān)系與重排序步驟;如果一對重構(gòu)操作中的前者與后者順序交換后,重構(gòu)操作組合執(zhí)行的結(jié)果不變,則認(rèn)為這兩個重構(gòu)操作間存在可交換的關(guān)系,用標(biāo)識來標(biāo)記各重構(gòu)操作間的可交換關(guān)系;并根據(jù)各重構(gòu)操作間的可交換關(guān)系對重構(gòu)操作組合進(jìn)行交換操作,即對重構(gòu)組合進(jìn)行重排序操作后得到新重構(gòu)操作組合;
步驟e:標(biāo)記可優(yōu)化能力步驟;對所述新重構(gòu)操作組合進(jìn)行步驟c操作,調(diào)整所述新重構(gòu)操作組合間的依賴關(guān)系,由所述新重構(gòu)操作組合及各重構(gòu)操作間的依賴關(guān)系,通過重構(gòu)組合優(yōu)化規(guī)則得出所述新重構(gòu)操作組合的可優(yōu)化能力,并用標(biāo)識進(jìn)行標(biāo)記;
步驟f:優(yōu)化操作步驟;將重構(gòu)組合優(yōu)化規(guī)則應(yīng)用于所述新重構(gòu)操作組合進(jìn)行優(yōu)化操作;如果優(yōu)化操作進(jìn)程中斷或阻斷,則退回初始狀態(tài)避免死循環(huán)操作;
步驟g:導(dǎo)出優(yōu)化后的程序代碼步驟;導(dǎo)出對所述新重構(gòu)操作組合優(yōu)化操作后的程序代碼。[0012]如圖2所示本發(fā)明的總體架構(gòu)流程圖,本發(fā)明通過載入待優(yōu)化的重構(gòu)操作組合并讀取用戶自定義的組合初始配置,對初始重構(gòu)組合進(jìn)行一系列的分析處理操作,通過遍歷探索操作間關(guān)系發(fā)現(xiàn)操作間的潛在可優(yōu)化性,重排重構(gòu)操作位置并對可優(yōu)化的重構(gòu)操作對自左向右依次應(yīng)用相應(yīng)的優(yōu)化規(guī)則,進(jìn)而簡化重構(gòu)復(fù)雜性縮短重構(gòu)操作步驟,最終得到優(yōu)化的重構(gòu)操作組合。
[0013]1、重構(gòu)操作關(guān)系推導(dǎo):
首先,根據(jù)用戶自定義初始組合推斷出各個重構(gòu)操作的前置關(guān)鍵程序代碼元素與后置關(guān)鍵程序代碼元素。前置關(guān)鍵程序代碼元素可以代表重構(gòu)操作作用前的待重構(gòu)程序代碼元素狀態(tài),后置關(guān)鍵程序代碼元素可以代表重構(gòu)操作作用后的待重構(gòu)程序代碼元素狀態(tài),重構(gòu)操作單元的本質(zhì)是將前置關(guān)鍵程序代碼元素轉(zhuǎn)換為后置關(guān)鍵程序代碼元素。例如:重構(gòu)操作“重命名方法MethodNamel為方法MethodName2”,則前置關(guān)鍵程序代碼元素為:MethodNameI,后置關(guān)鍵程序代碼元素為:MethodName2。
[0014]其次,遍歷探索并標(biāo)記重構(gòu)操作間的依賴關(guān)系。在一對重構(gòu)操作中,若后者前置條件的滿足依賴于前者重構(gòu)執(zhí)行的結(jié)果,則稱這兩個重構(gòu)操作間存在依賴的關(guān)系。兩重構(gòu)操作間的依賴關(guān)系有四種:完全-完全依賴(后者前置條件剛好完全依賴于前者重構(gòu)執(zhí)行結(jié)果)、完全-部分依賴(后者前置條件完全依賴于前者重構(gòu)執(zhí)行結(jié)果的一部分)、部分-完全依賴(后者前置條件不僅依賴前者重構(gòu)執(zhí)行的結(jié)果,還依賴其它重構(gòu)執(zhí)行的結(jié)果)和部分-部分依賴(后者前置條件依賴前者重構(gòu)執(zhí)行結(jié)果的一部分,還依賴其它重構(gòu)執(zhí)行的結(jié)果)。
[0015]然后,由初始重構(gòu)操作組合的依賴關(guān)系分析推導(dǎo)重構(gòu)操作間的交換關(guān)系。在一對重構(gòu)操作中,若前者與后者的順序交換后,重構(gòu)操作組合執(zhí)行的結(jié)果不變,則稱這兩個重構(gòu)操作間存在可交換的關(guān)系。兩重構(gòu)操作間的交換關(guān)系有兩種:無條件交換(前者與后者直接交換順序,不用進(jìn)行任何其它處理)和條件交換(前者與后者交換后,需相應(yīng)地修改因后者前置而導(dǎo)致前者中受影響的關(guān)鍵程序代碼元素)。
[0016]2、重構(gòu)組合優(yōu)化規(guī)則應(yīng)用:
首先,根據(jù)重構(gòu)操作間的交換關(guān)系,標(biāo)記可交換的重構(gòu)操作對。針對重構(gòu)操作組合中的交換關(guān)系標(biāo)記,分別對相應(yīng)的重構(gòu)操作對進(jìn)行無條件交換或條件交換。重構(gòu)操作交換過程又稱為對初始重構(gòu)組合的重排,重排是重構(gòu)組合深度優(yōu)化過程的一個重要部分,為重構(gòu)組合優(yōu)化規(guī)則的應(yīng)用奠定了基礎(chǔ)。
[0017]其次,對重排后的重構(gòu)組合進(jìn)行分析,探索并標(biāo)記重構(gòu)組合的可優(yōu)化潛能。適當(dāng)調(diào)整重排后的重構(gòu)操作間的依賴關(guān)系,由新的重構(gòu)操作組合及各重構(gòu)操作間的依賴關(guān)系,通過適配重構(gòu)組合優(yōu)化規(guī)則來分析探索重構(gòu)操作組合的可優(yōu)化能力,并用特定標(biāo)識標(biāo)記。
[0018]然后,對可優(yōu)化的重構(gòu)操作對應(yīng)用重構(gòu)操作組合優(yōu)化規(guī)則。針對之前分析探索得到的重構(gòu)操作可優(yōu)化能力,將相應(yīng)的重構(gòu)組合優(yōu)化規(guī)則應(yīng)用于重排序后的新重構(gòu)操作組合。重構(gòu)操作組合優(yōu)化規(guī)則有兩種:組合壓縮規(guī)則(可直接合并前后兩個重構(gòu)操作,只進(jìn)行一次前置條件檢查和一次重構(gòu)轉(zhuǎn)換操作)和歸并重組規(guī)則(合并前后兩個重構(gòu)操作,進(jìn)行一次前置條件檢查和兩次重構(gòu)轉(zhuǎn)換操作)。
【權(quán)利要求】
1.一種對程序代碼進(jìn)行重構(gòu)操作組合的方法,其特征在于,包括以下步驟: 步驟a:重構(gòu)操作組合初始化步驟;載入待優(yōu)化的重構(gòu)操作組合,讀取用戶自定義的初始重構(gòu)操作組合配置,所述初始重構(gòu)操作組合滿足所有前置條件檢查要求,對所有前置條件合法性進(jìn)行驗證,確保初始重構(gòu)組合可正確運行; 步驟b:抽取前置、后置關(guān)鍵程序代碼元素步驟;根據(jù)所述用戶自定義的初始重構(gòu)操作組合,抽取組合中各重構(gòu)操作的前置關(guān)鍵程序代碼元素與后置關(guān)鍵程序代碼元素;所述前置關(guān)鍵程序代碼元素代表重構(gòu)操作作用前的程序代碼元素狀態(tài),所述后置關(guān)鍵程序代碼元素代表重構(gòu)操作作用后的程序代碼元素狀態(tài); 步驟c:標(biāo)記依賴關(guān)系步驟;通過遍歷重構(gòu)操作組合中的具體重構(gòu)操作,同時分析初始重構(gòu)組合的前置和后置關(guān)鍵程序代碼元素,如果一對重構(gòu)操作中的后者前置條件滿足依賴于前者重構(gòu)執(zhí)行的結(jié)果,則用標(biāo)識來標(biāo)記各重構(gòu)操作間的依賴關(guān)系; 步驟d:標(biāo)記可交換關(guān)系與重排序步驟;如果一對重構(gòu)操作中的前者與后者順序交換后,重構(gòu)操作組合執(zhí)行的結(jié)果不變,則認(rèn)為這兩個重構(gòu)操作間存在可交換的關(guān)系,用標(biāo)識來標(biāo)記各重構(gòu)操作間的可交換關(guān)系;并根據(jù)各重構(gòu)操作間的可交換關(guān)系對重構(gòu)操作組合進(jìn)行交換操作,即對重構(gòu)組合進(jìn)行重排序操作后得到新重構(gòu)操作組合; 步驟e:標(biāo)記可優(yōu)化能力步驟;對所述新重構(gòu)操作組合進(jìn)行步驟c操作,調(diào)整所述新重構(gòu)操作組合間的依賴關(guān)系,由所述新重構(gòu)操作組合及各重構(gòu)操作間的依賴關(guān)系,通過重構(gòu)組合優(yōu)化規(guī)則得出所述新重構(gòu)操作組合的可優(yōu)化能力,并用標(biāo)識進(jìn)行標(biāo)記; 步驟f:優(yōu)化操作步驟;將重構(gòu)組合優(yōu)化規(guī)則應(yīng)用于所述新重構(gòu)操作組合進(jìn)行優(yōu)化操作;如果優(yōu)化操作進(jìn)程中斷或阻斷,則退回初始狀態(tài)避免死循環(huán)操作; 步驟g:導(dǎo)出優(yōu)化后的程序代碼步驟;導(dǎo)出對所述新重構(gòu)操作組合優(yōu)化操作后的程序代碼。
2.根據(jù)權(quán)利要求1所述的一種對程序代碼進(jìn)行重構(gòu)操作組合的方法,其特征在于:所述依賴關(guān)系包括完全依賴關(guān)系、完全部分依賴關(guān)系、部分完全依賴關(guān)系、部分部分依賴關(guān)系O
3.根據(jù)權(quán)利要求1所述的一種對程序代碼進(jìn)行重構(gòu)操作組合的方法,其特征在于:所述可交換關(guān)系包括無條件交換關(guān)系、條件交換關(guān)系。
4.根據(jù)權(quán)利要求1所述的一種對程序代碼進(jìn)行重構(gòu)操作組合的方法,其特征在于:所述重構(gòu)組合優(yōu)化規(guī)則包括組合壓縮規(guī)則和歸并重組規(guī)則。
【文檔編號】G06F9/44GK103699377SQ201310639852
【公開日】2014年4月2日 申請日期:2013年12月4日 優(yōu)先權(quán)日:2013年12月4日
【發(fā)明者】梁良, 馬勇, 朱正剛, 余鵬飛 申請人:國家電網(wǎng)公司, 國網(wǎng)江西省電力公司信息通信分公司