中文

使用静态与动态分析的跨语言代码搜索

软件工程 2021-06-18 v1

摘要

随着代码搜索渗透于软件开发的大部分活动,代码到代码搜索应运而生,以支持使用代码作为查询并检索相似的代码。应用包括用于重构的重复代码检测、用于程序修复的补丁识别以及语言翻译。现有的代码到代码搜索工具依赖静态相似度方法(如 token 与抽象语法树(AST)的比较)来近似动态行为,导致精度较低。大多数工具不支持跨语言代码到代码搜索,而支持的工具依赖需要标注训练数据的机器学习模型。我们提出跨语言代码到代码搜索(COSAL),一种同时使用静态与动态分析来识别相似代码且不需要机器学习模型的跨语言技术。代码片段使用基于代码 token 相似度、结构相似度和行为相似度的非支配排序进行排名。我们在包含 43,146 个 Java 和 Python 文件以及 55,499 个 Java 文件的两个数据集上实证评估 COSAL,发现 1)基于静态与动态相似度度量的非支配排序的代码搜索比单一或加权度量更有效;以及 2)与最先进的同语言及跨语言代码到代码搜索工具相比,COSAL 具有更好的精确率和召回率。我们探索了在大型开源仓库上使用 COSAL 的潜力,并讨论了向更多语言和相似度度量的可扩展性,为实用的多语言代码到代码搜索提供了途径。

关键词

引用

@article{arxiv.2106.09173,
  title  = {Cross-Language Code Search using Static and Dynamic Analyses},
  author = {George Mathew and Kathryn T. Stolee},
  journal= {arXiv preprint arXiv:2106.09173},
  year   = {2021}
}

备注

Accepted at FSE 2021; 13 pages, 4 figures, 8 tables