RACK:用众包知识在集成开发环境中搜索代码

< p >

组织代码查询

1年。参考

Rahman M M,Roy C K,Lo D,等. RACK:使用众包知识在集成开发环境中进行代码搜索

图1显示了RACK的用户界面,其中(b)-(c)是查询建议面板,(d)-(e)是代码搜索面板,(f)-(g)是结果面板

本节讨论我们的工具提供的不同技术特性

(1)代码搜索查询的自动建议:

由于为编程任务准备一个有效的查询是一个主要的挑战,RACK自动为代码搜索的相关关键字(即API类)提供建议

(ii)缓解单词不匹配:当非结构化自然语言查询用于代码搜索时,基于文本相似性的搜索技术(如向量空间模型)经常会遇到这个问题。

因此,RACK (1)为Alice提供了一个或多个简明且相关的代码示例,而无需花费太多精力或时间(即10-15秒),(2)通过有效的查询重组(即相关的应用编程接口类)克服了传统代码搜索引擎的词汇不匹配问题,(3)以有意义的见解和方便的查看面板显示结果简而言之,我们的工具代替了Alice完成了所有繁重的工作,并且为代码搜索和问题解决提供了比传统方法更好的选择。

3.3工作方法

图3显示了我们建议的工具的示意图本节简要讨论了该工具的内部结构和工作方法,同时请读者参考原始文档。

9集成开发环境中的代码搜索:一旦包含适当的/相关的应用编程接口类的重构查询被提交到RACK,它就使用GitHub搜索应用编程接口,并从四大组织(Apache、Eclipse、谷歌和Facebook)托管的数千个开源项目中收集相关的源代码文件。由于开发人员通常对试图执行特定任务的代码片段感兴趣,我们使用基于AST的解析(例如,Javaparser库)(即,图3-(c)中的步骤1-3)来解析每个源文件中的所有方法GitHub API为每个结果文件返回一个相关性分数,它与从文件中提取的所有方法的文本相似性分数(和搜索查询)相结合。这种组合为每个代码片段提供了组合依赖性(即方法),并且RACK最终返回ide中相关代码片段的有序列表(即步骤4、5,图3-(c))

3.4性能

RACK的这一部分已经过严格评估和验证,因为我们的原始文件[8]声明它对查询重组的建议做出了重大贡献。为了评估所建议的API性能,我们使用了从三个编程教程站点中随机选择的150个代码搜索查询来进行实验。评估显示,在排名前10的应用编程接口推荐中,RACK至少可以为79%的查询提供一个相关的应用编程接口推荐,根据文献,这是非常先进的。与最先进的技术——图恩等人的[9——相比,不仅验证了我们的性能,也验证了RACK在相关建议上的优势。由于我们重建的查询包含最好的应用编程接口类(黄金集应用编程接口类),并且我们使用GitHub应用编程接口进行代码搜索,我们的查询也可能返回相关的代码片段,因为GitHub在源代码搜索中应用关键字匹配。

4年。本文的主要贡献是

在本文中,我们提出了一个新的代码搜索工具-RACK,它接受来自开发人员的非结构化自然语言查询(即不需要应用编程接口信息)作为输入,并返回来自成千上万个开源项目的相关代码片段作为输出。该工具首先从集成开发环境中的两个工作上下文(如代码注释)中捕获开发人员的代码搜索意图作为查询,自动将查询转换为相关的应用编程接口类,然后通过应用它们(指转换后的应用编程接口类)从GitHub搜索应用编程接口中收集相关的代码样本由于堆栈溢出问答站点中的每个问题都总结了一个编程问题/任务,相应的答案通常包含解决该问题的适当的应用编程接口。因此,我们从堆栈溢出中挖掘数千个问题和相应的可接受答案,以建立关键字-API关联,从而将自然语言查询(即编程任务)转换成相关的API类因此,该工具既可以用作查询推荐器,也可以用作代码搜索引擎。我们将我们的解决方案打包到一个Eclipse插件中,该插件允许开发人员在IDE中执行代码搜索,这样他们就可以避免烦人的上下文切换问题总之,我们的工具提供了以下特性来支持开发人员进行代码搜索:

(a)工具自动将非结构化自然语言查询转换成与编程任务相关的应用编程接口类

(b)基于从数千个堆栈溢出的编程问题和答案中挖掘的关键字-应用编程接口关联来确定返回的应用编程接口类的相关性

(c)缓解现有技术和传统代码搜索引擎面临的单词不匹配问题

(d)将GitHub搜索应用编程接口集成到集成开发环境中,并进行基于集成开发环境的代码搜索,以便显示结果。

与任何传统搜索不同,

(e)为搜索查询和搜索结果提供了有意义的相关性见解

大家都在看

相关专题