[发明专利]细粒度的基于频繁项集挖掘产生API替换规则的方法有效
| 申请号: | 201510173809.9 | 申请日: | 2015-04-13 |
| 公开(公告)号: | CN104820587B | 公开(公告)日: | 2018-03-02 |
| 发明(设计)人: | 余萍;杨飞;吕建 | 申请(专利权)人: | 南京大学 |
| 主分类号: | G06F8/30 | 分类号: | G06F8/30 |
| 代理公司: | 南京苏高专利商标事务所(普通合伙)32204 | 代理人: | 李玉平 |
| 地址: | 210046 江苏*** | 国省代码: | 江苏;32 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 细粒度 基于 频繁 挖掘 产生 api 替换 规则 方法 | ||
技术领域
本发明涉及到在使用类库的应用程序迁移到新版本时,应用程序应该如何适应新版API的使用,具体是一种细粒度的基于频繁项集挖掘产生API替换规则的方法,属于计算机软件开发技术领域。
背景技术
软件开发过程中经常需要使用第三方的类库,而在类库的演化过程中不可避免的会修改它们提供的API,从而导致应用程序无法编译或产生错误的运行结果,软件开发人员必须花费大量的时间修改应用程序使其正确使用新版本的API。
现有的技术中,CatchUp!等工具要求类库的开发人员记录类库演化过程中的重构操作或者手动书写转化规则,通过增加类库开发人员的额外时间开销降低类库使用人员在类库升级时花费的代价;SemDiff等工具则利用类库内部调用关系的变化自动推导出替换规则,比如方法A在旧版本中调用了方法B,而在新版本中方法A调用了方法C,则可以认为方法C可能替换了方法B;还有一类工具混合了若干个其他方法以克服单个方法带来的局限性,如AURA结合了调用依赖分析和文本相似度分析,在一定程度上提高了生成的API替换规则的准确性。
现有的技术往往存在如下的问题:需要类库开发人员的参与,加大类库的开发成本;以方法为单位产生调用关系的变化,容易产生假阳性(False Positive),因为调用的替换关系往往发生在程序的局部代码段;产生的替换规则比较单一。
发明内容
发明目的:本发明所要解决的技术问题是在Library不断演化导致其提供的APIs发生变化的情况下,提供一种半自动化的产生API使用变化规则的方法,发明的目的在于克服现有技术的缺陷,产生多样化的替换规则,减少了开发人员将应用程序迁移到新版本Library上时所需的工作量。
技术方案:一种细粒度的基于频繁项集挖掘产生API替换规则的方法,它包含以下步骤:
1)首先从Library的新旧版本version1和version2中提取出事务数据集。这里事务的概念与频繁项集挖掘中事务的概念相似,我们使用事务刻画了一个代码片段s在version1和version2中调用关系的变化。每个事务可以包含两种类型的项:Added和Removed类型,其中Added类型的项表示该代码片段在新版本中相对于旧版本添加的方法调用,而Removed类型的项表示该代码片段在新版本中相对于旧版本移除的方法调用。与已有的以方法为单位分析调用关系变化的技术相比,该技术从一个方法对中可以产生若干个细粒度的事务,精确度较高;
2)指定最小支持度(根据经验一般设为3),利用闭频繁项集挖掘算法在1)中提取的事务数据集上进行挖掘,产生闭频繁项集;指定最小置信度(根据经验一般设为0.8),然后从闭频繁项集中产生关联规则,与已有工作相比,能支持生成一对一,一对多,多对一,多对多的替换规则;
3)检测应用程序中使用旧API的调用,并在IDE中自动显示为高亮;并在IDE中列出相应的替换规则供开发人员参考。开发人员可以应用相应的替换规则半自动地更新应用程序的代码。
步骤1)中从version1和version2中提取出事务数据集的具体步骤包括:
11)解析version1和version2的源码,匹配在两个版本中定义的方法;
12)分析每个匹配的方法对的源码,将其分割成若干个匹配的代码片段对;
13)对每个匹配的代码片段对,分析其调用关系的变化情况,产生Added和Removed类型的项,组成一个事务。
步骤11)中对version1和version2版本的方法进行匹配的步骤如下:
111)分别为version1和version2的源码创建抽象语法树,提取每个版本中所有方法的申明信息,包括返回值类型、方法名和参数类型;
112)计算version1中的每个方法和version2中的每个方法的相似度,若相似度大于设定的阈值,则将该方法对和相似度放入集合L中;
113)将集合L中的每个方法对按相似度由高到低排序;
114)将L中顶端的一个方法对作为匹配方法对,删除L中具有该方法对中某个方法的所有方法对;
115)执行114)步骤,直到L集合为空。
步骤112)中两个方法的相似度是根据返回值类型、方法名以及参数类型列表的相似度加权求和得到的,各自的相似度利用token-level LCS计算得到。
步骤12)中对每个匹配的方法对进行划分的具体步骤是:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510173809.9/2.html,转载请声明来源钻瓜专利网。





