预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

(19)中华人民共和国国家知识产权局(12)发明专利申请(10)申请公布号CN114153721A(43)申请公布日2022.03.08(21)申请号202111352689.0(22)申请日2021.11.16(71)申请人大连理工大学地址116024辽宁省大连市甘井子区凌工路2号(72)发明人江贺李康乐周志德任志磊(74)专利代理机构大连理工大学专利中心21200代理人温福雪(51)Int.Cl.G06F11/36(2006.01)权利要求书2页说明书5页附图2页(54)发明名称一种基于决策树算法的API误用检测方法(57)摘要本发明提供一种基于决策树算法的API误用检测方法,属于软件工程技术领域。API复用已有的软件框架或类库,可有效地提高软件开发效率。若违反了这些规约就会造成API误用,目前检测技术面临两个方面挑战:1)难以获取API使用规约;2)难以同时检测多种不同类型的API误用。该方法首先从代码托管工具上收集开源项目,从中提取出API使用示例。将API使用示例转换为AUG图,从图中挖掘API使用规约,有效解决第一个挑战。基于API使用规约信息构建API使用决策树,通过融入剪枝策略提高API使用决策树的泛化能力。在误用检测阶段,采用粗粒度和细粒度相结合的方式,提高API使用决策树的检测能力有效解决第二个挑战。CN114153721ACN114153721A权利要求书1/2页1.一种基于决策树算法的API误用检测方法,其特征在于,步骤如下:步骤1、项目收集:从源代码托管平台上收集包含目标API使用的开源软件项目;步骤2、API示例提取:针对步骤1中收集到的软件项目,识别出目标API,解析源文件并提取API使用示例;步骤3、构建API使用图:首先通过JavaParser将Java源代码解析为抽象语法树AST,提取操作节点和控制节点;确定操作节点和控制节点之间的数据依赖关系以及总体使用顺序,用实线箭头边和虚线箭头边来分别表示控制流和数据流,节点集和边集构成了整体的API使用图AUG;步骤4、提取API使用规约信息:从API使用图中挖掘规约信息并以键值对<key,value>的形式存入Map集合中;目标API使用规约信息包括参数值、方法调用的顺序信息(目标API的上一个方法调用和目标API的下一个方法调用)、前置条件信息、后置条件信息以及异常信息共五类信息;API使用图是一个有向连通图,采用广度优先搜索API使用图中的每一个节点,已经访问过的节点加入到已访问节点集合Set中,直至所有的节点都加入到节点集合Set中,遍历结束,最后将Map中内容持久化到JSON文件;步骤5、构建API使用决策树:在挖掘到规约信息的基础上,API误用检测问题建模为一个分类预测问题,构建API使用决策树以进行预测;步骤6、对API使用决策树进行剪枝:对步骤5构建的API使用决策树,通过融入剪枝策略来提高API使用决策树的泛化能力;后剪枝对于生成的一棵完整的决策树,自底向上对非叶子节点进行考察,若该节点对应的子树用叶子节点能带来决策树泛化性能的提升,则将该子树替换为叶子节点;步骤7、检测阶段:通过步骤3和步骤4,将目标JAVA文件转换为AUG,然后挖掘其中的规约信息;执行步骤5和步骤6中所构建的API使用决策树,采用粗粒度和细粒度相结合的检测方式,提高API使用决策树的检测能力;检测目标文件中的API误用报给开发人员。2.根据权利要求1所述的一种基于决策树算法的API误用检测方法,其特征在于,所述的步骤4,具体如下:首先如果当前节点的前一个节点Nodei有数据流边传入目标API节点Nodetarget,判断Nodei是否包含参数值Parameter,如果包含将参数值信息以<Parameter,value>键值对的形式存入到Map中;然后判断是否有节点Nodei通过控制流边传向目标API所在节点Nodetarget,如果有则提取节点Nodei中的方法Methodpre即为目标API的上一个方法调用,以<Methodpre,value>键值对的形式存入Map集合;如果节点Nodei中还包含检查条件Conditionpre,即代表前置条件信息,目标API的前置条件信息以<Conditionpre,value>键值对的形式存放到Map集合;如果目标API所在的节点Nodetarget通过控制流边传向节点Nodej,提取Nodej中的调用方法Methodpost即为目标API的下一个方法调用,以<Methodpost,value>键值对的形式存入Map集合;如果节点Nodej中还包含检查条件Conditionpost,即代表后置条件信息,目标API的后置条件信息以<Conditionpost,value>键值对的形式存放到Map集合中;如果目标API所在的节