计算+金融 | 代码搜索工具的机遇与挑战

来源:上海高等研究院发布时间:2022-03-11浏览次数:68


代码搜索是软件工程的核心任务之一。有效的代码搜索工具可帮助开发者大幅提高软件开发的效率和效果。近年来,许多相关研究利用深度学习和信息检索方法等技术,从大规模代码库中检索出所预期的代码。

 

尽管如此,研究人员对现有代码搜索方法的总结尚未完成。为了解代码搜索研究的趋势,杨小虎博士(浙江大学计算机科学与技术学院研究员、浙江大学区块链研究中心主任、浙江大学上海高等研究院计算+金融双聘教授)和他的合作者系统地回顾了81项相关研究,涉及基准分析、学习模型、模型融合、跨语言搜索和搜索任务等方面,总结了代码搜索所面临的挑战和未来的机遇。



作者们调研了代码搜索相关研究的发表趋势,分析了代码库、查询(Query)和建模技术等用于建立代码搜索工具的关键因素来增强对这些工具及其特点的理解,并通过分析每类工具之间的关系确定比较的基准,将现有工具划分为七类,分别支持不同的搜索任务。综合比较之后,他们回答了三个问题。


1.    代码搜索研究的论文发表趋势如何?

      从2002年开始,软件工程研究文献开始关注代码搜索问题,此后相关研究越来越多,于2019年达到高峰。60%的研究发表在会议上(而不是在期刊上),67项研究提出了新的代码搜索工具。


2.    在代码搜索工具开发中,最重要的因素、技术有哪些?

      74%的工具用自然语言(例如文本、API名称、输入/输出)所编写的查询来搜索源代码,过去两年中最流行的建模技术为深度学习。反转索引常被用于加速代码搜索效率,研究人员还利用其他辅助技术(即查询重构、代码聚类、主动学习等)来提高搜索精度。然而,只有12项代码搜索研究在论文中分享了可访问的复制包链接或在GitHub中提供了源代码。


3.    这些研究怎样评估代码搜索工具的性能?

      大多数研究的代码库建立在用Java编写的大规模方法级源代码的基础上,这些代码从公共代码库(如GitHubFDroid)收集而来,大多数相关研究从问答论坛(如Stack Overflow)收集前N个常用的基于文本的查询,并以此来测试所提出的搜索工具。大多数研究用排名指标(如MRRNDCG等)来评估工具性能,55%的代码搜索工具通过人工分析来评估性能。

 

根据这些研究结果,作者们认为,现有代码搜索研究面临着代码库的多样性、查询的有限性、模型构建和评估、重复性和性能参数有限等一系列挑战。相比之下,相关研究的机遇包括寻找更好的基准、融合不同类型的模型、开发多语言工具以及开发新代码搜索任务的新工具。

 

作者们建议研究人员可使用多种编程语言编写大规模代码并在此基础上建立更好的衡量基准,查询需涵盖常见案例和特定领域案例,并开发标准的自动评估方法。研究人员需要进一步改进基于深度学习的工具,例如提升代码表示,采用更高质量的训练数据,提高搜索速度。作者们建议将基于深度学习的工具与传统的基于信息检索的模型和启发式模型等其他模型相融合。现有工具很难用于搜索多种编程语言编写的代码,因此,研究人员需要开发适用于多语言的搜索工具,以及可用于搜索用户界面代码或编程视频的新代码搜索任务的工具。

 

这项研究发表在ACM Computing Surveys,全文请参见https://doi.org/10.1145/3480027