System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及软件工程,具体涉及一种基于超图神经网络的api误用检测方法。
技术介绍
1、在现代软件开发领域,高效复用现有软件已经成为推动开发人员迅速并高效地完成开发任务的基石。在这一过程中,应用程序编程接口(applicaiton programminginterface,api)扮演着至关重要的角色,它使开发人员能够便捷地复用第三方库或软件框架。然而,实践中,开发人员往往面临对api正确使用方法了解不足的问题,例如混淆某些函数的调用顺序或使用错误的参数调用方法,这些都可能导致api的误用。api误用不仅会埋下安全隐患,还可能引发软件错误、崩溃。并且由于api种类繁多、使用复杂,相关文档信息不全、更新滞后等因素,开发人员在学习和应用api时面临着巨大的挑战,使得api误用现象在软件开发中非常普遍。因此,精准检测api误用对于提升软件开发的质量与效率具有极其重要的意义。
2、当前,自动检测代码片段中api误用的方法大致可以分为两类。第一类方法主要依赖于自然语言处理技术,通过对参考文档、问答论坛等相关api描述性信息的分析,提炼api使用规范,或进一步构建api约束知识图谱以进行误用检测。第二类依赖模式挖掘技术,即从项目源代码中通过分析程序依赖图、api调用序列等挖掘出常见的api使用模式。此类方法通常预设任何偏离这些频繁使用模式的行为均可能构成潜在的api误用。
3、尽管现有方法已取得一定成效,但仍存在若干局限性。首先,很多库缺乏详尽且高质量的文档说明,从中很难提取出api使用规范。其次文档的更新往往滞后
技术实现思路
1、本专利技术针对现有api误用检测方法存在的局限性,提出了一种基于超图神经网络的api误用检测方法。本专利技术是通过以下技术方案实现的:
2、步骤s1、构建包含api正确使用样本和误用样本的数据集;
3、步骤s2、根据源代码的抽象语法树结构构建api使用图;
4、步骤s3、基于api使用图生成api使用超图;
5、步骤s4、引入超图注意力机制,训练超图神经网络,得到api误用检测模型;
6、步骤s5、将待检测的源代码转换为超图结构输入到训练后的超图神经网络中,得到api误用检测结果。
7、进一步讲,本专利技术所述的基于超图神经网络的api误用检测方法,其中:
8、步骤s1的实现过程为:
9、步骤s1-1从github上搜集到的高质量目标api客户端代码和所属库源码构建api正确使用代码集。
10、从代码管理平台github上搜索目标api来查找频繁使用这些api的项目,从搜索结果中筛选出收藏数较高的项目。对项目中的文件进一步的筛选,筛选掉配置定义等文件,只保留包含一个或者多个目标api且代码行数超过100行的.java文件。同时由于github上大多数文件都是克隆文件,因此采用一种基于标记的代码克隆去重方法,避免浪费时间和空间来存储冗余信息。此外,对于每一个目标api,收集其所属库的源代码文件,这些源文件均为开源性质,文件中包含完整的库代码信息。
11、步骤s1-2使用关键字搜索并筛选github和stack overflow中涉及目标api的帖子,提取出误用代码样本,构建api误用代码集。
12、选取github中含有目标api的开源项目,尤其是那些活跃且维护良好的大型项目;使用api名称作为关键字搜索和筛选涉及目标api的issue和pull request帖子,特别关注那些被标记为bug、fix、error等与错误修复相关的标签;从帖子中提取出代码样本,确保获取的代码块足够大,可以包括完整的函数或类,以保留api调用的上下文信息。同理使用api名称、misuse、error、exception、issue、bug等作为关键字搜索stack overflow中的帖子,提取出api误用代码块。将从github和stack overflow中收集到的数据合并,清楚重复冗余的数据,形成api误用代码集。
13、所述目标api选取自广泛应用于api误用检测领域的数据集mubench和问答网站stackoverflow上讨论频率最高的前100个java api。stackoverflow上讨论频率最高的api通常是实际开发过程中经常应用的api,并且开发人员经常对它们的使用方法产生疑惑。
14、步骤s2中:
15、源代码因其高度结构化的特性,使得方法间的调用关系和参数的传递顺序等信息并不直观,直接分析源程序是很困难的。因此对构建的代码集进行静态代码分析,首先根据源代码生成抽象语法树(ast)。进一步的,鉴于api误用主要源于方法调用顺序不当、异常处理不正确、前/后置条件缺失和参数值错误等因素,在ast的基础上进行了解析构造,抽取出相关api使用和上下文信息构建了api使用图(api usage graph,aug)。aug是一个带有标记节点和边的有向图,专门用于表示api使用的特殊性。aug表示为gb=(vb,eb),其中节点集vb包括动作节点和数据节点,即api方法、操作符和参数、对象。边集eb表示节点元素间的数据流和控制流关系,包括定义边、参数边、调用边、抛出异常边和顺序边。
16、步骤s3中:
17、由于在普通图中,每条边被限定为仅与两个节点相连,这限制了其仅能表达对象间的二元关系。为了捕捉对象间更为错综复杂的关系,引入了超图结构。作为普通图的一种扩展形式,超图中的边可以与任意数量的节点相连,从而突破了二元关系的局限。得益于其灵活的超边设计,超图能够揭示出普通图结构难以展现的高阶关系,弥补了普通图在表示数据相关性方面的不足。
18、在本专利技术中,采用在步骤s2中获得的aug来构建api使用超图,将aug中的节点作为超图的节点,依据aug中各节点间的关联关系来构建超边集合,包括调用顺序超边、异常处理超边、条件依赖超边和参数检查超边。
19、具体而言,调用顺序超边用于表示api调用之间的顺序依赖。在api的实际应用中,方法调用的先后顺序至关重要,调用顺序不正确可能导致功能失效或安全漏洞。通过提取aug中的顺序边信息,将那些按照顺序调用的api节点连接在一起。
20、其次,异常处理超边用于捕捉api调用过程中异常的抛出与处理之间的关联。为此将抛出异常的api节点与捕获异常的操作符节点关联起来。
21、此外,条件依赖超边用于表示api调用前后必要的条件依赖。api调用前往往需要进行资源准本文档来自技高网...
【技术保护点】
1.一种基于超图神经网络的API误用检测方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的方法,其特征在于,所述API使用图定义为Gb=(Vb,Eb),其中节点集Vb包括动作节点和数据节点,即API方法、操作符和参数、对象;边集Eb表示节点元素间的数据流和控制流关系,包括定义边、参数边、调用边、抛出异常边和顺序边。
3.根据权利要求1所述的方法,其特征在于,所述超图定义为其中表示节点集,和API使用图中的节点集Vb相同;εb表示超边集,包括调用顺序超边、异常处理超边、条件依赖超边和参数检查超边共四组超边;W是一个表示超边权重的对角矩阵。
4.根据权利要求1所述的方法,其特征在于,所述步骤S4包括:
5.根据权利要求4所述的方法,其特征在于,对超图中的节点进行特征初始化的过程为:
6.根据权利要求1所述的方法,其特征在于,在对超图神经网络进行训练过程中,卷积变换的公式为:
7.根据权利要求1所述的方法,其特征在于,在节点信息的传播过程中,引入针对各类超边的注意力机制,节点vi对类型为t的超边的权重的计算
8.根据权利要求1所述的方法,其特征在于,在对超图神经网络进行训练过程中,损失函数作为判断训练是否结束的条件,所述损失函数为:
...【技术特征摘要】
1.一种基于超图神经网络的api误用检测方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的方法,其特征在于,所述api使用图定义为gb=(vb,eb),其中节点集vb包括动作节点和数据节点,即api方法、操作符和参数、对象;边集eb表示节点元素间的数据流和控制流关系,包括定义边、参数边、调用边、抛出异常边和顺序边。
3.根据权利要求1所述的方法,其特征在于,所述超图定义为其中表示节点集,和api使用图中的节点集vb相同;εb表示超边集,包括调用顺序超边、异常处理超边、条件依赖超边和参数检查超边共四组超边;w是一个表示超边权重的对角矩阵。
<...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。