CN112328469B - 一种基于嵌入技术的函数级缺陷定位方法 - Google Patents
一种基于嵌入技术的函数级缺陷定位方法 Download PDFInfo
- Publication number
- CN112328469B CN112328469B CN202011136892.XA CN202011136892A CN112328469B CN 112328469 B CN112328469 B CN 112328469B CN 202011136892 A CN202011136892 A CN 202011136892A CN 112328469 B CN112328469 B CN 112328469B
- Authority
- CN
- China
- Prior art keywords
- defect
- function
- model
- report
- defect report
- 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
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- 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/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/279—Recognition of textual entities
- G06F40/289—Phrasal analysis, e.g. finite state techniques or chunking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/30—Semantic analysis
-
- 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/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Quality & Reliability (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Biomedical Technology (AREA)
- Computing Systems (AREA)
- Molecular Biology (AREA)
- Mathematical Physics (AREA)
- Evolutionary Computation (AREA)
- Data Mining & Analysis (AREA)
- Biophysics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于嵌入技术的函数级缺陷定位方法,该方法使用基于抽象语法树的代码嵌入技术表征函数代码功能语义,使用词嵌入技术表征缺陷报告问题语义。最后使用卷积神经网络对函数和缺陷报告的语义特征进行融合并预测与给定缺陷相关的可疑函数。为了解决训练数据有限的问题,本发明提出使用预训练模型对缺陷报告和代码进行特征表示;同时,针对类实例数不平衡的问题,提出使用随机过采样的方法对其进行处理。通过在三个主流Java项目上试验发现,在推荐列表为10时,本发明所提方法的准确率能达到12.5%‑40%,在细粒度缺陷定位领域展示了较大的潜力,在主流Java软件项目上具有较大的潜在应用价值。
Description
技术领域
本发明涉及一种基于嵌入技术的函数级缺陷定位方法,属于软件开发过程中缺陷定位修复技术领域。
背景技术
软件缺陷定位是软件开发维护过程中的一个重要环节,对于保障和提高软件产品的质量起着不可替代的重要作用。在过去几十年,缺陷定位技术一直得到学术界的广泛关注和研究,也被工业界和开源社区的软件开发实践者认为是最有价值的一类软件技术。缺陷定位技术通常根据程序动态执行信息或静态文本信息等定位包含软件缺陷的可疑代码,定位的粒度可能为源码文件、函数、或代码行等。在多种定位粒度中,Kochhar等人通过问卷访谈发现函数是软件开发实践者认为最重要的定位粒度。函数级缺陷定位技术在软件开发过程中具有重要使用价值。
函数级缺陷定位技术的核心挑战之一为如何准确抽取函数代码所蕴含的功能语义(相较源码文件,函数的代码体量小,功能语义抽取难度大)和缺陷报告所描述的问题语义(需从繁杂且可能含噪的自然语言文本描述中表征软件问题)。目前已有一些研究人员在这方面展开了一些研究工作。Lukins等人提出使用LDA主题模型对函数构成的文档集进行主题建模,随后人为从缺陷报告的文本描述中抽取(或补充)关键词来查询LDA模型,以检索与给定缺陷报告相关的可疑函数。Zhang等人提出结合多抽象层次的LDA主题模型和标准空间向量模型VSM对缺陷报告和函数文档集进行建模,通过计算二者之间的余弦相似度抽取给定缺陷对应的可疑函数。Youm等人提出首先定位可疑的源代码文件,随后从最可疑的10个源码文件中定位可疑的函数。Zhang等人提出使用word2vec对缺陷报告和函数代码进行统一表征,同时提出对函数进行扩增来解决缺陷定位技术在短函数上定位效果差的问题。
围绕在函数级别定位缺陷,尽管已存在一系列研究成果,然而,现有研究在语义表征方面仍存在两方面的不足。
首先,函数代码语义表征不足。当前研究在对函数进行语义抽取时通常只是将代码当做普通自然语言文本抽取其语义,而忽略了代码的结构特性。通常来说,相同的代码语句如果其组织结构不同(如A->B->C变成B->A->C),相应的代码功能也很可能不同。忽略代码的结构特性将导致代码结构所携带的额外函数功能语义丢失,从而影响缺陷定位的准确性。其次,缺陷报告语义抽取过程忽略了文本上下文语义。已有的工作主要使用如VSM、LDA等技术对缺陷的文本进行语义表示。这些技术通常无法很好地表征文本的上下文语义,导致缺陷报告问题语义表征不足,从而影响了缺陷定位效果。为了解决这些问题,本发明提出研发基于嵌入技术的函数级缺陷定位技术。
发明内容
本发明所要解决的技术问题是:提供一种基于嵌入技术的函数级缺陷定位方法,旨在采用词嵌入和代码嵌入技术抽取缺陷报告的问题语义和函数代码的功能语义,进而定位与给定缺陷相关的函数代码,帮助开发者更高效地修复软件缺陷,提升软件的质量。
本发明为解决上述技术问题采用以下技术方案:
一种基于嵌入技术的函数级缺陷定位方法,包括如下步骤:
步骤1,获取软件的所有缺陷报告,并对每个缺陷报告进行预处理,得到预处理后的缺陷报告;
步骤2,利用词嵌入技术ELMO的预训练模型,对预处理后的缺陷报告的每个单词进行语义特征抽取,得到每个单词对应的语义特征向量;将预处理后的缺陷报告的所有单词对应的语义特征向量进行最大池化,得到每个缺陷报告对应的语义特征向量;
步骤3,利用代码嵌入技术code2vec的预训练模型,对软件的每个函数进行语义特征抽取,得到每个函数对应的语义特征向量;
步骤4,从所有缺陷报告中任选一个缺陷报告,以及从软件的所有函数中任选一个函数,构成一个实例,实例的类标签为0或1,1表示实例中的函数与缺陷报告相关,0表示不相关,每个实例的特征为实例中的函数和缺陷报告各自对应的语义特征向量的融合,从而得到所有的实例;将所有的实例作为数据集,将数据集分为训练集、验证集和测试集;
步骤5,利用训练集对卷积神经网络模型进行训练,将逻辑回归分类器作为卷积神经网络模型的输出层,在模型训练的过程中,使用随机过采样策略处理类实例数不平衡的问题,利用验证集微调模型,从而得到训练好的卷积神经网络模型,即缺陷定位模型;
步骤6,将测试集输入缺陷定位模型,对测试集进行测试,缺陷定位模型输出测试集中各函数与各缺陷报告的相关性数值,对于测试集中的每个缺陷报告,将测试集中的所有函数按与该缺陷报告的相关性数值由大到小进行排序,并输出前K个相关性数值对应的函数作为该缺陷报告的问题函数推荐列表,K为预设值。
作为本发明的一种优选方案,步骤1所述对每个缺陷报告进行预处理,得到预处理后的缺陷报告,具体过程如下:
对每个缺陷报告进行一系列预处理,包括分词、去停用词、去符号、去数字、拆分组合词、去词干以及大写转小写,最后得到预处理后的缺陷报告。
作为本发明的一种优选方案,步骤2所述每个单词对应的语义特征向量的维度为768维。
作为本发明的一种优选方案,步骤3所述每个函数对应的语义特征向量的维度为384维。
本发明采用以上技术方案与现有技术相比,具有以下技术效果:
1、本发明提出的基于嵌入技术的缺陷定位方法,利用词嵌入技术和代码嵌入技术对缺陷报告和函数代码的语义进行抽取,通过语义匹配进行函数粒度的缺陷定位。
2、本发明针对训练数据有限的问题,提出使用预训练模型进行语义特征的抽取。
3、本发明针对类实例数不平衡的问题,提出利用随机过采样机制进行处理,有效提升了方法的效果。
4、通过在三个主流Java软件项目上进行实验评估了本发明方法的有效性。实验结果表明,在推荐函数个数为10时,我们的方法能准确定位12.5%-40.0%的缺陷报告,在细粒度缺陷定位领域具有较大的应用潜力。
附图说明
图1是本发明一种基于嵌入技术的函数级缺陷定位方法的流程图。
图2是缺陷报告预处理流程图。
具体实施方式
下面详细描述本发明的实施方式,所述实施方式的示例在附图中示出。下面通过参考附图描述的实施方式是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
如图1所示,本发明提出一种基于嵌入技术的函数级缺陷定位方法,旨在使用词嵌入和代码嵌入技术有效表征缺陷报告和函数代码的语义从而在函数粒度有效定位缺陷。包括对软件缺陷报告问题语义和函数代码功能语义的抽取、预训练模型的使用、模型的构建和预测以及不平衡类处理等。
图1显示了本发明提出的方法的工作流程,包括两个阶段:即语义抽取阶段和模型构建阶段。语义抽取阶段旨在利用词嵌入模型和代码嵌入模型对缺陷报告和函数代码进行语义特征的抽取。本方法主要使用预训练嵌入模型进行相关特征的抽取。模型构建阶段旨在训练缺陷定位模型并利用其进行预测。我们使用卷积神经网络将缺陷报告和函数代码的语义特征向量进行融合并利用逻辑回归层作为分类器用于预测给定缺陷报告对应的问题函数。考虑到问题函数的数目远远小于正常函数的数目,在本发明中,我们将不平衡类处理策略即随机过采样策略嵌入到构建模型中,从而解决了类实例数不平衡的问题。
语义特征提取
在本发明中,基于词嵌入和代码嵌入模型在各软件任务的良好效果,我们提出利用词嵌入和代码嵌入模型来充分抽取缺陷报告和函数代码的语义特征。要获取一个表现良好的嵌入模型往往需要大型训练集,一般的软件项目数据集规模相对较小。为此,我们提出使用预训练模型来抽取缺陷报告和函数代码的语义。预训练模型是在已有海量数据集(如海量wiki文本或者GitHub代码等)的基础上构建的模型,其可直接或经过微调应用到新的软件任务上。预训练模型已被研究人员应用于各种软件任务中。
缺陷报告语义抽取:Ye等人通过试验发现使用Wikipedia上的海量文本与使用软件项目构件如API文档所训练的模型在文件级缺陷定位任务上效果差异不明显。在本发明中,我们使用在自然语言处理领域表现良好的典型词嵌入模型ELMO的预训练模型(通过Flair库实现https://github.com/flairNLP/flair)来抽取缺陷报告的问题语义。ELMO模型使用双向LSTM(Long short-term memory)对特征进行提取。ELMO事先用语言模型训练好单词的词向量,随后根据下游任务的上下文对词向量进行动态调整。调整后的词向量更能表达出词在上下文中的具体含义,其对上下文语义的充分利用也就进一步解决了word2vec无法解决的同义词问题。本发明中所使用的ELMO预训练模型输出的语义特征向量维度为768。即缺陷报告中的每个单词为768维数值向量。通过对缺陷报告所有单词对应的768维数值向量进行最大池化,得到一个缺陷报告的最终语义特征向量。
在应用预训练模型前,每个缺陷报告的文本需要经过图2所示的一系列预处理,包括分词、去停用词、去符号、拆分组合词、使用Porter对词去词干,以及将单词转换成小写等。在本发明中,我们所使用的去停用词列表为NLTK(https://www.nltk.org/)停用词列表。对于一些组合词(如WindowSize),我们根据大写字母将其拆分成单独的单词(如WindowSize->Window+Size),并遵循已有技术研究的做法在数据集中继续保留了该组合词。一些单词其形式不同但根源相同(如watching,watches等),我们使用Porter(https://tartarus.org/martin/PorterStemmer/)去词干方法对这些单词进行去词干处理(如watching和watches均变成watch)。处理完的单词将统一变成小写形式。最后将预处理后的缺陷报告输入到词嵌入预训练模型中进行语义的抽取。
函数代码语义抽取:现有函数级缺陷定位方法在抽取函数的功能语义时往往忽略了函数代码的结构特性,这极大的影响了函数级缺陷定位技术的效果。在本发明中,我们提出使用code2vec(https://code2vec.org/)的代码嵌入技术用来表示函数的功能语义。code2vec是一种基于抽象语法树(Abstract Syntax Tree,简称AST)路径的深度学习模型。code2vec首先将函数代码转换成AST,随后从AST中抽取所有叶节点到叶节点的路径,之后使用注意力机制学习每条路径的权重和向量表达,最后使用全连接层将所有路径的向量表达进行整合得到代码片段的最终向量表示。通过充分挖掘AST中所蕴含的代码结构信息,code2vec能够以较高的准确率准确推荐给定代码的函数名。这在很大程度上表明,code2vec生成的对函数代码的语义向量能很好的反应该函数的功能。为此,适合于我们的函数级缺陷定位方法中函数的功能语义抽取。
在本发明中,我们同样使用code2vec的预训练模型对函数代码的功能语义进行抽取。code2vec代码嵌入预训练模型构建于GitHub上最受欢迎的10000个项目的1400万个函数上。训练数据所使用项目的多样性和流行度在较大程度保证了使用该预训练模型抽取真实软件项目的函数功能的可行性。通过使用code2vec,每个函数将被表示成一个384维的实数向量,该向量表征了函数的功能语义。
模型构建
在本发明中,我们将函数级缺陷定位当做一个学***衡类进行了处理。具体描述如下:
模型训练:如上所述,使用预训练模型后,我们将得到不同维度的缺陷报告和函数代码的语义特征向量。为了提高模型的学习能力和非线性表达能力,我们在卷积神经网络中设计了多个全连接层。具体地,对于384维的函数代码语义向量,每层的节点数按照384->256->128->64->32递减;对于缺陷报告,768维的语义向量将通过5个全连接层进行特征的进一步提取,即768->512->256->128->64->32。逻辑回归分类器作为卷积神经网络的输出层,用来预测一个函数是否与给定软件缺陷的修复相关。
在模型训练的过程中,整个数据集分为三部分,即训练集、验证集和测试集。训练集用于训练模型,验证集用来微调模型,测试集用来评估在训练集和验证集上构建出来的最终预测模型的效果。每个实例的特征为缺陷报告和函数代码各自语义特征向量的合并。实例的类标签为0或1,1表示实例中函数与缺陷修复相关,0表示不相干。所有的实例按照缺陷报告的时间进行排序,平均分成10等份。前8份作为测试集,第9份作为验证集,最后一份为测试集。定位模型的效果评估标准为Accuracy@K、MAP和MRR。
不平衡类处理:在模型训练的过程中,存在类实例数不平衡的问题。换言之,对于一个给定的缺陷报告,与其修复相关的问题函数的数目要远远小于与其修复无关的函数的数目。直接使用类实例数不平衡的数据集去训练模型,将导致模型对极小类不公平。当极小类是真正重要的类时(问题函数即为本项目真正感兴趣的类别),模型很可能无法做出合理的预测。
为了解决这个问题,我们需要对项目的数据进行去不平衡处理。针对不平衡类数据集,通常存在两种传统的处理策略,一是随机欠采样策略,二是随机过采样策略。随机欠采样策略主要通过减少大类的实例数来达到类实例数的平衡(通常通过随机抽取和小类实例数相同的大类实例来实现),而随机过采样策略主要通过增加小类的实例数来达到类实例的平衡(通常通过重复随机抽样小类实例来实现)。在本发明中,考虑到小类(即问题函数)为缺陷定位技术更关注的类别,且卷积神经网络对数据规模具有一定的要求,在本发明中,我们使用随机过采样的策略来处理缺陷定位中类实例数不平衡的问题。
预测:在训练得到缺陷定位模型后,针对一个新的缺陷报告,首先对其进行分词、去停用词、去符号、切分组合词、转小写、使用词嵌入预训练模型和最大池化后得到该缺陷报告的语义特征,将其与该缺陷报告对应的项目代码的函数的语义向量组合得到一个带预测的实例,经过训练得到的定位模型,将会输出每个函数与新来的缺陷报告的相关性的大小(0-1之间),值越大则该函数与新的缺陷报告越相关即越可能是问题函数。最后模型按照相关性数值将所有函数从大到小排序,输出问题函数推荐列表。
为了评估本发明所提出的基于嵌入技术的函数级缺陷定位方法,我们在三个主流Java软件项目上做了实验。这三个项目分别是closure-compiler(Closure)、commons-lang(Lang)和commons-math(Math)。这三个项目来自不同的领域,项目大小规模各不相同,为本方法的评估提供了一个较好的数据基准。三个项目的数据来自缺陷定位和修复领域的权威项目数据集Defects4J(https://github.com/rjust/defects4j)。Defects4J包含了一系列真实的且可重现的软件缺陷。对每个软件缺陷,Defects4J的维护人员都人为剔除了与该软件缺陷修复无关的代码修改。为此,在很大程度上保障了软件缺陷和问题代码的准确匹配。这为缺陷定位和修复等技术的评估提供了较好的数据集基准,被用来评估各种缺陷定位和修复技术的效果。在使用Defects4J所提供的Closure、Math和Lang的数据集过程中,我们发现Defects4J只提供了与软件缺陷修复相关的代码修改,并没有直接提供与给定缺陷修复相关的问题函数,为此,在Defects4J基础上,我们需要进一步抽出与缺陷修复相关的问题函数。在本发明中,我们主要通过借助git difftool和meld(https://meldmerge.org)工具分析缺陷修复前后的项目代码版本,抽取了每个软件缺陷修复所涉及到的问题函数。在抽取过程中,我们将代码修改中涉及到的所有函数视为与该缺陷相关的问题函数。表1展示了三个实验项目的基本情况。
表1.三个主流Java项目基本信息
项目名 | 缺陷数 | 平均文件数 | 平均函数数 | 平均问题函数数 |
Closure | 156 | 387.69 | 5,662.25 | 1.64 |
Math | 85 | 497.79 | 3,326.40 | 1.38 |
Lang | 56 | 89.34 | 1,868.96 | 1.23 |
在实验过程中,针对每个软件缺陷,在定位其可能的问题函数时,我们均是将项目代码回滚到针对该软件缺陷修复前的软件项目代码,以让缺陷定位更符合真实软件开发的实际情况。在表中,平均数的计算为该项目所有缺陷对应的项目代码的相关代码元素(如文件数和函数数)的数目平均值。
为了评估本发明中所提出的函数级缺陷定位技术,我们使用了三个常见的评估指标,即Accuracy@K、MAP和MRR。表2展示了本发明中我们所提方法在Closure、Math和Lang上的试验效果。
从表2可以发现,在MAP这个指标,本方法在Closure、Math、Lang上的值分别为11.36%、7.13%和10.81%。在Closure上效果最好。在MRR这个指标,本方法在Closure、Math、Lang上的值分别为22.45%、12.80%和15.46%。同样在Closure上效果最好。在Accuracy@K这个指标上,本方法在三个项目上展现了较大的潜力。如在Accuracy@1这个指标,在三个项目上的Accuracy@1值分别为20%、12.5%和13.33%。这说明,在只推荐1个问题函数的情况下,本发明方法能准确命中Closure中20%的缺陷报告、Math中12.5%的缺陷报告、Lang中13.33%的缺陷报告。
表2.本发明方法在三个主流Java项目上的试验评估(%)
而当推荐列表数目K值增加到10时,Accuracy@10在Closure、Math、Lang三个项目的准确率上达到了40%、12.5%和13.33%,在Closure项目的命中率高达40%。当推荐列表K增加到20时,Lang项目上的准确率由13.33%增加到了33.33%。
在本发明中,所有实验均在x86_64Ubuntu服务器上运行,操作***版本为Ubuntu16.04.5,服务器处理器为单个6核Intel(R)Core(TM)i7-6850K [email protected],内存大小为64G。在构建数据集的过程中,我们借助Apache Lucene库(https://lucene.apache.org/)的自然语言处理接口如TokenStream、StopAnalyzer等对缺陷报告的文本进行了分词、去停用词等一系列预处理操作,随后将其输入到ELMO的预训练模型并进行最大池化得到其语义特征向量。项目函数代码输入到code2vec的预训练模型后输出得到各个函数的语义特征向量。在构建缺陷定位模型时,我们使用深度学***衡类的采样策略。
在实验过程中,每个训练实例的特征为一个缺陷报告和一个函数的语义特征向量组合,其训练实例数为缺陷报告数和项目函数个数的累积(具体试验数据规模可参照表1中所列三个试验软件项目的基本统计数据得出)。考虑到缺陷报告的时序性,在模型训练和验证的过程中,所有训练实例按照缺陷报告的时间顺序排列并被平均切割成10等份,其中,前8份用来训练,1份用来验证,最后1份用来测试。
我们引入了三种评估指标,即Accuracy@K,MAP和MRR,来评估本发明中所提方法的性能。这三个指标为缺陷定位技术的常见评估指标。其计算方式如下:
公式(1)中Accuracy@K计算的是推荐准确的缺陷报告所占百分比。对某个缺陷,如果推荐的K个函数中至少有一个函数是与该缺陷相关的则认为推荐准确。例如,假设有500个缺陷报告,当推荐问题函数列表长度K为5时,若有200个缺陷报告其对应的问题函数中至少有一个函数在推荐的5个可疑函数中,则该方法的Accuracy@5为200/500*100%=40%。公式(2)和(3)中所计算的MAP常用于评估基于信息检索技术的性能,它反映的是所有检索查询的平均准确率。在公式(2)中,Q为所有缺陷报告查询集(即每一个缺陷报告作为一个检索查询),而公式(3)中的Precision@k表示推荐列表长度为k时的平均准确率。公式(4)和(5)所计算的MRR评估的是第一个相关函数(即与缺陷修复相关的问题函数)出现在问题函数推荐列表中的位置排名。第一个相关函数出现在推荐列表中越靠前的位置,该指标的值越大。例如,假设存在三个缺陷A、B、C,假设与这三个缺陷报告相关的第一个问题函数出现在推荐列表中的位置分别为1、5、10,则A、B、C的RR值分别为1/1、1/5、1/10。如此针对缺陷报告集合A、B、C,其最终的MRR为(1\1+1\5+1\10)/3*100%=43.33%。
以上实施例仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明保护范围之内。
Claims (4)
1.一种基于嵌入技术的函数级缺陷定位方法,其特征在于,包括如下步骤:
步骤1,获取软件的所有缺陷报告,并对每个缺陷报告进行预处理,得到预处理后的缺陷报告;
步骤2,利用词嵌入技术ELMO的预训练模型,对预处理后的缺陷报告的每个单词进行语义特征抽取,得到每个单词对应的语义特征向量;将预处理后的缺陷报告的所有单词对应的语义特征向量进行最大池化,得到每个缺陷报告对应的语义特征向量;
步骤3,利用代码嵌入技术code2vec的预训练模型,对软件的每个函数进行语义特征抽取,得到每个函数对应的语义特征向量;
步骤4,从所有缺陷报告中任选一个缺陷报告,以及从软件的所有函数中任选一个函数,构成一个实例,实例的类标签为0或1,1表示实例中的函数与缺陷报告相关,0表示不相关,每个实例的特征为实例中的函数和缺陷报告各自对应的语义特征向量的融合,从而得到所有的实例;将所有的实例作为数据集,将数据集分为训练集、验证集和测试集;
步骤5,利用训练集对卷积神经网络模型进行训练,将逻辑回归分类器作为卷积神经网络模型的输出层,在模型训练的过程中,使用随机过采样策略处理类实例数不平衡的问题,利用验证集微调模型,从而得到训练好的卷积神经网络模型,即缺陷定位模型;
步骤6,将测试集输入缺陷定位模型,对测试集进行测试,缺陷定位模型输出测试集中各函数与各缺陷报告的相关性数值,对于测试集中的每个缺陷报告,将测试集中的所有函数按与该缺陷报告的相关性数值由大到小进行排序,并输出前K个相关性数值对应的函数作为该缺陷报告的问题函数推荐列表,K为预设值。
2.根据权利要求1所述基于嵌入技术的函数级缺陷定位方法,其特征在于,步骤1所述对每个缺陷报告进行预处理,得到预处理后的缺陷报告,具体过程如下:
对每个缺陷报告进行一系列预处理,包括分词、去停用词、去符号、去数字、拆分组合词、去词干以及大写转小写,最后得到预处理后的缺陷报告。
3.根据权利要求1所述基于嵌入技术的函数级缺陷定位方法,其特征在于,步骤2所述每个单词对应的语义特征向量的维度为768维。
4.根据权利要求1所述基于嵌入技术的函数级缺陷定位方法,其特征在于,步骤3所述每个函数对应的语义特征向量的维度为384维。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011136892.XA CN112328469B (zh) | 2020-10-22 | 2020-10-22 | 一种基于嵌入技术的函数级缺陷定位方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011136892.XA CN112328469B (zh) | 2020-10-22 | 2020-10-22 | 一种基于嵌入技术的函数级缺陷定位方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112328469A CN112328469A (zh) | 2021-02-05 |
CN112328469B true CN112328469B (zh) | 2022-03-18 |
Family
ID=74312163
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011136892.XA Active CN112328469B (zh) | 2020-10-22 | 2020-10-22 | 一种基于嵌入技术的函数级缺陷定位方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112328469B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115080973B (zh) * | 2022-07-20 | 2022-12-06 | 中孚安全技术有限公司 | 一种基于多模态特征融合的恶意代码检测方法及*** |
CN116775871A (zh) * | 2023-06-15 | 2023-09-19 | 南京航空航天大学 | 基于seBERT预训练模型的深度学习软件缺陷报告分类方法 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107577605A (zh) * | 2017-09-04 | 2018-01-12 | 南京航空航天大学 | 一种面向软件缺陷预测的特征聚类选择方法 |
CN109657466A (zh) * | 2018-11-26 | 2019-04-19 | 杭州英视信息科技有限公司 | 一种函数级软件漏洞检测方法 |
CN109766277A (zh) * | 2019-01-02 | 2019-05-17 | 北京航空航天大学 | 一种基于迁移学习与dnn的软件故障诊断方法 |
CN110162478A (zh) * | 2019-05-28 | 2019-08-23 | 南京大学 | 一种基于缺陷报告的缺陷代码路径定位方法 |
CN110188047A (zh) * | 2019-06-20 | 2019-08-30 | 重庆大学 | 一种基于双通道卷积神经网络的重复缺陷报告检测方法 |
CN110502361A (zh) * | 2019-08-29 | 2019-11-26 | 扬州大学 | 面向bug报告的细粒度缺陷定位方法 |
CN110825381A (zh) * | 2019-09-29 | 2020-02-21 | 南京大学 | 一种结合源代码语义与语法特征的基于CNN的bug定位方法 |
CN111198817A (zh) * | 2019-12-30 | 2020-05-26 | 武汉大学 | 一种基于卷积神经网络的SaaS软件故障诊断方法及装置 |
CN111782548A (zh) * | 2020-07-28 | 2020-10-16 | 南京航空航天大学 | 一种软件缺陷预测数据处理方法、装置及存储介质 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7996723B2 (en) * | 2009-12-22 | 2011-08-09 | Xerox Corporation | Continuous, automated discovery of bugs in released software |
US20180150742A1 (en) * | 2016-11-28 | 2018-05-31 | Microsoft Technology Licensing, Llc. | Source code bug prediction |
US11748414B2 (en) * | 2018-06-19 | 2023-09-05 | Priyadarshini Mohanty | Methods and systems of operating computerized neural networks for modelling CSR-customer relationships |
CN108829607B (zh) * | 2018-07-09 | 2021-08-10 | 华南理工大学 | 一种基于卷积神经网络的软件缺陷预测方法 |
US11308320B2 (en) * | 2018-12-17 | 2022-04-19 | Cognition IP Technology Inc. | Multi-segment text search using machine learning model for text similarity |
CN110109835B (zh) * | 2019-05-05 | 2021-03-30 | 重庆大学 | 一种基于深度神经网络的软件缺陷定位方法 |
CN110334210A (zh) * | 2019-05-30 | 2019-10-15 | 哈尔滨理工大学 | 一种基于bert与lstm、cnn融合的中文情感分析方法 |
CN110597735B (zh) * | 2019-09-25 | 2021-03-05 | 北京航空航天大学 | 一种面向开源软件缺陷特征深度学习的软件缺陷预测方法 |
-
2020
- 2020-10-22 CN CN202011136892.XA patent/CN112328469B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107577605A (zh) * | 2017-09-04 | 2018-01-12 | 南京航空航天大学 | 一种面向软件缺陷预测的特征聚类选择方法 |
CN109657466A (zh) * | 2018-11-26 | 2019-04-19 | 杭州英视信息科技有限公司 | 一种函数级软件漏洞检测方法 |
CN109766277A (zh) * | 2019-01-02 | 2019-05-17 | 北京航空航天大学 | 一种基于迁移学习与dnn的软件故障诊断方法 |
CN110162478A (zh) * | 2019-05-28 | 2019-08-23 | 南京大学 | 一种基于缺陷报告的缺陷代码路径定位方法 |
CN110188047A (zh) * | 2019-06-20 | 2019-08-30 | 重庆大学 | 一种基于双通道卷积神经网络的重复缺陷报告检测方法 |
CN110502361A (zh) * | 2019-08-29 | 2019-11-26 | 扬州大学 | 面向bug报告的细粒度缺陷定位方法 |
CN110825381A (zh) * | 2019-09-29 | 2020-02-21 | 南京大学 | 一种结合源代码语义与语法特征的基于CNN的bug定位方法 |
CN111198817A (zh) * | 2019-12-30 | 2020-05-26 | 武汉大学 | 一种基于卷积神经网络的SaaS软件故障诊断方法及装置 |
CN111782548A (zh) * | 2020-07-28 | 2020-10-16 | 南京航空航天大学 | 一种软件缺陷预测数据处理方法、装置及存储介质 |
Non-Patent Citations (5)
Title |
---|
Detecting Duplicate Bug Reports with Convolutional Neural Networks;Qi Xie;《2018 25th Asia-Pacific Software Engineering Conference (APSEC)》;20190323;全文 * |
How Practitioners Perceive Automated Bug Report Management Techniques;Weiqin Zou;《IEEE Transactions on Software Engineering ( Volume: 46, Issue: 8, Aug. 1 2020)》;20180914;全文 * |
Improving Bug Localization with Word Embedding and Enhanced Convolutional Neural Networks;Yan Xiao;《Information and Software Technology》;20190131;全文 * |
Software Defect Prediction via Convolutional Neural Network;Jian Li;《2017 IEEE International Conference on Software Quality, Reliability and Security (QRS)》;20170729;全文 * |
基于深度学习的安全缺陷报告识别和缺陷定位;路鹏程;《中国优秀博硕士学位论文全文数据库(硕士)信息科技辑》;20200215;正文第2-3、6-7页 * |
Also Published As
Publication number | Publication date |
---|---|
CN112328469A (zh) | 2021-02-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Silva et al. | Topic modeling in software engineering research | |
CN109299228B (zh) | 计算机执行的文本风险预测方法及装置 | |
CN103473317A (zh) | 提取关键词的方法和设备 | |
CN103309862B (zh) | 一种网页类型识别方法和*** | |
CN107102993B (zh) | 一种用户诉求分析方法和装置 | |
Probierz et al. | Rapid detection of fake news based on machine learning methods | |
WO2022048363A1 (zh) | 网站分类方法、装置、计算机设备及存储介质 | |
CN113761218A (zh) | 一种实体链接的方法、装置、设备及存储介质 | |
US11017002B2 (en) | Description matching for application program interface mashup generation | |
CN112328469B (zh) | 一种基于嵌入技术的函数级缺陷定位方法 | |
US20220180317A1 (en) | Linguistic analysis of seed documents and peer groups | |
US11385988B2 (en) | System and method to improve results of a static code analysis based on the probability of a true error | |
CN111539612B (zh) | 一种风险分类模型的训练方法和*** | |
CN112528294A (zh) | 漏洞匹配方法、装置、计算机设备和可读存储介质 | |
CN110968664A (zh) | 一种文书检索方法、装置、设备及介质 | |
Cheng et al. | A similarity integration method based information retrieval and word embedding in bug localization | |
CN112328475A (zh) | 一种面向多可疑代码文件的缺陷定位方法 | |
CN114049505B (zh) | 一种商品的匹配与识别方法、装置、设备和介质 | |
Asmawati et al. | Sentiment analysis of text memes: A comparison among supervised machine learning methods | |
CN110866172A (zh) | 一种面向区块链***的数据分析方法 | |
US20230075290A1 (en) | Method for linking a cve with at least one synthetic cpe | |
CN114386048A (zh) | 基于排序的开源软件安全漏洞补丁定位方法 | |
CN113901783A (zh) | 面向领域的文档查重方法及*** | |
Saha et al. | A large scale study of SVM based methods for abstract screening in systematic reviews | |
CN117252186A (zh) | 基于xai的信息处理方法、装置、设备及存储介质 |
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 |