CN113138924B - 一种基于图学习的线程安全代码识别方法 - Google Patents
一种基于图学习的线程安全代码识别方法 Download PDFInfo
- Publication number
- CN113138924B CN113138924B CN202110440403.8A CN202110440403A CN113138924B CN 113138924 B CN113138924 B CN 113138924B CN 202110440403 A CN202110440403 A CN 202110440403A CN 113138924 B CN113138924 B CN 113138924B
- Authority
- CN
- China
- Prior art keywords
- graph
- vector
- domain access
- class
- thread
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 53
- 238000003062 neural network model Methods 0.000 claims abstract description 21
- 238000004458 analytical method Methods 0.000 claims abstract description 14
- 238000012549 training Methods 0.000 claims abstract description 10
- 231100000279 safety data Toxicity 0.000 claims abstract description 8
- 239000013598 vector Substances 0.000 claims description 78
- 230000006870 function Effects 0.000 claims description 27
- 230000014509 gene expression Effects 0.000 claims description 19
- 230000003068 static effect Effects 0.000 claims description 18
- 238000013528 artificial neural network Methods 0.000 claims description 9
- 238000005259 measurement Methods 0.000 claims description 7
- 238000010586 diagram Methods 0.000 claims description 6
- 238000005516 engineering process Methods 0.000 claims description 5
- 238000013507 mapping Methods 0.000 claims description 5
- 238000004364 calculation method Methods 0.000 claims description 4
- 230000000306 recurrent effect Effects 0.000 claims description 4
- 238000012216 screening Methods 0.000 claims description 4
- 238000002372 labelling Methods 0.000 claims description 3
- 239000003607 modifier Substances 0.000 claims description 2
- 238000011524 similarity measure Methods 0.000 claims description 2
- 230000007246 mechanism Effects 0.000 abstract description 4
- 238000013522 software testing Methods 0.000 abstract 1
- 238000001514 detection method Methods 0.000 description 13
- 230000007547 defect Effects 0.000 description 9
- 238000000605 extraction Methods 0.000 description 4
- 230000002776 aggregation Effects 0.000 description 3
- 238000004220 aggregation Methods 0.000 description 3
- 230000005856 abnormality Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 238000012935 Averaging Methods 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 230000004931 aggregating effect Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000007418 data mining Methods 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000015654 memory Effects 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 230000006403 short-term memory Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/35—Clustering; Classification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/951—Indexing; Web crawling techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- General Health & Medical Sciences (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Biophysics (AREA)
- Biomedical Technology (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Life Sciences & Earth Sciences (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Health & Medical Sciences (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于图学习的线程安全代码识别方法,属于软件测试领域;具体包括:构建得到线程安全数据集;将线程安全数据集中的类转化为可供分析的域访问图;构建以域访问图为输入、以分类标签为输出的GMN神经网络模型;采用匹配池对构建的GMN神经网络模型进行训练,得到训练好的GMN神经网络模型;将待安全识别的类对应转化成域访问图,而后输入至训练好的GMN神经网络模型,得到识别结果;本发明使用域访问图的结构,充分体现了并发程序中不同的访问关系,基于训练好的GMN神经网络模型的注意力机制进行跨图匹配,达到对线程安全代码的识别,更具普适性,通用性,且极大地提升了预测结果的准确性。
Description
技术领域
本发明属于软件调试领域,具体涉及一种基于图学习的线程安全代码识别方法。
背景技术
由于共享内存机制和不确定的线程调度,并发软件难以正确编程、测试和调试。编写一个正确且高效的并发软件是极具挑战性的。通常情况下使用类的开发人员并不总是清楚该类是否是线程安全的,原因是许多类不提供任何或只提供关于其线程安全性的部分信息,据统计目前78%左右的类都是未记录线程安全性的,导致其线程安全性十分模糊,最终会带来可怕的结果。为了加快开发速度并减轻开发困难,编程人员通常使用已经封装好的线程安全类。线程安全类保证了执行行为与线性地调用共享实例上的并发调用方法等价。因此,确保线程安全类的正确性对于保证整个并发软件正确运行是至关重要的。识别可能存在线程安全性问题的代码可以有效缩小错误检测的范围,从而提高并发缺陷检测的效率。
目前,并发缺陷的检测技术日趋成熟,主要分为静态分析、动态分析和二者结合的混合分析。现有的并发缺陷检测方法分别在识别不同规模的可疑代码上做了相关工作,有语句级别、语句块级别和执行序列级别。但都是基于现有的静态分析、动态分析或二者混合分析的方法。静态检测以人为定义的缺陷模式为指导,对所分析文件进行模式提取和对比,以检测并发缺陷。因其相对保守,误报率比较高,有时需要较多的人工干预,但是,静态检测操作简单,计算量相对较少。动态检测通过动态地执行被测程序,以期望能够触发程序异常,并且触发的异常都是真实存在的问题,人工干预度比较低,因此,误报率比较低,但由于并发交错执行的不确定性,漏报率比较高。无论静态分析或动态分析,都会消耗大量的时间和精力。
发明内容
本发明目的:为解决现有静态检测存在的误报率高、人工干预度高等问题以及解决现有动态检测存在的不确定性、漏报率高等问题,本发明提出了一种线程安全代码识别方法,基于现有的大量缺陷数据库中对线程安全类的缺陷报告数据,利用数据挖掘、深度学习等技术,快速有效地检测未知类的线程安全性,并具有构造方式新颖、特征属性提取能力优异、泛化性能和准确度较高等特点。
技术方案:一种基于图学习的线程安全代码识别方法,包括以下步骤:
S100:从开源文档中采集代码以及对应的DOC文档,利用爬虫技术,根据预设的关键字筛选出与线程安全性相关的API文档,根据API文档中的描述定位相应的类,对定位的类中线程安全的方法和线程不安全的方法进行人工标记,将人工标签后的类作为数据样本,构建得到线程安全数据集;
S200:将线程安全数据集中的类对应转化为带有安全性标签的域访问图,由所有带有安全性标签的域访问图构建得到匹配池;
S300:构建以域访问图为输入、以相似度为输出的GMN神经网络模型;采用匹配池中的域访问图对构建的GMN神经网络模型进行训练,得到训练好的GMN神经网络模型;
S400:预测未知源代码时,将待安全识别的类对应转化成域访问图,而后输入至训练好的GMN神经网络模型,得到识别结果。
进一步的,所述S200通过以下子步骤实现:
S210:对线程安全数据集中的类进行静态分析,提取出该类的一元属性及二元属性,选择与并发相关的属性;
S220:根据S210得到的属性,将程序元素属性定义为域访问图的顶点,将顶点之间的二元关系定义为域访问图的特殊节点,每个特殊节点采用关系名称进行标记,通过一组有向无标记边连接两个顶点,构造得到类图,记为其中,VC表示类C中的节点集合,EC表示类C中的边集合;
S230:设为类C的域的非空子集,根据类图/>构造得到单域访问图/>其中,/>EF表示连接顶点的边;
S240:按照S230,为类C中的每个域构造一个域访问图,基于类C中方法的标签,为每个域访问图标注标签。
进一步的,所述GMN神经网络模型包括:图编码器、传播器和聚合器;
所述图编码器,以域访问图作为输入,将域访问图中的顶点和边映射为初始顶点向量和边向量;
所述传播器,将图编码器输出的初始顶点向量和边向量进行T轮传播,得到一组顶点的向量表达;
所述聚合器,对传播器输出的顶点的向量表达进行聚合,得到图向量表达;对图向量表达进行相似度度量,得到分类标签。
进一步的,在图编辑器中,对域访问图中的顶点、边进行编码,得到顶点特征向量xi、边特征向量xij;采用MLP算法,将顶点特征向量xi、边特征向量xij映射为初始顶点向量hi (0)和边向量eij:
式中,MLPnode为输出顶点特征向量的多层感知器,MLPedge为输出边特征向量的多层感知器。
进一步的,在传播器中,当进行第t轮传播时:
将顶点向量{hi (t)i∈V}映射到新的顶点向量{hi (t+1)i∈V},表示如下:
mj→i=fmessage(hi (t),hj (t),eij) (4)
hi (t+1)=fnode(hi (t),∑j:(j,i)∈Emj→i) (5)
式中,fmessage为将输入信息联系起来的神经网络函数,将两个节点以及连接边作为输入信息得到i→j的向量信息;fnode是一个MLP或递归神经网络核心函数;
其中,公式(5)中的和运算符可由mean、max、基于attention-based的加权和中的任意一个替代。
进一步的,在传播器中,当进行第t轮传播时,增加了交叉图匹配向量进行节点更新:
通过fmatch函数将向量表达转为交叉图信息向量,交叉图信息向量和作为输入,通过fnode函数计算得到新的顶点向量{hi (i+1) i∈V},表示如下:
式中,fmatch是一个交叉信息匹配的函数,用于得出一个图中的节点与另一个图中的一个或多个节点的匹配程度ui→i。
进一步的,在fmatch函数中引入注意力权重aj→i,得到两个不同顶点向量的匹配程度ui→i,表示为:
uj→i=aj→i(hi (t)-hj (t)) (10)
式中,Sh为向量空间相似性度量函数。
进一步的,在聚合器中,根据下式对传播器输出的顶点的向量表达进行聚合,得到图向量表达:
式中,hG为图向量表达;
根据下式对图向量表达进行相似度度量,得到分类标签Lpair:
其中,hG1,hG2为图向量表示,d(hG1,hG2)表示相似度度量,γ>0为边界参数,t∈{-1,1}为基于hG1,hG2的标签产生的相似度,t=1对应相似,t=-1对应不相似。
进一步的,S200中,所述的匹配池由以下步骤构建得到:
为每张域访问图生成对应的label;
根据下式,基于标注了不同标签的域访问图构成匹配池:
MatchingSet={∑(Gi,label=labelGi)} (15)
式中,label=1对应negative标签,label=0对应positive标签,Gi对应已标注域访问图。
有益效果:本发明与现有技术相比,具有以下优点:
(1)本发明采用域访问图对并发程序代码段进行表示,通过设计多种类型的节点和边来表达线程安全代码丰富的语法语义信息;
(2)本发明采用GMN训练模型方法,采用向量间的跨图匹配,极大的提高了并发缺陷检测的准确度;
(3)本发明引入关系编码的方法和注意力机制,相比于传统的编码器,引入注意力机制的编码器参数更少,速度更快,对距离较远的结点之间使用关系编码的方法将距离信息编码,使编码器对于结点之间的长距离依赖关系有更强的学习能力。
附图说明
图1为一个实施例中的文档样本;
图2为一个实施例中基于图学习的线程安代码识别技术的流程图;
图3为一个实施例中的线程安全代码片段;
图4为一个实施例中生成的域访问图;
图5为一个实施例中GMN神经网络模型。
具体实施方式
现结合附图和实施例进一步阐述本发明的技术方案。
本实施例以对如图3所示的Bank类的线程安全性进行判断为例,来进一步说明本发明提出的一种基于图学习的线程安全代码识别方法的准确性和高效性,具体按照以下步骤执行线程安全性判断:
S100:构建线程安全数据集:从开源文档中采集代码以及对应的DOC文档,利用爬虫技术,根据预设的关键字筛选出与线程安全性相关的API文档,根据API文档中的描述定位相应的代码段,从中将线程安全的方法和线程不安全的方法进行人工标记;图1为数据集中一段文档样本。
本实施例预设的关键字为”thread-safe”、”thread-unsafe”、”synchronized”、“lock”、“unlock”、“data race”、“atomic”、“deadlock”;在其他实施例中,可根据实际情况设置关键字。
S200:域访问图的建立:将线程安全数据集中的线程安全相关性代码转化为可供分析的域访问图结构;具体通过以下子步骤实现:
S210:采用静态分析提取技术,对经S100人工标签处理的代码段分析提取出待分析的程序段的一元属性(Unary Properties)及二元属性(Binary Properties),选择与并发相关的属性,二元属性是基于一元属性产生的,一元属性与二元属性是一种并列关系,与并发相关的属性是它们各自子集的并集。
例如:设C是被分析的类,Cf为字段集,Cm为方法集,Cconst为C定义的类构造函数和静态构造函数集,则C的一元属性集为:Cunary=Cf∪Cm∪Cconst;
例如:为了捕捉程序元素属性之间的关系,分析提取了几个二元属性:
设C是被分析的类,Cf为字段集,Cm为方法集,Cconst为C定义的类构造函数和静态构造函数集。定义以下二元关系:
Calls表示方法之间的调用关系,表示为:Calls:{Cconst∪Cm}×{Cconst∪Cm};
Reads表示对域的读访问,表示为:Reads:{Cconst∪Cm}×{Cf};
Writes表示对域的写访问,表示为:Writes:{Cconst∪Cm}×{Cf};
Sync表示对方法的读写锁保护,表示为:Sync:{Cm}×{this,lock};
Mod表示对静态函数、构造函数、方法、字段的修饰关键字,表示为:Mod:{Cconst∪Cm∪Cf}×{public,protected,private,static,volatile,final};
C的二元属性集为:Cbinary=Calls∪Reads∪Writes∪Sync∪Mod。
二元属性捕获了与线程安全预测任务相关的一组丰富的关系,例如,一个方法是否是公共的,一个方法读写什么字段,以及一个方法是否是同步的。
S220:经过S210提取得到的属性,其中:
VC=VRels∪Cunary ∪{this,lock,public,protected,private,static,volatile,final}表示程序元素及其属性的顶点,VRels={Calls,Reads,Writes,Sync,Mod}表示Cbinary中不同关系的特殊节点;每个特殊节点都用关系的名称(即调用、读取、写入、同步或修饰)进行标记,并通过一组有向无标记边连接两个顶点;特殊节点是包含一类具体二元关系信息的节点。例如属性field定义了顶点Va,由属性method定义了顶点Vb,而二者间产生了二元关系writes,因此由有一个特殊节点Vc包含writes信息。基于上述定义好的顶点和边,构造类图;
给定一类C的域集合Cf的非空子集和一类图/>其中/>
构造单域访问图该单域访问图包含从F可到达的所有顶点,即并包含连接这些顶点的所有边;
为类C中的每个域构造一个域访问图,保存在磁盘中。并且根据步骤S100中为方法的标签,为域访问图集合中涉及该方法的域访问图人工地标注是否线程安全的标签。
S300:构建如图5所示的GMN神经网络模型,该GMN神经网络模型为学习图中的相似度匹配的一个过程,主要包括图编码器、传播器和聚合器;具体通过以下子步骤实现:
S310:将单域访问图编码为placeholder字典,其中,特征placeholder-tensor是指,通过将原本的节点/边的特征进行转化得到的单热(One-Hot)编码:
Feature→Np.Array=[0,1,......,0,0] (1)
其中,Np.Array表示将节点/边的特征编码为一个一维的Numpy数组。对于节点属性,数组长度为29,对于边属性,数组长度为17,因此一个域访问图中的特征就被编码为了高维的Numpy数组,该数组中每一行对应一个节点/边特征。
S320:输入S200所得的域访问图,编码器通过单独的MLP算法(这里的MLP算法是一种多层感知器,泛称为神经网络)将顶点xi和边特征xij通过相应的算法映射到初始顶点和边向量,hi代表映射之后的顶点向量,eij代表边向量:
式中,xi,xij对应S310中编码产生的特征向量。
S330:经由S320初始化节点之后,传播层将一组顶点表示{hi (t)i∈v}映射到新的顶点表示{hi (t+1)i∈v},表示如下:
mj→i=fmessage(hi (t),hj (t),eij) (4)
hi (t+1)=fnode(hi (t),∑j:(j,i)∈Emj→i) (5)
式中,fmessage通常是一个将输入信息联系起来的神经网络函数,将两个节点以及连接边作为输入信息得到i→j的向量信息,fnode是一个MLP或递归神经网络核心函数,例如RNN(RecurrentNeural Network,一种用于处理序列数据的神经网络)、GRU(GatedRecurrent Unit,一种门控循环单元)或LSTM(Long short-term memory,一种特殊的RNN),最终输出的hi (t+1)是通过fnode函数处理mi→j边信息以及原始顶点信息hi (t)后输出的节点信息。为聚合信息,使用了一个简单的和,它可以被其他交换运算符替代,例如mean、max或基于attention-based的加权和。通过多层传播,每个节点的表示将在其局部邻域中积累信息。
S340:在GMN模型中增加了交叉图匹配向量,实现传播层中的节点更新模块,具体计算公式如下:
上述式中,fmatch是一个交叉信息匹配的函数,得出一个图中的节点与另一个图中的一个或多个节点的匹配程度,即uj→i。即经过更新后的节点信息hi (t+1)中考虑了边连接信息mj→i和相似度匹配信息uj→i,使得结果更为精确。
在fmatch函数中使用基于attention-based(注意力机制)的模块,首先计算注意力权重aj→i,再通过代入计算得到两个不同点信息的差异信息uj→i,具体如下:
uj→i=aj→i(hi (t)-hj (t)) (10)
因此,对得到的值进行累计求和,获得总体交叉图匹配信息uj→i:
上述式子,Sh又是一个向量空间相似性度量函数,类似于欧氏或余弦相似性,aj→i是注意力权重,uj→i用来测量hi和它在另外一张图中邻接的差异性。在aj→i的规范化中,函数fmatch隐式地依赖于{hi}的整个集合,在等式中省略了该集合,以获得更清晰的表示法。由于是基于注意力机制,权重会被每对跨图的节点表达访问。
S350:在T轮的传播后,聚合层获得了一组关于顶点的向量表达,随后计算基于顶点hi表达产生的图向量表示。使用如下的聚合模块:
在该MLP聚合模块中,转化顶点hi通过一个带有权重的门控MLP产生筛选了无关信息后的图向量表达hG。
S360:为产生的两个图向量表示hG1,hG2表达进行相似度度量,得出图总体相似度:
s=fs(hG1,hG2) (13)
这里fs是得出hG1和hG2之间的标准向量空间相似性函数,这里的相似度度量函数可以使用海明相似度,欧几里得相似度和余弦相似度,本实施例中使用的是欧几里得相似度。
S370:基于产生的一组图向量表达以及其原本对应的标签,产生Lpair:
其中,hG1,hG2为S350中产生的图向量表示,d(hG1,hG2)表示欧几里得距离度量,γ>0为边界参数。t∈{-1,1}为基于hG1,hG2的标签产生的相似度,t=1对应相似,t=-1对应不相似。
S380:经过上述步骤后构建得到GMN神经网络模型后,预处理将要作为匹配池的域访问图。具体操作为:
为每对域访问图基于文档生成对应的标签。根据下式,基于标注了不同标签的域访问图构成匹配池:
MatchingSet={∑(Gi,label=labelGi)} (15)
式中,label=1对应negative标签,label=0对应positive标签,Gi表示已标注标签的域访问图。
采用匹配池对构建的GMN神经网络模型进行训练,为训练时的输入设置最大值MAX_TRAINING_STEP,以确保在训练时不会产生过拟合进而对结果造成不利影响。同时为了完成训练时的模型观测,当训练次数达到MAX_TRAINIING_STEP/10时,产生用于评估模型训练状态的输出,其中包含输入图对的欧几里得距离。
S400:利用训练好的GMN神经网络模型对如图3所示的Bank类进行线程安全检测;具体通过以下步骤实现:
S410:将如图3所示的Bank类按照S200转化为可供分析的域访问图,得到图4所示以Bank_Tota1为关键字段的域访问图;
S420:将域访问图输入至训练好的GMN神经网络模型进行线程安全违背检测:
nts_label=[nts_poss-ts_poss]+1 (18)
其中,ts_poss、nts_poss为对于任意一张属于匹配池的域访问图与输入图进行相似度比较并且求平均相似度的结果,fs为相似度度量函数,Ginput为待预测域访问图,Gi指已知标签域访问图,tsMatchingset为所有标签为安全的域访问图集合,ntsMatchingset为所有标签为不安全的域访问图集合,len为集合大小,mean为求平均函数。nts_label∈{0,1}即为域访问图预测产生的标签,0对应线程安全,1对应线程不安全。
最终此Bank类分析结果为:
ts_poss=0.000858550413944;nts_poss=0.000916998519896,nts_poss的指数高于ts_poss,据此判断此类为线程不安全类。
通过上述实施例可知,本发明提出的线程安全代码识别方法通过精简待分析类,同时使用静态分析提取技术来实现更加精确直观的图结构,同时选取与输入相匹配的GMN模型进行训练,很好地达到了判别线程安全性的目的,极大的提升了缺陷检测的正确性和效率。
Claims (7)
1.一种基于图学习的线程安全代码识别方法,其特征在于:包括以下步骤:
S100:从开源文档中采集代码以及对应的DOC文档,利用爬虫技术,根据预设的关键字筛选出与线程安全性相关的API文档,根据API文档中的描述定位相应的类,对定位的类中线程安全的方法和线程不安全的方法进行人工标记,将人工标签后的类作为数据样本,构建得到线程安全数据集;
S200:将线程安全数据集中的类对应转化为带有安全性标签的域访问图,由所有带有安全性标签的域访问图构建得到匹配池;
S300:构建以域访问图为输入、以相似度为输出的GMN神经网络模型;采用匹配池中的域访问图对构建的GMN神经网络模型进行训练,得到训练好的GMN神经网络模型;
S400:预测未知源代码时,将待安全识别的类对应转化成域访问图,而后输入至训练好的GMN神经网络模型,得到识别结果;
所述S200通过以下子步骤实现:
S210:对线程安全数据集中的类进行静态分析,提取出该类的一元属性及二元属性,选择与并发相关的属性;二元属性是基于一元属性产生的,一元属性与二元属性是一种并列关系,与并发相关的属性是它们各自子集的并集;
设C是被分析的类,Cf为字段集,Cm为方法集,Cconst为C定义的类构造函数和静态构造函数集,C的一元属性集为:Cunary=Cf∪Cm∪Cconst;
定义以下二元关系:
Calls表示方法之间的调用关系,表示为:Calls:{Cconst∪Cm}×{Cconst∪Cm};
Reads表示对域的读访问,表示为:Reads:{Cconst∪Cm}×{Cf};
Writes表示对域的写访问,表示为:Writes:{Cconst∪Cm}×{Cf};
Sync表示对方法的读写锁保护,表示为:Sync:{Cm}×{this,lock};
Mod表示对静态函数、构造函数、方法、字段的修饰关键字,表示为:Mod:{Cconst∪Cm∪Cf}×{public,protected,private,static,volatile,final};
C的二元属性集为:Cbinary=Calls∪Reads∪Writes∪Sync∪Mod;
S220:根据S210得到的属性,将程序元素属性定义为域访问图的顶点,将顶点之间的二元关系定义为域访问图的特殊节点,每个特殊节点采用关系名称进行标记,通过一组有向无标记边连接两个顶点,构造得到类图,记为其中,VC表示类C中的节点集合,EC表示类C中的边集合;
S230:给定一类C的字段集Cf的非空子集和类图/>构造得到单域访问图/>EF表示连接顶点的边,其中:
S240:按照S230,为类C中的每个域构造一个域访问图,基于类C中方法的标签,为每个域访问图标注标签;
S200中,所述的匹配池由以下步骤构建得到:
为每张域访问图生成对应的标签;
根据下式,基于标注了不同标签的域访问图构成匹配池:
MatchingSet={∑(Gi,label=labelGi)} (15)
式中,label=1对应negative标签,label=0对应positive标签,Gi表示已标注标签的域访问图。
2.根据权利要求1所述的一种基于图学习的线程安全代码识别方法,其特征在于:所述GMN神经网络模型包括:图编码器、传播器和聚合器;
所述图编码器,以域访问图作为输入,将域访问图中的顶点和边映射为初始顶点向量和边向量;
所述传播器,将图编码器输出的初始顶点向量和边向量进行T轮传播,得到一组顶点的向量表达;
所述聚合器,对传播器输出的顶点的向量表达进行聚合,得到图向量表达;对图向量表达进行相似度度量,得到分类标签。
3.根据权利要求2所述的一种基于图学习的线程安全代码识别方法,其特征在于:在图编辑器中,对域访问图中的顶点、边进行编码,得到顶点特征向量xi、边特征向量xij;采用MLP算法,将顶点特征向量xi、边特征向量xij映射为初始顶点向量hi (0)和边向量eij:
式中,MLPnode为输出顶点特征向量的多层感知器,MLPedge为输出边特征向量的多层感知器。
4.根据权利要求2所述的一种基于图学习的线程安全代码识别方法,其特征在于:在传播器中,当进行第t轮传播时:
将顶点向量{hi (t)i∈V}映射到新的顶点向量{hi (t+1)i∈V},表示如下:
mj→i=fmessage(hi (t),hj (t),eij) (4)
hi (t+1)=fnode(hi (t),∑j:(j,i)∈Emj→i) (5)
式中,fmessage为将输入信息联系起来的神经网络函数,将两个节点以及连接边作为输入信息得到i→j的向量信息;fnode是一个MLP或递归神经网络核心函数;
其中,公式(5)中的和运算符可由mean、max、基于attention-based的加权和中的任意一个替代。
5.根据权利要求2所述的一种基于图学习的线程安全代码识别方法,其特征在于:在传播器中,当进行第t轮传播时,增加了交叉图匹配向量进行节点更新:
通过fmatch函数将向量表达转为交叉图信息向量,交叉图信息向量和作为输入,通过fnode函数计算得到新的顶点向量{hi (t+1)i∈V},表示如下:
式中,fmatch是一个交叉信息匹配的函数,用于得出一个图中的节点与另一个图中的一个或多个节点的匹配程度uj→i。
6.根据权利要求5所述的一种基于图学习的线程安全代码识别方法,其特征在于:在fmatch函数中引入注意力权重aj→i,得到两个不同顶点向量的匹配程度uj→i,表示为:
uj→i=aj→i(hi (t)-hj (t)) (10)
式中,Sh为向量空间相似性度量函数。
7.根据权利要求2所述的一种基于图学习的线程安全代码识别方法,其特征在于:在聚合器中,根据下式对传播器输出的顶点的向量表达进行聚合,得到图向量表达:
式中,hG为图向量表达;
根据下式对图向量表达进行相似度度量,得到分类标签Lpair:
其中,hG1,hG2为图向量表示,d(hG1,hG2)表示相似度度量,γ>0为边界参数,t相似度∈{-1,1}为基于hG1,hG2的标签产生的相似度,t相似度=1对应相似,t相似度=-1对应不相似。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110440403.8A CN113138924B (zh) | 2021-04-23 | 2021-04-23 | 一种基于图学习的线程安全代码识别方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110440403.8A CN113138924B (zh) | 2021-04-23 | 2021-04-23 | 一种基于图学习的线程安全代码识别方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113138924A CN113138924A (zh) | 2021-07-20 |
CN113138924B true CN113138924B (zh) | 2023-10-31 |
Family
ID=76813468
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110440403.8A Active CN113138924B (zh) | 2021-04-23 | 2021-04-23 | 一种基于图学习的线程安全代码识别方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113138924B (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105550594A (zh) * | 2015-12-17 | 2016-05-04 | 西安电子科技大学 | 安卓应用文件的安全性检测方法 |
CN106446933A (zh) * | 2016-08-31 | 2017-02-22 | 河南广播电视大学 | 基于上下文信息的多目标检测方法 |
CN107169358A (zh) * | 2017-05-24 | 2017-09-15 | 中国人民解放军信息工程大学 | 基于代码指纹的代码同源性检测方法及其装置 |
CN108446540A (zh) * | 2018-03-19 | 2018-08-24 | 中山大学 | 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与*** |
CN111552969A (zh) * | 2020-04-21 | 2020-08-18 | 中国电力科学研究院有限公司 | 基于神经网络的嵌入式终端软件代码漏洞检测方法及装置 |
CN111783100A (zh) * | 2020-06-22 | 2020-10-16 | 哈尔滨工业大学 | 基于图卷积网络对代码图表示学习的源代码漏洞检测方法 |
CN112288079A (zh) * | 2020-11-17 | 2021-01-29 | 北京轩宇信息技术有限公司 | 图神经网络模型训练方法、软件缺陷检测方法及*** |
CN112364352A (zh) * | 2020-10-21 | 2021-02-12 | 扬州大学 | 可解释性的软件漏洞检测与推荐方法及*** |
CN112579477A (zh) * | 2021-02-26 | 2021-03-30 | 北京北大软件工程股份有限公司 | 一种缺陷检测方法、装置以及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11537719B2 (en) * | 2018-05-18 | 2022-12-27 | Deepmind Technologies Limited | Deep neural network system for similarity-based graph representations |
-
2021
- 2021-04-23 CN CN202110440403.8A patent/CN113138924B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105550594A (zh) * | 2015-12-17 | 2016-05-04 | 西安电子科技大学 | 安卓应用文件的安全性检测方法 |
CN106446933A (zh) * | 2016-08-31 | 2017-02-22 | 河南广播电视大学 | 基于上下文信息的多目标检测方法 |
CN107169358A (zh) * | 2017-05-24 | 2017-09-15 | 中国人民解放军信息工程大学 | 基于代码指纹的代码同源性检测方法及其装置 |
CN108446540A (zh) * | 2018-03-19 | 2018-08-24 | 中山大学 | 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与*** |
CN111552969A (zh) * | 2020-04-21 | 2020-08-18 | 中国电力科学研究院有限公司 | 基于神经网络的嵌入式终端软件代码漏洞检测方法及装置 |
CN111783100A (zh) * | 2020-06-22 | 2020-10-16 | 哈尔滨工业大学 | 基于图卷积网络对代码图表示学习的源代码漏洞检测方法 |
CN112364352A (zh) * | 2020-10-21 | 2021-02-12 | 扬州大学 | 可解释性的软件漏洞检测与推荐方法及*** |
CN112288079A (zh) * | 2020-11-17 | 2021-01-29 | 北京轩宇信息技术有限公司 | 图神经网络模型训练方法、软件缺陷检测方法及*** |
CN112579477A (zh) * | 2021-02-26 | 2021-03-30 | 北京北大软件工程股份有限公司 | 一种缺陷检测方法、装置以及存储介质 |
Non-Patent Citations (4)
Title |
---|
Jianjun He et al..Duplicate Bug Report Detection Using Dual-Channel Convolutional Neural Networks.Proceedings of the 28th International Conference on Program Comprehension.2020,全文. * |
Yujia Li et al..Graph matching networks for learning the similarity of graph structured objects.International conference on machine learning.2019,全文. * |
Zhen Ni et al..Analyzing bug fix for automatic bug cause classification.Journal of Systems and Software.2020,第163卷全文. * |
面向缺陷知识的多特征匹配搜索算法.电子学报.2021,第49卷(第04期),全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN113138924A (zh) | 2021-07-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112257441B (zh) | 一种基于反事实生成的命名实体识别增强方法 | |
CN112364352A (zh) | 可解释性的软件漏洞检测与推荐方法及*** | |
CN116309580B (zh) | 基于磁应力的油气管道腐蚀检测方法 | |
CN116383399A (zh) | 一种事件舆情风险预测方法及*** | |
CN115017513A (zh) | 一种基于人工智能的智能合约漏洞检测方法 | |
CN114036531A (zh) | 一种基于多尺度代码度量的软件安全漏洞检测方法 | |
CN116611071A (zh) | 一种基于多模态的函数级漏洞检测的方法 | |
CN116663539A (zh) | 基于RoBERTa和指针网络的中文实体与关系联合抽取方法及*** | |
CN116305119A (zh) | 基于预测指导原型的apt恶意软件分类方法和装置 | |
CN116150757A (zh) | 一种基于cnn-lstm多分类模型的智能合约未知漏洞检测方法 | |
CN116578980A (zh) | 基于神经网络的代码分析方法及其装置、电子设备 | |
Yuan et al. | Java code clone detection by exploiting semantic and syntax information from intermediate code-based graph | |
CN113138924B (zh) | 一种基于图学习的线程安全代码识别方法 | |
CN117009968A (zh) | 恶意代码的同源分析方法、装置、终端设备及存储介质 | |
CN116522337A (zh) | 一种基于api语义的恶意软件家族无偏检测方法 | |
Xia et al. | Source Code Vulnerability Detection Based On SAR-GIN | |
CN110737812A (zh) | 一种融合半监督学习和主动学习的搜索引擎用户满意度评估方法 | |
CN115935059A (zh) | 融合位置嵌入与注意力矩阵的异构图交互事件抽取方法 | |
CN116910526A (zh) | 模型训练方法、装置、通信设备及可读存储介质 | |
CN114298712A (zh) | 一种加密货币异常交易检测方法及应用 | |
CN111737107A (zh) | 一种基于异质信息网络的重复缺陷报告检测方法 | |
Rezaei et al. | Test Case Recommendations with Distributed Representation of Code Syntactic Features | |
CN116611057B (zh) | 数据安全检测方法及其*** | |
CN117873487B (zh) | 一种基于gvg的代码函数注释生成方法 | |
CN117521658B (zh) | 一种基于篇章级事件抽取的rpa流程挖掘方法及*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |