文摘

开发人员将执行大量的搜索行为当面对每天的工作任务,寻找可重用的代码片段,解决具体问题,算法设计,软件文档和软件工具从公共存储库(包括开源社区和论坛博客)或私人存储库(内部软件存储库、源代码平台、社区等)充分利用现有软件开发资源和经验。本文首先需要深入编程对软件开发过程的理解。在本文中,我们首先定义软件工程代码搜索任务从深程序的角度理解。其次,本文总结了两个研究范式的深软件工程代码搜索和组合相关的研究成果。同时,本文总结了常见的评价方法和组织软件工程代码搜索任务。最后,本文的结果是加上一个对未来的研究前景。

1。介绍

开发人员面临着大量的搜索行为在日常工作任务,寻找可重用的代码片段,解决具体问题,算法设计,软件文档,从公共存储库和软件工具(包括开源社区和论坛博客)或私人存储库(内部软件存储库、源代码平台、社区等)充分利用现有软件开发资源和经验,提高软件的可重用性,同时降低开发成本,提高开发效率。在1997年进行的一项研究显示,代码搜索已经成为软件开发活动(最常见的活动1]。研究表明,开发人员会构造平均每工作日12查询语句搜索遇到的问题。可以看出代码搜索获得软件开发活动的重要性。北京大学学者已经进行了相关文献的总结工作代码搜索工具。作者建立了一个分类系统分类代码搜索工具的代码库组织,查询文本,搜索模型和评价方法(2]。代码搜索可以从搜索分类形式,如代码搜索基于自然语言查询,代码克隆检测、代码搜索测试用例的基础上,面向代码搜索的缺陷检测,搜索应用程序编程接口。公共点定位代码文件或碎片从用户需求,满足用户需求,结合信息检索,程序理解,和机器学习技术(3]。的框架代码理解基于深层神经网络如图1

其中,基于自然语言查询的代码搜索接近的实际需要开发人员和当前代码搜索的热点研究。代码搜索任务类似传统的临时任务,但是代码搜索任务也有许多困难,这在下一节中介绍。

2。研究背景

基于自然语言查询的代码搜索更接近的实际需要开发人员和当前代码搜索的热点研究。代码搜索任务类似传统的临时任务,但代码搜索任务也有以下困难。

2.1。跨通道匹配问题

在代码搜索任务,查询和文档在不同的模式。查询主要是用自然语言表示形式,在目标文档与程序源代码文本语言语法的限制,跨通道语义鸿沟问题时需要考虑计算匹配(4]。

2.2。查询意图的理解问题

所表达的意图查询代码搜索任务更加多样化。他们包括用户开发需求、建设性的需求达到一个特定的技术路线,使用一个特定的接口和API要求。有必要结合软件工程领域知识语义理解模型当构建检索模型来理解用户的查询需求5]。

2.3。程序理解问题

代码搜索模型首先需要建立一个理解的源代码片段检索对象。它包括代码语法语义,API功能信息,代码结构特点和功能特性的代码。其中,标识符和程序结构是建筑的核心程序理解(6]。

可以看到,当前代码搜索研究面临的主要问题是如何理解程序的功能和查询意图匹配基于程序理解,即。联合建模的自然语言和基于程序的代码片段的理解。在本文中,我们提出一个审查最近的代码搜索研究进展从程序的角度理解。

3所示。材料和方法

3.1。基本理论
3.1.1。项目的理解

程序理解是软件工程中的一个关键活动,和项目的重要性理解在软件工程中由北约会议上澄清了软件工程在1968年举行。软件工程师依靠了解程序在执行任务,比如软件重用、维护、移民和逆向工程(7]。

在协作开发的情况下,开发人员需要了解软件架构和接口设计模式开发和实现的软件功能,在软件维护,维护人员需要了解现有项目的主要功能和实现方法为基础进一步缺陷检查和修复。“理解”本质上是一个概念域的映射对象的理解(例如,文本和源代码)的主题理解的概念域(人类,模型)是熟悉的学习。程序理解的主题是整个软件系统或它的一部分,旨在研究它是如何工作的(8]。程序理解任务包括构造模型在每个抽象层次从代码模型应用程序域问题,理解软件使用领域知识和构造软件构件之间的认知模型和使用场景,并判断他们的角色和关系与其他组件通过阅读源代码。其最终目的是支持软件维护,进化,和再造9]。

