中文

无变更示例的客户端代码迁移

软件工程 2021-05-07 v1

摘要

API 开发者演进软件库以修复缺陷、添加新特性或重构代码。为从此类库演进中获益,客户端项目的程序员必须重复性地升级其库用法并将代码库适配到任何库 API 破坏性变更(例如 API 重命名)。此类适配性修改可能繁琐且易出错。现有工具在帮助程序员将客户端项目从旧库版本迁移到新版本方面支持有限。例如,某些工具提取库版本间的 API 映射并仅建议简单的适配性修改(即语句更新);其他工具基于用户提供的示例性代码迁移建议或自动化更复杂的编辑(例如语句插入)。然而,当新库版本可用时,用户通常需提供充足的人工编写样本以引导自动迁移,这繁琐且耗时。本文提出一种新方法 AutoUpdate,以进一步改进当前最优水平。AutoUpdate 不从事例变更中学习,而是以编译器引导的方式自动化迁移。即,给定由库升级触发的编译错误,AutoUpdate 利用 13 个迁移算子生成候选编辑,并试探性地应用每个编辑直至错误解决或所有编辑被探索。我们进行了两个实验。第一个实验涉及在 5 个流行库版本间迁移 371 个教程示例。AutoUpdate 对 92.7% 的任务减少了迁移相关的编译错误。它对 32.4% 的任务消除了此类错误,且 33.9% 的任务具有与人工迁移相同的编辑。在第二个实验中,我们应用 AutoUpdate 迁移 lucene 的两个真实客户端项目。AutoUpdate 成功迁移了两个项目,且迁移后的代码通过了所有测试。

关键词

引用

@article{arxiv.2105.02389,
  title  = {Migrating Client Code without Change Examples},
  author = {Hao Zhong and Na Meng},
  journal= {arXiv preprint arXiv:2105.02389},
  year   = {2021}
}