핵심 개념
本文提出一種基於多視圖圖形聚類的方法,用於自動分解「神」標頭檔,以提高軟體的可維護性和編譯效率。
초록
本文首先介紹了「神」標頭檔的問題,並進行了一項初步研究,發現「神」標頭檔在開源項目中普遍存在。為了解決這一問題,本文提出了一種基於多視圖圖形聚類的方法。
該方法包括以下四個步驟:
-
圖形構建階段:構建包含代碼元素及其依賴、語義和共用關係的代碼元素圖。
-
圖形粗化階段:利用稀疏但影響較大的依賴關係,將緊密相關的代碼元素合併,確保它們不會在後續過程中被分離。
-
多視圖聚類階段:利用語義和共用關係,通過一種新的多視圖圖形聚類算法對粗化後的圖進行聚類,將功能相似的代碼元素分組。
-
循環依賴修復階段:使用啟發式搜索算法解決聚類結果中的循環依賴問題。
實驗結果表明,與現有的「神」類重構方法相比,本文的方法在準確性、模塊性和編譯時間節省方面都有顯著提升。具體而言:
- 在合成數據集上,本文方法的準確性平均提高11.5%。
- 在真實世界的「神」標頭檔上,本文方法生成的子標頭檔具有更高的模塊性和無循環依賴。
- 本文方法可以將歷史提交的重編譯時間減少15%到60%。
통계
分解「神」標頭檔guc.h可以減少44.8%的重編譯文件數量,41.6%的重編譯代碼行數,以及43.2%的重編譯時間。
分解「神」標頭檔SDL_dynapi_overrides.h可以減少60%的重編譯時間。
인용구
"「神」標頭檔,就像「神」類一樣,給代碼理解和維護帶來了巨大挑戰。此外,它們還增加了代碼重編譯所需的時間。"
"現有的「神」類重構方法不適合處理「神」標頭檔,因為標頭檔中的代碼元素大多是簡短的聲明類型,而且需要考慮整個系統的構建依賴,以提高編譯效率。同時,確保分解後的子標頭檔之間沒有循環依賴也至關重要。"