CN109814855A - 一种基于对象分类和自适应子图匹配的api推荐方法 - Google Patents
一种基于对象分类和自适应子图匹配的api推荐方法 Download PDFInfo
- Publication number
- CN109814855A CN109814855A CN201711188298.3A CN201711188298A CN109814855A CN 109814855 A CN109814855 A CN 109814855A CN 201711188298 A CN201711188298 A CN 201711188298A CN 109814855 A CN109814855 A CN 109814855A
- Authority
- CN
- China
- Prior art keywords
- api
- subgraph
- probability
- approach
- class
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 146
- 230000003044 adaptive effect Effects 0.000 title claims abstract description 32
- 238000013459 approach Methods 0.000 claims abstract description 108
- 238000013138 pruning Methods 0.000 claims abstract description 23
- 238000004422 calculation algorithm Methods 0.000 claims description 18
- 238000011161 development Methods 0.000 claims description 18
- 238000004458 analytical method Methods 0.000 claims description 16
- 101150108899 rob1 gene Proteins 0.000 claims description 7
- 241001256807 Pasma Species 0.000 description 7
- 239000000284 extract Substances 0.000 description 7
- 238000004364 calculation method Methods 0.000 description 6
- 102100021662 Baculoviral IAP repeat-containing protein 3 Human genes 0.000 description 5
- 101000896224 Homo sapiens Baculoviral IAP repeat-containing protein 3 Proteins 0.000 description 5
- 102100037024 E3 ubiquitin-protein ligase XIAP Human genes 0.000 description 4
- 101000804865 Homo sapiens E3 ubiquitin-protein ligase XIAP Proteins 0.000 description 4
- 101150041570 TOP1 gene Proteins 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000000605 extraction Methods 0.000 description 3
- 101100261000 Caenorhabditis elegans top-3 gene Proteins 0.000 description 2
- 101150107801 Top2a gene Proteins 0.000 description 2
- 230000001174 ascending effect Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000012216 screening Methods 0.000 description 2
- 238000007580 dry-mixing Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 230000001343 mnemonic effect Effects 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 238000013179 statistical model Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提出一种基于对象分类和自适应子图匹配的API推荐方法,先将API方法使用模式串根据方法所属类划分,然后对每个类中的API使用模式串建立图库GDB。当需在位置L处推荐时,先从L的上文代码中抽取与待推荐方法属于同类的方法使用模式串,生成图SG,进行剪枝得到集合。对于集合中每个子图,先计算子图概率,继而使用子图在图库中搜索匹配得到候选方法及对应概率,将其与子图概率相结合可得到每个方法最终被调用概率。根据概率由高至低排序得到最终API方法推荐列表。实验证明在推荐准确性方面,显示本发明中提出的API推荐方法优于按字母排序的API推荐方法,也优于基于N‑Gram语言模型的API推荐方法。
Description
技术领域
本发明属于软件工程领域,尤其是软件开发中的代码补全领域,且特别是有关于API(Application Programming Interface,应用程序编程接口)的推荐补全领域。
背景技术
随着计算机技术的不断发展以及人们的应用需求的不断变化,软件更新迭代的生命周期缩短,提高开发人员的开发效率迫在眉睫。现在许多主流集成开发环境(Intergrated Development Environments,简记为IDEs)中均集成了代码补全***,解决的核心问题是API推荐。API推荐***是一个可以实时地根据开发人员当前的开发上文环境为其推荐接下来可能会调用的API方法的***。这种推荐***可以极大程度地减少开发人员手动筛选以及记忆学习API方法的时间,从而提高开发效率,也可以在一定程度上避免开发人员因单词拼写错误而引入程序Bug。
API方法推荐工具的工作原理是:先对已有的开源代码中的API方法使用模式进行学习,建立模型,在开发人员进行开发时,将开发人员当前的开发上下文与已经建立的模型相结合,智能地生成一组开发人员接下来可能会调用的API序列,并呈现给开发者。在推荐的API序列中,预期调用的API排序越靠前,代表推荐算法效果越好,由此开发人员的工作效率也提高地越多。
在集成开发环境中(如Eclipse),最初的API推荐***会将开发人员需要调用的API方法所属的类中所有可调用的API方法按照首字母升序排序,呈现给开发人员,在本说明书中将这种API方法推荐模型称之为Eclipse Model。当Eclipse Model在工作时,若开发者欲调用SWT框架中的方法时,Eclipse Model会生成一个按首字母升序排序的、长度为168的API方法列表推荐给开发者,这种推荐方法在实际应用场景中,并不会减少开发人员记忆以及筛选API方法的工作量,也没有实质地提高开发人员的开发效率。随之,大量研究人员尝试对项目源代码进行学习,从中抽取API方法使用模式串,再使用统计学习等模型进行建模学习,用于API方法推荐,如Abram Hindle等人提出代码也像自然语言一样具有规律性,将n-gram语言模型引入API推荐中(Abram Hindle,Earl T.Barr,Zhendong Su,MarkGabel,Premkumar Devanbu.On the naturalness of software.2012 34thInternational Conference on Software Engineering(ICSE),2012:837-847),并提出一种基于语料库的n-gram模型(简记为NGSE),实验结果证明他们所提出的方法,较之已有的API方法推荐模型,在API方法推荐准确率上有了一定程度的提高。
在Abram Hindle等人所提出NGSE模型中,通过对源码进行简单的文本处理操作生成语料库,再使用n-gram模型进行学习,用于之后的API方法推荐。NGSE中只是对源代码文件进行简单文本处理,生成待学习的语料库,这种代码处理方式会丢失源代码自身的语义信息,从而使得最终学习得到的模型不能代表代码本身的语义信息,因此会对API方法推荐模型的推荐准确率有一定的影响。基于此,本发明提出一种基于对象分类和自适应子图匹配的API推荐方法,首先会对源代码进行语义分析,从中抽取出可表达代码语义信息的API方法使用模式串,在此基础上进行训练生成图库GDB,对于待推荐的程序,根据待推荐方法位置的上文代码生成子图SubGraph(简记为SG),为了最大化搜索结果,利用剪枝法对得到的子图SG进行剪枝操作,得到子图集合SGs。对于集合SGs中每个子图,先计算得到每个子图概率,继而使用该子图在图库GDB中搜索匹配得到推荐结果以及每个方法对应的概率,将子图搜索匹配所得到的方法概率与子图概率相结合,生成最终的每个方法对应的概率,通过将概率由高至低进行排序,得到最终位置L处应推荐的API方法序列。
发明内容
本发明所要解决的技术问题是:虽然当前已有大量封装的类与方法供开发人员使用以减少其开发工作量,但是对于一名开发经验较少的开发人员而言,选择合适的API方法并学习API方法的使用文档会花费其大量的时间,从而加大了开发人员的入门门槛;如果存在一种方法,可以根据开发者当前开发代码上下文进行智能准确地推荐接下来会调用的方法,则会大大提高开发者的开发效率,减少开发者的学习时间,也能降低开发人员的入门门槛。
本发明的技术方案为:一种基于对象分类和自适应子图匹配的API推荐方法,首先会从GitHub上下载若干项目源代码,使用抽象语法树从方法级别进行语法分析,得到若干API使用模式串;针对API模式串中的每一个API方法,依据其所属的类进行分组,由此便可得到类库中每个类的API方法使用模式串;根据抽取出的属于单个类的API方法模式串建立图库GDB(Graph DataBase),当开发者开发过程中需要在位置L处进行API方法推荐时,则会从位置L的上文环境中抽取与位置L处待推荐方法同属一个类库的API方法串,建立子图SG(SubGraph),再使用基于剪枝的自适应子图匹配算法(Pruning-Based Adaptive SubgraphMatching Algorithm)在图库GDB中搜索最佳可能匹配结果,从而生成推荐方法列表,呈现给开发人员。
根据权利要求1所述的一种基于对象分类和自适应子图匹配的API推荐方法,其特征是包含以下步骤:
1)根据从GitHub中下载得到的源代码文件,建立抽象语法树AST(AbstractSyntax Tree),通过语法分析得到方法级别的API方法调用模式串;
2)针对API方法调用模式串中的每一个调用方法,根据其所属的类库进行分组,得到类库中每个类中的API方法使用模式串;
3)根据步骤2)中得到的各个类库的API模式串,进行统计学习,建立图库GDB;
4)当开发人员需要在位置L处进行API方法推荐时,按照步骤1)和步骤2)中所描述的方法从位置L处的上文代码中抽取出与待推荐位置的API方法属于相同类的API方法使用模式串,生成子图SG;
5)按照Pruning-based ASMA模型所描述,首先使用剪枝法对步骤4)中生成的待匹配子图SG进行剪枝,得到子图集合SGs,对于子图集合中的任一子图,先计算其概率Prob1,再使用该子图在步骤3)中建立的图库GDB中进行搜索匹配,得到推荐的结果以及对应的概率Prob2,将Prob1以及Prob2相结合,得到每个结果所对应的概率;
6)通过步骤5)即可得到的推荐API方法以及每个方法对应的概率,将概率从高至低依次排序,得到最终的API方法序列,呈现给开发人员。
根据权利要求2中所述的一种基于对象分类和自适应子图匹配的API推荐方法,其特征是将步骤1)中到的API方法使用模式串,根据其中API方法所属的类库进行分组,得到类库中每个类中的API方法使用模式串。其主要步骤是:先从GitHub上下载项目源代码,对于其中的每一个源代码文件,分别建立抽象语法树(Abstract Syntax Tree,简记AST),进行方法级别的语法分析,得到方法级别的API方法使用模式串,根据API方法使用模式串中的每一个API方法所属的类进行分组,得到属于每一个类的API方法使用模式串。最终使用上述步骤得到的分类后的API方法使用模式串进行统计学习,建立图库GDB。
根据权利要求2所述的一种基于对象分类和自适应子图匹配的API推荐方法,其特征是基于剪枝的自适应子图匹配算法Pruning-Based ASMA(Pruning-Based AdaptiveSubgraph Matching Algorithm)。当开发者开发过程中,需要在位置L处进行API方法推荐时,首先会采用同上述步骤2)相同的方法,建立抽象语法树进行语法分析,得到位置L上文中已有API调用方法串,再采取步骤3)中所述的方法进行过滤,得到与位置L处所属类库一致的API方法串,建立子图,Pruning-Based ASMA会自动地对当前子图SG进行剪枝操作,得到若干待匹配的子图集合SGs<SubGraph1,SubGraph2,SubGraph3,……>,针对子图集合中的每个子图(以SubGraph1为例),先计算子图SubGraph1对应的概率Prob1,,再使用SubGraph1在图库GDB中搜索最佳匹配图,从而得到可能的推荐结果<Res1,Res2,……>,以及对应的概率为<Prob2_1,Prob2_2,……>,再将推荐结果的概率与用于搜索匹配的子图概率相结合,得到最终推荐结果<Res1,Res2,……>,及其相应的概率为<Prob1*Prob2_1,Prob1*Prob2_2,……>。按照此方法,依次计算子图集合中其余子图所得到的结果及概率,将概率按照从高至低的顺序进行排序,便可得到最终的推荐结果列表。
在API推荐技术中,需要解决的核心技术问题有两个:一个是如何抽取可以最大程度代表反应代码语义信息的API使用模式串,另一个便是如何将上一步骤中抽取得到的API方法使用模式串进行合理的建模学习生成模式串库,在需要进行方法推荐时,可以根据已有的方法使用模式串,从模式串库中匹配出语义信息的最相近的代码串,从而可以推荐最适合的API方法。本发明提出了一种基于对象分类和自适应子图匹配的API推荐方法,首先将对源代码进行语义分析,抽取出其中的API方法模式串,依据模式串中每个API方法所属的类进行分组,建立图库GDB。当开发人员需要API方法推荐时,采用与上述同样的API模式串抽取方法,从上文源代码中抽取出与推荐位置的待推荐API方法同属一个类的API方法使用模式串,建立子图SG,为了使得搜索匹配结果最大化,使用Pruning-Based ASMA算法对当前子图进行合理剪枝,得到子图集合SGs。对于集合SGs中每个子图,先计算得到每个子图概率,继而使用该子图在图库GDB中搜索匹配得到推荐结果以及每个方法对应的概率,将子图搜索匹配所得到的方法概率与子图概率相结合,生成最终的每个方法对应的概率,通过将概率由高至低进行排序,得到最终位置L处应推荐的API方法序列。结果显示,使用本发明中提出的一种基于对象分类和自适应子图匹配的API推荐方法,相较于已有的API推荐方法(如Eclipse Model、NGSE),推荐准确率得到了一定程度的提升,由此也在一定程度上减少了开发人员学习已有类库中提供的API方法的时间,提高了开发人员工作效率。
本发明的特征是:
从GitHub上下载项目源代码文件,建立抽象语法树,从方法级别进行语法分析,得到混合类库API方法的使用模式串,根据模式串中每个API调用方法所属类库进行分组,得到类库中每个类中API方法的调用模式;根据分类后的API使用模式串建立图库GDB;当开发人员开发过程中,需要进行API推荐时,使用同上相同的源代码处理方法,从待推荐位置L的上文环境中抽取同属相同类库的API方法使用模式串,生成子图,再使用本发明中提出的基于剪枝的自适应子图匹配算法Pruning-Based ASMA算法对子图进行操作,得到若干子图集合<SubGraph1,SubGraph2,SubGraph3,……>,使用每个子图,在库GDB中进行搜索,得到推荐的方法以及每个方法的概率,再结合搜索子图的概率,得到每个待推荐方法的最终概率。待所有子图均搜索匹配结束后,将所有结果根据概率从高至低进行排序,得到最终的API方法推荐序列。
本发明首次提出了基于对象分类的API模式串抽取方法以及基于剪枝的自适应子图匹配算法。对源代码文件进行语法分析得到API使用模式串,依据方法所属类库进行分组,建立图库;当需要推荐时,生成当前上文对应的子图,结合剪枝法自适应地对子图进行操作,使用剪枝后的子图在图库GDB中进行匹配搜索,根据每个结果的概率,得到最终的推荐结果序列。
附图说明
图1为本发明实施例的一种基于对象分类和自适应子图匹配的API推荐方法的流程图。
图2为示例中基于对象分类的API使用模式串的抽取流程及结果。
图3为示例中待推荐代码的上文环境中的API使用模式串的抽取结果。
图4(a)为本发明中提出的PASMA Model与Eclipse Model、Graph Model在数据集JGit上的API推荐准确率。
图4(b)为本发明中提出的PASMA Model与Eclipse Model、Graph Model在数据集log4j上的API推荐准确率。
具体实施方式
传统的n-gram语言模型对源代码文件进行简单的文本操作,进行生成语料库进行API方法推荐,虽然这种方法虽然对已有的API方法推荐准确率有一定的提升,但是对源代码文件进行分词、去停用词等文本操作会导致代码的语义信息缺失。而API方法推荐工具的好坏一部分取决于抽取的语料信息是否可以反应出开发者的意图,即代码的语义信息是否得到充分的挖掘;另一部分则取决于学习模型是否可以正确地将具有相近语义信息的代码串匹配。本发明中提出一种基于对象分类和自适应子图匹配的API推荐方法。针对源代码文件进行语义分析,得到其中的API方法使用模式串,再依据模式串中每个方法所属的类库进行分组,得到每个类库的API方法使用模式串,建立图库GDB,当需要进行API方法推荐时,首先会使用同样的方法从上文代码中抽取出属于同一类库的API方法使用模式串,生成子图,使用剪枝法,得到若干子图集合,依次根据子图集合中每个子图,在图库中匹配搜索,得到每个推荐方法的概率,将之与对应子图的概率相结合,得到最终每个推荐方法的概率,根据概率由高至低排序,生成推荐API方法序列。
本发明中所提出的方法详细步骤如下:
1)项目源代码收集:GitHub是目前全球最大的社交编程及代码托管网站,本发明中的所有实验项目源码均是从GitHub上下载得到。为了尽可能多地得到编程风格好的项目源码,本发明中将每个项目的Star分数作为一个项目质量高低的衡量指标,从GitHub上下载Star数排名前1000的项目源码;
2)项目源代码文件处理:从每个项目的源代码中筛选出源代码文件,建立抽象语法树,从方法级别进行分析,抽取得到每个方法中的API方法使用模式串;针对得到的API方法使用模式串中的每一个API方法,根据其所属的类库进行分组,得到类库中每个类中的API方法使用模式串;
3)建立统计模型:根据步骤2)中得到的类库中每个类的API方法使用模式串,统计得到每个节点的概率,以及每条边的概率,由此建立图库GDB(Graph DataBase);
4)生成待匹配子图:当开发人员开发代码过程中,需要在位置L处进行API方法推荐时,本发明首先会采用同步骤2)相同的方法,首先对当前代码文件进行语法分析,建立抽象语法树(Abstract Syntax Tree),得到上文环境中的API使用模式串,再从中抽取出与待推荐方法同属于相同类库的API使用模式串,生成带匹配子图SubGraph;
5)API推荐:本发明中提出一种基于剪枝的自适应子图匹配算法Pruning-BasedASMA(Pruning-Based Adaptive Subgraph Matching Algorithm)。Pruning-Based ASMA算法会针对步骤4)中得到的子图进行剪枝操作,得到若干待匹配的子图集合SGs<SubGraph1,SubGraph2,SubGraph3,……>,针对每个子图(以SubGraph1为例),首先会计算子图SubGraph1<API1,API2,API3,……>的概率Prob1,再使用SubGraph1在步骤3)中建立的图库GDB进行搜索匹配,得到可能的推荐结果<Res1,Res2,……>,对应的概率分别为<Prob2_1,Prob2_2,……>,则最终推荐结果<Res1,Res2,……>,对应的概率为<Prob1*Prob2_1,Prob1*Prob2_2,……>,为避免结果下溢,将每个概率进行取log运算,则对应的结果为<log(Prob1)+log(Prob2_1),log(Prob1)+log(Prob2_2),……>;
以子图SubGraph1<API1,API2,API3>为例,演示子图概率Prob1的计算过程:
Prob1(API1,API2,API3)=Pr(API1)*Pr(API2|API1)*Pr(API3|API1,API2)
根据上述过程,即可得到每个可能推荐结果的概率,根据概率从高至低进行排序,得到最终的方法推荐序列,呈现给开发者;
6)推荐结果分析及评价:为验证本发明中提出的API推荐方法的准确率,研究人员会将每一次的推荐API结果序列和所预期的API进行对比分析,计算TopAccuracy@k值,用于衡量方法的推荐效果;
top-k准确率(TopAccuracy@k)表示API推荐模型在推荐前k个API方法时的准确率。值越大,表示API推荐模型精度越好,计算公式如下:
在上述公式中,TopAccuracy@k为推荐结果序列中前k个结果中包含预期API方法的准确率。hit(APIk)的值代表推荐的API序列中前k个API方法中是否包含预期的API方法,若包含,则hit(APIk)值为1,否则为0;
下面通过一个模拟示例演示说明本发明的具体实施过程,但本发明中所提出的方法所适用范围不局限于此实例。
说明书附图中图2中展示了本发明中关于源代码文件的处理流程。对于一个给定的源代码文件Demo.java,建立抽象语法树,从方法级别进行语法分析,得到若干混合类库API方法使用模式串。为了使得抽取出的API使用模式串尽可能精确,本发明提出一种基于对象分类的方法,即根据每个API方法所述的类库进行分组,抽取得到最终每个类中的API方法的使用模式串,在图2所示的示例代码中,经过上述步骤处理可得到类A的三个API方法使用模式串,分别为<A.ma1(),A.ma2(),A.ma4()>、<A.ma2(),A.ma3(),A.ma1(),A.ma2(),A.ma5>、<A.ma1(),A.ma3()>,类B的三个API方法使用模式串,分别为<B.mb1(),B.mb4()>、<B.mb3(),B.mb3(),B.mb3>、<B.mb3(),B.mb1()>;由上述步骤中得到的属于同一个类的所有API方法使用模式串,统计每个方法的使用概率,以及每条边(其中A.ma1(),A.ma2()表示方法A.ma1()到方法A.ma2()的边)的概率,建立带权有向图,本示例中对于类A,最终会生成3个带权有向图,构成图库GDB。
本发明的目的是减少开发人员学习类库中方法的时间,降低入门门槛,在开发人员进行开发任务时,可以智能地根据已有的上文代码,为开发者推荐当前最可能会调用的方法,从而提高开发人员的开发效率。说明书附图中图3显示了一段开发者正在编写的代码,横线部分表示即将需要工具推荐API方法的位置,此时本发明中提出的方法会使用相同的代码处理方法提取上文环境中API方法使用模式串,此时,待推荐位置的方法属于类A中的方法,因此使用上文环境中属于类A的API方法使用模式串进行子图匹配,本实例中,上文环境中的属于类A的API方法使用模式串为<A.ma3(),A.ma1(),A.ma2()>。此时为了提高推荐准确率,本发明中提出一种基于剪枝的自适应的子图匹配算法Pruning-Based ASMA。接下来将详细介绍Pruning-Based ASMA算法的处理流程,首先针对当前子图进行剪枝,得到子图集合SGs={SG1,SG2,S63}={<A.ma3(),A.ma1(),A.ma2()>,<A.ma1(),A.ma2()>,<A.ma2()>};针对子图集合中的每个子图,计算子图概率Prob1,再使用SG1在图库GDB中搜索匹配结果,进而得到对应的结果集合以及每个结果对应的概率Prob2,最终计算得到每个结果Res对应的概率为Prob,其计算公式为Prob(Res)=Prob1(SG)*Prob2(Res))。
本实例中以子图SG1(<A.ma3(),A.ma1(),A.ma2()>)为例,演示其概率计算以及推荐结果的概率计算过程:
在图库GDB中,子图<A.ma3(),A.ma1(),A.ma2()>只有唯一一条边,指向方法A.ma5(),因此Prob2(A.ma5)=1,最终方法A.ma5()的概率Prob(A.ma5)=Prob1(SG1)*Prob2(A.ma5)=(1/15)*1=1/15。其余子图概率的计算方法以及对应推荐结果的概率计算方法同上,结果如表1所示。
由表1中结果可知,按照推荐的API方法最终计算得到的概率从高至低进行排序,得到的API方法序列为<A.ma5(),A.ma4(),A.ma3()>。若当前开发者需要使用的方法恰好为A.ma5(),则TopAccuracy@1=100%,表示推荐的结果序列中第一个结果即为开发者所需要的结果。
表1示例测试代码的推荐方法以及对应的概率
表2和表3中显示了Eclipse Model、NGSE以及本发明中提出的API推荐方法Pruning-Based ASMA(简记为PASMA Model)在数据集JGit和log4j上的前Top10推荐准确率。以表格中PASMA Model模型的Top1准确率为例,其值0.4810代表的含义为在所有的推荐结果中,第一个推荐结果即为所需方法的占比。
表2各模型在数据集JGit上API推荐准确率
Top1 | Top2 | Top3 | Top4 | Top5 | Top10 | |
PASMA Model | 0.4810 | 0.6493 | 0.6988 | 0.7257 | 0.7416 | 0.7731 |
NGSE | 0.2626 | 0.3398 | 0.3820 | 0.4136 | 0.4356 | 0.5112 |
Eclipse Model | 0.1975 | 0.2364 | 0.2720 | 0.2979 | 0.3188 | 0.5135 |
表3各模型在数据集JGit上API推荐准确率
Top1 | Top2 | Top3 | Top4 | Top5 | Top10 | |
PASMA Model | 0.4849 | 0.6745 | 0.7419 | 0.7745 | 0.7884 | 0.8111 |
NGSE | 0.3259 | 0.3988 | 0.4346 | 0.4570 | 0.4831 | 0.5571 |
Eclipse Model | 0.1545 | 0.1870 | 0.2159 | 0.2620 | 0.2717 | 0.4082 |
附图中4(a)和4(b)以图形的方式可视化地展现了Eclipse Model、NGSE以及PASMAModel在数据集JGit和log4j上的前Top10推荐准确率。
综上所述,本发明提供了一种基于对象分类和自适应子图匹配的API推荐方法,相对于已有的API推荐方法,本方法通过将API方法使用模式串根据方法所属类进行分组,建立属于类库中每个类的图库GDB。当需要在位置L处进行方法推荐时,从位置L处上的上文代码中,抽取出与待推荐位置方法属于相同类的API方法使用模式串,得到子图SG,为了使得搜索匹配结果最大化,本发明提出一种基于剪枝的自适应子图匹配的方法(Pruning-BasedAdaptive Subgraph Matching Algorithm),即使用剪枝法对上述步骤生成的子图SG进行剪枝操作,生成子图集合SGs,对于集合SGs中每个子图,先计算得到每个子图概率,继而使用该子图在图库GDB中搜索匹配得到推荐结果以及每个方法对应的概率,将子图搜索匹配所得到的方法概率与子图概率相结合,生成最终的每个方法对应的概率,通过将概率由高至低进行排序,得到最终位置L处应推荐的API方法序列。实验结果显示本发明中提出的方法在推荐准确率方面,比集成开发环境中自带的按方法首字母顺序排序的方法有了很大程度上的提升,并且比目前已有的基于语料库的n-gram语言模型的API推荐方法,在推荐精度上也有一定程度的提升。
Claims (4)
1.一种基于对象分类和自适应子图匹配的API推荐方法,首先从GitHub上下载若干项目源代码,使用抽象语法树从方法级别进行语法分析,得到若干API使用模式串;针对API模式串中的每一个API方法,依据其所属的类进行分组,由此便可得到类库中每个类的API方法使用模式串;根据抽取出的属于单个类的API方法模式串建立图库GDB(GraphDataBase),当开发者开发过程中需要在位置L处进行API方法推荐时,则会从位置L的上文环境中抽取与位置L处待推荐方法同属一个类库的API方法串,建立子图SG(SubGraph),再使用基于剪枝的自适应子图匹配算法(Pruning-Based Adaptive Subgraph MatchingAlgorithm)在图库GDB中搜索最佳可能匹配结果,从而生成推荐方法列表,呈现给开发人员。
2.根据权利要求1中所述的一种基于对象分类和自适应子图匹配的API推荐方法,其特征是包括以下步骤:
1)根据从GitHub中下载得到的源代码文件,建立抽象语法树AST(Abstract SyntaxTree),通过语法分析得到方法级别的API方法调用模式串;
2)针对API方法调用模式串中的每一个调用方法,根据其所属的类库进行分组,得到类库中每个类中的API方法使用模式串;
3)根据步骤2)中得到的各个类库的API模式串,进行统计学习,建立图库GDB;
4)当开发人员需要在位置L处进行API方法推荐时,按照步骤1)和步骤2)中所描述的方法从位置L处的上文代码中抽取出与待推荐位置的API方法属于相同类的API方法使用模式串,生成子图SG;
5)按照Pruning-based ASMA模型所描述,首先使用剪枝法对步骤4)中生成的待匹配子图SG进行剪枝,得到子图集合SGs,对于子图集合中的任一子图,先计算其概率Prob1,再使用该子图在步骤3)中建立的图库GDB中进行搜索匹配,得到推荐的结果以及对应的概率Prob2,将Prob1以及Prob2相结合,得到每个结果所对应的概率;
6)通过步骤5)即可得到的推荐API方法以及每个方法对应的概率,将概率从高至低依次排序,得到最终的API方法序列,呈现给开发人员。
3.根据权利要求2中所述的一种基于对象分类和自适应子图匹配的API推荐方法,其特征是将步骤1)中到的API方法使用模式串,根据其中API方法所属的类库进行分组,得到类库中每个类中的API方法使用模式串。其主要步骤是:先从GitHub上下载项目源代码,对于其中的每一个源代码文件,分别建立抽象语法树(Abstract Syntax Tree,简记AST),进行方法级别的语法分析,得到方法级别的API方法使用模式串,根据API方法使用模式串中的每一个API方法所属的类进行分组,得到属于每一个类的API方法使用模式串。最终使用上述步骤得到的分类后的API方法使用模式串进行统计学习,建立图库GDB。
4.根据权利要求2所述的一种基于对象分类和自适应子图匹配的API推荐方法,其特征是基于剪枝的自适应子图匹配算法Pruning-Based ASMA(Pruning-Based AdaptiveSubgraph Matching Algorithm)。当开发者开发过程中,需要在位置L处进行API方法推荐时,首先会采用同上述步骤2)相同的方法,建立抽象语法树进行语法分析,得到位置L上文中已有API调用方法串,再采取步骤3)中所述的方法进行过滤,得到与位置L处所属类库一致的API方法串,建立子图,Pruning-Based ASMA会自动地对当前子图SG进行剪枝操作,得到若干待匹配的子图集合SGs<SubGraph1,SubGraph2,SubGraph3,……>,针对子图集合中的每个子图(以SubGraph1为例),先计算子图SubGraph1对应的概率Prob1,,再使用SubGraph1在图库GDB中搜索最佳匹配图,从而得到可能的推荐结果<Res1,Res2,……>,以及对应的概率为<Prob2_1,Prob2_2,……>,再将推荐结果的概率与用于搜索匹配的子图概率相结合,得到最终推荐结果<Res1,Res2,……>,及其相应的概率为<Prob1*Prob2_1,Prob1*Prob2_2,……>。按照此方法,依次计算子图集合中其余子图所得到的结果及概率,将概率按照从高至低的顺序进行排序,便可得到最终的推荐结果列表。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711188298.3A CN109814855A (zh) | 2017-11-21 | 2017-11-21 | 一种基于对象分类和自适应子图匹配的api推荐方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711188298.3A CN109814855A (zh) | 2017-11-21 | 2017-11-21 | 一种基于对象分类和自适应子图匹配的api推荐方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109814855A true CN109814855A (zh) | 2019-05-28 |
Family
ID=66601462
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711188298.3A Pending CN109814855A (zh) | 2017-11-21 | 2017-11-21 | 一种基于对象分类和自适应子图匹配的api推荐方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109814855A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110879704A (zh) * | 2019-09-03 | 2020-03-13 | 东南大学 | 一种基于类继承关系分析的api推荐方法 |
CN112114791A (zh) * | 2020-09-08 | 2020-12-22 | 南京航空航天大学 | 一种基于元学习的代码自适应生成方法 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7899861B2 (en) * | 2007-04-02 | 2011-03-01 | International Business Machines Corporation | Method for declarative semantic expression of user intent to enable goal-driven stream processing |
CN103927177A (zh) * | 2014-04-18 | 2014-07-16 | 扬州大学 | 基于LDA模型和PageRank算法建立特征接口有向图的方法 |
US20140280224A1 (en) * | 2013-03-15 | 2014-09-18 | Stanford University | Systems and Methods for Recommending Relationships within a Graph Database |
US20160148095A1 (en) * | 2014-11-21 | 2016-05-26 | Institute For Information Industry | Electronic calculating apparatus, method thereof and non-transitory machine-readable medium thereof for sensing context and recommending information |
CN106021366A (zh) * | 2016-05-10 | 2016-10-12 | 浙江大学 | 一种基于异构信息的api标签推荐方法 |
CN106462399A (zh) * | 2014-06-30 | 2017-02-22 | 微软技术许可有限责任公司 | 代码推荐 |
CN106446143A (zh) * | 2016-09-21 | 2017-02-22 | 四川长虹电器股份有限公司 | 基于图结构匹配的智能推荐***及方法 |
CN106648557A (zh) * | 2015-10-28 | 2017-05-10 | 华为技术有限公司 | 一种应用程序编程接口api的分享方法和装置 |
-
2017
- 2017-11-21 CN CN201711188298.3A patent/CN109814855A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7899861B2 (en) * | 2007-04-02 | 2011-03-01 | International Business Machines Corporation | Method for declarative semantic expression of user intent to enable goal-driven stream processing |
US20140280224A1 (en) * | 2013-03-15 | 2014-09-18 | Stanford University | Systems and Methods for Recommending Relationships within a Graph Database |
CN103927177A (zh) * | 2014-04-18 | 2014-07-16 | 扬州大学 | 基于LDA模型和PageRank算法建立特征接口有向图的方法 |
CN106462399A (zh) * | 2014-06-30 | 2017-02-22 | 微软技术许可有限责任公司 | 代码推荐 |
US20160148095A1 (en) * | 2014-11-21 | 2016-05-26 | Institute For Information Industry | Electronic calculating apparatus, method thereof and non-transitory machine-readable medium thereof for sensing context and recommending information |
CN106648557A (zh) * | 2015-10-28 | 2017-05-10 | 华为技术有限公司 | 一种应用程序编程接口api的分享方法和装置 |
CN106021366A (zh) * | 2016-05-10 | 2016-10-12 | 浙江大学 | 一种基于异构信息的api标签推荐方法 |
CN106446143A (zh) * | 2016-09-21 | 2017-02-22 | 四川长虹电器股份有限公司 | 基于图结构匹配的智能推荐***及方法 |
Non-Patent Citations (3)
Title |
---|
ANH TUAN NGUYEN等: "Graph-based Statistical Language Model for Code", 《2015 IEEE/ACM 37TH IEEE INTERNATIONAL CONFERENCE ON SOFTWARE ENGINEERING》 * |
吕晨等: "一种基于新型图模型的API推荐***", 《计算机学报》 * |
高原等: "基于代码库和特征匹配的函数名称推荐方法", 《软件学报》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110879704A (zh) * | 2019-09-03 | 2020-03-13 | 东南大学 | 一种基于类继承关系分析的api推荐方法 |
CN110879704B (zh) * | 2019-09-03 | 2024-01-12 | 东南大学 | 一种基于类继承关系分析的api推荐方法 |
CN112114791A (zh) * | 2020-09-08 | 2020-12-22 | 南京航空航天大学 | 一种基于元学习的代码自适应生成方法 |
CN112114791B (zh) * | 2020-09-08 | 2022-03-25 | 南京航空航天大学 | 一种基于元学习的代码自适应生成方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109960726B (zh) | 文本分类模型构建方法、装置、终端及存储介质 | |
CN113761218B (zh) | 一种实体链接的方法、装置、设备及存储介质 | |
CN109522011B (zh) | 一种基于编程现场上下文深度感知的代码行推荐方法 | |
CN106776544A (zh) | 人物关系识别方法及装置和分词方法 | |
CN106537332A (zh) | 软件分析***和方法 | |
CN110750240A (zh) | 一种基于序列到序列模型的代码片段推荐方法 | |
CN109492106B (zh) | 一种文本代码相结合的缺陷原因自动分类方法 | |
CN104142822A (zh) | 使用信息检索进行源代码流分析 | |
CN107480828B (zh) | 以建筑图纸优化数据库为基础进行流程引导的方法及*** | |
CN113591093B (zh) | 基于自注意力机制的工业软件漏洞检测方法 | |
CN103955429B (zh) | 确定回归测试范围的方法及装置 | |
CN108595165A (zh) | 一种基于代码中间表示的代码补全方法、装置及存储介质 | |
CN107368526A (zh) | 一种数据处理方法及装置 | |
Asaduzzaman et al. | Context-sensitive code completion tool for better api usability | |
CN109814855A (zh) | 一种基于对象分类和自适应子图匹配的api推荐方法 | |
CN103049490A (zh) | 知识网络节点间属性生成***及生成方法 | |
Vagavolu et al. | A mocktail of source code representations | |
CN107992324A (zh) | 一种基于约束求解的代码搜索方法 | |
CN113297580B (zh) | 基于代码语义分析的电力信息***安全防护方法及装置 | |
CN113536777A (zh) | 新闻关键词的抽取方法、装置、设备及存储介质 | |
CN112019403B (zh) | 一种物联网消息协议状态机的跨平台自动化挖掘方法与*** | |
CN112988962A (zh) | 文本纠错方法、装置、电子设备及存储介质 | |
CN112905232B (zh) | 一种基于语法分析树的程序代码平行语料挖掘方法及*** | |
CN113377962B (zh) | 一种基于图像识别和自然语言处理的智能过程模拟方法 | |
CN115795046A (zh) | 数据加工方法、装置、***、电子设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20190528 |
|
WD01 | Invention patent application deemed withdrawn after publication |