分类根据实现方法,程序的理解可以分为两个主要方法:基于分析和学习。分析程序理解方法严重依赖分析师的个人知识和经验,并构建一个程序理解模型相当于手动构建一组相关功能(10]。这些方法往往伴随着特定的软件系统,及相关规则的经验更难于被转移到其他项目。同时,随着软件规模的增加,所需的资源分析将增加+上升,效率会降低。

3.1.2。深程序的理解

大量的开源代码的可用性在互联网上提供足够的数据上优于程序理解方法。研究表明,程序源代码属性类似于自然语言,这自然结合统计模型,提供了一个理论依据特别是深模型,源代码分析和理解(11]。一些学者进行了深入的分析源代码localness对统计建模的影响(12]。国内学者提供了一个详细的概述的进步和挑战在深源代码建模(13]。软件工程的代码如图表示理解2

深上优于程序理解框架,它包含两个主要阶段,首先构造相应的源代码文本表示根据不同的任务和在此基础上构造特征向量通过深度模型的源代码,适用于特定的任务(14]。

具体来说,首先转换成CharSequence进行程序源代码,TokenSequence, APISequence, AbstractsyntaxTree (AST)和FunctionCallGraph (CFP)根据任务15]。

在此基础上,源代码不同表示用于特定任务后被神经网络转化为特征向量。源代码中有不同的表现形式特征和适用的任务。项目基于词的建模表示类似于自然语言理解模型的建模和实现起来比较简单,易于迁移16]。然而,基于代码建模方法常常饱受OutOfVocabulary (OOV)问题由于通过标识符的存在情况下17]。字符序列建模可以解决OOV问题,但性格之平衡表示有困难学习单词的含义,因此较弱的表征能力。API包含在代码通常设计为标准,尽管措辞比较固定,所以学习API序列具有良好的结果在这两个代码搜索和总结任务(18]。这是显示在图3

它可以观察到,单独使用的词序列的表示源代码缺乏表征能力,所以结合多通道方法模型源代码是逐渐进入研究者的思想的前沿。语法树代码建模可以改善学习不足的问题按顺序程序结构建模。然而,大多数现有的研究使用序列抽样获取节点序列语法树的表示形式,并利用树结构是不够的。西北理工大学学者提出了一种改进的融合方法语法树信息代码表示方法,在语法树作为一个平行语料库的代码序列建模和自然语言片段序列,基于与源代码改进源代码搜索任务的有效性。图能力的神经网络模型自然语言文本结构也启发代码建模的探索。源代码数据更容易构建图表示比自然语言文本,所以程序理解模型,结合图结构有更好的前景。

可以看到,深代码理解研究是许多软件工程任务的基础,并从不同特征向量表示可以提供足够的功能信息代码搜索任务。下一节定义了从深程序代码搜索任务的理解视角。

3.2。研究方法
3.2.1之上。B-RRT ~ 曾经的算法

RRT算法是一种最具代表性的sampling-based路径规划算法,从而达到扩张的目的通过随机树生成采样点的空间,使用起点作为根节点,并从最近的增长和无碰撞采样节点的方向连接在一个指定的步骤中,直到叶节点和目标点之间的联系是无碰撞;然后,完成路径规划。算法的基本步骤如下:步骤1:考虑到地图空间 ,起点Pstart和挂件。步骤2:Prand随机抽样得到的空间。步骤3:从最近的节点Pnear成长指向Prand与步骤 和新生成的点定义为Pnew。步骤4:有一定概率抽样点不会生长在随机采样点Prand但选择直接向终点挂件。第五步:当树生长挂件或Pnew与挂件与障碍不相交,可行的路径σ是生成的。虽然RRT算法概率完整性和可以快速获得可行的解决方案空间,寻找解决方案的过程是盲目的,尤其是因为Prand是通过随机抽样,使这棵树生长在一个随机的方向,和节点的算法缺乏难忘的扩张,导致冗余。

