The invention relates to a non-API member recommendation method based on heuristics and neural networks, belonging to the technical field of code completion and code recommendation. This method accesses the sample according to the non-API member on the right side of the assignment statement in open source software, collects all the members contained in the non-API object declaration type, including the inherited members, and then eliminates the non-accessible members according to the relationship between the assignment statement class and the non-API object declaration class. Members are placed in the initial candidate list cdtList as all candidates for subsequent steps. The samples in step 1 are predicted based on three specific heuristic rules. Using information to train neural network, we get a filter that can filter out low reliability prediction results. When the programmer enters \.\ after the non-API instance object on the right side of the assignment statement, he predicts the non-API members that may be accessed. The invention recommends the correct number of members under the same data set, and the correct probability is obviously higher than the existing methods and tools.
【技术实现步骤摘要】
一种基于启发式和神经网络的非API成员推荐方法
本专利技术涉及一种基于启发式和神经网络的非API成员推荐方法,属于代码补全以及代码推荐
技术介绍
代码补全是指当程序员敲入部分字符时IDE(集成开发环境,IntegratedDevelopmentEnvironment)自动预测剩余代码的功能。如果代码补全功能可以正确预测用户要输入的语句,则可以有效提高编码效率。代码补全技术应用广泛,是Eclipse中最经常被程序员使用的10个命令之一。非API(ApplicationProgrammingInterface,应用程序编程接口)成员(包括方法和字段)推荐是一种常用的代码推荐。当程序员在非API实例对象后输入“.”时,IDE工具会自动检查可访问的非API成员,并以列表的方式展示给程序员可以使用的方法或者字段。然而,大部分主流的IDE工具都是将符合所需返回值类型的成员或者最常用的成员放在列表顶端进行推荐。当返回值类型不确定时,IDE工具只能将所有可访问的候选成员按字母顺序列出来,候选成员的数量可能会非常多,程序员从中选择正确的成员就需要很长的时间。为了提高API成员推荐的效果,有人提出利用k近邻算法(k=1)为API对象推荐方法或字段,这种方法基于代码库中的API成员访问样例计算相同上下文情况下被调用次数最多的API方法或字段进行推荐;有人利用API成员访问的有序性提出了基于有向图的推荐方法,这种方法利用API对象所访问的所有成员以及对象间的数据依赖关系生成API成员访问图,基于代码库中的访问图计算出最常见的图,用其中的API成员进行推荐;也有人提出基于 ...
【技术保护点】
1.一种基于启发式和神经网络的非API成员推荐方法,其特征在于,包括以下步骤:步骤1:根据开源软件中赋值语句右侧的非API成员访问样例,收集该非API对象声明类型所包含的全部成员,包括继承得到的成员,然后根据赋值语句所在类与非API对象声明类之间的关系,将不可访问的成员剔除,余下可访问的成员作为全部候选放入初始候选列表中,供后续步骤使用;步骤2:对步骤1中的样例基于样例进行预测;步骤3:对步骤1中的样例基于类型进行预测;步骤4:对步骤1中的样例基于相似度进行预测;步骤5:利用启发式规则得到的待推荐成员及其上下文信息和预测过程中得到的信息训练神经网络,得到一个能够过滤掉低可靠性预测结果的过滤器;步骤6:当程序员在赋值语句右侧的非API实例对象后输入“.”时,预测可能访问的非API成员。
【技术特征摘要】
1.一种基于启发式和神经网络的非API成员推荐方法,其特征在于,包括以下步骤:步骤1:根据开源软件中赋值语句右侧的非API成员访问样例,收集该非API对象声明类型所包含的全部成员,包括继承得到的成员,然后根据赋值语句所在类与非API对象声明类之间的关系,将不可访问的成员剔除,余下可访问的成员作为全部候选放入初始候选列表中,供后续步骤使用;步骤2:对步骤1中的样例基于样例进行预测;步骤3:对步骤1中的样例基于类型进行预测;步骤4:对步骤1中的样例基于相似度进行预测;步骤5:利用启发式规则得到的待推荐成员及其上下文信息和预测过程中得到的信息训练神经网络,得到一个能够过滤掉低可靠性预测结果的过滤器;步骤6:当程序员在赋值语句右侧的非API实例对象后输入“.”时,预测可能访问的非API成员。2.如权利要求1所述的一种基于启发式和神经网络的非API成员推荐方法,其特征在于,所述步骤2的实现方法为:步骤2.1:提取该样例所在开源项目中位于其之前的所有赋值语句右侧的非API成员访问样例samples,包括该样例sample;从这些样例中提取被访问的非API成员member及其上下文,包括赋值语句左侧的表达式类型lType,左侧标识符名称lName和右侧非API对象标识符名称objName;本步骤需要从源代码中提取语法元素,实际使用JavaDevelopmentToolsJDT提供的抽象语法树解析器解析Java源文件,能够获取赋值语句及其中元素的语义和语法信息;步骤2.2:挑选出和目标样例sample具有相同上下文的样例作为预测依据,即lType、lName、objName相同;如果没有挑选出可用的预测样本,直接进入步骤3;步骤2.3:统计经步骤2.2挑选出的样例中非API成员member出现的频率,最高的成员被预测为待推荐成员recommendation,并跳过步骤3和4,直接进入步骤5。3.如权利要求1所述的一种基于启发式和神经网络的非API成员推荐方法,其特征在于,所述步骤3的实现方法为:对步骤1中的样例sample使用第二条启发式规则,即,基于类型过滤初始候选列表cdtList,将列表中与赋值语句左侧的表达式类型相等或兼容的候选保留,其余剔除,得到新的候选列表cdtList。4.如权利要求1所述的一种基于启发式和神经网络的非API成员推荐方法,其特征在于,所述步骤4的实现方法...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。