[发明专利]基于历史代码变更信息的API误用检测方法在审
申请号: | 202110301729.2 | 申请日: | 2021-03-22 |
公开(公告)号: | CN113051161A | 公开(公告)日: | 2021-06-29 |
发明(设计)人: | 江贺;李康乐;周志德;任志磊 | 申请(专利权)人: | 大连理工大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F8/71 |
代理公司: | 大连理工大学专利中心 21200 | 代理人: | 隋秀文;温福雪 |
地址: | 116024 辽*** | 国省代码: | 辽宁;21 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 历史 代码 变更 信息 api 误用 检测 方法 | ||
1.一种基于历史代码变更信息的API误用检测方法,其特征在于,步骤如下:
步骤1、软件项目历史代码变更信息收集:从源代码托管平台上收集开源软件项目历史代码变更信息;
步骤2、提取API误用相关的变更代码:针对步骤1中收集到的开源软件项目历史代码变更信息,提取其中与API误用相关的信息,得到包含API误用的代码片段集合S与修复API误用后的代码片段集合S′;
步骤3、API使用图AUG构建:首先通过JavaParser将Java源代码解析为抽象语法树,提取操作节点和控制节点;确定操作节点和控制节点之间的数据依赖关系以及总体使用顺序,用实线箭头边和虚线箭头边来分别表示控制流和数据流,节点集和边集构成了整体的API使用图AUG;将步骤2得到的代码片段集合S与S′中的代码片段转换为API使用图AUG,记为AUG(S)和AUG(S′);
步骤4、提取变异算子:从AUG(S)到AUG(S′)代表程序修复过程,反之,从AUG(S′)到AUG(S)则代表程序一种API误用模式,每一种误用模式都包含着从API正确使用到API错误使用的变异过程,每一个变异过程对应一个变异算子;遍历修复前后代码集合,比对AUG(S′)和AUG(S)之间的不同之处,从中提取如下变异算子:1)交换API使用图中节点的顺序;2)在API使用图中添加对已有API节点的调用,形成新的调用环路;3)更改API使用图中调用节点;4)在API使用图中新增API调用节点;5)删除API使用图中的调用节点;6)删除API使用图中的控制结构;7)更改API方法参数;8)更改控制条件参数;将提取的变异算子存入变异算子集合Mu中;
步骤5、变异操作:提取待检测目标项目中包含API使用文件,将包含API使用的文件转换为AUG(target)集合;利用步骤4中的变异算子,对AUG集合进行变异,记为AUG′(target);
步骤6、过滤变异操作:对步骤5变异得到的AUG′(target)进行过滤,去掉包含伪API误用和冗余API误用的AUG,记为AUG″(target);
步骤7、目标项目检测:首先,将AUG″(target)集合转变为可执行的程序,得到包含API误用的程序变体集合Program(target);对所有的变体程序执行测试套件,收集终止堆栈信息Killi;
步骤8、分析终止堆栈跟踪信息:包含API误用的程序变体集合Program(target)引起的堆栈跟踪信息应该特定于此目标API误用,且目标API误用引起的跟踪信息应该位于终止堆栈跟踪的顶部;如果终止堆栈跟踪信息不是该API误用引起的,或者还包含由其他API误用引起的信息,则说明原始程序中包含API误用;
步骤9、报告检测结果:当步骤8中出现原始程序中包含API误用的情况时,计算实际API误用m的概率大小Pm,概率越大说明API误用m的出现的可能越大;最后向开发人员报告候选误用,如果候选误用数量超过三个,则只向开发人员报告排名前三的候选误用;
实际API误用m的概率大小Pm的计算公式如下,其中mt为观察到API误用m在终止跟踪堆栈中触发的次数;L代表整个终止跟踪堆栈的深度;
Pm=mt/L。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于大连理工大学,未经大连理工大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110301729.2/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种针织机裸氨光边针织结构
- 下一篇:显示面板及其驱动方法、显示装置