RRT的 算法属于最优算法,可以获得和渐近最优路径中获取足够的采样点更新迭代。该算法增加了两个操作和节点的父节点重新选择重新连接:父节点重新选择:与Pnew为圆心,节点在该地区 半径选择替代父母,与这些节点和路径成本计算作为父母,和最小化成本的路径的节点被选中作为新的父母。路径选择成本最低的节点作为新父母和连接,如果有一个冲突的路径,其他替代选择父母。节点重新连接:以Pnew为圆心,选择范围 随着半径,试图改变节点的父节点范围内Pnew;如果这样做可以减少路径的总成本,然后断开节点的父节点和连接Pnew;如果连接有一个碰撞,然后放弃此连接,继续选择其他节点范围内依次尝试。如果随机抽样点Pn完全最优路径上 从Pstart挂件,路径成本降低是由于Pn成为周边节点的父的次数足够多后取样。因为算法扩展的搜索,而父节点重新选择和节点重新连接操作树遍历所有点,导致一个巨大的记忆负担,可以提高算法的搜索效率,解决节点的数量。RRT的 FN算法(Fixed-nodesRRT )引入了最大数量的概念基于RRT的节点 算法,它集树中的节点允许的最大数量,并随机删除一个没有孩子的节点除了结束节点的节点数量时状态空间大于预设节点。RRT的台阶 FN算法如下:步骤1:一样RRT算法步骤1、步骤2和步骤3。第二步:执行父节点重新选择和节点重新连接。步骤3:每次生成一个Pnew,检查出现在空间节点的数目,如果大于FixNodes随机删除节点的最大数量的无子女的叶节点路径的最后一个节点。第四步:当树生长挂件或Pnew挂件连接不相交的障碍,可行的路径σ是生成的。重复步骤1到步骤3的渐近路径的优化解决方案。

B-RRT 曾经算法:RRT的启发 FN算法,为了进一步提高RRT的搜索效率 FN算法和该算法应用到动态环境中,本文提出了B-RRT 曾经算法(BidirectionalRRT Fix-NodeDynamic),提高了原始RRT算法 FN算法通过以下改进,结合双向RRT贪婪搜索策略 FN算法相结合,进一步加快规划RRT的速度 FN算法。它还利用动态更新和路径修复,使该算法适用于未知的情况下,运动障碍。

贪婪的双向搜索:改进算法结合了双向RRT贪婪搜索策略 FN算法来解决这个问题失明的单方面的树木的生长。RRT的 FN RRT算法没有优势 算法在搜索速度,只能减少残余采样点,以避免冗余的增长,已经限制树的大小的影响,提高程序运行速度的迭代次数时高导致大量树大小,并迅速获得路径解决方案无关。的双向贪婪搜索策略,算法规划路径有明显的方向性,可以更快地获得一个初始路径。贪婪的双向搜索需要建立两个随机搜索树,Tree1 Tree2,同时启动和目标点,两棵树生长向对方,分别使用贪婪策略在经济增长过程中。本文结合RRT双向贪婪搜索策略 FN算法来改善传统的单向随机缺陷的树木生长较差的目的。两棵树创建Pstart起始点和目标点的挂件,并且每个生长贪婪地向另一个。绿线是树开始,蓝线是树。黑色的圆圈表示障碍。状态空间中的节点生成在下标的顺序,如果指定在每个树节点的数目不超过5。

摘要RRT 损失价值和RRT 曾经损失值很低在每个隐层节点树,和11个节点的总数是2至12日和损失值都高于2。结果表明,RRT 损失价值和RRT 曾经失去的价值很低,如图4

在本文中,对每个隐层节点树,B-RRT ~ 曾经失去价值和RRT 曾经损失价值高,远高于本文选定的节点数量总共需要11节点从2到12;6以上,损失值和结果表明,B-RRT ~ 曾经失去价值和RRT 曾经损失价值较高,如图5

为了验证本文算法的有效性,BRRT 曾经算法与其他算法相比,在三个地图,及其性能指标评估。促进仿真分析和考虑合理性,因为RRT类算法是基于随机抽样,有机会在仿真过程中,每个测量结果可能会导致很大的差异是因为不同的采样点位置。为了排除机会带来的影响,本文进行50个独立实验对于每个案例和整理结果进行比较和分析。

