[论文解读] Why Developers Refactor Source Code: A Mining-based Study
本研究通过大规模混合方法分析150个开源Java项目中的287,813次重构操作,探究开发者进行代码重构的原因。结合代码与过程度量的定量挖掘及551个拉取请求的定性分析,作者识别出67种不同的重构动机,揭示语义度量和非功能性权衡显著影响开发者决策,并指出现有重构推荐系统与工具中的关键缺口。
Refactoring aims at improving code non-functional attributes without modifying its external behavior. Previous studies investigated the motivations behind refactoring by surveying developers. With the aim of generalizing and complementing their findings, we present a large-scale study quantitatively and qualitatively investigating why developers perform refactoring in open source projects. First, we mine 287,813 refactoring operations performed in the history of 150 systems. Using this dataset, we investigate the interplay between refactoring operations and process (e.g., previous changes/fixes) and product (e.g., quality metrics) metrics. Then, we manually analyze 551 merged pull requests implementing refactoring operations and classify the motivations behind the implemented refactorings (e.g., removal of code duplication). Our results led to (i) quantitative evidence of the relationship existing between certain process/product metrics and refactoring operations and (ii) a detailed taxonomy, generalizing and complementing the ones existing in the literature, of motivations pushing developers to refactor source code.
研究动机与目标
- 理解软件重构的真实动机,超越基于调查的假设。
- 识别与开源系统中重构操作相关的软件产品与过程度量。
- 从实际开发实践出发,构建全面且基于实证的重构动机分类体系。
- 评估仅依赖结构或质量度量的现有重构推荐系统的局限性。
- 为未来工具与推荐系统的设计提供依据,以考虑多样化、上下文敏感的开发者目标。
提出的方法
- 使用RMiner工具挖掘GitHub上150个开源Java项目的版本历史,提取25种类型的287,813次重构操作。
- 分析重构操作与产品度量(如代码质量、可读性、C3)及过程度量(如故障倾向性、变更频率)之间的关系。
- 选取具有统计显著性的551个包含重构更改的拉取请求样本进行人工分析。
- 对拉取请求讨论与提交信息进行定性编码,以分类每次重构背后的原因与意图。
- 通过综合人工分析结果,归纳并扩展先前基于调查的分类体系,构建包含67种动机的分类体系。
- 将定量度量相关性与定性动机进行对比,评估基于度量的重构推荐系统之局限性。
实验结果
研究问题
- RQ1在真实世界软件项目中,哪些产品与过程度量与重构操作具有最强相关性?
- RQ2基于实际拉取请求讨论与代码更改,开发者执行重构的主要动机是什么?
- RQ3本研究识别出的动机与先前基于调查的研究结果相比,有何异同或扩展?
- RQ4当前基于代码质量度量的重构推荐系统,在多大程度上能够捕捉开发者驱动重构动机的完整谱系?
- RQ5现有工具与实践中存在哪些关键缺口,导致常见手动重构难以实现自动化?
主要发现
- 语义度量——特别是可读性与C3(类的概念内聚性)——与重构操作表现出最强的定量相关性,表明开发者优先考虑代码可理解性。
- 最常被提及的重构动机包括消除代码重复、提升可读性以及修复代码坏味道,定性分析共识别出67种不同动机。
- 许多重构操作由代码审查反馈驱动,尤其是命名改进与缩写展开,表明同行评审是变更的主要催化剂。
- 大量重构具有前瞻性或旨在适应未来变更,凸显了当前推荐系统常忽略的战略性、前瞻性维度。
- 仅依赖结构或质量度量的现有重构推荐系统很可能遗漏大量有意义的重构,特别是由语义或可维护性权衡驱动的重构。
- 本研究识别出关键的自动化机会,如自动展开缩写与检测冗余代码,尽管已有研究解决方案,但目前仍缺乏生产就绪的工具支持。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。