一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于库源码和客户源码挖掘的API误用检测方法及系统

2023-02-19 13:37:18 来源:中国专利 TAG:

技术特征:
1.一种基于库源码和客户源码挖掘的api误用检测方法,其特征在于,分别通过频繁子图挖掘算法挖掘客户代码中频繁出现的api使用模式作为api使用模式约束、通过收集库源码中每个目标api类及其父类的所有方法进行代码解析构建出抽象语法树,然后使用推导策略从中抽取出api库源码约束;再将两种约束表示成api使用图后进行约束合并和约束优化,并采用图匹配算法进行api误用检测,根据得到的候选api误用计算其误用可疑程度,实现api误用检测;所述的api库源码约束,通过以下方式挖掘得到:1)确定库源码中分析的方法范围:确定库源码中每个目标api所在类的所有方法,当它继承父类,将所有父类的方法也纳入分析范围,因为很多父类的方法经常在子类中被使用;当目标api是接口而没有具体实现,则对其一个常用实现类的方法实现进行分析;2)通过推导策略从库源码推导api约束:首先生成每个api方法源码的抽象语法树,然后根据推导策略从语法树节点信息抽取出api实现源码中隐含的api约束。2.根据权利要求1所述的基于库源码和客户源码挖掘的api误用检测方法,其特征是,所述的api使用模式约束是指:在客户代码中频繁出现的api用法,使用api使用图表示,其具体通过以下方式挖掘得到:1)将每个api使用代码片段表示为api使用图:使用eclipse jdt解析工具将代码片段表示为ast抽象语法树,从中抽取出数据或动作实体、以及数据流和控制流关系来作为api使用图的节点和边,从而生成api使用图;2)从众多表示为api使用图的api使用代码片段中,使用频繁子图挖掘算法,得到在众多由点和边构成的图中频繁出现的子图,当频繁程度达到阈值时,将该api使用子图作为api使用模式。3.根据权利要求1所述的基于库源码和客户源码挖掘的api误用检测方法,其特征是,所述的api库源码约束中的条件检查约束,通过以下推到策略得到:策略1:识别出源码中的assert关键字和objects.requirenonnull()方法的调用,提取其中的参数为条件检查约束,再识别@param或@throws注解中对方法参数取值的条件约束;策略2:识别出throw关键字,再识别包裹throw异常抛出语句的条件分支语句中的条件,将包含外部无法访问的私有属性或局部变量的条件过滤掉,剩余作为条件检查约束;策略3:基于java开发经验人工分析常见的java本地方法定义其条件检查约束;策略4:在api方法实现内部会调用其他方法,被调用的其他方法也通过上述三种策略推导约束。4.根据权利要求1所述的基于库源码和客户源码挖掘的api误用检测方法,其特征是,所述的api库源码约束中的异常处理约束,通过以下推导策略得到:策略5:识别出throw语句、throws关键字、@throws注解和@exception注解,其后的异常类就是可能被抛出的异常,提取为异常处理约束;策略6:推导出异常处理约束和条件检查约束之间的可替换关系,对应api的客户代码只需满足可替换约束的其中之一即可;当某异常处理约束对应的throw语句被条件分支语句包裹,而根据策略2从该条件分支语句推导出条件检查约束,则二者存在可替换关系。5.根据权利要求1所述的基于库源码和客户源码挖掘的api误用检测方法,其特征是,所述的api库源码约束中的调用顺序约束,通过以下推导策略得到:
策略7:从方法调用关系图推导调用顺序约束:当方法1初始化变量a,方法2使用变量a,则方法1需要先于方法2被调用;当方法3中使用对象o,方法4中清除对象o如置为null,则方法4需要后于方法3被调用;这二者顺序关系经过方法调用关系图传递到调用这些方法的方法中;策略8:定义2个基于方法名称的启发式规则:一是方法名包含hasnext的方法先于方法名包含next的方法被调用,适用于遍历相关的api如java.util.iterator类;二是方法名包含close的方法后于方法名包含write的方法被调用,适用于资源使用相关的api如java.io.dataoutputstream类。6.根据权利要求1所述的基于库源码和客户源码挖掘的api误用检测方法,其特征是,所述的约束合并是指:将来自库源码的约束表示成api使用图形式,和来自客户代码的约束统一,对于每个约束,生成满足该约束的api使用代码片段,在将api使用代码片段表示为api使用图。7.根据权利要求1所述的基于库源码和客户源码挖掘的api误用检测方法,其特征是,所述的约束优化,包括:增强来自客户代码的api约束和提高约束的全面性和丰富性,其中:增强来自客户代码的api约束是指:当约束的方法和类型和库源码的约束重叠,将重叠的约束的精细语义细节传递给来自客户代码的约束,例如调用顺序约束的前置或后置类型;然后将来自库源码和客户源码的api约束集合直接合并;提高约束的全面性和丰富性是指:根据库源码的约束修改客户代码的约束,从而产生新的约束,当客户代码的约束中的子图与条件检查或异常处理相关,用库源码的相应类型约束替换该子图,生成与原始约束具有替代关系的新约束。8.根据权利要求1所述的基于库源码和客户源码挖掘的api误用检测方法,其特征是,所述的api误用检测过程,具体包括:1)对于每个待检测的api使用代码片段,生成其api使用图,然后使用图匹配算法与api约束的api使用图进行匹配,未能匹配即违反api约束的代码片段被视为候选的api误用;2)计算候选api误用的误用可疑程度,取误用可疑程度最高的k个报告为最终api误用。9.根据权利要求1所述的基于库源码和客户源码挖掘的api误用检测方法,其特征是,所述的误用可疑程度指:一个候选api误用作为真实api误用的可能性打分;影响该打分的因素有:所违反api约束在客户代码中出现的频繁程度、api约束是否从库源码挖掘到、这种api约束的违反情形在客户代码中出现的频繁程度和满足api约束的用法的差距。10.一种实现权利要求1~9中任一所述基于库源码和客户源码挖掘的api误用检测方法的系统,其特征在于,包括:客户代码挖掘模块、库源码挖掘模块、约束结合模块和误用检测模块,其中:客户代码挖掘模块生成客户代码中频繁出现的api使用模式作为api约束,库源码挖掘模块推导api实现源码中隐含的api约束,约束结合模块将来自库源码和客户代码的api约束结合,误用检测模块检测出违反api约束的api误用。

技术总结
一种基于库源码和客户源码挖掘的API误用检测方法,分别通过频繁子图挖掘算法挖掘客户代码中频繁出现的API使用模式作为API使用模式约束、通过收集库源码中每个目标API类及其父类的所有方法进行代码解析构建出抽象语法树,然后使用推导策略从中抽取出API库源码约束;再将两种约束表示成API使用图后进行约束合并和约束优化,并采用图匹配算法进行API误用检测,根据得到的候选API误用计算其误用可疑程度,实现API误用检测。本发明利用第三方库源码来挖掘到更全面和精确的API约束,有效解决来自客户代码的API约束缺乏全面性和充足信息的问题,显著提高API误用检测的召回率和精确度。确度。确度。


技术研发人员:曾虎双 沈备军 陈雨亭 钟浩
受保护的技术使用者:上海交通大学
技术研发日:2021.08.11
技术公布日:2023/2/17
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献