双向算法在寻找快速解决方案,具有一定的优势和整体路径成本进一步降低是由于改进算法使用双向贪婪搜索策略。自从B-RRT 算法,RRT 和B-RRT FN算法 曾经的算法都是最优解算法;迭代过程路径解决方案参数的路径解决方案摘要整理,如图6

可以看出B-RRT的路径解决方案和搜索时间 曾经算法由于其他两种算法。B-RRT的长度 500年之后的算法迭代B-RRT的基本上是一样的 曾经的算法,而是因为它没有一个固定数量的节点,运行时间会增加迭代次数,简明地1500次迭代之后,改进算法的运行时间和迭代的数量是近似线性的。在3000次迭代,B-RRT 算法需要36.117秒,B-RRT 曾经是29.221秒。该算法性能比较(2)如图7

3.2.2。主要评价方法

是一个概念空间, 是所有流浪的变量在空间的集合。风险衡量 是一个映射 从一个 的子集 真实的数字,表示

首先定义 函数畸变函数(distortionfunction) 如果它是一个单调不减少的功能和满足

接下来,定义 风险衡量,通常被称为distortionriskmesure如果 满足

在哪里 是变形函数, , 就是尾分布。

假设是总面临风险 由保险公司 配分函数,代表保险公司面临的风险本身的一部分转移到再保险公司。再保险公司保险公司收取的保费来补充他们承担的风险,因为他们认为部分保险公司的风险。在本文中,我们假定再保险费用标准具有以下形式: 不失一般性,我们假设 它不是一个函数,即零几乎无处不在,总风险保险公司不得不面对剩余风险将会面临+转移风险所需的成本。表达的公式可以表示为

基本算法理论BP算法理论过程主要包括输出信号的线性传播的过程计算偏差前后前后和输出信号的线性传播误差和反向两个过程的计算过程。也就是根据两个输入信号错误可以调整方向与实际输入信号方向的实际期望信号输出,分别计算信号输出,从实际预期的方向信号输出,然后真正的预期的输入方向两个方向,分别计算重量信号误差调整信号误差和误差阈值范围。在传播的研究方法提出叠加后的信号,输入节点信号主要是节点的实际产出逆叠加后的信号通过隐层的作用,与实际输出节点信号可以通过非线性转换过程生成19]。如果我们发现实际的信号输出节点的位置不符合实际的输出节点实际输入节点的期望信号方向位置,逆向反馈传播的过程将很容易生成信号误差补偿的方法。错误输入信号反向传播的原则处理系统,系统会自动回到传播它的各种输出信号值或错误信息系统的每个错误输入层一层一层地通过隐藏层节点顺序,并将其输出误差信号值转移到节点每一层对应于系统的所有其他层错误输入信号元素,与系统的系统在每层节点。输出错误输入信号值通过每层节点的系统作为它的基础计算自动调整系统的输出信号误差元素之间的权重(20.]。

神经网络本质上是一种非线性预测模型,顾名思义,一个算法,模拟计算的人类和动物的神经系统。它是基于模仿人类身上的大脑的神经网络系统进行计算,然后处理每个模块的内容。神经网络算法是数据挖掘技术的一个衍生物,它是数据挖掘的一种技术,可用于大数据挖掘,如分析、分类、聚合和其他数据挖掘功能。它的优点和缺点是非常清晰;第一个优势是,它是极其耐干扰,第二是它能够深入学习和更好的记忆在非线性的情况下,可以处理更复杂的情况。与此同时,它有两个缺点。首先,它的计算和处理结果是低维,不能适应高维环境中,所以它有一个自然难于理解。第二,监督还是无监督学习,它需要长时间的学习,收集数据使用一个更传统的神经网络方法。

