CN107479879B - 一种面向软件功能维护的api及其使用推荐方法 - Google Patents
一种面向软件功能维护的api及其使用推荐方法 Download PDFInfo
- Publication number
- CN107479879B CN107479879B CN201710637424.2A CN201710637424A CN107479879B CN 107479879 B CN107479879 B CN 107479879B CN 201710637424 A CN201710637424 A CN 201710637424A CN 107479879 B CN107479879 B CN 107479879B
- Authority
- CN
- China
- Prior art keywords
- api
- source code
- function request
- code file
- new function
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/33—Querying
- G06F16/332—Query formulation
- G06F16/3322—Query formulation using system suggestions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/33—Querying
- G06F16/3331—Query processing
- G06F16/334—Query execution
- G06F16/3344—Query execution using natural language analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/33—Querying
- G06F16/335—Filtering based on additional data, e.g. user or group profiles
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/30—Semantic analysis
Abstract
本发明涉及一种面向软件功能维护的API及其使用推荐方法。本发明将输入数据预处理后,从语义相似性和协同演化进行信息检索和特征定位,检索功能相关API以及定位出位置,用代码分析从定位到的源代码文件中提取变量信息,用词嵌技术计算出系统变量信息与API参数之间相似度,用于对API进行系统适用性排序及对API使用参数推荐,将筛选出API及使用参数、位置推荐给开发人员,给出推荐理由信息以辅助开发人员进行选择,高效得实现用户的功能请求。本发明克服了开发人员的工作量大的缺陷。本发明在推荐API的同时,还给出其使用的方法、参数及位置,不需要再作其它附加工作。
Description
技术领域
本发明涉及一种面向软件功能维护的API及其使用推荐方法,主要用于对给特定的功能请求推荐出最合适的API及其使用的参数和位置,属于软件维护领域。
背景技术
用户在使用软件的过程中,会根据实际情况提出新的功能请求,需要开发人员不断的维护及实现。大量的API库的发布使得软件开发和维护任务都更快更容易。因为使用已有的API可以让开发人员节省时间,他们不需要再实现别人已实现的功能,直接调用即可。标准库或第三方库的API都经过大量的测试,可靠性很高。但是开发人员需要找到相关的库及API方法了解如何使用它们,了解API的结构以及如何正确填写方法参数。显然,这个过程很耗时,API推荐系统则可以帮助开发人员做很多工作,以提高软件维护效率。
为了实现API推荐系统目前研究领域出现了很多此方面的推荐技术,这些技术主要都在研究如何更准确地推荐出API。这些技术最基本方法原理是:曾经实现过相关的功能请求的API可以实现现在的功能请求。基于这一思想,一些最常用及功能相关性最高的API被推荐出来。
在本发明之前,这些推荐方法仅仅考虑了功能上的相关性并没有考虑到当前系统的实际环境及该API适用起来的难易程度。如果开发人员不熟悉这些推荐出的API,他反而会花费更多的时间理解这些推荐出的API。在实际的软件开发和维护过程中,为实现一个新的功能请求,开发人员会尽可能得利用项目中已有的代码文件,以提高代码的利用率及降低工作量。此时,如果能过定位出需要修改的相关源文件,便可一定程度上减少开发人员的工作量,若所推荐的API能够与所定位出的相关源文件有效得结合,推荐出软件系统中已有的变量作为API的参数,而不是用添加大量的代码来使用API,再给出该API的一些功能及使用介绍,帮助开发人员快速上手该API的使用,这样就可以大大减少开发人员的工作量,更便捷更有效地实现功能请求
发明内容
本发明的目的在于克服上述缺陷,研制一种面向软件功能维护的API及其使用推荐方法。
本发明的技术方案是:
一种面向软件功能维护的API及其使用推荐方法,其主要技术特征在于如下步骤:
(1)以功能请求、目标软件系统、软件演化历史和API库作为输入数据,首先,提取目标软件系统的源代码文件,筛出软件演化历史中的功能请求,以及检索出API库的说明文档;然后使用文本挖掘的预处理技术,先对源代码文件中类名、方法名、变量名及注释等信息进行提取处理;再对用户的功能请求、第三方库的API文档、项目源代码文件中信息和已演化历史中的功能请求进行词条划分,词根处理,动名词同义词、近义词查询扩充词汇量等操作;
(2)挖掘文本中的语义相似度关系,用余弦函数对预处理后的功能请求与演化历史中的功能请求进行相似度计算,得到与功能请求相关的软件演化历史中的功能请求;对预处理后的功能请求与API文档进行相似度计算,得到功能相关的API;对预处理后的功能请求与源代码文件信息进行相似度计算,得到相关的源代码文件;再依据相似度计算API及源代码文件与新功能请求间的相关性分数;
(3)将步骤(2)得到的与功能请求相关的演化历史中的功能请求后,找到与之对应的提交文件,利用代码分析技术,从提交文件中分析并提取使用的API及所涉及的源代码文件,形成一个<演化历史中的功能请求,相关源码文件,使用的API>对应列表,得到与新功能请求相关的API及相关的源代码文件,并根据API及源代码文件出现的次数得出与新功能请求间的相关性分数;
(4)将特征定位的结果汇总,即将步骤2)中通过信息检索技术,对功能请求与源代码文件信息进行相似度计算得到相关的源代码文件,与步骤3)中通过分析软件演化历史,从对应的提交文件中提取到的源文件进行汇总,得到相关的源代码文件序列,作为特征定位的结果,也是本次功能请求可能涉及的源文件,即API可能使用的位置;
(5)将特征定位的结果即步骤4)得出的相关源文件作为输入,通过代码分析技术提取出源文件中的变量信息;
(6)将步骤(5)得到的变量信息与候选API的形式参数信息从类型和词义进行相似度计算,并以此打出API的适用性分数;
(7)将步骤(2)、(3)及(5)中筛选出的API进行集成,将三者的分数进行加权汇总,得到表示API功能相关性和系统适用性的总体分数;
(8)利用信息检索技术,从步骤(6)API序列中获取所推荐的API,从第三方库的API文档中获取该API功能说明及使用方法,从步骤(4)相关源代码文件的序列中获取API使用的位置,从步骤(5)、(6)的变量信息以及与API参数的类型及语义相似度中获取API可能使用的参数;将筛选出的API及其使用的方法、参数和位置推荐给开发人员。
本发明的优点和效果在于从当前系统环境考虑,向开发人员推荐出适合当前系统环境的API及其使用的方法、参数和位置以实现新的功能请求。此方法不仅更准确地推荐出了功能相关的API,而且分析当前系统环境推荐出具有环境适用性的API,同时利用特征定位,定位出了API使用的位置,利用代码分析技术,提取变量信息,推荐出API使用的参数。减少了开发人员的工作量,更有效提高了开发人员维护软件的效率。主要有如下一些优点:
(1)目前的API推荐方法推荐出的API只有考虑了功能相关性,不一定具有适用性,这就导致开发人员为了利用该API实现功能请求而增加较多的代码,并没有减轻开发人员的工作量。我们的方法利用代码分析技术从相关源文件的变量入手,使得推荐出的API不仅仅有功能相关性也对当前系统有一定的适用性,使得开发人员较轻松得使用该API实现用户的功能请求,而不需要其他附加工作。
(2)目前的API推荐方法仅仅推荐出API方法,开发人员若想实现某一功能请求还需要大量的工作如:了解API的使用方法,找到相关的源文件使用API实现功能请求,使用正确的API参数等;我们的方法在推荐API的同时,还给出其使用的方法、参数及位置。此外,还给出推荐理由等辅助信息供开发人员参考,这将为开发人员带来很多的便利。
附图说明
图1——本发明流程示意图。
图2——本发明功能请求示意图。
图3——本发明功能请求与提交文件联系的示意图。
图4——本发明提交文件内容示意图。
图5——本发明提交文件中的变量及API信息示意图。
具体实施方式
本发明的技术思路是:
本发明的方法是在推荐API及其使用时,将输入数据预处理后,从语义相似性和协同演化两个方面进行信息检索和特征定位,检索出功能相关的API以及定位出API使用的位置;利用代码分析技术从定位到的源代码文件中提取变量信息,利用词嵌技术计算出系统变量信息与API参数之间的相似度,用于对API进行系统适用性排序以及对API使用参数的推荐。将筛选出的API及使用的参数、位置推荐给开发人员,同时给出推荐理由等信息辅助开发人员进行选择,以便开发人员高效得实现用户的功能请求。
下面具体说明本发明。
如图1所示,本发明的步骤如下:
(1)首先,提取目的软件系统的源代码文件(.java文件),筛出软件演化历史中的功能请求,以及检索出API库的说明文档;然后使用文本挖掘的预处理技术,先对源代码文件中类名、方法名、变量名及注释等信息进行提取为<*.java,*method(),…,intvariables…>列表;再对用户的功能请求、第三方库的API文档、项目源代码文件中信息和软件演化历史中的功能请求进行词条划分,词根处理,动名词同义词、近义词查询扩充词汇量等操作,如图2所示的功能请求样例中“Update progress more frequently in IntegrationTestBigLinkedList.Generator.persist”预处理为“Update progress morefrequently in IntegrationTestBig Link List Generator persist”。
(2)挖掘文本中的语义相似度关系,用余弦函数对预处理后的功能请求与演化历史中的功能请求进行相似度计算,得到与功能请求相关的软件演化历史中的功能请求,根据文档间单词的重复度来识别相关性,首先将文档中的所有单词进行编号,然后用编号表示文档中的单词,再用余弦函数计算文档间的相似度,如下表中的示例;对预处理后的功能请求与API文档进行相似度计算,得到功能相关的API,方法同上;对预处理后的功能请求与源代码文件信息进行相似度计算,得到相关的源代码文件,方法同上;再依据相似度得出API及源代码文件与新功能请求间的相关性分数MtdScore1(F,m)和FileScore1(F,f)。
(3)将步骤(2)得到的与功能请求相关的演化历史中的功能请求后,找到与之对应的提交文件(如图3所示),利用代码分析技术,从提交文件中分析并提取使用的API及所涉及的源代码文件(如图4所示),形成一个<演化历史的功能请求,相关源码文件,使用的API>对应列表,如从图4中提取的信息形成一个<HBASE-17637,IntegrationTestBigLinkedList.java,output.progress()>,从而间接得到与新功能请求相关的API及相关的源代码文件,并根据API及源代码文件出现的次数得出与新功能请求间的相关性分数,MtdScore2(F,m)和FileScore2(F,f)公式如下;
(F:新功能请求,m:API方法m,f:某一源代码文件f,k:相关的演化历史中的功能请求数目,Count(m):k个功能请求中APIm出现的次数,Count(f):k个功能请求中源代码文件f出现的次数,)
(4)将特征定位的结果汇总,即将步骤(2)中通过信息检索技术,对功能请求与源代码文件信息进行相似度计算得到相关的源代码文件;与步骤(3)中通过分析软件演化历史,从对应的提交文件中提取到的源文件进行汇总,因为两部分的结果存在交叉情况,若想合并为唯一的分数则需通过调参加权处理;如图5所示的涉及的部分源文件,hbaseclient/src/main/java/org/apache/Hadoop/hbase/RegionLoad.java与hbaseclient/src/main/java/org/apache/hadoop/hbase/RegionLoad.java等;分数加权合并公式如下:
FileScore(F,f)=α*FileScore1(F,f)+β*FileScore2(F,f)(F:新功能请求,f:某一源代码文件,FileScore1(F,f):为步骤2)中得到的源代码文件f的分数,FileScore2(F,f)为步骤3)中得到的源代码文件f的分数,α、β则为权重)
利用分数排序得到序列,作为特征定位的结果,也是本次功能请求可能涉及的源文件,即API可能使用的位置。
(5)将特征定位的结果即步骤(4)得出的相关源文件作为输入,通过代码分析技术提取出源文件中的变量信息(其中,String、Object对象,作为特殊数据类型处理)。如图5所示,则提取出的变量信息为:
变量类型 | 变量名 |
String(对象) | urlRegionServer |
Float | Locality |
long | req |
… | … |
(6)将步骤(5)得到的变量信息与候选API的形式参数信息从类型和词义进行相似度计算,类型相同为1,相异为0;利用词嵌技术以该软件系统的源代码文件作为训练集,得出变量信息与APIm参数信息之间的语义相似度。并以此对打出APIm的适用性分数MtdScore3(F,m);
(7)将步骤(2)、步骤(3)及步骤(5)中筛选出的API进行集成,将三者的分数进行加权汇总,以至于可以得到能表示出API功能相关性和系统适用性的总体分数。分数汇总公式如下,三者之间的权重通过算法调节以致达到最优:
MtdScore(F,m)
=α*MtdScore1(F,m)+β*MtdScore2(F,m)+γ*MtdScore3(F,m)
(F:新功能请求,m:某一API方法,MtdScore1(F,m):为步骤2)中得到的APIm的功能相关性分数,MtdScore2(F,m)为步骤3)中得到的APIm的功能相关性分数,MtdScore3(F,m)为步骤5)中得到的APIm的适用性分数,α、β、γ则为权重)
(8)利用信息检索技术,从步骤(6).API序列中获取所推荐的APImap.get(),从第三方库的API文档中获取该API功能说明及使用方法,从步骤(4)相关源代码文件的序列中获取API使用的位置RegionLoad.java,从步骤(5)与步骤(6)的变量信息以及与API参数的类型及语义相似度中获取API可能使用的参数HRegionlnfo regionlnfo;将筛选出的API及其使用的方法、参数和位置以下表形式推荐给开发人员。
同时附上推荐理由及API的功能描述供开发人员参考,形式如下:
Claims (1)
1.一种面向软件功能维护的API及其使用推荐方法,其特征在于如下步骤:
(1)以新功能请求、目标软件系统、软件演化历史和API库作为输入数据,首先,提取目标软件系统的源代码文件,筛出软件演化历史中的功能请求,以及检索出API库的说明文档;然后使用文本挖掘的预处理技术,先对源代码文件中类名、方法名、变量名及注释进行提取处理;再对用户的新功能请求、第三方库的API文档、目标软件系统的源代码文件中信息和软件演化历史中的功能请求进行词条划分,词根处理,动名词同义词、近义词查询扩充词汇量;
(2)挖掘文本中的语义相似度关系,用余弦函数对预处理后的新功能请求与演化历史中的功能请求进行相似度计算,得到与新功能请求相关的软件演化历史中的功能请求;对预处理后的新功能请求与第三方库的API文档进行相似度计算,得到功能相关的API;对预处理后的新功能请求与目标软件系统的源代码文件信息进行相似度计算,得到相关的源代码文件;再依据相似度计算API及源代码文件与新功能请求间的相关性分数;
(3)根据步骤(2)得到与新功能请求相关的演化历史中的功能请求后,找到与之对应的提交文件,利用代码分析技术,从提交文件中分析并提取使用的API及所涉及的源代码文件,形成一个包括演化历史中的功能请求、相关源代码文件、使用的API的对应列表,得到与新功能请求相关的API及相关的源代码文件,并根据API及源代码文件出现的次数得出API及源代码文件与新功能请求间的相关性分数;
(4)将特征定位的结果汇总,即将步骤(2)中通过对新功能请求与目标软件系统的源代码文件信息进行相似度计算得到的相关源代码文件,与步骤(3)中通过分析软件演化历史,从对应的提交文件中提取到的源代码文件进行汇总,得到相关的源代码文件序列,作为特征定位的结果,也是本次新功能请求涉及的源代码文件,即API使用的位置;
(5)将特征定位的结果即步骤(4)得出的源代码文件作为输入,通过代码分析技术提取出源代码文件中的变量信息;
(6)将步骤(5)得到的变量信息与候选API的形式参数信息从类型和词义进行相似度计算,并以此打出API的适用性分数;
(7)将步骤(2)、(3)中筛选出的API进行集成,将它们各自在步骤(2)、(3)、(6)中计算的API的分数进行加权汇总,得到表示API功能相关性和系统适用性的总体分数;
(8)利用信息检索技术,从步骤(7)API序列中获取所推荐的API,从第三方库的API文档中获取该API功能说明及使用方法,从步骤(4)相关源代码文件的序列中获取API使用的位置,从步骤(5)、(6)的变量信息以及与API参数的类型及语义相似度中获取API使用的参数;将推荐的API及其使用的方法、参数和位置推荐给开发人员。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710637424.2A CN107479879B (zh) | 2017-07-28 | 2017-07-28 | 一种面向软件功能维护的api及其使用推荐方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710637424.2A CN107479879B (zh) | 2017-07-28 | 2017-07-28 | 一种面向软件功能维护的api及其使用推荐方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107479879A CN107479879A (zh) | 2017-12-15 |
CN107479879B true CN107479879B (zh) | 2021-09-14 |
Family
ID=60597324
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710637424.2A Active CN107479879B (zh) | 2017-07-28 | 2017-07-28 | 一种面向软件功能维护的api及其使用推荐方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107479879B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10803108B2 (en) | 2017-12-20 | 2020-10-13 | International Business Machines Corporation | Facilitation of domain and client-specific application program interface recommendations |
US10831772B2 (en) * | 2017-12-20 | 2020-11-10 | International Business Machines Corporation | Facilitation of domain and client-specific application program interface recommendations |
CN109901829B (zh) * | 2019-01-29 | 2021-04-30 | 深圳点猫科技有限公司 | 一种基于ace扩展的第三方库的代码补全方法及装置 |
CN110297628B (zh) * | 2019-06-11 | 2023-07-21 | 东南大学 | 一种基于同源相关性的api推荐方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105354327A (zh) * | 2015-11-26 | 2016-02-24 | 中山大学 | 一种基于大数据分析的接口api推荐方法及系统 |
CN106462399A (zh) * | 2014-06-30 | 2017-02-22 | 微软技术许可有限责任公司 | 代码推荐 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8340635B2 (en) * | 2009-03-16 | 2012-12-25 | Apple Inc. | Capability model for mobile devices |
CN104363159B (zh) * | 2014-07-02 | 2018-04-06 | 北京邮电大学 | 一种基于软件定义网络的开放虚拟网络构建系统和方法 |
CN104156467B (zh) * | 2014-08-22 | 2018-05-29 | 北京智谷睿拓技术服务有限公司 | Api推荐方法及api推荐装置 |
CN105446734A (zh) * | 2015-10-14 | 2016-03-30 | 扬州大学 | 一种基于软件开发历史开发人员网络关系构建方法 |
CN106021366A (zh) * | 2016-05-10 | 2016-10-12 | 浙江大学 | 一种基于异构信息的api标签推荐方法 |
CN106126412B (zh) * | 2016-06-14 | 2019-03-05 | 中国科学院软件研究所 | 基于安卓api使用规范的代码质量自动评估优化方法 |
-
2017
- 2017-07-28 CN CN201710637424.2A patent/CN107479879B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106462399A (zh) * | 2014-06-30 | 2017-02-22 | 微软技术许可有限责任公司 | 代码推荐 |
CN105354327A (zh) * | 2015-11-26 | 2016-02-24 | 中山大学 | 一种基于大数据分析的接口api推荐方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN107479879A (zh) | 2017-12-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107479879B (zh) | 一种面向软件功能维护的api及其使用推荐方法 | |
CN110674429B (zh) | 用于信息检索的方法、装置、设备和计算机可读存储介质 | |
US10102254B2 (en) | Confidence ranking of answers based on temporal semantics | |
CN108090167B (zh) | 数据检索的方法、系统、计算设备及存储介质 | |
US20150161242A1 (en) | Identifying and Displaying Relationships Between Candidate Answers | |
CN109522011B (zh) | 一种基于编程现场上下文深度感知的代码行推荐方法 | |
US9697099B2 (en) | Real-time or frequent ingestion by running pipeline in order of effectiveness | |
CN110716749B (zh) | 一种基于功能相似度匹配的代码搜索方法 | |
WO2019169858A1 (zh) | 一种基于搜索引擎技术的数据分析方法及系统 | |
US20080077397A1 (en) | Dictionary creation support system, method and program | |
US20160012335A1 (en) | Utilizing Temporal Indicators to Weight Semantic Values | |
US10558931B2 (en) | Determining comprehensiveness of question paper given syllabus | |
CN103853834A (zh) | 基于文本结构分析的Web文档摘要的生成方法 | |
CN105653701A (zh) | 模型生成方法及装置、词语赋权方法及装置 | |
CN112883030A (zh) | 数据收集方法、装置、计算机设备和存储介质 | |
JP2016177359A (ja) | 検索装置及びプログラム | |
JP4935243B2 (ja) | 検索プログラム、情報検索装置及び情報検索方法 | |
US10504145B2 (en) | Automated classification of network-accessible content based on events | |
WO2018205391A1 (zh) | 信息检索准确性评估方法、系统、装置及计算机可读存储介质 | |
JP6163143B2 (ja) | 情報提供装置、情報提供方法、および情報提供プログラム | |
CN110930106A (zh) | 线上面试系统的信息处理方法、装置和系统 | |
US11250084B2 (en) | Method and system for generating content from search results rendered by a search engine | |
CN112328743A (zh) | 代码搜索方法、装置、可读存储介质和电子设备 | |
Schäfer et al. | Sampling with incremental mapreduce | |
JP2018206189A (ja) | 情報収集装置、および、情報収集方法 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |