CN110597735A - 一种面向开源软件缺陷特征深度学习的软件缺陷预测方法 - Google Patents

一种面向开源软件缺陷特征深度学习的软件缺陷预测方法 Download PDF

Info

Publication number
CN110597735A
CN110597735A CN201910907932.7A CN201910907932A CN110597735A CN 110597735 A CN110597735 A CN 110597735A CN 201910907932 A CN201910907932 A CN 201910907932A CN 110597735 A CN110597735 A CN 110597735A
Authority
CN
China
Prior art keywords
defect
software
tree
information
defective
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.)
Granted
Application number
CN201910907932.7A
Other languages
English (en)
Other versions
CN110597735B (zh
Inventor
艾骏
王飞
许嘉熙
郭皓然
邹卓良
施韬
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beihang University
Beijing University of Aeronautics and Astronautics
Original Assignee
Beijing University of Aeronautics and Astronautics
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing University of Aeronautics and Astronautics filed Critical Beijing University of Aeronautics and Astronautics
Priority to CN201910907932.7A priority Critical patent/CN110597735B/zh
Publication of CN110597735A publication Critical patent/CN110597735A/zh
Application granted granted Critical
Publication of CN110597735B publication Critical patent/CN110597735B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/21Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
    • G06F18/213Feature extraction, e.g. by transforming the feature space; Summarisation; Mappings, e.g. subspace methods
    • G06F18/2132Feature extraction, e.g. by transforming the feature space; Summarisation; Mappings, e.g. subspace methods based on discrimination criteria, e.g. discriminant analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Evolutionary Computation (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Computational Linguistics (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Evolutionary Biology (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Stored Programmes (AREA)

Abstract

本发明提供了一种面向开源软件缺陷特征深度学习的软件缺陷预测方法,属于软件工程技术领域。本发明包括:采集开源软件缺陷信息,构建软件缺陷数据库,将源代码生成抽象语法树;利用社团检测算法将抽象语法树进行剪枝得到缺陷子树,然后结合修复描述和项目基础信息、源代码来建立缺陷子树的信息语料库,从中提取主题单词并转化为向量表示,作为缺陷子树中节点的属性;最后建立基于图分类的卷积神经网络的软件缺陷预测模型,将缺陷子树表示为邻接矩阵和属性矩阵作为模型的输入训练卷积神经网络,识别待预测软件模块源代码是否具有缺陷倾向性。本发明利用深度学习的方法直接从结构化的软件代码中提取缺陷深度特征,能够取得更好的缺陷识别效果。

Description

一种面向开源软件缺陷特征深度学习的软件缺陷预测方法
技术领域
本发明属于软件工程领域,涉及一种面向开源软件的基于抽象语法树结构特征学习的软件缺陷预测方法。
背景技术
随着软件系统的规模和复杂度的增长,软件缺陷也与日俱增,如何提高软件的质量并及早的识别、预测、修复软件的缺陷,已成为整个软件生命周期中必须始终关心和设法解决的问题。软件缺陷预测能够根据软件代码特征和历史缺陷信息,及早的识别出存在能影响软件可靠性的软件缺陷倾向的模块,从而充分利用有效的资源提高软件产品的质量与可靠性。
机器学习技术的逐渐成熟使得基于统计学习的数据驱动型软件缺陷预测变得更为有效。大量实例的研究表明,利用机器学习中的关联规则、分类器算法、聚类算法等,取得了很好的缺陷预测效果,对于提高软件可靠性有着显著的作用。早期基于机器学习的软件缺陷预测主要是用项目历史数据作为训练,得到模型在用于该项目未来版本中的软件缺陷,这种预测方法被称为项目内缺陷预测。然而项目内缺陷预测的预测结果受项目历史数据数量的限制明显,在工程场景中往往很难获取充足的训练数据,因此无法通过改进模型来提高预测的效果。针对项目内缺陷预测中训练数据不足和获取困难的瓶颈,一些研究人员建议利用其他项目数据来训练模型进行预测,提出跨项目缺陷预测。跨项目缺陷预测核心思想是使用其他软件中分布相似的度量数据给出待预测软件中的缺陷模块,其难点在于选择能够在项目间迁移的数据和缺陷度量元。开源软件为跨项目缺陷预测带来了规模巨大的可用数据,目前Github用户总量达到3100万,项目总数超过了9600万,合并请求超过了2亿次,其中包含海量的软件缺陷修复数据,缺陷代码的大数据使建立复杂深层的学习模型成为可能。
获取有效的软件缺陷相关的度量元是准确识别高风险模块的关键。传统度量元集中在基于软件规模等度量元的缺陷预测方面,研究缺陷和软件规模、复杂度、模块耦合性等属性之间的关系,以此预测软件可能存在的缺陷数量。比较有代表性的度量元包括代码行数、McCabe复杂性度量、Halstead程序复杂度度量等。随着面向对象方法的普及,越来越多的面向对象程序的度量元得到越来越多的应用。面向对象中最为典型的是CK度量元和MOOD度量元。但是目前的度量元主要是将软件程序元素离散化处理,由文件或类颗粒度上的统计结果设定特征指标,属于可认知的浅层特征,然而现实世界中的很多软件缺陷并不具备某些特定的线性特征,而是包含难以挖掘的深层特征,因此传统度量元在实际的软件工程项目中效果不太理想。
最近部分研究人员将抽象语法树应用在软件缺陷预测中,将抽象语法树转化为数值序列,使用深度学习的方法获取缺陷的有效表征(参考文件1:Wang S,Liu T,Nam J,etal.Deep Semantic Feature Learning for Software Defect Prediction[J].IEEETransactions on Software Engineering,2018,PP(99):1-1.参考文件2:Dam H K,TranT,Pham T T M,et al.Automatic feature learning for predicting vulnerablesoftware components[J].IEEE Transactions on Software Engineering,2018,PP(99):1-1.)。然而数值序列是树状结构的一种有损转换,并且原始的代码模块中缺陷信息被大量的无关信息所掩埋,实际预测效果仍然有待提高。
发明内容
由于目前软件缺陷度量元主要根据专家经验将软件程序元素离散化处理,在文件或类颗粒度上的统计结果设定特征指标,属于可认知的浅层特征,然而现实世界中的很多度量元与缺陷间并不具备简单线性关系,因此传统度量元在实际的软件工程项目中效果不太理想,对实际中面向开源软件的缺陷预测中并不能取得好的预测效果。为解决现有技术的不足,本发明提出了一种面向开源软件缺陷特征深度学习的软件缺陷预测方法。
本发明所实现的面向开源软件缺陷特征深度学习的软件缺陷预测方法,包括:
步骤1,采集开源软件缺陷信息,构建软件缺陷数据库,存储的每条缺陷信息包括软件模块在软件修复前和修复后两个版本的源代码,以及文本类型的修复描述和项目基础信息;
步骤2,依次取出软件缺陷数据库中每个缺陷对应的软件模块的修复前和修复后的两个版本的源代码,对应生成两个抽象语法树,对比两个抽象语法树结构,得到其中的差异节点,并为两个抽象语法树的各节点添加节点是否发生修改的属性;
步骤3,利用社团检测算法对每个缺陷对应的两个抽象语法树进行社团划分,将所有包含差异节点的社团进行最小化连接,得到包含缺陷信息的缺陷子树;对每个缺陷,利用相同社团检测算法得到软件修复前和修复后的缺陷子树;
步骤4,对每个缺陷子树,由对应的修复描述、项目基础信息以及缺陷子树的语义信息获取缺陷子树的信息语料库,利用主题建模技术从信息语料库中获取缺陷子树的主题,利用文本的分布式表示方法将主题单词转化为一维向量数据,并作为缺陷子树中节点的属性;
步骤5,建立基于图分类的卷积神经网络的软件缺陷预测模型,将步骤四中缺陷子树表示为邻接矩阵和属性矩阵作为模型的输入训练卷积神经网络,识别待预测软件模块源代码是否具有缺陷倾向性;
设缺陷子树中有N个节点,则邻接矩阵A为N×N的矩阵,若两个节点间存在连接则在邻接矩阵中对应的元素为1,否则为0;设节点属性数量为D,则属性矩阵X是一个N×D的矩阵,节点的属性包括:节点是否发生修改,对应主题单词的一维向量中的各元素。
本发明与现有技术相比,具有以下优势和积极效果:
(1)本发明提出一种基于抽象语法树结构特征学习的软件缺陷预测方法,利用软件的历史缺陷代码及其语义信息,使用机器学习的方法自动提取软件缺陷特征,利用深度学习的方法直接从结构化的软件代码中提取缺陷深度特征,解决了特征工程中度量元设计困难的问题,适合用于实际中面向开源软件的缺陷预测;
(2)本发明方法中使用深度学习得到的特征建立软件缺陷预测模型,对软件模块的缺陷倾向性进行预测,能够取得更好的缺陷识别效果,经实际验证用于实际软件工程项目中效果比较好。
附图说明
图1是本发明的基于抽象语法树结构特征学习的软件缺陷预测方法的流程图。
具体实施方式
为了便于本领域普通技术人员理解和实施本发明,下面结合附图和实施例对本发明作进一步的详细描述。
本发明提出一种基于抽象语法树结构特征学习的软件缺陷预测方法,首先将源代码表示为抽象语法树,再利用修复信息和社团划分进行抽象语法树的裁剪,得到缺陷子树,并将修复描述和项目信息等背景信息综合到缺陷子树中进行缺陷预测,在预测时提出使用图卷积神经网络学习缺陷子树的有效表达,最后能获得比较好的缺陷识别效果,整体流程如图1所示,主要包括五个步骤,下面分别说明各步骤的实现。
步骤一,采集开源软件缺陷信息,每条缺陷信息包括软件修复前、修复后两个版本的软件模块源代码,修复描述和项目基础信息,并以此构建软件缺陷数据库。
假设开源软件托管库中开发人员每次标注的缺陷修复是有效的,修复前的模块为包含缺陷的软件代码,修复后的模块为不包含该缺陷的软件代码,每个缺陷的修复过程都会对应修复前和修复后两段源代码。开发人员在修复缺陷的同时,往往会通过PullRequest和Commit功能描述该缺陷的原因、种类和故障表现,此类描述可以称为修复描述,每条缺陷信息都包含文本类型的修复描述。每个缺陷都是存在于特定软件项目中的,每条缺陷信息中还包含所对应的软件项目的名称、主题、描述和语言等项目基础信息,项目基础信息同样以文本类型保存在软件缺陷数据库中。
步骤二,根据步骤一获得的软件缺陷数据库,从中依次取出每个缺陷对应的软件模块的修复前和修复后的两部分源代码,以此分别生成两个抽象语法树,通过对比两个抽象语法树结构,得到抽象语法树中的差异节点,并将差异节点信息作为属性标记在两个抽象语法树的节点中。具体的,步骤二包含以下3个步骤:
步骤201、将软件模块在修复前和修复后的源代码解析为抽象语法树。
抽象语法树是软件源代码的抽象语法结构的树状表现,通过代码解析工具将上述软件缺陷数据库的源代码解析为抽象语法树,抽象语法树上的每个节点包含节点类型、代码内容和子节点集合等信息,修复描述信息和项目基础信息作为抽象语法树属性储存在抽象语法树中,此时软件缺陷数据库可表示为D=((T11,T10),(T21,T20),...(Tn1,Tn0)),其中,n为缺陷信息总数,每条缺陷信息中包括修复前和修复后两个抽象语法树(Ti1,Ti0)(1≤i≤n),Ti1表示修复前的抽象语法树,Ti0表示修复后的抽象语法树;每个抽象语法树作为一个数据样本,则含有缺陷的数据样本数等于无缺陷的数据样本数。
步骤202、抽象语法树差异分析。
将每条缺陷信息的两个抽象语法树(Ti1,Ti0)的节点进行匹配,首先将抽象语法树的匹配问题看作从修改前的抽象语法树Ti1通过一系列的编辑操作转化为修改后的抽象语法树Ti0,这一系列的操作称为编辑脚本。抽象语法树的匹配过程是在两个抽象语法树的相似节点间建立映射关系的过程,其中一个抽象语法树上的节点只能添加到一个映射节点对中,匹配过程主要分为以下两个步骤:①采用贪婪算法自顶向下的寻找抽象语法树的同构子树,在各同构子树的节点间建立映射;②如果两个节点的后代中存在大量公共节点时,采用自底向上的策略建立节点映射,当两个节点建立连接后,使用最优化算法再寻找后代中可能存在映射的节点。
步骤203、标记修改节点。求解编辑脚本的过程伴随着树间节点的匹配,匹配成功的节点看作未发生修改的非缺陷代码节点;无法匹配的节点看作发生修改行为的缺陷代码节点,即发生差异节点;进一步的将是否发生修改作为属性储存在抽象语法树的节点中。
步骤三,利用社团检测算法对每个缺陷的两个抽象语法树状结构进行社团划分,将所有包含差异节点的社团进行最小化连接,得到包含缺陷信息的缺陷子树。
含有节点修改信息的抽象语法树往往包含大量缺陷无关节点和其他噪声节点,因此需要对抽象语法树进行剪枝。本发明方法通过Louvain社团检测算法结合节点修改信息对抽象语法树进行剪枝。
Louvain社团检测算法是一种基于模块度的社团检测算法,它能够有效的发现层次性的社团结构,得到整个社团网络模块度最大的结果,将抽象语法树看作有向无环图,对树状结构进行社团划分。对于抽象语法树,Louvain社团检测算法中的模块度Q计算如下:
其中,Ai,j为网络中节点i和节点j相连的边数,ki为与节点i相连的边数,kj为与节点j相连的边数,m为网络中边的总数,σ(ci,ci)函数表示若节点i与节点j在同一个社团中则返回1,否则返回0。ci表示节点i所属的社团、cj表示节点j所属的社团。
Louvain算法优化目标为整个社团模块度最大,它将每个节点初始化为一个社团,算法包括两个阶段:第一阶段尝试将单个节点加入能够使得模块度提升最大的邻近的节点所属社团;第二阶段将每个社团构造为一个超节点,迭代两个阶段直至社团划分结果不再变化。
社团检测算法将抽象语法树划分为若干子树,表示为T(r,V)=∑Ti(ri,Vi),T为抽象语法树,r为抽象语法树的根节点,V为抽象语法树的所有节点集合,Ti为第i个子树,ri为子树Ti的根节点,Vi为子树Ti的所有节点集合,由此输出各个节点的子树归属。查找抽象语法树中的所有差异节点的子树归属,可以得到所有包含差异节点的子树集合。由于从子树集合中的若干子树可能具有不连通性,因此通过子树根节点间的最短路径将子树集合进行最小化连接,将得到子树作为缺陷子树,剪枝后的缺陷子树组成的数据库可以表示为: 表示剪枝后修复前的抽象语法树,表示剪枝后修复后的抽象语法树。
也可以采用其他社团检测算法对抽象语法树进行子树划分,本发明实施例中选用了社团划分效果较优的Louvain算法。
步骤四,提取项目基础信息、修复描述、以及步骤三中缺陷子树的类名、方法名、成员变量名等语义信息,利用主题建模技术获取缺陷子树的主题,进而利用文本的分布式表示方法将主题信息转化为向量数据作为缺陷子树的属性。具体的,步骤四包含以下3个子步骤。
步骤401、文本信息预处理。
每个缺陷子树对应其项目基础信息和修复描述构成了缺陷子树的背景信息;缺陷子树中提取所在类的类名、成员变量名、方法名、方法返回值、方法形参名、方法形参类型及其他变量名,这些信息构成了缺陷子树的自身语义信息。缺陷子树的背景信息和自身信息都属于文本信息,使用自然语言处理的方法处理得到缺陷子树的信息语料库。具体的,步骤401文本信息预处理的处理方法包括:
a)分词。根据空格、标点符号和段落等分割方式,将文本信息划分为单词组;代码中的名称和类型往往是多个单词复合而成,根据常见的大写区分和下划线区分两种命名方式,将代码中名称和类型进一步的进行拆分,如将GetToken拆分为[Get,Token],将get_request_token拆分为[get,request,token]。
b)停用词过滤。过滤英语语言中的停用词,如“the”、“and”等单词;过滤编程语言中的关键字,如“for”,“if,“return”等单词;过滤常用的无具体含义的编程相关词汇,如“main”,“arg”等。
c)提取词干。英文单词存在单数复数的变形,过去分词和进行时态的变形,在计算前应当使用提取词干的方式将一个单词的不同表达还原为一个单词对待,比如“stop”、“stopping”,“stopped”,“stops”应当合并为一个单词。
步骤402、主题建模。
经过步骤401处理后,每个缺陷子树将会对应一个语料库,语料库由若干单词组成,即包含了由项目基础信息和修复描述构成的背景信息以及自身的语义信息。主题建模需要从语料库中提取出最能表达各个主题的一些关键词,隐含狄利克雷分布(LDA)是一种常见的主题建模方法,其假设主题分布跟词分布由Dirichlet先验随机确定,然后通过Gibbs采样的方法估计主题分布和词分布,使用LDA提取缺陷子树语料库的主题以此构造缺陷子树的语义特征。考虑代码语义和语料库规模,取每个缺陷子树的主题数为1,LDA在该主题下取词分布结果,使用概率最高的5个单词代表该主题。
步骤403、文本特征向量化。
文本型特征无法直接作为模型输入进行学习,需要先将文本型特征转化为数值型的向量特征,常见的词向量化方法有独热编码和分布式表达两种,独热编码转换后的向量距离无实际意义,且容易引起维数灾难,本发明实施例使用google开源的word2vec方法对将文本型特征向量化。Word2vec是一种基于分布式假设的分布式表达方法,该方法假定出现在相同上下文中的词的意思应该相近,使用一层神经网络预测每个词的向量表示。Word2vec方法将缺陷子树的语料库每个主题单词映射为10维向量,每个缺陷子树的语义特征矩阵Sm×h是一个5×10的矩阵,进一步的对语义矩阵压缩为一维向量,求矩阵每一列元素的均值作为一维向量对应列元素的值,压缩后的矩阵元素表示为mean(si,h)表示求取语义特征矩阵Sm×h中第h列m个元素si,h(i=1,2,...m)的均值,表示一维向量的第h个元素,将压缩后的语义向量添加到缺陷子树节点的属性中。
步骤五,建立基于图分类的卷积神经网络的软件缺陷预测模型,将步骤四中缺陷子树表示为邻接矩阵和属性矩阵作为模型的输入训练神经网络,识别待预测软件模块源代码是否具有缺陷倾向性。
使用邻接矩阵和属性矩阵表示缺陷子树。邻接矩阵是树状结构的常见表达,对于包含N个节点的缺陷子树,邻接矩阵A可表示为N×N的0-1矩阵,若两个节点之间存在连接则邻接矩阵对应元素为1,若两个节点之间无连接则该元素为0;若节点属性数为D,属性矩阵X是一个N×D的矩阵,矩阵X中的第i行元素记录缺陷子树的节点i的各特征属性xi的数值。节点i的特征属性包括有步骤四计算的一维向量的h个元素,以及步骤二中是否发生修改的属性,节点是否发生修改用数字0和1来表征。
图分类的卷积神经网络将卷积在非欧式结构上推广为节点聚合技术,通过不断地进行节点聚合自动的提取图中的结构特征,是一种端到端的学习方式,可以学习到更高层次的特征与模式,从l层聚合到l+1层的传播模型H(l+1)可以表示为:
H(l+1)=f(H(l),A)=σ(AH(l)W(l))
其中,H(0)=X,H(L)=Z,Z是第L层的输出,L是网络总层数,l∈L;σ是ReLU非线性激活函数,W(l)是第l层的权值矩阵。在若干卷积层后使用池化(Pooling)技术获得用于图分类的图聚合结果,通过全连接层综合网络中学习到的所有信息,最后使用Softmax分类器输出缺陷倾向。
本发明方法使用缺陷数据库中的所有缺陷子树作为图分类的卷积神经网络的训练数据,通过梯度下降算法迭代求解最小化损失函数,直至模型预测准确率不在提升,此时可以认为该模型已经具备了识别预测源代码缺陷的能力,预测时,将待预测源代码转化为树状结构,从该源代码中的语义信息和项目信息中提取特征,按照本发明步骤4先进行主题提取,再利用文本的分布式表示方法将主题单词转化为一维向量,作为节点属性,再通过训练好的模型就可以预测待预测源代码的缺陷倾向性。

Claims (10)

1.一种面向开源软件缺陷特征深度学习的软件缺陷预测方法,其特征在于,包括:
步骤1,采集开源软件缺陷信息,构建软件缺陷数据库,存储的每条缺陷信息包括软件模块在软件修复前和修复后两个版本的源代码,以及文本类型的修复描述和项目基础信息;
步骤2,依次取出软件缺陷数据库中每个缺陷对应的软件模块的修复前和修复后的两个版本的源代码,对应生成两个抽象语法树,对比两个抽象语法树结构,得到其中的差异节点,并为两个抽象语法树的各节点添加节点是否发生修改的属性;
步骤3,利用社团检测算法对每个缺陷对应的两个抽象语法树进行社团划分,将所有包含差异节点的社团进行最小化连接,得到包含缺陷信息的缺陷子树;对每个缺陷,利用相同社团检测算法得到软件修复前和修复后的缺陷子树;
步骤4,对每个缺陷子树,由对应的修复描述、项目基础信息以及缺陷子树的语义信息获取缺陷子树的信息语料库,利用主题建模技术从信息语料库中获取缺陷子树的主题单词,利用文本的分布式表示方法将主题单词转化为一维向量数据,并作为缺陷子树中节点的属性;
步骤5,建立基于图分类的卷积神经网络的软件缺陷预测模型,将步骤四中缺陷子树表示为邻接矩阵和属性矩阵作为模型的输入训练卷积神经网络,识别待预测软件模块源代码是否具有缺陷倾向性;
设缺陷子树中有N个节点,则邻接矩阵A为N×N的矩阵,若两个节点间存在连接则在邻接矩阵中对应的元素为1,否则为0;设节点属性数量为D,则属性矩阵X是一个N×D的矩阵,节点的属性包括:节点是否发生修改,对应主题单词的一维向量中的各元素。
2.根据权利要求1所述的方法,其特征在于,所述的每条缺陷信息中,修复描述记录缺陷的原因、种类和故障表现,项目基础信息记录对应的软件项目基础信息,包括名称、主题、描述和语言。
3.根据权利要求1所述的方法,其特征在于,所述的步骤2中,对比两个抽象语法树结构,是将两个抽象语法树的节点进行匹配,对相似节点建立映射关系,一个抽象语法树上的节点只能添加到一个映射节点对中,匹配成功的节点是未发生修改的非缺陷代码节点,无法匹配的节点是发生修改行为的缺陷代码节点,即差异节点,进一步将是否发生修改作为属性储存在抽象语法树的节点中。
4.根据权利要求1所述的方法,其特征在于,所述的步骤3中,将抽象语法树看作有向无环图,利用Louvain社团检测算法将对抽象语法树划分为多个子树,得到抽象语法树中各个节点的子树归属,查找抽象语法树中的所有差异节点的子树归属,得到所有包含差异节点的子树集合,通过子树根节点间的最短路径将子树集合进行最小化连接,得到对原抽象语法树进行剪枝后的缺陷子树。
5.根据权利要求1所述的方法,其特征在于,所述的步骤4中,缺陷子树的信息语料库包括:项目基础信息和修复描述构成的背景信息;从缺陷子树中提取的语义信息,包括所在类的类名、成员变量名、方法名、方法返回值、方法形参名、方法形参类型及其他变量名。
6.根据权利要求1或5所述的方法,其特征在于,所述的步骤4中,在对缺陷子树的信息语料库进行主题提取前先进行预处理,包括:
缺陷子树的信息语料库中存储的为文本信息,对文本信息先进行分词,包括:根据空格、标点符号和段落的分割方式,将文本信息划分为单词组;对代码中复合单词形式的名称和类型,根据大写区分和下划线区分进行拆分;
过滤英语语言中的停用词,过滤编程语言中的关键字和无具体含义的编程词汇;
提取词干,将一个英文单词的不同表达还原为一个单词。
7.根据权利要求1所述的方法,其特征在于,所述的步骤4中,采用隐含狄利克雷分布LDA提取主题,设置取每个缺陷子树的主题数为1,LDA在该主题下取词分布结果,使用概率最高的5个单词代表该主题。
8.根据权利要求1所述的方法,其特征在于,所述的步骤4中,利用word2vec方法将主题的每个单词映射为向量表示,设为h维向量,设每个缺陷子树的主题单词有m个,h、m均为整数,则得到缺陷子树的语义特征矩阵Sm×h;进一步,将矩阵Sm×h压缩为一维向量,一维向量的第k个元素为矩阵Sm×h的第k列的m个元素的均值,k=1,2,…h。
9.根据权利要求1所述的方法,其特征在于,所述的步骤5中,建立基于图分类的卷积神经网络的软件缺陷预测模型,设卷积神经网络的总层数为L,其中从l层聚合到l+1层的传播模型H(l+1)表示为:
H(l+1)=σ(AH(l)W(l)),l∈L;
其中,H(0)=X,X为缺陷子树的属性矩阵,H(L)是第L层的输出;A为缺陷子树的邻接矩阵;σ是ReLU非线性激活函数;W(l)是第l层的权值矩阵;
在经过L层卷积层后使用池化技术获得用于图分类的图聚合结果,通过全连接层综合卷积神经网络学习到的所有信息,最后使用Softmax分类器输出是否具有缺陷。
10.根据权利要求1所述的方法,其特征在于,所述的步骤5中,在得到训练好的软件缺陷预测模型后,将待预测的软件模块的源代码转化为树状结构,对源代码的语义信息和项目基础信息,进行主题提取,再利用文本的分布式表示方法将主题单词转化为一维向量,作为节点属性,输入训练好的软件缺陷预测模型,输出待预测的软件模块是否存在缺陷。
CN201910907932.7A 2019-09-25 2019-09-25 一种面向开源软件缺陷特征深度学习的软件缺陷预测方法 Active CN110597735B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910907932.7A CN110597735B (zh) 2019-09-25 2019-09-25 一种面向开源软件缺陷特征深度学习的软件缺陷预测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910907932.7A CN110597735B (zh) 2019-09-25 2019-09-25 一种面向开源软件缺陷特征深度学习的软件缺陷预测方法

Publications (2)

Publication Number Publication Date
CN110597735A true CN110597735A (zh) 2019-12-20
CN110597735B CN110597735B (zh) 2021-03-05

Family

ID=68862951

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910907932.7A Active CN110597735B (zh) 2019-09-25 2019-09-25 一种面向开源软件缺陷特征深度学习的软件缺陷预测方法

Country Status (1)

Country Link
CN (1) CN110597735B (zh)

Cited By (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111143219A (zh) * 2019-12-27 2020-05-12 中国信息安全测评中心 一种基于人工智能的软件代码缺陷识别方法及相关装置
CN111177010A (zh) * 2019-12-31 2020-05-19 杭州电子科技大学 一种软件缺陷严重程度识别方法
CN111290947A (zh) * 2020-01-16 2020-06-16 华南理工大学 一种基于对抗判别的跨软件缺陷预测方法
CN111338972A (zh) * 2020-03-30 2020-06-26 北京计算机技术及应用研究所 基于机器学习的软件缺陷与复杂度关联关系分析方法
CN111459799A (zh) * 2020-03-03 2020-07-28 西北大学 一种基于Github的软件缺陷检测模型建立、检测方法及系统
CN111506504A (zh) * 2020-04-13 2020-08-07 扬州大学 基于软件开发过程度量的软件安全性缺陷预测方法及装置
CN111857691A (zh) * 2020-07-28 2020-10-30 北京航空航天大学 一种软件体系结构恢复方法和装置
CN111949535A (zh) * 2020-08-13 2020-11-17 西安电子科技大学 基于开源社区知识的软件缺陷预测装置及方法
CN112115045A (zh) * 2020-08-19 2020-12-22 北京航空航天大学 一种复杂软件系统失效预测方法
CN112181428A (zh) * 2020-09-28 2021-01-05 北京航空航天大学 一种基于抽象语法树的开源软件缺陷数据分类方法及系统
CN112288079A (zh) * 2020-11-17 2021-01-29 北京轩宇信息技术有限公司 图神经网络模型训练方法、软件缺陷检测方法及系统
CN112328469A (zh) * 2020-10-22 2021-02-05 南京航空航天大学 一种基于嵌入技术的函数级缺陷定位方法
CN112381280A (zh) * 2020-11-06 2021-02-19 北京航空航天大学 一种基于人工智能的算法预测方法
CN112579477A (zh) * 2021-02-26 2021-03-30 北京北大软件工程股份有限公司 一种缺陷检测方法、装置以及存储介质
CN112597038A (zh) * 2020-12-28 2021-04-02 中国航天系统科学与工程研究院 软件缺陷预测方法及系统
CN112905186A (zh) * 2021-02-07 2021-06-04 中国科学院软件研究所 适用于开源软件供应链的高信噪比代码分类方法及装置
CN112905232A (zh) * 2021-02-05 2021-06-04 中国海洋大学 一种基于语法分析树的程序代码平行语料挖掘方法及系统
CN113360392A (zh) * 2021-06-24 2021-09-07 北京邮电大学 一种跨项目软件缺陷预测方法及装置
CN113641588A (zh) * 2021-08-31 2021-11-12 北京航空航天大学 一种基于lda主题建模的软件可理解性确定方法及系统
CN113656325A (zh) * 2021-08-31 2021-11-16 中国农业银行股份有限公司 软件缺陷预测的方法、装置、电子设备和计算机存储介质
CN113722218A (zh) * 2021-08-23 2021-11-30 南京审计大学 一种基于编译器中间表示的软件缺陷预测模型构建方法
CN113886467A (zh) * 2021-10-25 2022-01-04 上海航天计算机技术研究所 一种基于关键词提取的软件缺陷库维护方法
CN113971042A (zh) * 2020-07-23 2022-01-25 富士通株式会社 自动化软件程序修复
CN114528221A (zh) * 2022-02-24 2022-05-24 北京航空航天大学 一种基于异质图神经网络的软件缺陷预测方法
CN114780403A (zh) * 2022-04-21 2022-07-22 北京航空航天大学 基于增强代码属性图的软件缺陷预测方法及预测装置
CN114782967A (zh) * 2022-03-21 2022-07-22 南京航空航天大学 一种基于代码可视化学习的软件缺陷预测方法
CN115294121A (zh) * 2022-10-08 2022-11-04 南通有来信息技术有限公司 一种基于物流标签的条形码缺陷检测方法
CN115545125A (zh) * 2022-11-30 2022-12-30 北京航空航天大学 一种软件缺陷关联规则网络剪枝方法及系统
CN115617694A (zh) * 2022-11-30 2023-01-17 中南大学 基于信息融合的软件缺陷预测方法、系统、设备及介质
WO2023010916A1 (zh) * 2021-08-06 2023-02-09 中兴通讯股份有限公司 软件自动修复方法、系统、电子设备及存储介质
CN115859277A (zh) * 2023-02-07 2023-03-28 四川大学 一种基于系统调用序列的主机入侵检测方法
CN116225967A (zh) * 2023-05-05 2023-06-06 贵州易鲸捷信息技术有限公司 基于集合枚举树和剪枝策略的分布式数据库测试方法
CN116578568A (zh) * 2023-07-12 2023-08-11 八爪鱼人工智能科技(常熟)有限公司 基于人工智能的数据优化存储方法及大数据系统
WO2023169368A1 (zh) * 2022-03-08 2023-09-14 中兴通讯股份有限公司 一种程序缺陷数据特征提取方法、电子设备及存储介质

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016045692A (ja) * 2014-08-22 2016-04-04 三菱電機インフォメーションシステムズ株式会社 欠陥数予測装置及び欠陥数予測プログラム
CN106528428A (zh) * 2016-11-24 2017-03-22 中山大学 一种软件易变性预测模型的构建方法
US20170212829A1 (en) * 2016-01-21 2017-07-27 American Software Safety Reliability Company Deep Learning Source Code Analyzer and Repairer
CN107967208A (zh) * 2016-10-20 2018-04-27 南京大学 一种基于深度神经网络的Python资源敏感缺陷代码检测方法
CN108829607A (zh) * 2018-07-09 2018-11-16 华南理工大学 一种基于卷积神经网络的软件缺陷预测方法
CN108932192A (zh) * 2017-05-22 2018-12-04 南京大学 一种基于抽象语法树的Python程序类型缺陷检测方法
CN109214191A (zh) * 2018-09-18 2019-01-15 北京理工大学 一种利用深度学习预测软件安全漏洞的方法
CN109408389A (zh) * 2018-10-30 2019-03-01 北京理工大学 一种基于深度学习的代码缺陷检测方法及装置

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016045692A (ja) * 2014-08-22 2016-04-04 三菱電機インフォメーションシステムズ株式会社 欠陥数予測装置及び欠陥数予測プログラム
US20170212829A1 (en) * 2016-01-21 2017-07-27 American Software Safety Reliability Company Deep Learning Source Code Analyzer and Repairer
CN107967208A (zh) * 2016-10-20 2018-04-27 南京大学 一种基于深度神经网络的Python资源敏感缺陷代码检测方法
CN106528428A (zh) * 2016-11-24 2017-03-22 中山大学 一种软件易变性预测模型的构建方法
CN108932192A (zh) * 2017-05-22 2018-12-04 南京大学 一种基于抽象语法树的Python程序类型缺陷检测方法
CN108829607A (zh) * 2018-07-09 2018-11-16 华南理工大学 一种基于卷积神经网络的软件缺陷预测方法
CN109214191A (zh) * 2018-09-18 2019-01-15 北京理工大学 一种利用深度学习预测软件安全漏洞的方法
CN109408389A (zh) * 2018-10-30 2019-03-01 北京理工大学 一种基于深度学习的代码缺陷检测方法及装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
JIAN LI: "Software Defect Prediction via Convolutional", 《2017 IEEE INTERNATIONAL CONFERENCE ON SOFTWARE QUALITY, RELIABILITY AND SECURITY》 *
JIAXI XU等: "Defect Prediction With Semantics and Context Features of Codes Based on Graph Representation Learning", 《IEEE TRANSACTIONS ON RELIABILITY》 *

Cited By (54)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111143219A (zh) * 2019-12-27 2020-05-12 中国信息安全测评中心 一种基于人工智能的软件代码缺陷识别方法及相关装置
CN111177010A (zh) * 2019-12-31 2020-05-19 杭州电子科技大学 一种软件缺陷严重程度识别方法
CN111177010B (zh) * 2019-12-31 2023-12-15 杭州电子科技大学 一种软件缺陷严重程度识别方法
CN111290947A (zh) * 2020-01-16 2020-06-16 华南理工大学 一种基于对抗判别的跨软件缺陷预测方法
CN111290947B (zh) * 2020-01-16 2022-06-14 华南理工大学 一种基于对抗判别的跨软件缺陷预测方法
CN111459799A (zh) * 2020-03-03 2020-07-28 西北大学 一种基于Github的软件缺陷检测模型建立、检测方法及系统
CN111459799B (zh) * 2020-03-03 2023-03-10 西北大学 一种基于Github的软件缺陷检测模型建立、检测方法及系统
CN111338972A (zh) * 2020-03-30 2020-06-26 北京计算机技术及应用研究所 基于机器学习的软件缺陷与复杂度关联关系分析方法
CN111506504A (zh) * 2020-04-13 2020-08-07 扬州大学 基于软件开发过程度量的软件安全性缺陷预测方法及装置
CN111506504B (zh) * 2020-04-13 2023-04-07 扬州大学 基于软件开发过程度量的软件安全性缺陷预测方法及装置
CN113971042A (zh) * 2020-07-23 2022-01-25 富士通株式会社 自动化软件程序修复
CN111857691A (zh) * 2020-07-28 2020-10-30 北京航空航天大学 一种软件体系结构恢复方法和装置
CN111857691B (zh) * 2020-07-28 2021-07-23 北京航空航天大学 一种软件体系结构恢复方法和装置
CN111949535B (zh) * 2020-08-13 2022-12-02 西安电子科技大学 基于开源社区知识的软件缺陷预测装置及方法
CN111949535A (zh) * 2020-08-13 2020-11-17 西安电子科技大学 基于开源社区知识的软件缺陷预测装置及方法
CN112115045A (zh) * 2020-08-19 2020-12-22 北京航空航天大学 一种复杂软件系统失效预测方法
CN112115045B (zh) * 2020-08-19 2022-03-18 北京航空航天大学 一种复杂软件系统失效预测方法
CN112181428A (zh) * 2020-09-28 2021-01-05 北京航空航天大学 一种基于抽象语法树的开源软件缺陷数据分类方法及系统
CN112181428B (zh) * 2020-09-28 2021-10-22 北京航空航天大学 一种基于抽象语法树的开源软件缺陷数据分类方法及系统
CN112328469A (zh) * 2020-10-22 2021-02-05 南京航空航天大学 一种基于嵌入技术的函数级缺陷定位方法
CN112381280A (zh) * 2020-11-06 2021-02-19 北京航空航天大学 一种基于人工智能的算法预测方法
CN112381280B (zh) * 2020-11-06 2023-01-24 北京航空航天大学 一种基于人工智能的算法预测方法
CN112288079B (zh) * 2020-11-17 2024-05-14 北京轩宇信息技术有限公司 图神经网络模型训练方法、软件缺陷检测方法及系统
CN112288079A (zh) * 2020-11-17 2021-01-29 北京轩宇信息技术有限公司 图神经网络模型训练方法、软件缺陷检测方法及系统
CN112597038A (zh) * 2020-12-28 2021-04-02 中国航天系统科学与工程研究院 软件缺陷预测方法及系统
CN112597038B (zh) * 2020-12-28 2023-12-08 中国航天系统科学与工程研究院 软件缺陷预测方法及系统
CN112905232A (zh) * 2021-02-05 2021-06-04 中国海洋大学 一种基于语法分析树的程序代码平行语料挖掘方法及系统
CN112905232B (zh) * 2021-02-05 2023-11-28 中国海洋大学 一种基于语法分析树的程序代码平行语料挖掘方法及系统
CN112905186A (zh) * 2021-02-07 2021-06-04 中国科学院软件研究所 适用于开源软件供应链的高信噪比代码分类方法及装置
CN113641586A (zh) * 2021-02-26 2021-11-12 北京北大软件工程股份有限公司 软件源代码缺陷检测方法、系统、电子设备及储存介质
CN112579477A (zh) * 2021-02-26 2021-03-30 北京北大软件工程股份有限公司 一种缺陷检测方法、装置以及存储介质
CN113360392A (zh) * 2021-06-24 2021-09-07 北京邮电大学 一种跨项目软件缺陷预测方法及装置
WO2023010916A1 (zh) * 2021-08-06 2023-02-09 中兴通讯股份有限公司 软件自动修复方法、系统、电子设备及存储介质
CN113722218A (zh) * 2021-08-23 2021-11-30 南京审计大学 一种基于编译器中间表示的软件缺陷预测模型构建方法
CN113656325B (zh) * 2021-08-31 2023-12-08 中国农业银行股份有限公司 软件缺陷预测的方法、装置、电子设备和计算机存储介质
CN113656325A (zh) * 2021-08-31 2021-11-16 中国农业银行股份有限公司 软件缺陷预测的方法、装置、电子设备和计算机存储介质
CN113641588B (zh) * 2021-08-31 2024-05-24 北京航空航天大学 一种基于lda主题建模的软件可理解性确定方法及系统
CN113641588A (zh) * 2021-08-31 2021-11-12 北京航空航天大学 一种基于lda主题建模的软件可理解性确定方法及系统
CN113886467B (zh) * 2021-10-25 2024-05-14 上海航天计算机技术研究所 一种基于关键词提取的软件缺陷库维护方法
CN113886467A (zh) * 2021-10-25 2022-01-04 上海航天计算机技术研究所 一种基于关键词提取的软件缺陷库维护方法
CN114528221A (zh) * 2022-02-24 2022-05-24 北京航空航天大学 一种基于异质图神经网络的软件缺陷预测方法
CN114528221B (zh) * 2022-02-24 2023-04-07 北京航空航天大学 一种基于异质图神经网络的软件缺陷预测方法
WO2023169368A1 (zh) * 2022-03-08 2023-09-14 中兴通讯股份有限公司 一种程序缺陷数据特征提取方法、电子设备及存储介质
CN114782967A (zh) * 2022-03-21 2022-07-22 南京航空航天大学 一种基于代码可视化学习的软件缺陷预测方法
CN114782967B (zh) * 2022-03-21 2024-02-20 南京航空航天大学 一种基于代码可视化学习的软件缺陷预测方法
CN114780403A (zh) * 2022-04-21 2022-07-22 北京航空航天大学 基于增强代码属性图的软件缺陷预测方法及预测装置
CN115294121A (zh) * 2022-10-08 2022-11-04 南通有来信息技术有限公司 一种基于物流标签的条形码缺陷检测方法
CN115545125A (zh) * 2022-11-30 2022-12-30 北京航空航天大学 一种软件缺陷关联规则网络剪枝方法及系统
CN115617694A (zh) * 2022-11-30 2023-01-17 中南大学 基于信息融合的软件缺陷预测方法、系统、设备及介质
CN115859277A (zh) * 2023-02-07 2023-03-28 四川大学 一种基于系统调用序列的主机入侵检测方法
CN116225967A (zh) * 2023-05-05 2023-06-06 贵州易鲸捷信息技术有限公司 基于集合枚举树和剪枝策略的分布式数据库测试方法
CN116225967B (zh) * 2023-05-05 2023-07-07 贵州易鲸捷信息技术有限公司 基于集合枚举树和剪枝策略的分布式数据库测试方法
CN116578568A (zh) * 2023-07-12 2023-08-11 八爪鱼人工智能科技(常熟)有限公司 基于人工智能的数据优化存储方法及大数据系统
CN116578568B (zh) * 2023-07-12 2023-09-15 八爪鱼人工智能科技(常熟)有限公司 基于人工智能的数据优化存储方法及大数据系统

Also Published As

Publication number Publication date
CN110597735B (zh) 2021-03-05

Similar Documents

Publication Publication Date Title
CN110597735B (zh) 一种面向开源软件缺陷特征深度学习的软件缺陷预测方法
CN103649905B (zh) 用于统一信息表示的方法和系统及其应用
CN111597347B (zh) 知识嵌入的缺陷报告重构方法及装置
CN109271506A (zh) 一种基于深度学习的电力通信领域知识图谱问答系统的构建方法
CN112214610A (zh) 一种基于跨度和知识增强的实体关系联合抽取方法
CN113761893B (zh) 一种基于模式预训练的关系抽取方法
CN110046250A (zh) 三嵌入卷积神经网络模型及其文本多分类方法
CN110413319A (zh) 一种基于深度语义的代码函数味道检测方法
CN111274817A (zh) 一种基于自然语言处理技术的智能化软件成本度量方法
CN113254507B (zh) 一种数据资产目录智能构建盘点方法
CN113779264A (zh) 基于专利供需知识图谱的交易推荐方法
CN113868432A (zh) 一种用于钢铁制造企业的知识图谱自动构建方法和系统
CN107194617A (zh) 一种app软件工程师软技能分类系统及方法
CN116975256B (zh) 抽水蓄能电站地下厂房施工过程多源信息的处理方法及系统
CN116484024A (zh) 一种基于知识图谱的多层次知识库构建方法
CN115952292B (zh) 多标签分类方法、装置及计算机可读介质
CN117131449A (zh) 面向数据治理的具有传播学习能力的异常识别方法及系统
CN116257759A (zh) 一种深度神经网络模型的结构化数据智能分类分级系统
CN117009521A (zh) 一种基于知识图谱的发动机智能工艺检索及匹配方法
CN116108191A (zh) 一种基于知识图谱的深度学习模型推荐方法
CN115146062A (zh) 融合专家推荐与文本聚类的智能事件分析方法和系统
CN113378024B (zh) 一种基于深度学习面向公检法领域的相关事件识别方法
CN111723021B (zh) 一种基于知识库和表示学习的缺陷报告自动分派方法
CN113742396A (zh) 一种对象学习行为模式的挖掘方法及装置
CN117494760A (zh) 一种基于超大规模语言模型的富语义标签数据增广方法

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