在本文中,我们使用模糊神经网络。这种类型的神经网络(FNN)是第一,结合模糊理论和神经网络算法。数据挖掘的过程和信息处理的神经网络算法,模糊理论结合来提高映射和数学的相关性关系。监督学习和无监督学习的效率改进的更好。这种神经网络的算法公式和相关结构图表更常用、常见的,可以发现在一般教科书。这种类型的神经网络所示图;经过五个层次的过程中训练和监督和非监督学习;初的两个层面,随着级别的增加,所需的计算范围将会翻倍,但在进入第三层,进入第四级别和进入第五级别,计算的内容会逐渐减少,直到它变成一个。当然,这种类型的图是第一个测试维度在这个节点输入时输入层。假设维度值的具体价值 需要输入的节点 根据所需的节点数量,它是传递到层的维度进一步计算函数的功能和相关的层,以及最后到输出层。这种类型的模糊理论结合神经网络具有相同性质的小波神经网络和神经网络结合的广义理论,都使用传统的梯度的计算形式向下计算质心的关系和相关的所需的宽度值和最终的输出值和权重,我们所需要的。这是显示在图8

4所示。结果与讨论

4.1。软件工程代码搜索和文件搜索

代码搜索是一个交叉研究信息检索和程序理解,类似于文档搜索技术,和他们有更多的共性等各种技术的查询了解,文档索引和文档分类。然而,从搜索对象的角度来看,由于源代码本身的特点,对代码的理解包括两个方面,即:使用场景的代码和代码的原理算法。以“冒泡排序”为查询、文档搜索和代码搜索的结果可以看出,原始文档搜索结果通常包含关键词和一系列的概念在关键字和组合。在代码中搜索结果,重点是算法的具体实现和代码的正确性。两者之间的区别在于核心文档的理解(代码)。同时,基于特征匹配的代码用户意图,如源代码功能特征,应用场景,功能是如何实现的两种搜索方法是最大的区别。从形式的角度来看, 查询文本, 的源代码片段。可以看到,代码搜索的难度的任务是建立一个源代码片段的理解,在此基础上,实现匹配用户的查询意图和功能语义之间的代码片段。在传统的信息检索模型方法中,代码通常是作为一个普通的自然语言文档,和用户查询之间的相似性和代码文档最后通过结合自然语言计算模型和简单的词分离后向量化,失活和遏制。

在英国的一个研究小组提出了一个基于文本正则化方法的代码和文档之间的可跟踪性。另一个外国学者介绍方法名称信息检索模型以提高代码检索结果的性能和结合API理解提高基于信息检索代码搜索系统,其实现简单和直接,是一种常见的研究基线。学者在西安主题的结合模型和Tfidf模型引入源代码和代码来提高查询的准确性和查询表示匹配。意大利研究小组recategorized代码搜索特性和重新分配根据不同的语义类别特征权重提高检索效果。国内学者提出了一个代码搜索排名方法结合学习。其他一些学者进一步扩大搜索功能的代码系统在此基础上,结合起来学习。代码搜索的研究并结合深深项目理解研究构建检索模型。有些学者首创的问题源代码和自然语言之间的语义鸿沟。查询文本和代码片段特性表征通过自然语言模型和程序理解模型。在获得特征向量,由深模型匹配关系。

自然语言模型部分,文字表示,word2vector模型,手套模型,和fasttext模型通常用于表示;上下文表示,埃尔莫模型、伯特模型等,一般用于模型的句子直接获得表示。

在匹配模式的一部分,国内学者共同研究的组合排名学习培训目标和深度模型,即。,神经信息检索模型。此外,国内学者们总结了损失函数神经检索模型,和对比等方法学习排序(对比学习)和三元排序(三合损失)逐渐收到关注,结合强化学习来提高查询了解,因此检索效果。在部分程序表示模型中,英国研究小组总结和分类他们的更多细节。早期研究处理代码片段作为普通文本,结合自然语言词的序列和API的序列模型建模方法;一些后续的工作逐渐重视代码结构属性和代码结构提出建模方法结合抽象语法树,和源代码的强图结构使得最近研究源代码建模图结合神经网络逐渐引起了人们的注意。

4.2。软件工程代码搜索

本节比较当前代码搜索从深层的角度研究进展程序理解模型。论文选择的基础上,本文使用代码搜索和代码检索关键词搜索、软件工程、自然语言处理、神经计算等领域。最后,相关论文40多深代码搜索收集从相关会议、期刊和arXiv正式出版前的平台。在此基础上,案例研究论文,系统设计论文和研究论文本文没有明确的评价指标被排除在外,留下27论文最后的总结。

