[发明专利]一种基于功能相似度匹配的代码搜索方法有效
申请号: | 201910828507.9 | 申请日: | 2019-09-03 |
公开(公告)号: | CN110716749B | 公开(公告)日: | 2023-08-04 |
发明(设计)人: | 李必信;杜成杰;孔祥龙;王璐璐;廖力;周颖 | 申请(专利权)人: | 东南大学 |
主分类号: | G06F8/75 | 分类号: | G06F8/75;G06F16/332;G06F16/38 |
代理公司: | 南京众联专利代理有限公司 32206 | 代理人: | 杜静静 |
地址: | 210096 *** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 功能 相似 匹配 代码 搜索 方法 | ||
本发明公开了一种基于功能相似度匹配的代码搜索方法,针对输入是自然语言查询的情况,对代码库中的代码进行功能信息的挖掘,挖掘代码片段的功能注释与功能API这两个特征来度量代码片段和查询语句的功能相似度,结合代码片段的方法名和方法体两个特征,根据不同特征的重要性分配不同的权重,计算查询和与代码片段的总的相似度得分,按照得分高低排序,把搜索结果返回给用户。充分考虑并挖掘了源代码中包含的功能信息,并根据重要性分配权重,使得匹配精度更高。
技术领域
本发明涉及一种基于功能相似度匹配的代码搜索方法,属于软件工程中的代码搜索技术领域。
背景技术
如何提高软件的开发效率是软件工程领域的一个核心问题。随着互联网的发展以及开源软件的流行,代码重用在提高软件开发效率方面变得越来越重要。实用主义的代码重用倾向于找到相关的代码,通过复制粘贴和修改的方式来满足编程需求,定位相关代码的方法称之为代码搜索。代码搜索技术的提高对代码重用起了极大的推动作用,有助于减少开发时间,改进开发质量,降低开发成本。
传统的基于信息检索技术的代码搜索方法主要依赖于源代码和用户查询之间的文本相似度,容易造成词项失配,而导致匹配精度不高或者出现误匹配的情况。此外,用户在进行查询时输入的查询语句往往描述的是希望获得的代码片段所实现的功能,但是由于代码和自然语言属于不同种类的语言,所以传统的匹配方法也很难保证搜索的准确性和有效性。
针对这一问题,本发明考虑通过挖掘源代码的功能信息,使得描述代码片段的特征中尽可能多的携带与源代码的功能相关的信息,然后通过计算查询和代码片段之间的功能相似度作为对基于关键字匹配的原始相似度的补充,并根据不同特征的重要程度为每个特征分配不同的权重,从而更好地与用户输入的自然语言查询进行匹配,提高搜索的精度。
发明内容
本发明正是针对现有技术中存在的问题,提供一种基于功能相似度匹配的代码搜索方法,通过挖掘源代码的功能信息,使得描述代码片段的特征中尽可能多的携带与源代码的功能相关的信息,使得搜索的精度更高。
为了实现上述目的,本发明的基于功能相似度匹配的代码搜索方法,包括如下步骤:
步骤1)对代码库中的源码,以方法为粒度切分,进行简单特征提取,提取每个方法的方法名和方法体两个特征,分别表示方法名和方法体中出现的特征关键字;
步骤2)分析项目源代码,挖掘代码片段的功能信息,提取功能注释和功能API两个特征;
步骤3)输入自然语言查询进行搜索时,为不同的代码特征分配不同的权重,采用余弦相似度算法,分别计算查询语句和代码片段的原始相似度和功能相似度;
步骤4)为原始相似度和功能相似度分配权重并计算最后的总的相似度得分,根据得分高低对搜索结果进行排序返回给用户。
上述方法中,所述步骤2)中提取功能注释的具体流程为:
(a)解析源代码的抽象语法树,提取类注释和方法注释;
(b)对注释中与功能无关的内容进行过滤,过滤掉注释中与参数及返回值介绍相关的内容、与创建者或作者相关的内容、包含网址或者日期相关的内容、描述版权等信息的内容,将剩余的注释信息视为功能信息;
(c)最后得到的方法的功能注释包含了类注释和方法注释两个模块;
上述方法中,步骤2)中提取功能API的具体流程为:
(a)提取当前方法中的API调用列表;
(b)过滤掉其中典型的通用类库的API,如JDK、Log4j等;
(c)将API列表中剩下的API视为功能API,提取对应的类名和方法名;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于东南大学,未经东南大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910828507.9/2.html,转载请声明来源钻瓜专利网。