中文

从真实代码库中挖掘惯用法

软件工程 2021-07-15 v1

摘要

现有代码库中包含大量作为完成特定编程任务的惯用方式的代码模式实例。有时,所使用的编程语言支持特定的运算符或 API,能够以更简洁的方式表达相同的惯用命令式代码。然而,这些代码模式仍留存于代码库中,因为开发者可能不了解新 API 或未及修改。惯用代码的检测也可指向对新 API 的需求。我们分享了从 Facebook 的 Hack 代码库挖掘惯用模式的经验。我们发现现有技术要么无法从语法树中识别有意义模式,要么需要基于测试套件的动态分析以结合语义属性来挖掘有用模式。本文提出的方法——\emph{Jezero}——的关键洞见是,大型代码库中的语义惯用法可从\emph{规范化的}数据流树中学习。我们提出一种可扩展、轻量级的基于静态分析的方法来构建此类树,其非常适于使用非参数贝叶斯方法挖掘语义惯用法。我们在 Hack 代码上对 Jezero 的实验表明,向 AST 添加规范化数据流信息具有明显优势:\emph{Jezero} 在从未经标注的遗留代码中有效发现重构机会方面,显著优于无数据流增强的基线。

关键词

引用

@article{arxiv.2107.06402,
  title  = {Mining Idioms in the Wild},
  author = {Aishwarya Sivaraman and Rui Abreu and Andrew Scott and Tobi Akomolede and Satish Chandra},
  journal= {arXiv preprint arXiv:2107.06402},
  year   = {2021}
}