分析维度包括源代码表示,深模型结构,数据集用于模型评估和评价指标。源代码表示计划从深程序的角度理解,主要包括单词序列表示,API序列表示,树结构(主要是抽象语法树)和图结构(函数调用图,语法树子图,等等)。深度模型的结构方面包括卷积网络(CNN),复发性网络(LSTM),变压器,注意力机制,等等。

俄罗斯学者提出的早期勘探深度代码搜索,首先研究了搜索和生成的api和在此基础上提出了深层神经网络代码搜索模型代码,它奠定了深入代码搜索模型的基本框架。在中国,学者在这一领域的组合词向量模型源代码以一种无监督的方式,和代码文本加工成词序列,然后,这一章是由词向量表示,和匹配检索是在此基础上实现的。后来,一些学者进一步研究自然语言和api之间的语义鸿沟的细节在此基础上。

从俄罗斯学者的工作已经进行了一系列的尝试不同的深度模式体系结构应用于代码搜索任务。国内学者最初试图将注意力机制引入到代码匹配计算通过构造多层关注网络用CNN捕捉的深层语义源代码。另一个日本学者应用双网络代码搜索任务来提高查询和代码之间的匹配能力。印度学者不同的关键字匹配和句法模式提出一种自适应学习深度代码搜索模型与更强的泛化新代码库。昆明学者,另一方面,敌对的学习训练过程应用于改善代码和查询文本之间的匹配。

纯序列建模方法很难利用结构信息的源代码,以及国内学者首先使用信息增强代码的抽象语法树表示。然后,在源代码中语义依赖建模结合语法树在此基础上。最后,self-attentive网络用于代码搜索第一次序列信息和结构信息的源代码统一建模结合self-attentive网络。

图形是一种普遍的结构在源代码,和杨凌县学者从语法树构造子图模型代码中的不同节点之间的关系。之后,查询和代码特性向量是相互增强使用关系图卷积网络建模,最终改善检索效果。然后,不同表示形式的源代码是多通道的任务,和代码序列,语法树,图融合模型代码的语义表示。最终结果达到SOTA效应,证实融合序列和结构的实际有效性语义代码理解任务。

Pre-trained模型也取得了成功在自然语言处理领域的各种任务。一些研究者也开始关注源代码pretraining的效果。国内学者结合对比学习训练模式训练伯特模型代码文本;外国学者专注于Python代码伯特模型训练和提出了CuBert模型。国内研究人员在此基础上,增加了代码结构的训练过程,提出GraphCodeBert,结合图结构来提高变压器的表现力pretraining代码。相比之下,外国学者CodeBert和其他模型的有效性验证特定代码理解任务通过使用代码搜索任务的训练模式。比起结果表明的基于变压器pretrained语言模型对代码的理解任务也有好的结果。

4.3。数据集和评价方法
4.3.1。评价指标

代码搜索任务的评价指标是一致的与信息检索的任务,主要考虑两个方面的结果,也就是说,检索结果的相关性和排名的顺序相关的结果。精度(电子邮件保护)计算方法相对简单和措施的数量的比例有关文件的检索结果,检索结果K表示获得的文件的数量在一个检索过程。

回忆(电子邮件保护)也很简单和措施的有关文件搜索结果的比例整体相关文件,K表示文档的数量在一个搜索获得。可以看到,精度和召回指标衡量的比率相关文件前K搜索结果。MeanReciprocalRank (MRR)介绍有关文件的顺序在结果评价的结果。平均精度(AveragePrecision)结合了精度和文档顺序 表示的总数在当前搜索结果和相关文档 表示搜索结果的总数。

累计获得折扣(常规心电图)介绍了相关性等级评价。规范化折扣累积获得(NDCG)指标是规范化使用常规心电图分数排名最好的结果。除了上述指标外,还有弗兰克评价描述中的第一个相关结果的顺序搜索列表的列表。

4.3.2。评估数据集

