CN105930277B - 一种基于缺陷报告分析的缺陷源代码定位方法 - Google Patents
一种基于缺陷报告分析的缺陷源代码定位方法 Download PDFInfo
- Publication number
- CN105930277B CN105930277B CN201610543653.3A CN201610543653A CN105930277B CN 105930277 B CN105930277 B CN 105930277B CN 201610543653 A CN201610543653 A CN 201610543653A CN 105930277 B CN105930277 B CN 105930277B
- Authority
- CN
- China
- Prior art keywords
- defect
- source code
- model
- report
- training
- 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
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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开一种基于缺陷报告分析的缺陷源代码定位方法,首先获得新的待检查缺陷报告;如果不存在缺陷定位模型,建立缺陷定位模型。建立缺陷定位模型:获取大量历史缺陷报告、源代码和缺陷定位标记,构造训练集合;初始化缺陷定位模型;利用当前模型,提取训练集合缺陷报告和源代码的统一特征;计算当前模型的缺陷定位训练误差;若缺陷定位模型的训练误差低于预设阈值,模型训练完成,否则更新缺陷定位模型权重参数,继续训练。利用模型提取待检查的缺陷报告和源代码的统一特征并利用统一特征定位包含缺陷的源代码模块;输出定位到的缺陷源代码模块;若还有缺陷报告尚未检查,继续获取并分析新的待检查缺陷报告,否则缺陷定位过程结束。
Description
技术领域
本发明涉及一种基于缺陷报告分析的缺陷源代码定位方法,基于自然语言和程序语言统一特征进行缺陷报告分析,定位源代码缺陷情况并反馈给模块开发者,属于自动化软件质量辅助维护技术领域。
背景技术
软件质量保证是软件***成功的关键元素。然而,随着软件***的快速发展,用户对软件的需求日益增加,软件***的功能也变得越来越复杂。在软件发布之前,面对庞大复杂的软件***,开发人员很难对所有的模块进行详细测试,从而发现所有包含缺陷的模块,因此大多软件在发布后,通过软件缺陷报告来维护和保证软件质量。缺陷报告是一种用自然语言发布的文档,描述了软件在运行过程中出现的无法正常运行和满足需求的故障情况,通常由软件的用户提交,随后交给软件质量维护人员。当缺陷报告提交后,质量维护人员检查报告内容并在软件项目中查找和定位缺陷源代码,查找的缺陷源代码交由相关开发人员进行代码检查和修复。
然而,软件缺陷报告数量很多,软件的源代码库也很庞大,人工缺陷定位花费太多时间和精力,因此基于自动化软件质量辅助维护装置的软件缺陷定位是目前维护软件质量重要的工具。之前大多自动化软件缺陷定位装置,需要提取缺陷报告和源代码的文本中的关键词信息,并通过相似性匹配方法定位缺陷源代码。这种方式忽略了缺陷报告和软件源代码之间不同语言的差异,导致缺陷源代码定位结果不够好。而现有技术难以区分缺陷报告和源代码的语言差异,在自动化缺陷源代码定位问题中面临很大困难。
发明内容
发明目的:针对现有技术中存在的问题与不足,本发明提供一种基于缺陷报告分析的缺陷源代码定位方法,首先利用历史缺陷报告,源代码和缺陷定位标注信息,分别对缺陷报告和源代码分析得到中层特征,然后对中层特征进行深度融合,得到的统一特征对可以定位缺陷源代码位置,使得缺陷定位效果得到提升,用来改进自动化软件质量辅助维护装置。
技术方案:一种基于缺陷报告分析的缺陷源代码定位方法,通过以下步骤,根据缺陷报告对缺陷源代码进行定位:
步骤(1)获得新的待检查缺陷报告;
步骤(2)判断是否已存在训练完成的缺陷定位模型,如果不存在,转入步骤(3),建立缺陷定位模型;如果存在,转入步骤(9);
步骤(3)获取历史缺陷报告、源代码和缺陷定位标记,构造训练集合;
步骤(4)初始化缺陷定位模型;
步骤(5)利用当前缺陷定位模型,提取训练集合缺陷报告和源代码的统一特征;
步骤(6)利用提取的统一特征,计算当前模型的缺陷定位训练误差;
步骤(7)若当前模型的训练误差低于预设阈值,模型训练完成,转入步骤(9),否则转入步骤(8);
步骤(8)更新缺陷定位模型权重参数,转入步骤(5)继续训练模型;
步骤(9)利用缺陷定位模型,提取待检查的缺陷报告和源代码统一特征;
步骤(10)利用统一特征定位包含缺陷的源代码模块;
步骤(11)输出定位到的缺陷源代码模块,将缺陷情况反馈给模块开发者;
步骤(12)若还有缺陷报告尚未检查,转步骤(1),否则缺陷定位过程结束。
有益效果:现有的软件缺陷自动定位技术存在以下主要问题:
(1)没有考虑软件源代码和缺陷报告的文本特征区别。软件源代码由程序语言组成而缺陷报告由自然语言组成,两种语言的结构和特征存在结构和特征差异,因此直接使用基于自然语言的特征处理方法对源代码进行特征提取,会丢失一定的语义特征,从而造成软件缺陷定位结果较差。
(2)没有利用历史软件代码和缺陷信息训练模型。现有的缺陷定位模型,对新的进行特征提取,接着在对应的源代码中,利用进行关键词的相似性匹配,匹配找到的相似源代码为潜在的缺陷源代码。这种方式没有利用历史的软件代码和缺陷信息进行模型训练和构建过程,因此定位结果不好。
与现有技术相比,本发明提供的基于缺陷报告分析的缺陷源代码定位方法,能够在提取缺陷报告的文本信息同时,提取源代码的程序结构语义,学习统一的特征帮助提高定位缺陷源代码精度。同时该模型是基于历史的缺陷代码和报告信息进行训练构建而成,随后对新的缺陷报告进行特征提取和缺陷模块定位,提高开发人员检测效率。
附图说明
图1为基于自动化软件质量辅助维护装置的软件缺陷定位过程图;
图2为本发明实施例的软件缺陷自动***工作流程图;
图3为本发明实施例的缺陷报告和源代码统一特征提取流程图;
图4为本发明实施例的缺陷定位模型生成建模图。
具体实施方式
下面结合具体实施例,进一步阐明本发明,应理解这些实施例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。
基于自动化软件质量辅助维护装置的软件缺陷定位过程图如图1所示。在软件发布后,用户会通过提交缺陷报告反馈软件运行中的故障信息。软件质量维护人员在接收并检查了缺陷报告内容后,将所有源代码模块提交自动软件质量辅助维护装置进行处理,并输出所有定位的潜在缺陷源代码模块,交由软件开发人员进行检查和修改。若尚有新的缺陷报告未处理,则继续根据报告内容定位缺陷源代码并坚持,直至没有未处理的缺陷报告,最后对外发布更新版本的软件。
软件质量维护装置的核心内容是根据缺陷报告的自动化缺陷定位功能,本实施例的缺陷源代码定位转置工作流程如图2所示。本实施例的软件缺陷***充分利用历史缺陷报告和定位数据,通过学习自然语言和程序语言的统一特征辅助缺陷定位缺陷源代码,从而提升模型的定位性能。
步骤(0)是起始动作;
步骤(1)获得新的待检查缺陷报告;
步骤(2)是否已存在训练完成的缺陷定位模型,如果不存在,转入步骤(3),如果存在,转入步骤(9);
步骤(3)获取大量历史缺陷报告、源代码和缺陷定位标记,构造训练集合;
步骤(4)初始化缺陷定位模型;这里初始化时给模型随机初始化一个参数,该参数在后续学习过程中将会被不断更新;
步骤(5)利用当前模型,提取训练集合缺陷报告和源代码的统一特征;统一特征是能够表示自然语言和程序语言的统一性质的一组向量;
步骤(6)利用提取的统一特征,计算当前模型的缺陷定位训练误差;
步骤(7)若当前模型的训练误差低于预设阈值,模型训练完成,转入步骤(9),否则转入步骤(8);
步骤(8)更新缺陷定位模型权重参数,转入步骤(5)继续训练模型;
步骤(9)利用缺陷定位模型,提取待检查的缺陷报告和源代码统一特征;
步骤(10)利用统一特征定位包含缺陷的源代码模块;
步骤(11)输出定位到的缺陷源代码模块,将缺陷情况反馈给模块开发者;
步骤(12)若还有缺陷报告尚未检查,转步骤(1),否则缺陷定位过程结束。
本发明实施例的缺陷报告和源代码统一特征提取流程图如图3所示。在接受到新的缺陷报告后,本发明首先利用基于自然语言的卷积神经网络模型提取缺陷报告的中层特征,同时利用基于程序语言的卷积神经网络提取对应源代码的中层特征,之后利用深层卷积网络融合两种中层特征,最终得到进行缺陷定位的统一特征。具体实施过程将会详细说明。
本发明实施例的缺陷定位模型的生成建模图如图4所示。首先从历史数据库中获得源代码和缺陷报告以及相应的标记信息,构造训练数据。初始化训练模型,利用当前模型提取缺陷报告和源代码的统一特征,利用统一特征进行缺陷定位并计算训练误差,当模型的训练误差大于预先定义的阈值时,更新模型继续训练。直到训练误差小于预定阈值时,训练完成,得到基于统一特征学习的缺陷定位模型。
本发明采用卷积神经网络作为软件缺陷检测的模型,分别构造基于自然语言的卷积神经网络提取缺陷报告特征和基于程序语言的网络提取源代码特征,然后采用全连接网络结构融合得到统一特征后进行软件缺陷源代码定位。
本模型首先把缺陷报告和程序代码转换成向量形式作为程序语言的卷积神经网络的输入。缺陷报告和源代码中每个词可以由一位有效编码(one-hot)形式表示,假如词汇库的大小为k,那么每个词可以表示成1个k维的向量,只有1位是1其他所有位均为0。一条有n个词的语句可以表示为Xn×k形式。
程序语言的卷积神经网络的具体结构如下:模型的输入是表示程序语句的特征矩阵,首先第一层采用若干滤波器组成的卷积层对矩阵进行卷积操作提取特征。本发明中的滤波器对连续的d个词做卷积操作,生成新的特征表示,如式(1)所示。其中,d是人工预设参数,表示卷积窗口的大小,σ是非线性激活函数(如式(2)所示),w和b是滤波器参数,xi:i+d-1表示从语句的第i位开始,连续d个单词的向量。通过对xi:i+d-1进行卷积操作,模型生成一个新的特征zi。随后,卷积窗口沿着语句方向滑动,步长为1个词,每移动一步,卷积生成1个新的特征。当窗口划动到一条语句结束时停止滑动,因此滤波器将单词个数为n的语句转换为新的特征向量该特征包含了语句的高层语义。本模型对所有语句进行类似的卷积操作。随后的池化层采用最大值池化方法提取最有信息的特征表示该行语句。假设滤波器数量为m,第一层卷积和池化层后,第i条源代码转换为矩阵为第i条源代码语句数。可以看出,第一层卷积操作,滤波器在语句内滑动提取新的特征,因此模型得到的新的特征向量反映了代码语句内部的信息。
zi=σ(w·xi:i+d-1+b) (1)
σ(t)=max(t,0) (2)
第二层的卷积和池化层结构与第一层类似。唯一的区别是窗口大小d设为不同数值(d=2,3,4,5),表示提取相邻d行语句的结构特征。在第二层卷积和池化层操作后,模型生成了程序语言的中间特征
基于自然语言的卷积神经网络与程序语言神经网络结构类似,用来提取缺陷报告的文本特征信息。由于自然语言文本中没有语句结构,以一个单词作为基本单位,因此在卷积过程中,滤波器的窗口直接在整个文本划动进行卷积操作提取特征,最终生成缺陷报告的中间特征
得到表示缺陷报告和源代码的中间特征后,本模型采用全连接网络融合中间特征,并利用随机梯度下降方法(Stochastic Gradient Descent)优化(3)式中的目标函数更新模型参数w,其中costn表示定位到无关代码的代价,costp是未成功定位一个相关缺陷代码的代价,costn,costp和λ是人工预设参数,函数为平方损失损失函数(Square Loss Function),yi,j为对于缺陷报告ri和源代码cj的缺陷定位情况标注,yi,j=+1表示代码cj是缺陷报告ri相关的缺陷代码,yi,j=-1表示代码cj不是缺陷报告ri相关缺陷代码。本模型利用反向传播网络,每次迭代过程把误差信号沿着网络结构反向传回,并对网络权重进行更新,以减小训练误差。当训练误差小于预先设定的阈值θ时,停止更新网络,缺陷定位网络学习完成。
Claims (1)
1.一种基于缺陷报告分析的缺陷源代码定位方法,其特征在于,包括如下步骤:
步骤(1)获得新的待检查缺陷报告;
步骤(2)判断是否已存在训练完成的缺陷定位模型,如果不存在,转入步骤(3),建立缺陷定位模型;如果存在,转入步骤(9);
步骤(3)获取历史缺陷报告、源代码和缺陷定位标记,构造训练集合;
步骤(4)初始化缺陷定位模型;
步骤(5)利用当前缺陷定位模型,提取训练集合缺陷报告和源代码的统一特征;
步骤(6)利用提取的统一特征,计算当前模型的缺陷定位训练误差;
步骤(7)若当前模型的训练误差低于预设阈值,模型训练完成,转入步骤(9),否则转入步骤(8);
步骤(8)更新缺陷定位模型权重参数,转入步骤(5)继续训练模型;
步骤(9)利用缺陷定位模型,提取待检查的缺陷报告和源代码统一特征;
步骤(10)利用统一特征定位包含缺陷的源代码模块;
步骤(11)输出定位到的缺陷源代码模块,将缺陷情况反馈给模块开发者;
步骤(12)若还有缺陷报告尚未检查,转步骤(1),否则缺陷定位过程结束;
在接收 到新的待检查缺陷报告后,首先利用基于自然语言的卷积神经网络模型提取缺陷报告的中层特征,同时利用基于程序语言的卷积神经网络提取对应源代码的中层特征,之后利用深层卷积网络融合两种中层特征,最终得到进行缺陷定位的统一特征;
训练误差的计算公式如下:
w是目标函数更新模型参数,函数为平方损失函数,yi,j为对于缺陷报告ri和源代码cj的缺陷定位情况标注,yi,j=+1表示代码cj是缺陷报告ri相关的缺陷代码,yi,j=-1表示代码cj不是缺陷报告ri相关缺陷代码,costn表示定位到无关代码的代价,costp是未成功定位一个相关缺陷代码的代价,costn,costp和λ是人工预设参数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610543653.3A CN105930277B (zh) | 2016-07-11 | 2016-07-11 | 一种基于缺陷报告分析的缺陷源代码定位方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610543653.3A CN105930277B (zh) | 2016-07-11 | 2016-07-11 | 一种基于缺陷报告分析的缺陷源代码定位方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105930277A CN105930277A (zh) | 2016-09-07 |
CN105930277B true CN105930277B (zh) | 2018-12-11 |
Family
ID=56827334
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610543653.3A Active CN105930277B (zh) | 2016-07-11 | 2016-07-11 | 一种基于缺陷报告分析的缺陷源代码定位方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105930277B (zh) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108073576A (zh) * | 2016-11-09 | 2018-05-25 | 上海诺悦智能科技有限公司 | 智能搜索方法、搜索装置以及搜索引擎*** |
US10482000B2 (en) * | 2017-04-24 | 2019-11-19 | Microsoft Technology Licensing, Llc | Machine learned decision guidance for alerts originating from monitoring systems |
CN109992502A (zh) * | 2017-12-30 | 2019-07-09 | ***通信集团四川有限公司 | 应用软件性能自动检测分析方法、装置、设备及介质 |
US20190317879A1 (en) * | 2018-04-16 | 2019-10-17 | Huawei Technologies Co., Ltd. | Deep learning for software defect identification |
CN109359023B (zh) * | 2018-04-27 | 2020-01-24 | 哈尔滨工程大学 | 基于提交信息的移动应用错误定位方法 |
CN108763063B (zh) * | 2018-05-09 | 2022-07-12 | 南京大学 | 一种无需缺陷标注数据的软件缺陷检测方法 |
CN108717459B (zh) * | 2018-05-24 | 2019-05-21 | 哈尔滨工程大学 | 一种面向用户评论信息的移动应用缺陷定位方法 |
CN108829607B (zh) * | 2018-07-09 | 2021-08-10 | 华南理工大学 | 一种基于卷积神经网络的软件缺陷预测方法 |
CN109829898B (zh) * | 2019-01-17 | 2023-05-16 | 柳州康云互联科技有限公司 | 一种用于互联网检测中基于神经网络的测量检测***及方法 |
CN109977014B (zh) * | 2019-03-22 | 2022-04-05 | 泰康保险集团股份有限公司 | 基于区块链的代码错误识别方法、装置、设备及存储介质 |
US11093379B2 (en) | 2019-07-22 | 2021-08-17 | Health Care Service Corporation | Testing of complex data processing systems |
CN110727437B (zh) * | 2019-09-10 | 2024-04-09 | 平安普惠企业管理有限公司 | 代码优化项获取方法、装置、存储介质及电子设备 |
CN110825381A (zh) * | 2019-09-29 | 2020-02-21 | 南京大学 | 一种结合源代码语义与语法特征的基于CNN的bug定位方法 |
CN111258905B (zh) * | 2020-01-19 | 2023-05-23 | 中信银行股份有限公司 | 缺陷定位方法、装置和电子设备及计算机可读存储介质 |
CN111427775B (zh) * | 2020-03-12 | 2023-05-02 | 扬州大学 | 一种基于Bert模型的方法层次缺陷定位方法 |
CN112162917A (zh) * | 2020-09-03 | 2021-01-01 | 华为技术有限公司 | 一种软件***的缺陷定位方法及装置 |
CN112380111B (zh) * | 2020-10-09 | 2021-08-10 | 华南理工大学 | 一种基于新项目的即时缺陷定位方法及*** |
CN113886277B (zh) * | 2021-12-07 | 2022-02-22 | 云账户技术(天津)有限公司 | 一种软件缺陷报告合规性的检测方法及装置 |
CN116127417A (zh) * | 2023-04-04 | 2023-05-16 | 山东浪潮科学研究院有限公司 | 一种代码缺陷检测模型构建方法、装置、设备及存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104615533A (zh) * | 2015-01-15 | 2015-05-13 | 南京大学 | 一种基于移动即时通讯软件的软件缺陷智能跟踪管理方法 |
-
2016
- 2016-07-11 CN CN201610543653.3A patent/CN105930277B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104615533A (zh) * | 2015-01-15 | 2015-05-13 | 南京大学 | 一种基于移动即时通讯软件的软件缺陷智能跟踪管理方法 |
Non-Patent Citations (2)
Title |
---|
Mining Defect Reports for Predicting Software Maintenance Effort;Rajni Jindal etc.;《Advances in Computing, Communications and Informatics》;20150928;第270-276页 * |
半监督软件缺陷挖掘研究综述;黎铭,霍轩;《数据采集与处理》;20160131;第31卷(第1期);第56-64页 * |
Also Published As
Publication number | Publication date |
---|---|
CN105930277A (zh) | 2016-09-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105930277B (zh) | 一种基于缺陷报告分析的缺陷源代码定位方法 | |
CN110929918B (zh) | 一种基于CNN和LightGBM的10kV馈线故障预测方法 | |
CN107239446B (zh) | 一种基于神经网络与注意力机制的情报关系提取方法 | |
CN113283027B (zh) | 一种基于知识图谱和图神经网络的机械故障诊断方法 | |
CN107766324B (zh) | 一种基于深度神经网络的文本一致性分析方法 | |
CN109376092B (zh) | 一种面向缺陷补丁代码的软件缺陷原因自动分析方法 | |
CN112149316A (zh) | 基于改进的cnn模型的航空发动机剩余寿命预测方法 | |
CN111709244B (zh) | 一种用于矛盾纠纷事件因果关系识别的深度学习方法 | |
CN110852347A (zh) | 采用改进YOLO v3的火灾检测方法 | |
CN103207855A (zh) | 针对产品评论信息的细粒度情感分析***及方法 | |
CN111427775B (zh) | 一种基于Bert模型的方法层次缺陷定位方法 | |
CN105931116A (zh) | 基于深度学习机制的自动化信用评分***及方法 | |
CN114842208B (zh) | 一种基于深度学习的电网危害鸟种目标检测方法 | |
CN110689069A (zh) | 一种基于半监督bp网络的变压器故障类型诊断方法 | |
CN109102157A (zh) | 一种基于深度学习的银行工单派单方法及*** | |
CN110334187A (zh) | 基于迁移学习的缅语情感分析方法及装置 | |
CN110188454A (zh) | 建筑设备与建筑信息模型匹配方法及装置 | |
CN112541600A (zh) | 一种基于知识图谱的辅助维修决策方法 | |
CN110321555A (zh) | 一种基于循环神经网络模型的电网信号分类方法 | |
CN111309607A (zh) | 一种代码方法级别的软件缺陷定位方法 | |
CN110162478A (zh) | 一种基于缺陷报告的缺陷代码路径定位方法 | |
CN110110095A (zh) | 一种基于长短期记忆循环神经网络的电力指令文本匹配方法 | |
CN107402859A (zh) | 软件功能验证***及其验证方法 | |
CN117236677A (zh) | 一种基于事件抽取的rpa流程挖掘方法及装置 | |
CN104021180A (zh) | 一种组合式软件缺陷报告分类方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |