MORCoRA: Multi-Objective Refactoring Recommendation Considering Review Availability

本文提出了 MORCoRA,一种多目标搜索式技术,旨在生成既能提升代码质量又能确保拥有合适且空闲的审查者进行及时审查的代码重构序列。

Lei Chen, Shinpei Hayashi

发布于 Tue, 10 Ma
📖 1 分钟阅读☕ 轻松阅读

Each language version is independently generated for its own context, not a direct translation.

这篇论文介绍了一个名为 MORCoRA 的新工具,它的核心任务是帮程序员“整理代码”(重构),但加了一个非常人性化的新视角:不仅要代码变好,还要确保有人有空且有能力去审核这个改动。

我们可以把软件开发想象成经营一家繁忙的餐厅

1. 背景:为什么需要“整理”?

想象一下,这家餐厅(软件项目)开了很久,后厨的菜单(代码)写得乱七八糟。有的菜名很怪,有的步骤重复,厨师(开发者)很难记住怎么操作。

  • 重构(Refactoring) 就是请一位“整理大师”来重新排列菜单,让菜名更清晰、步骤更顺畅。
  • 传统做法:以前的工具只关心“怎么把菜单整理得最漂亮、最科学”。
  • 现实问题:但是,整理好的新菜单不能直接挂上去啊!必须得经过主厨(Reviewer) 审核签字。如果主厨太忙,或者根本看不懂这道新菜,那这个整理计划就会被搁置,甚至被直接扔掉。结果就是,餐厅的菜单依然乱糟糟,质量越来越差。

2. MORCoRA 的三大目标

MORCoRA 就像一个超级智能的餐厅顾问,它在推荐整理方案时,会同时考虑三个因素(就像三个天平):

  1. 让菜更好吃(提升代码质量):整理后的菜单必须更清晰、更易于维护。
  2. 别改错味道(保持语义连贯):不能为了整齐把“红烧肉”改名叫“清蒸鱼”,虽然名字整齐了,但味道全变了,顾客会投诉。
  3. 确保有人能审核(审查可用性):这是 MORCoRA 最创新的地方。它不仅要找整理方案,还要找合适的审核人
    • 懂行:审核人必须熟悉这道菜(代码模块)。
    • 有空:审核人不能正在忙得焦头烂额(比如手里还有 10 个待审的 PR)。如果主厨太忙,再好的方案也过不了。

3. 它是如何工作的?(像寻宝游戏)

MORCoRA 使用了一种叫 NSGA-II 的算法,这就像是一个不知疲倦的寻宝机器人

  • 它在代码的迷宫里寻找成千上万种“整理方案”。
  • 每找到一个方案,它就算一下:
    • 这个方案能让代码质量提高多少?
    • 这个方案会不会破坏原本的功能?
    • 关键点:现在有哪些人既懂这个模块,又刚好手头没那么多活?
  • 最后,它会给你一份“帕累托最优”清单:这些方案都是在三个目标之间取得了最佳平衡的。餐厅经理(项目负责人)可以从中挑一个最合适的。

4. 实验结果:真的有用吗?

研究人员在 6 个著名的开源项目(像 Mockito、Glide 等)上测试了这个工具。

  • 对比旧工具:以前的工具只关注“怎么整理最好”,结果推荐了很多方案,但发现没人有空审核,或者审核的人根本不懂,导致方案被搁置。
  • MORCoRA 的表现
    • 它推荐的方案,有 433.8% 的可能性能找到合适的审核人!
    • 虽然它推荐的方案在“理论上的完美程度”上可能比旧工具稍微低一点点(比如只提升了 75% 的质量),但因为真的有人能审核并执行,所以实际效果反而更好。
    • 它成功避免了那种“虽然方案很完美,但主厨忙得没空看,最后烂在锅里”的情况。

5. 举个生动的例子

想象你在 GitHub 上提了一个修改建议(Pull Request):

  • 旧模式:你建议把“红烧肉”改成“东坡肉”。系统说:“这个改法能让菜单结构更完美!”于是它推荐给你。结果,负责审核的主厨 A 正在忙 10 个新菜,主厨 B 虽然有空但完全不懂这道菜。最后,你的建议被无限期推迟,甚至被忽略。
  • MORCoRA 模式:系统说:“虽然把‘红烧肉’改成‘东坡肉’很完美,但主厨 A 太忙了,主厨 B 不懂。不如我们换个方案,把‘红烧肉’改成‘梅菜扣肉’,这个改动虽然小一点,但主厨 C 既懂行又刚好有空,他马上就能审核通过!”
    • 结果:你的改动真的被实施了,餐厅的菜单真的变好了。

总结

这篇论文告诉我们:在软件开发中,不仅要追求“技术上的完美”,还要考虑“人的因素”。

MORCoRA 就像是一个懂人情世故的管家,它明白:一个再完美的计划,如果找不到合适的人去执行,那也只是一张废纸。它通过平衡代码质量功能安全人力资源,确保推荐的每一个改动都能真正落地,让软件变得更好。