在本文中,我们梳理代码搜索的研究工作从2016年到现在,总结数据集用来评估模型的有效性。选择标准,必须公开的数据集,而至少有两个或两个以上的作品使用数据集评估模型。

代码搜索常用的评估数据集更相关,其中共有七个工作。数据集建设而言,目前的工作重点是构建大规模代码snippet-natural语言文本组合训练数据的自动提取。验证数据构造了基于自动注释加上负采样方法。模型评价使用通用代码搜索问题查询,和细粒度的注释是在构造上执行代码库。

根据数据注释,其中,CSN ROSF数据严格注释与相关性水平;DCS、nc和CosBench首先筛选自然语言查询,后来带注释的代码库相关的代码片段。

根据评价指标、中枢神经系统和ROSF可以使用NDCG评估;StaQC主要是结合文本分类指标;剩下的数据集大多使用MRR评估,(电子邮件保护),和弗兰克度量。

根据编程语言,DCS、nc ROSF, CosBench数据集主要包含Java编程语言代码数据(包括Android)。CoNaLa数据,另一方面,结合Stackoverflow社区数据挖掘和人工注释来构建数据包含Java和Python编程语言。StaQC数据集主要包含Python和SQL注释结果。CodeSearchNet数据集包含Java、Python、Php、Ruby,走,和JavaScript,覆盖广泛的编程语言。

按照任务分工,StaQC代码搜索任务转换成相关文档分类问题,因此它可以结合研究文本分类方法;CSN和ROSF数据信息,可以有足够的注释水平研究结合排序学习方法;代码fragment-natural语言组合中包含的其他数据集可用于代码摘要任务以及代码搜索研究技术知识进行归纳总结的基础上。

4.3.3。比较的结果

在本节中,根据数据集和评价指标的引入,代码搜索最近的实验工作是解决从模型有效性的角度,关注深模型代码搜索方法。评价指标然后召回、精度MRR,地图,NDCG。统计,相关文献的基线提出相应的数据集是粗体的文献列。一些数据集,如StaQC数据集,提出了使用分类指标作为基线,这里不显示。

本文结果由数据集,相关文献,评价指标。从数据的角度来看,StaQC数据集是应用最广泛的和相对有影响力。DCS数据集上的实验相对更充足,和不同的文学针基本上涵盖所有评价指标。从评价指标的角度,MRR指标目前常用代码搜索模型验证。从编程语言的角度,研究了编程语言,更多的是Java。

4.4。软件工程Code-Related视角

代码搜索的研究逐渐得到学术界的关注。本文代码搜索的最新进展进行了综合分析,从深程序理解的角度来看,这个问题在未来可以在以下方面研究:(1)稳定的和可再生的评价方法:大多数当前的研究不开放评价数据集,和开放的数据集等问题不一致的标签。显示数据集的问题,开源代码使深模型结果的再现性问题。未来的研究应该努力构建一贯和明确的数据集和评价方法和平台,以促进代码搜索的研究。(2)深入研究程序表示技术:源代码的理解和建模是代码搜索任务的关键。大多数模型使用序列建模的特征提取表示源代码,和一些简单的缝合和工作融合树和图结构数据引入代码结构信息。结合图神经网络更深入的结构建模的代码可以试图在未来的研究。(3)多通道源代码建模方法:标识符和编程的源代码包含特定于语言的关键词。编程语言特定关键字提供代码的结构信息,而代码标识符提供更充足的自然语言的信息。这两个模态数据可以组合在未来的研究模型的结构语义以及自然语义代码在一个统一的方式,可以用于代码搜索任务。 (4) Code search research application issues: current code search research focuses on the problem of reordering based on deep code modeling methods. The code search tool research is more concerned with the collection, cleaning, and management of code data. Some data processing methods and effect optimization methods in code search research are not applicable between the actual application system. The search model can be designed from the practical application purpose in future research.

5。结论

本文首先定义了软件工程从深程序代码搜索任务的理解视角。其次,它总结了两个研究范式的深软件工程代码搜索和组合相关的研究成果。同时,本文总结了常见的评价方法和组织软件工程代码搜索任务。最后,本文的结果提供一个对未来的研究前景。

数据可用性

数据是可用的。

的利益冲突

作者宣称没有利益冲突。