System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及计算机软件,尤其涉及一种基于概率图模型的api误用检测方法。
技术介绍
1、在目前的软件开发工作中,第三方库的使用非常普遍,这些第三方的软件包通常以api(application programming interface)的形式提供功能,然而,使用这些api需要遵循恰当的规则,例如传入合适的参数,抛出正确的异常,亦或是需要调用api作为前置或后置条件。然而,由于api的设计与使用较为复杂,并且文档信息不够完备,开发人员常常会错误地使用api,进而导致bug甚至软件漏洞,因此,准确地检测api误用对于提高软件质量至关重要。
2、为了解决api误用的问题,研究人员已经提出了一些方法来自动检测api误用。这些方法通过挖掘api的正确使用规则,进而进行误用的检测。最早提出的方法大多是从大规模代码库中挖掘api使用规则,这种方法往往使用频繁项集挖掘技术,将大规模代码库中出现频率较高的api使用模式作为正确的规则[1,2]。后来随着深度学习的发展,对自然语言的分析效果逐渐提高,从文档中或从在线论坛中挖掘api使用规则的方法开始出现,这些方法基于自然语言处理等深度学习技术,分析描述api使用模式的自然语言语句,进而获取api使用规则。此外,还有结合代码库和api文档的api使用模式挖掘方法。
3、尽管已有方法在api误用检测上已经取得了一定的效果,但它们仍然存在一定的局限性。首先,虽然api文档可以准确地描述api使用规则,但它们通常不完整、格式松散,而且写作风格多样,这给推断完整准确的规则带来一定的挑
4、本专利技术针对api误用的检测,旨在提出一种基于概率图模型的api误用自动检测技术,目标是解决现有工作检测准确率不高的问题。在软件开发和维护的过程中,更好地解决api误用带来的问题,进而提高软件成熟度和安全性。
技术实现思路
1、为此,本专利技术首先提出一种基于概率图模型的api误用检测方法,包括四个过程:首先,根据代码库中挖掘的api使用规则初始化概率模型,使用频繁项集挖掘技术分析大规模代码仓库中的优质代码,获得其中的高频api使用模式,并将其作为api使用规则;之后,利用文档信息中挖掘的api使用规则调整概率模型对于描述api使用信息的文档,使用自然语言处理技术提取出文档信息中包含的api使用规则,并根据文档中提取的规则对初步的概率模型进行扩展和优化;然后api误用检测算法进行api误用的检测;最后,根据概率模型计算出实际缺失节点的概率对检测结果进行排序。
2、所述根据代码库中挖掘的api使用规则初始化概率模型过程,使用用于模式挖掘的基础数据集,首先对所述基础数据集进行预处理,将其编码为一组api使用图,之后采用挖掘规则的算法从预处理后的模式挖掘数据集中挖掘规则,以提取频繁出现的augs并初始化以概率表示的api使用规则。
3、所述api使用图的节点包括三种:api节点、特殊动作节点、参数节点;所述api使用图的边包括五种:顺序边、参数边、调用边、定义边、抛出异常边。
4、所述从预处理后的模式挖掘数据集中挖掘规则的算法,以一组augs作为输入,给定一组augs,首先提取频率大于阈值τ的api节点的集合,节点n的频率freq(n)被定义为在代码库中出现的次数,τ的默认值设置为10,对于每个api调用节点,首先创建一个初始规则,然后通过扩展入边和出边来递归地扩展规则,并且在运算中仅考虑频率大于等于τ的边,在没有要扩展的入边或出边时结束;
5、在获取相邻节点时的递归挖掘过程中,通过删除与api使用规则无关的节点来增加api使用规则的泛化性,具体的实现方法为,预设导致误报较多冗余信息的模式和对应处理方式。
6、最终得到生成的一组频繁augs作为规则。
7、所述预设导致误报较多冗余信息的模式包括三种:return节点,进行异常处理的节点以及未识别依赖的节点;
8、对return节点直接进行删除;进行异常处理的节点需要进行识别,找到异常处理的入口,即抛出异常的行,然后从该异常节点向下遍历,找到catch节点,进而识别进行异常处理的节点集合,然后删除节点以及相关联的所有边;对未识别依赖的节点进行识别节点或者识别包含这种节点的模式,根据未识别依赖的节点在模式中的出现的次数判断是删除节点还是删除模式;
9、为了应对具有相同api节点的规则导致误报,采用一种基于关系的规则聚类机制,将相似度较高的规则通过使用逻辑运算符来组合为一个规则:首先判断两个规则出现的频率是否相近,如果其中一个规则的频率大幅高于另一规则,认为频率更高的规则更为准确,若频率较低的规则的频率可以达到较高者的50%及以上,那么两个规则均有一定可信度,在检测中会分别用两个规则进行检测,符合任一规则即说明api的使用是正确的。
10、所述提取频繁出现的augs的具体方法为:在挖掘出api使用规则后,为规则构建初始概率模型,该过程为每个动作节点构建一个矩阵,表达每个节点的联合条件概率,概率矩阵的行数取决于动作节点的前置节点个数,列数固定为2,分别表示前置节点是否存在;
11、对于动作节点n,它有m个前置节点n1,n2,...,nm,设表示n是否存在的事件为n,表示前置节点是否存在的事件为n1,n2,...,nm,节点n的概率计算公式如下,
12、
13、所述根据文档信息调整概率规则过程具体为:从java官方库以及第三方库参考文档中获取模式并根据其调整和增强初始概率模型;
14、具体而言,首先从文档中挖掘两种模式:参数模式与方法间模式,所述参数模式用于对方法内的参数值进行限制,方法间模式指的是方法之间的调用顺序与参数传递关系;利用文档模式对概率模型进行修改,首先,对于概率模型中并未出现但在文档中挖掘到的模式,向概率模型中添加新的节点;对于同时存在的模式,通过调整概率值来更新模型,具体通过增加从文件中挖掘出的规则中相应节点之间的依赖强度,即节点的联合概率实现。对于代码库和文档中同时挖掘出的模式为其设置较高的概率,概率值根据实际情况调整。
15、所述api误用检测算法进行api误用的检测的方法具体为:
16、给定一个目标程序,graphimuse首先将其以方法为单位转换成aug的集合。随后,对于集合中的每个目标aug,graphimuse在之前构建的每条规则中执行图匹配。匹配过本文档来自技高网...
【技术保护点】
1.一种基于概率图模型的API误用检测方法,其特征在于:包括四个过程:首先,根据代码库中挖掘的API使用规则初始化概率模型,使用频繁项集挖掘技术分析大规模代码仓库中的优质代码,获得其中的高频API使用模式,并将其作为API使用规则;之后,利用文档信息中挖掘的API使用规则调整概率模型对于描述API使用信息的文档,使用自然语言处理技术提取出文档信息中包含的API使用规则,并根据文档中提取的规则对初步的概率模型进行扩展和优化;然后API误用检测算法进行API误用的检测;最后,根据概率模型计算出实际缺失节点的概率对检测结果进行排序。
2.如权利要求1所述的一种基于概率图模型的API误用检测方法,其特征在于:所述根据代码库中挖掘的API使用规则初始化概率模型过程,使用用于模式挖掘的基础数据集,首先对所述基础数据集进行预处理,将其编码为一组API使用图,之后采用挖掘规则的算法从预处理后的模式挖掘数据集中挖掘规则,以提取频繁出现的AUGs并初始化以概率表示的API使用规则。
3.如权利要求2所述的一种基于概率图模型的API误用检测方法,其特征在于:所述API使用图的节
4.如权利要求2所述的一种基于概率图模型的API误用检测方法,其特征在于:所述从预处理后的模式挖掘数据集中挖掘规则的算法,以一组AUGs作为输入,给定一组AUGs,首先提取频率大于阈值τ的API节点的集合,节点n的频率freq(n)被定义为在代码库中出现的次数,τ的默认值设置为10,对于每个API调用节点,首先创建一个初始规则,然后通过扩展入边和出边来递归地扩展规则,并且在运算中仅考虑频率大于等于τ的边,在没有要扩展的入边或出边时结束;
5.如权利要求4所述的一种基于概率图模型的API误用检测方法,其特征在于:所述预设导致误报较多冗余信息的模式包括三种:return节点,进行异常处理的节点以及未识别依赖的节点;
6.如权利要求2所述的一种基于概率图模型的API误用检测方法,其特征在于:所述提取频繁出现的AUGs的具体方法为:在挖掘出API使用规则后,为规则构建初始概率模型,该过程为每个动作节点构建一个矩阵,表达每个节点的联合条件概率,概率矩阵的行数取决于动作节点的前置节点个数,列数固定为2,分别表示前置节点是否存在;
7.如权利要求1所述的一种基于概率图模型的API误用检测方法,其特征在于:所述根据文档信息调整概率规则过程具体为:从Java官方库以及第三方库参考文档中获取模式并根据其调整和增强初始概率模型;
8.如权利要求1所述的一种基于概率图模型的API误用检测方法,其特征在于:所述API误用检测算法进行API误用的检测的方法具体为:
9.如权利要求8所述的一种基于概率图模型的API误用检测方法,其特征在于:所述根据概率模型计算出实际缺失节点的概率对检测结果进行排序的方法具体为:通过概率模型为每个候选误用计算置信度分数,对于每个误用候选<AUG,rule>,置信度分数定义为其是真阳性的概率,利用概率模型将规则的准确性转换为置信度分数,利用置信度分数过滤掉置信度较低的API误用,并基于置信度分数对检测结果进行排名,以优先考虑可能是真阳性的检测到的误用,置信度分数的计算方法为:
...【技术特征摘要】
1.一种基于概率图模型的api误用检测方法,其特征在于:包括四个过程:首先,根据代码库中挖掘的api使用规则初始化概率模型,使用频繁项集挖掘技术分析大规模代码仓库中的优质代码,获得其中的高频api使用模式,并将其作为api使用规则;之后,利用文档信息中挖掘的api使用规则调整概率模型对于描述api使用信息的文档,使用自然语言处理技术提取出文档信息中包含的api使用规则,并根据文档中提取的规则对初步的概率模型进行扩展和优化;然后api误用检测算法进行api误用的检测;最后,根据概率模型计算出实际缺失节点的概率对检测结果进行排序。
2.如权利要求1所述的一种基于概率图模型的api误用检测方法,其特征在于:所述根据代码库中挖掘的api使用规则初始化概率模型过程,使用用于模式挖掘的基础数据集,首先对所述基础数据集进行预处理,将其编码为一组api使用图,之后采用挖掘规则的算法从预处理后的模式挖掘数据集中挖掘规则,以提取频繁出现的augs并初始化以概率表示的api使用规则。
3.如权利要求2所述的一种基于概率图模型的api误用检测方法,其特征在于:所述api使用图的节点包括三种:api节点、特殊动作节点、参数节点;所述api使用图的边包括五种:顺序边、参数边、调用边、定义边、抛出异常边。
4.如权利要求2所述的一种基于概率图模型的api误用检测方法,其特征在于:所述从预处理后的模式挖掘数据集中挖掘规则的算法,以一组augs作为输入,给定一组augs,首先提取频率大于阈值τ的api节点的集合,节点n的频率freq(n)被定义为在代码库中出现的次数,τ的默认值设置为10,对于每个api调用节点,首先创建一个初始...
【专利技术属性】
技术研发人员:高祥,孙海龙,马云龙,田文通,
申请(专利权)人:北京航空航天大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。