CN111949535B - 基于开源社区知识的软件缺陷预测装置及方法 - Google Patents
基于开源社区知识的软件缺陷预测装置及方法 Download PDFInfo
- Publication number
- CN111949535B CN111949535B CN202010811530.XA CN202010811530A CN111949535B CN 111949535 B CN111949535 B CN 111949535B CN 202010811530 A CN202010811530 A CN 202010811530A CN 111949535 B CN111949535 B CN 111949535B
- Authority
- CN
- China
- Prior art keywords
- defect
- code
- neural network
- software
- module
- 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
Images
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
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/24—Classification techniques
- G06F18/241—Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches
- G06F18/2415—Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches based on parametric or probabilistic models, e.g. based on likelihood ratio or false acceptance rate versus a false rejection rate
-
- 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
-
- 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/049—Temporal neural networks, e.g. delay elements, oscillating neurons or pulsed inputs
-
- 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/08—Learning methods
- G06N3/084—Backpropagation, e.g. using gradient descent
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)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Software Systems (AREA)
- Evolutionary Computation (AREA)
- Computing Systems (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- Biophysics (AREA)
- Mathematical Physics (AREA)
- Biomedical Technology (AREA)
- Molecular Biology (AREA)
- Probability & Statistics with Applications (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Biology (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
Abstract
一种基于开源社区知识的软件缺陷预测装置及方法,其装置包括开源社区知识采集模块、数据预处理模块、代码度量模块、缺陷预测模块、向量化模块、缺陷类型判别模块、结果输出模块。本发明的步骤包括:1、采集开源软件信息,2、生成缺陷预测数据集,3、构建BP神经网络,4、训练BP神经网络,5、构建LSTM神经网络,6、训练LSTM神经网络,7、软件缺陷预测。本发明分别构建并利用开源社区代码训练BP神经网络以及LSTM神经网络,先通过训练好的BP神经网络进行软件缺陷预测,若预测为有缺陷,再通过训练好的LSTM神经网络进一步进行软件缺陷类型预测,提高了代码缺陷预测结果的准确性。
Description
技术领域
本发明属于软件工程技术领域,更进一步涉及智能化软件研发和人工智能、数据挖掘等技术领域中的一种基于开源社区知识的软件缺陷预测装置及方法。本发明用于提高软件开发的质量,通过对开源社区中的海量代码知识的分析、运用,实现对代码特征的准确度量,提升代码缺陷预测结果的准确性。
背景技术
现有软件缺陷预测主要指通过度量元对代码模块进行分析,再以此为基础建立缺陷预测模型以预测代码模块是否含有缺陷并指导缺陷分类。因此要想准确地预测代码模块是否具有缺陷,需建立一个精准的软件缺陷预测模型,然而由于软件缺陷预测模型输入的各种度量数据的计算方法不同,取值范围和含义也各不相同,会导致质量评价方法产生偏向性,这些因素都会严重影响软件缺陷预测模型的准确性。并且当前软件缺陷预测主要集中在判断代码模块是否存在缺陷的二分类问题,这一分类结果不能满足如今对软件缺陷修复工作的需要。
中国电子产品可靠性与环境试验研究所在其申请的专利文献“软件缺陷预测方法及装置”(公开号:106919505A,申请号:201710090097.3,申请日:2017年2月20日)中公开了一种软件缺陷预测方法及装置。该专利申请所公开方法的步骤包括:首先将缺陷向量通过预设投影矩阵映射到几何空间中得到映射缺陷向量;接着将映射缺陷向量输入到经过训练的预测模型中,通过经过训练的预测模型,将映射缺陷向量与样本缺陷子集的马氏距离最小的样本缺陷子集所对应的类别,作为待预测软件对应的缺陷预测结果,可实现软件缺陷数据的优化去噪。该专利申请所公开的装置包括:用于对待预测软件的软件模块源代码进行静态度量的缺陷向量构成模块;用于将缺陷向量通过预设投影矩阵映射到几何空间中得到映射缺陷向量的缺陷向量映射模块;用于将映射缺陷向量输入到经过训练的预测模型中并确定其类别的预测结果确定模块。该方法存在的不足是,仅对待预测软件模块源代码进行传统的静态度量,存在代码属性度量信息不全面,无法准确反映代码特征的问题。
东软集团股份有限公司在其申请的专利文献“代码缺陷的预测方法及装置”(公开号:CN 106708729A,申请号:201611030122.0,申请日:2016年11月15日)中公开了一种代码缺陷的预测方法及装置。该方法首先获取目标代码的属性信息;其次根据代码缺陷库中的属性信息和目标代码的属性信息确定所述目标代码对应的代码缺陷信息;最后输出与所述目标代码对应的代码缺陷信息以预测所述目标代码存在的缺陷。该方法存在的不足之处是,所述代码缺陷库中存储的属性信息与代码缺陷信息之间的对应关系难以获取,且容易出现对应关系不全、不准确的问题。从而导致构建的代码缺陷库不足以支撑代码缺陷预测,影响预测结果的准确性。
西北大学在其申请的专利文献“一种基于开源代码库的软件缺陷自动检测方法”(公开号:CN109697162A,申请号:201811359582.7,申请日:2018年11月15日)中公开了一种基于开源代码库的软件缺陷自动检测方法。该方法。该检测方法基于开源代码仓库Github中的代码变更记录,获取代码变更过程中大量的缺陷代码,通过使用静态代码分析技术,提取缺陷代码片段的数据流特征,利用深度学习中的双向LSTM框架,设计代码缺陷检测模型以支持代码缺陷检测。该方法存在的不足之处是:虽然从开源代码仓库中获取代码变更记录作为输入,但舍弃了开源社区中的其他代码知识(如缺陷修复报告、代码信息等),从而导致所建立的缺陷检测模型所学习知识不足、检测结果不够精准。
综上所述,现有的缺陷预测方法的相关缺陷代码数据较为局限且来源单一,难以涵盖绝大多数场景,并且现有方法主要集中在判断代码模块是否存在缺陷的二分类问题,而这一分类结果不能较好地满足后续代码缺陷修复工作的需要。
发明内容
本发明的目的是针对上述现有技术存在的问题,提供一种基于开源社区知识的软件缺陷预测装置及方法,用于解决现有方法主要集中在判断代码模块是否存在缺陷的二分类,而这一分类结果不能较好地满足后续代码缺陷修复工作需要的问题。
实现本发明目的的思路是,采集开源社区软件信息,并对其进行预处理后生成训练数据集,利用训练数据训练BP神经网络及LSTM神经网络,并将待预测软件输入至训练好的BP神经网络进行缺陷预测,对预测为有缺陷的软件进一步输入至训练好的LSTM神经网络,得到软件的具体缺陷类别,辅助开发人员进行缺陷修复。
为实现上述目的,本发明的装置包括开源软件信息采集模块、预处理模块、代码块提取模块、特征度量模块、缺陷预测模块、缺陷类型判别模块、结果输出模块,其中:
所述的开源软件信息采集模块,用于采集至少500条开源社区的开源软件信息,每条开源软件信息包括软件源代码、修复描述和项目基础信息;
所述的预处理模块,用于根据采集到的每个软件源代码对应的同一条开源软件信息中的修复描述和项目基础信息确定该软件源代码是否存在缺陷;并分别将存在缺陷的源代码标注为有缺陷,不存在缺陷的源代码标注为无缺陷;将标注映射为数值,若标注为有缺陷,则映射为1,若标注为无缺陷,则映射为-1;
所述的代码块提取模块,用于利用缺陷代码块提取方法,从每个标注为有缺陷的源代码中提取一个缺陷代码块;利用有效代码块提取方法,从每个标注为无缺陷的源代码中提取一个有效代码块;
所述的特征度量模块,用于利用CK度量元,分别对每个缺陷代码块、每个有效代码块的特征进行度量,将每个度量后的代码块及度量后的特征组成一个训练样本,将所有训练样本组成缺陷预测数据集;
所述的缺陷预测模块,用于搭建一个包含输入层、隐藏层以及输出层的BP神经网络;将BP神经网络输入层的神经元设置为6个,隐藏层的个数设置为3,隐藏层神经元设置为10个,每个神经元的激活函数设置为sigmoid(x);将缺陷预测数据集中的每个训练样本依次输入到BP神经网络中,采用误差进行反向传播的多层前馈型训练算法,对BP神经网络进行迭代训练,直至损失函数Cost(target,out)收敛为止,得到训练好的BP神经网络;判断每个训练样本的输出值,如果输出值大于0,则预测训练样本中的代码块存在缺陷,若小于0,则预测训练样本中的代码块不存在缺陷,将所有被预测有缺陷的代码块组成缺陷判别数据集;
所述的缺陷类型判别模块,用于搭建一个包含输入层、隐藏层、Pooling层以及Softmax层的LSTM神经网络;设置LSTM神经网络输入层的神经元设置为6个,隐藏层的神经元设置为5个,设置隐藏层后连接Mean Pooling层和Softmax层,将隐藏层激活函数设置为tanh(x);对缺陷判别数据集中每个代码块中的每行代码进行向量化,得到对应的代码行向量,将所有代码行向量输入到LSTM神经网络中,采用误差进行反向传播的多层前馈型的训练算法,对LSTM神经网络进行迭代训练,直至损失函数收敛为止,得到训练好的LSTM神经网络;将所有代码行向量经LSTM神经网络输出的类别分布概率向量,按照概率值从大到小进行排序,将排序后向量中前三个概率值分别对应的缺陷类别组成缺陷类别预测列表;
所述的结果输出模块,用于输出待预测代码块是否具有缺陷,若具有缺陷,则进一步输出缺陷类别。
本发明的方法包括如下步骤:
(1)采集开源软件信息:
开源软件信息采集模块采集至少500条开源社区的开源软件信息,每条开源软件信息包括软件源代码、修复描述和项目基础信息;
(2)生成缺陷预测数据集:
(2a)预处理模块根据采集到的每个软件源代码对应的同一条开源软件信息中的修复描述和项目基础信息确定该软件源代码是否存在缺陷;并分别将存在缺陷的源代码标注为有缺陷,不存在缺陷的源代码标注为无缺陷;将标注映射为数值,若标注为有缺陷,则映射为1,若标注为无缺陷,则映射为-1;
(2b)代码块提取模块利用缺陷代码块提取方法,从每个标注为有缺陷的源代码中提取一个缺陷代码块;
(2c)代码块提取模块利用有效代码块提取方法,从每个标注为无缺陷的源代码中提取一个有效代码块;
(2d)特征度量模块利用CK度量元,分别对每个缺陷代码块、每个有效代码块的特征进行度量,将每个度量后的代码块及度量后的特征组成一个训练样本,将所有训练样本组成缺陷预测数据集;
(3)构建BP神经网络:
(3a)缺陷预测模块搭建一个包含输入层、隐藏层以及输出层的BP神经网络;
(3b)将BP神经网络输入层的神经元设置为6个,隐藏层的个数设置为3,隐藏层神经元设置为10个,每个神经元的激活函数设置为sigmoid(x);
(4)训练BP神经网络:
缺陷预测模块将缺陷预测数据集中的每个训练样本依次输入到BP神经网络中,采用误差进行反向传播的多层前馈型训练算法,对BP神经网络进行迭代训练,直至损失函数Cost(target,out)收敛为止,得到训练好的BP神经网络;判断每个训练样本的输出值,如果输出值大于0,则预测训练样本中的代码块存在缺陷,若小于0,则预测训练样本中的代码块不存在缺陷,将所有被预测有缺陷的代码块组成缺陷判别数据集;
(5)构建LSTM神经网络:
(5a)缺陷类型判别模块搭建一个包含输入层、隐藏层、Pooling层以及Softmax层的LSTM神经网络;
(5b)设置LSTM神经网络输入层的神经元设置为6个,隐藏层的神经元设置为5个,设置隐藏层后连接Mean Pooling层和Softmax层,将隐藏层激活函数设置为tanh(x);
(6)训练LSTM神经网络:
(6a)缺陷类型判别模块将缺陷判别数据集中每个代码块中的每行代码进行向量化,得到对应的代码行向量;
(6b)将所有代码行向量输入到LSTM神经网络中,采用误差进行反向传播的多层前馈型的训练算法,对LSTM神经网络进行迭代训练,直至损失函数收敛为止,得到训练好的LSTM神经网络;将所有代码行向量经LSTM神经网络输出的类别分布概率向量,按照概率值从大到小进行排序,将排序后向量中前三个概率值分别对应的缺陷类别组成缺陷类别预测列表;
(7)对软件缺陷进行预测:
(7a)采用与步骤(2d)相同的CK度量元,对待预测缺陷的软件代码块的特征进行度量;
(7b)将度量后的代码块及度量后的特征输入到训练好的BP神经网络进行缺陷预测;对预测为有缺陷的代码块,采用与步骤(6a)相同的向量化操作对含缺陷代码块进行向量化,再将向量化后的代码行向量输入到训练好的LSTM神经网络进行缺陷类型预测,将缺陷类型预测结果输入到结果输出模块,在控制台中输出该缺陷代码块的具体缺陷类型。
本发明与现有的技术相比具有以下优点:
第一,由于本发明的装置中的开源软件信息采集模块可以采集至少500条开源社区的开源软件信息,每条开源软件信息包括软件源代码、修复描述和项目基础信息,克服了现有技术中缺陷预测模型代码数据来源局限且单一,难以涵盖绝大多数场景的问题。使得本发明的装置可以利用开源社区的代码知识,提升所建立缺陷预测模型的可靠性。
第二,由于本发明的方法分别构建并利用开源社区代码训练BP神经网络以及LSTM神经网络,先通过训练好的BP神经网络进行软件缺陷预测,若预测为有缺陷,再通过训练好的LSTM神经网络进一步进行软件缺陷类型预测,克服了现有技术主要集中在判断代码模块是否存在缺陷的二分类问题而不能较好地满足后续代码缺陷修复工作需要的问题,使得本发明的方法可以检测缺陷具体类别,大大提升了开发人员后续修复缺陷的效率。
附图说明
图1是本发明装置的方框图;
图2是本发明方法的流程图;
图3是本发明方法中生成缺陷预测数据集步骤的流程图。
具体实施方式
下面结合附图对本发明做详细描述。
参照附图1,对本发明的装置进行清楚、完整地描述。
本发明的装置包括开源软件信息采集模块、预处理模块、代码块提取模块、特征度量模块、缺陷预测模块、缺陷类型判别模块、结果输出模块,其中:
所述的开源软件信息采集模块,用于采集至少500条开源社区的开源软件信息,每条开源软件信息包括软件源代码、修复描述和项目基础信息;
所述的预处理模块,用于根据采集到的每个软件源代码对应的同一条开源软件信息中的修复描述和项目基础信息确定该软件源代码是否存在缺陷;并分别将存在缺陷的源代码标注为有缺陷,不存在缺陷的源代码标注为无缺陷;将标注映射为数值,若标注为有缺陷,则映射为1,若标注为无缺陷,则映射为-1;
所述的代码块提取模块,用于利用缺陷代码块提取方法,从每个标注为有缺陷的源代码中提取一个缺陷代码块;利用有效代码块提取方法,从每个标注为无缺陷的源代码中提取一个有效代码块;
所述的特征度量模块,用于利用CK度量元,分别对每个缺陷代码块、每个有效代码块的特征进行度量,将每个度量后的代码块及度量后的特征组成一个训练样本,将所有训练样本组成缺陷预测数据集;
所述的缺陷预测模块,用于搭建一个包含输入层、隐藏层以及输出层的BP神经网络;将BP神经网络输入层的神经元设置为6个,隐藏层的个数设置为3,隐藏层神经元设置为10个,每个神经元的激活函数设置为sigmoid(x);将缺陷预测数据集中的每个训练样本依次输入到BP神经网络中,采用误差进行反向传播的多层前馈型训练算法,对BP神经网络进行迭代训练,直至损失函数Cost(target,out)收敛为止,得到训练好的BP神经网络;判断每个训练样本的输出值,如果输出值大于0,则预测训练样本中的代码块存在缺陷,若小于0,则预测训练样本中的代码块不存在缺陷,将所有被预测有缺陷的代码块组成缺陷判别数据集;
所述的缺陷类型判别模块,用于搭建一个包含输入层、隐藏层、Pooling层以及Softmax层的LSTM神经网络;设置LSTM神经网络输入层的神经元设置为6个,隐藏层的神经元设置为5个,设置隐藏层后连接Mean Pooling层和Softmax层,将隐藏层激活函数设置为tanh(x);对缺陷判别数据集中每个代码块中的每行代码进行向量化,得到对应的代码行向量,将所有代码行向量输入到LSTM神经网络中,采用误差进行反向传播的多层前馈型的训练算法,对LSTM神经网络进行迭代训练,直至损失函数收敛为止,得到训练好的LSTM神经网络;将所有代码行向量经LSTM神经网络输出的类别分布概率向量,按照概率值从大到小进行排序,将排序后向量中前三个概率值分别对应的缺陷类别组成缺陷类别预测列表;
所述的结果输出模块,用于输出待预测代码块是否具有缺陷,若具有缺陷,则进一步输出缺陷类别。
参照附图2对本发明的方法做进一步的详细描述。
步骤1,采集开源软件信息。
开源软件信息采集模块采集至少500条开源社区的开源软件信息,每条开源软件信息包括软件源代码、修复描述和项目基础信息。
步骤2,生成缺陷预测数据集。
参照附图3对本发明生成缺陷预测数据集做进一步的详细描述。
第1步,预处理模块根据采集到的每个软件源代码对应的同一条开源软件信息中的修复描述和项目基础信息确定该软件源代码是否存在缺陷;并分别将存在缺陷的源代码标注为有缺陷,不存在缺陷的源代码标注为无缺陷;将标注映射为数值,若标注为有缺陷,则映射为1,若标注为无缺陷,则映射为-1。
第2步,代码块提取模块利用缺陷代码块提取方法,从每个标注为有缺陷的源代码中提取一个缺陷代码块。
所述的缺陷代码块提取方法如下:
A.根据缺陷源代码对应的同一条开源软件信息中的修复描述和项目基础信息确定缺陷代码行,修复描述和项目基础信息中包括该软件修改前的源代码code_old和修改后的源代码code_new,对code_new和code_old进行逐一比对,将在code_new中增加的代码行、在code_old中被删除的代码行作为缺陷源代码中的缺陷代码行;
B.对于每一个缺陷代码行,通过检查缺陷代码行中涉及到的变量的相关操作,得到相关操作所对应的代码,并将得到的所有代码合成与缺陷源代码对应的缺陷代码块。
第3步,代码块提取模块利用有效代码块提取方法,从每个标注为无缺陷的源代码中提取一个有效代码块。
所述的有效代码块提取方法的步骤如下:
首先,在无缺陷源代码中找到包括空行、单行注释、多行注释、import语句以及括号独在一行的代码行,将该代码行确定为无效代码行。
其次,删除无缺陷源代码中的无效代码行,并将剩余的所有代码合成与无缺陷源代码对应的有效代码块。
第4步,特征度量模块利用CK度量元,分别对每个缺陷代码块、每个有效代码块的特征进行度量,将每个度量后的代码块及度量后的特征组成一个训练样本,将所有训练样本组成缺陷预测数据集。
所述度量后的特征包括:类内聚缺乏度、每个类的加权方法数、继承树的深度、子类的数目、类间的耦合以及类的响应。
步骤3,构建BP神经网络。
缺陷预测模块搭建一个包含输入层、隐藏层以及输出层的BP神经网络。
将BP神经网络输入层的神经元设置为6个,隐藏层的个数设置为3,隐藏层神经元设置为10个,每个神经元的激活函数设置为sigmoid(x)。
步骤4,训练BP神经网络。
缺陷预测模块将缺陷预测数据集中的每个训练样本依次输入到BP神经网络中,采用误差进行反向传播的多层前馈型训练算法,对BP神经网络进行迭代训练,直至损失函数Cost(target,out)收敛为止,得到训练好的BP神经网络;判断每个训练样本的输出值,如果输出值大于0,则预测训练样本中的代码块存在缺陷,若小于0,则预测训练样本中的代码块不存在缺陷,将所有被预测有缺陷的代码块组成缺陷判别数据集。
所述的损失函数Cost(target,out)如下:
其中,target表示步骤2第一步对每个训练样本代码块标注状态对应的数值,若标注状态为有缺陷,则映射为1,若标注状态为无缺陷,则映射为-1;out表示BP神经网络对每个训练样本代码块的输出值,该输出值由激活函数sigmoid(x)控制到(-1,1)之间。
步骤5,构建LSTM神经网络。
缺陷类型判别模块搭建一个包含输入层、隐藏层、Pooling层以及Softmax层的LSTM神经网络。
设置LSTM神经网络输入层的神经元设置为6个,隐藏层的神经元设置为5个,设置隐藏层后连接Mean Pooling层和Softmax层,将隐藏层激活函数设置为tanh(x)。
步骤6,训练LSTM神经网络。
缺陷类型判别模块将缺陷判别数据集中每个代码块中的每行代码进行向量化,得到对应的代码行向量。
将所有代码行向量输入到LSTM神经网络中,采用误差进行反向传播的多层前馈型的训练算法,对LSTM神经网络进行迭代训练,直至损失函数收敛为止,得到训练好的LSTM神经网络;将所有代码行向量经LSTM神经网络输出的类别分布概率向量,按照概率值从大到小进行排序,将排序后向量中前三个概率值分别对应的缺陷类别组成缺陷类别预测列表。
步骤7,对软件缺陷进行预测。
采用与步骤2第4步相同的CK度量元,对待预测缺陷的软件代码块的特征进行度量。
将度量后的代码块及度量后的特征输入到训练好的BP神经网络进行缺陷预测;对预测为有缺陷的代码块,采用与步骤6第一步相同的向量化操作对含缺陷代码块进行向量化,再将向量化后的代码行向量输入到训练好的LSTM神经网络进行缺陷类型预测,将缺陷类型预测结果输入到结果输出模块,在控制台中输出该缺陷代码块的具体缺陷类型。
Claims (7)
1.一种基于开源社区知识的软件缺陷预测装置,包括开源软件信息采集模块、预处理模块、代码块提取模块、特征度量模块、缺陷预测模块、缺陷类型判别模块、结果输出模块,其中:
所述的开源软件信息采集模块,用于采集至少500条开源社区的开源软件信息,每条开源软件信息包括软件源代码、修复描述和项目基础信息;
所述的预处理模块,用于根据采集到的每个软件源代码对应的同一条开源软件信息中的修复描述和项目基础信息确定该软件源代码是否存在缺陷;并分别将存在缺陷的源代码标注为有缺陷,不存在缺陷的源代码标注为无缺陷;将标注映射为数值,若标注为有缺陷,则映射为1,若标注为无缺陷,则映射为-1;
所述的代码块提取模块,用于利用缺陷代码块提取方法,从每个标注为有缺陷的源代码中提取一个缺陷代码块;利用有效代码块提取方法,从每个标注为无缺陷的源代码中提取一个有效代码块;
所述的特征度量模块,用于利用CK度量元,分别对每个缺陷代码块、每个有效代码块的特征进行度量,将每个度量后的代码块及度量后的特征组成一个训练样本,将所有训练样本组成缺陷预测数据集;
所述的缺陷预测模块,用于搭建一个包含输入层、隐藏层以及输出层的BP神经网络;将BP神经网络输入层的神经元设置为6个,隐藏层的个数设置为3,隐藏层神经元设置为10个,每个神经元的激活函数设置为sigmoid(x);将缺陷预测数据集中的每个训练样本依次输入到BP神经网络中,采用误差进行反向传播的多层前馈型训练算法,对BP神经网络进行迭代训练,直至损失函数Cost(target,out)收敛为止,得到训练好的BP神经网络;判断每个训练样本的输出值,如果输出值大于0,则预测训练样本中的代码块存在缺陷,若小于0,则预测训练样本中的代码块不存在缺陷,将所有被预测有缺陷的代码块组成缺陷判别数据集;
所述的缺陷类型判别模块,用于搭建一个包含输入层、隐藏层、Pooling层以及Softmax层的LSTM神经网络;设置LSTM神经网络输入层的神经元设置为6个,隐藏层的神经元设置为5个,设置隐藏层后连接Mean Pooling层和Softmax层,将隐藏层激活函数设置为tanh(x);对缺陷判别数据集中每个代码块中的每行代码进行向量化,得到对应的代码行向量,将所有代码行向量输入到LSTM神经网络中,采用误差进行反向传播的多层前馈型的训练算法,对LSTM神经网络进行迭代训练,直至损失函数收敛为止,得到训练好的LSTM神经网络;将所有代码行向量经LSTM神经网络输出的类别分布概率向量,按照概率值从大到小进行排序,将排序后向量中前三个概率值分别对应的缺陷类别组成缺陷类别预测列表;
所述的结果输出模块,用于输出待预测代码块是否具有缺陷,若具有缺陷,则进一步输出缺陷类别。
2.根据权利要求1所述预测装置的一种基于开源社区知识的软件缺陷预测方法,其特征在于,分别构建并利用开源社区代码训练BP神经网络以及LSTM神经网络,先通过训练好的BP神经网络进行软件缺陷预测,若预测为有缺陷,再通过训练好的LSTM神经网络进一步进行软件缺陷类型预测,该方法具体包括以下步骤:
(1)采集开源软件信息:
开源软件信息采集模块采集至少500条开源社区的开源软件信息,每条开源软件信息包括软件源代码、修复描述和项目基础信息;
(2)生成缺陷预测数据集:
(2a)预处理模块根据采集到的每个软件源代码对应的同一条开源软件信息中的修复描述和项目基础信息确定该软件源代码是否存在缺陷;并分别将存在缺陷的源代码标注为有缺陷,不存在缺陷的源代码标注为无缺陷;将标注映射为数值,若标注为有缺陷,则映射为1,若标注为无缺陷,则映射为-1;
(2b)代码块提取模块利用缺陷代码块提取方法,从每个标注为有缺陷的源代码中提取一个缺陷代码块;
(2c)代码块提取模块利用有效代码块提取方法,从每个标注为无缺陷的源代码中提取一个有效代码块;
(2d)特征度量模块利用CK度量元,分别对每个缺陷代码块、每个有效代码块的特征进行度量,将每个度量后的代码块及度量后的特征组成一个训练样本,将所有训练样本组成缺陷预测数据集;
(3)构建BP神经网络:
(3a)缺陷预测模块搭建一个包含输入层、隐藏层以及输出层的BP神经网络;
(3b)将BP神经网络输入层的神经元设置为6个,隐藏层的个数设置为3,隐藏层神经元设置为10个,每个神经元的激活函数设置为sigmoid(x);
(4)训练BP神经网络:
缺陷预测模块将缺陷预测数据集中的每个训练样本依次输入到BP神经网络中,采用误差进行反向传播的多层前馈型训练算法,对BP神经网络进行迭代训练,直至损失函数Cost(target,out)收敛为止,得到训练好的BP神经网络;判断每个训练样本的输出值,如果输出值大于0,则预测训练样本中的代码块存在缺陷,若小于0,则预测训练样本中的代码块不存在缺陷,将所有被预测有缺陷的代码块组成缺陷判别数据集;
(5)构建LSTM神经网络:
(5a)缺陷类型判别模块搭建一个包含输入层、隐藏层、Pooling层以及Softmax层的LSTM神经网络;
(5b)将LSTM神经网络输入层的神经元设置为6个,隐藏层的神经元设置为5个,设置隐藏层后连接Mean Pooling层和Softmax层,将隐藏层激活函数设置为tanh(x);
(6)训练LSTM神经网络:
(6a)缺陷类型判别模块将缺陷判别数据集中每个代码块中的每行代码进行向量化,得到对应的代码行向量;
(6b)将所有代码行向量输入到LSTM神经网络中,采用误差进行反向传播的多层前馈型的训练算法,对LSTM神经网络进行迭代训练,直至损失函数收敛为止,得到训练好的LSTM神经网络;将所有代码行向量经LSTM神经网络输出的类别分布概率向量,按照概率值从大到小进行排序,将排序后向量中前三个概率值分别对应的缺陷类别组成缺陷类别预测列表;
(7)对软件缺陷进行预测:
(7a)采用与步骤(2d)相同的CK度量元,对待预测缺陷的软件代码块的特征进行度量;
(7b)将度量后的代码块及度量后的特征输入到训练好的BP神经网络进行缺陷预测;对预测为有缺陷的代码块,采用与步骤(6a)相同的向量化操作对含缺陷代码块进行向量化,再将向量化后的代码行向量输入到训练好的LSTM神经网络进行缺陷类型预测,将缺陷类型预测结果输入到结果输出模块,在控制台中输出该缺陷代码块的具体缺陷类型。
3.根据权利要求2所述的基于开源社区知识的软件缺陷预测方法,其特征在于,步骤(1)中所述的项目基础信息包括项目名称、项目主题、业务功能、流程描述和所采用的计算机编程语言。
4.根据权利要求2所述的基于开源社区知识的软件缺陷预测方法,其特征在于,步骤(2b)中所述的缺陷代码块提取方法如下:
第一步,根据缺陷源代码对应的同一条开源软件信息中的修复描述和项目基础信息确定缺陷代码行,修复描述和项目基础信息中包括该软件修改前的源代码code_old和修改后的源代码code_new,对code_new和code_old进行逐一比对,将在code_new中增加的代码行、在code_old中被删除的代码行作为缺陷源代码中的缺陷代码行;
第二步,对于每一个缺陷代码行,通过检查缺陷代码行中涉及到的变量的相关操作,得到相关操作所对应的代码,并将得到的所有代码合成与缺陷源代码对应的缺陷代码块。
5.根据权利要求2所述的基于开源社区知识的软件缺陷预测方法,其特征在于,步骤(2c)中所述的有效代码块提取方法的步骤如下:
第一步,在无缺陷源代码中找到包括空行、单行注释、多行注释、import语句以及括号独在一行的代码行,将该代码行确定为无效代码行;
第二步,删除无缺陷源代码中的无效代码行,并将剩余的所有代码合成与无缺陷源代码对应的有效代码块。
6.根据权利要求2所述的基于开源社区知识的软件缺陷预测方法,其特征在于,步骤(2d)中所述的度量后的特征包括:类内聚缺乏度、每个类的加权方法数、继承树的深度、子类的数目、类间的耦合以及类的响应。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010811530.XA CN111949535B (zh) | 2020-08-13 | 2020-08-13 | 基于开源社区知识的软件缺陷预测装置及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010811530.XA CN111949535B (zh) | 2020-08-13 | 2020-08-13 | 基于开源社区知识的软件缺陷预测装置及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111949535A CN111949535A (zh) | 2020-11-17 |
CN111949535B true CN111949535B (zh) | 2022-12-02 |
Family
ID=73332473
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010811530.XA Active CN111949535B (zh) | 2020-08-13 | 2020-08-13 | 基于开源社区知识的软件缺陷预测装置及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111949535B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112597038B (zh) * | 2020-12-28 | 2023-12-08 | 中国航天系统科学与工程研究院 | 软件缺陷预测方法及系统 |
CN112711537B (zh) * | 2020-12-31 | 2022-08-12 | 武汉船舶通信研究所(中国船舶重工集团公司第七二二研究所) | 软件缺陷定位方法及装置、电子设备及存储介质 |
CN112765034B (zh) * | 2021-01-26 | 2023-11-24 | 四川航天系统工程研究所 | 基于神经网络的软件缺陷预测方法 |
CN113778862A (zh) * | 2021-08-23 | 2021-12-10 | 中国人民解放军战略支援部队信息工程大学 | 一种基于长短期记忆网络和lasso算法的软件缺陷预测方法 |
CN114510431B (zh) * | 2022-04-20 | 2022-07-05 | 武汉理工大学 | 一种工作量感知智能合约缺陷预测方法、系统及设备 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102622510A (zh) * | 2012-01-31 | 2012-08-01 | 龚波 | 一种软件缺陷量化管理系统和方法 |
CN105653444A (zh) * | 2015-12-23 | 2016-06-08 | 北京大学 | 基于互联网日志数据的软件缺陷故障识别方法和系统 |
WO2017181286A1 (en) * | 2016-04-22 | 2017-10-26 | Lin Tan | Method for determining defects and vulnerabilities in software code |
CN108563556A (zh) * | 2018-01-10 | 2018-09-21 | 江苏工程职业技术学院 | 基于差分演化算法的软件缺陷预测优化方法 |
US10175979B1 (en) * | 2017-01-27 | 2019-01-08 | Intuit Inc. | Defect ownership assignment system and predictive analysis for codebases |
CN110597735A (zh) * | 2019-09-25 | 2019-12-20 | 北京航空航天大学 | 一种面向开源软件缺陷特征深度学习的软件缺陷预测方法 |
CN111290967A (zh) * | 2020-03-10 | 2020-06-16 | 武汉联影医疗科技有限公司 | 一种软件缺陷预测方法、装置、设备及存储介质 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9619363B1 (en) * | 2015-09-25 | 2017-04-11 | International Business Machines Corporation | Predicting software product quality |
US20180150742A1 (en) * | 2016-11-28 | 2018-05-31 | Microsoft Technology Licensing, Llc. | Source code bug prediction |
US10762211B2 (en) * | 2018-04-12 | 2020-09-01 | United States Of America, As Represented By The Secretary Of The Navy | Source code diagnostic instrument |
US20190317879A1 (en) * | 2018-04-16 | 2019-10-17 | Huawei Technologies Co., Ltd. | Deep learning for software defect identification |
US11288065B2 (en) * | 2018-07-02 | 2022-03-29 | International Business Machines Corporation | Devops driven cognitive cost function for software defect prediction |
US11467817B2 (en) * | 2019-01-28 | 2022-10-11 | Adobe Inc. | Software component defect prediction using classification models that generate hierarchical component classifications |
-
2020
- 2020-08-13 CN CN202010811530.XA patent/CN111949535B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102622510A (zh) * | 2012-01-31 | 2012-08-01 | 龚波 | 一种软件缺陷量化管理系统和方法 |
CN105653444A (zh) * | 2015-12-23 | 2016-06-08 | 北京大学 | 基于互联网日志数据的软件缺陷故障识别方法和系统 |
WO2017181286A1 (en) * | 2016-04-22 | 2017-10-26 | Lin Tan | Method for determining defects and vulnerabilities in software code |
US10175979B1 (en) * | 2017-01-27 | 2019-01-08 | Intuit Inc. | Defect ownership assignment system and predictive analysis for codebases |
CN108563556A (zh) * | 2018-01-10 | 2018-09-21 | 江苏工程职业技术学院 | 基于差分演化算法的软件缺陷预测优化方法 |
CN110597735A (zh) * | 2019-09-25 | 2019-12-20 | 北京航空航天大学 | 一种面向开源软件缺陷特征深度学习的软件缺陷预测方法 |
CN111290967A (zh) * | 2020-03-10 | 2020-06-16 | 武汉联影医疗科技有限公司 | 一种软件缺陷预测方法、装置、设备及存储介质 |
Non-Patent Citations (2)
Title |
---|
"Extract rules from software quality prediction model based on neural network";Qi Wang等;《16th IEEE International Conference on Tools with Artificial Intelligence》;20050110;第1-3页 * |
"基于混合神经网络和注意力机制的软件缺陷自动分派方法";刘烨等;《计算机研究与发展》;20200315;第57卷(第3期);第461-473页 * |
Also Published As
Publication number | Publication date |
---|---|
CN111949535A (zh) | 2020-11-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111949535B (zh) | 基于开源社区知识的软件缺陷预测装置及方法 | |
US11681925B2 (en) | Techniques for creating, analyzing, and modifying neural networks | |
CN109086756A (zh) | 一种基于深度神经网络的文本检测分析方法、装置及设备 | |
CN109684440A (zh) | 基于层级标注的地址相似度度量方法 | |
CN111428071B (zh) | 一种基于多模态特征合成的零样本跨模态检索方法 | |
CN109766277A (zh) | 一种基于迁移学习与dnn的软件故障诊断方法 | |
CN113191148B (zh) | 一种基于半监督学习和聚类的轨道交通实体识别方法 | |
US11640539B2 (en) | Techniques for visualizing the operation of neural networks using samples of training data | |
CN112597038B (zh) | 软件缺陷预测方法及系统 | |
CN113138920B (zh) | 基于知识图谱与语义角色标注的软件缺陷报告分派方法及装置 | |
CN115017513A (zh) | 一种基于人工智能的智能合约漏洞检测方法 | |
CN113742733A (zh) | 阅读理解漏洞事件触发词抽取和漏洞类型识别方法及装置 | |
US11615321B2 (en) | Techniques for modifying the operation of neural networks | |
CN116578980A (zh) | 基于神经网络的代码分析方法及其装置、电子设备 | |
Wang et al. | Automatic identification and location of tunnel lining cracks | |
Voon et al. | Computer-vision-based integrated circuit recognition using deep learning | |
CN112579777B (zh) | 一种未标注文本的半监督分类方法 | |
CN114372532A (zh) | 标签标注质量的确定方法、装置、设备、介质及产品 | |
CN111898528B (zh) | 数据处理方法、装置、计算机可读介质及电子设备 | |
CN117743909A (zh) | 一种基于人工智能的供热系统故障分析方法及装置 | |
CN116522334A (zh) | 基于图神经网络的rtl级硬件木马检测方法及存储介质 | |
CN115017015B (zh) | 一种边缘计算环境下程序异常行为检测方法及系统 | |
Jubair et al. | A multi‐agent K‐means with case‐based reasoning for an automated quality assessment of software requirement specification | |
CN113158878B (zh) | 一种基于子空间的异构迁移故障诊断方法、系统和模型 | |
CN115221045A (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 |