CN116820484A - 基于检索和编辑结合的软件单元测试代码自动生成方法 - Google Patents
基于检索和编辑结合的软件单元测试代码自动生成方法 Download PDFInfo
- Publication number
- CN116820484A CN116820484A CN202310860338.3A CN202310860338A CN116820484A CN 116820484 A CN116820484 A CN 116820484A CN 202310860338 A CN202310860338 A CN 202310860338A CN 116820484 A CN116820484 A CN 116820484A
- Authority
- CN
- China
- Prior art keywords
- test
- vector
- similarity
- assertion
- token
- 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.)
- Pending
Links
- 238000012360 testing method Methods 0.000 title claims abstract description 168
- 238000000034 method Methods 0.000 title claims abstract description 51
- 239000013598 vector Substances 0.000 claims description 72
- 238000004364 calculation method Methods 0.000 claims description 12
- 238000006243 chemical reaction Methods 0.000 claims description 9
- 239000011159 matrix material Substances 0.000 claims description 7
- 230000010076 replication Effects 0.000 claims description 6
- 238000010276 construction Methods 0.000 claims description 4
- 230000007787 long-term memory Effects 0.000 claims description 3
- 230000007246 mechanism Effects 0.000 claims description 3
- 230000006403 short-term memory Effects 0.000 claims description 3
- 230000010354 integration Effects 0.000 description 13
- 238000013135 deep learning Methods 0.000 description 5
- 238000013459 approach Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 4
- 230000006872 improvement Effects 0.000 description 4
- 238000010998 test method Methods 0.000 description 4
- 238000013528 artificial neural network Methods 0.000 description 3
- 238000011156 evaluation Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 230000001537 neural effect Effects 0.000 description 3
- 241001197082 Knodus beta Species 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 230000002457 bidirectional effect Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012549 training Methods 0.000 description 2
- 238000010200 validation analysis Methods 0.000 description 2
- 230000003044 adaptive effect Effects 0.000 description 1
- 238000007792 addition Methods 0.000 description 1
- 238000013136 deep learning model Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000010419 fine particle Substances 0.000 description 1
- 238000011835 investigation Methods 0.000 description 1
- 230000008450 motivation Effects 0.000 description 1
- 238000003058 natural language processing Methods 0.000 description 1
- 210000005036 nerve Anatomy 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- 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/3696—Methods or tools to render software testable
-
- 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/33—Querying
- G06F16/3331—Query processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/22—Matching criteria, e.g. proximity measures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/30—Semantic analysis
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Software Systems (AREA)
- Life Sciences & Earth Sciences (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Biology (AREA)
- Evolutionary Computation (AREA)
- Databases & Information Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及一种基于检索和编辑结合的软件单元测试代码自动生成方法,基于给定的输入焦点测试和语料库,使用检索组件基于杰卡德相似度算法计算输入焦点测试和语料库中的每一条焦点测试的相似度,得到语料库中相似度值最高的相似焦点测试以及其相对应的相似测试断言;使用基于编辑的组件学习输入焦点测试及其相似的焦点测试实例的编辑模式,并将其应用于对相似测试断言的编辑,从而生成目标测试断言。本发明方法大大优于最先进的基线,同时本发明方法可以运用至实际的工作场景。
Description
技术领域
本发明涉及软件测试断言生成,尤其涉及一种基于检索和编辑结合的软件单元测试代码自动生成方法。
背景技术
单元测试是软件开发的一项重要活动,它涉及到测试软件应用程序的单个单元,如方法、类或模块。当集成和系统测试评估系统的整体性能时,单元测试侧重于验证每个代码单元是否按开发人员的预期和设想工作,在故障传播到整个系统之前检测和诊断故障,并防止回归。因此,有效的单元测试可以提高软件的质量,降低软件故障的发生率和成本,并改善整个软件开发过程。单元测试包括测试前缀和测试断言,测试前缀是一系列操作被测单元以获得特定状态的语句,测试断言通常包括指定该状态下预期行为的断言。
尽管测试有很大的好处,但创建有效的单元测试是一项不平凡且耗时的任务。先前的研究表明,开发人员可以在测试生成上花费超过15%的时间。为了简化单元测试生成,已经提出了各种自动化测试工具,如Randoop和EvoSuite。然而,这些测试生成工具优先生成高覆盖率的测试,而不是有意义的断言,并且仍然难以理解预期的程序行为,因此不能取代手动单元测试的需要。
为了克服断言生成的问题,许多测试断言生成方法已经被提出。同时,随着深度学习技术的发展和大量不断增加的源代码数据,利用深度学习模型从大量测试断言中对中自动学习生成代码摘要已成为一个非常热门的研究课题。最近,提出的基于深度学习的测试断言生成方法,ATLAS规避了传统的基于规则的生成方法的场景适用性低的问题。但从头生成的测试断言通常更喜欢语料库中的高频词,并且可能在低频词方面遇到问题,例如项目特定标识符,而且在生成长序列的测试断言时性能表现不佳。目前最先进的集成方法被提出(称为Integration),该方法将信息检索(IR)与基于深度学习的方法相结合,为单元测试生成断言。集成方法验证了检索到的断言与当前焦点测试(焦点测试focal-test之间的兼容性。如果兼容性超过阈值,则检索到的断言将作为最终结果返回。否则,基于深度学习的方法将生成断言。通过调研发现,①Integration方法的整体性能主要归功于它在检索断言方面的成功;②Integration方法很难理解检索到的焦点测试和输入的焦点测试之间的语义差异,导致许多标记被错误地修改;③Integration方法仅限于特定类型的编辑操作(即替换),并且不能处理令牌添加或删除。
发明内容
为了缓解上述限制并提高断言生成的有效性,本发明提出了一种基于检索和编辑结合的软件单元测试代码自动生成方法。
为解决上述技术问题,本发明采用如下技术方案:一种基于检索和编辑结合的软件单元测试代码自动生成方法,包括组件一和组件二,所述组件一包括如下步骤:
S101:获取输入焦点测试每条输入焦点测试由输入测试前缀/>和输入被测方法/>组成。
S102:对于使用杰卡德相似度算法计算/>和语料库中的每一条焦点测试/>的相似度/>最终得到相似向量/>
S103:对于每一条得到语料库中相似度值最高的相似焦点测试以及其相对应的相似测试断言/>其中,相似焦点测试由相似测试前缀/>和相似被测方法/>组成。
组件二包含以下步骤:
S104:使用diff工具对与/>进行对比,并根据对比结果创建编辑序列/>
S105:分别对和/>进行词嵌入,并访问上下文信息。将/>中的每一个编辑Eij转换为文本嵌入向量h′j,/>中的每一个令牌xh转换为文本嵌入向量hh。最终得到编辑序列文本嵌入向量H′=[h′1,h′2,…,h′s]和相似测试断言文本嵌入向量H=[h1,h2,…,ht]。其中s代表编辑序列/>的编辑数量,t代表相似测试断言的令牌数量。
S106:构建和/>共享的注意力层来融合/>和/>的信息,并捕捉/>和/>之间的关系。
S107:使用两个不同的双向LSTM对的每一个令牌xh和/>中的每一个编辑Eij对应的生成最终表示向量zh和z′j。最终得到最终表示矩阵Z=[z1,z2,…,zt],Z′=[z′1,z′2,…,z′s]。
S108:将两个编码器输出的Z和Z′作为输入,使用基于LSTM的解码器生成目标测试断言assertionoutput。
作为优选,所述S102中相似矩阵的计算步骤如下:计算的公式为:
其中,|·|表示集合中元素的数量。
对于每一条得到相似向量/> 其中n表示语料库中数据的总数量。
作为优选,所述S104创建编辑序列的具体步骤如下:/>中的每个元素都是一个三元组/>将其称为编辑。其中,/>是中的一个令牌,/>是/>中的一个令牌,aj是/>转换为的编辑操作。
所述编辑操作一共有四种:插入、删除、相等或替换,当aj是插入或删除操作时,意味着或/>将是一个空的令牌/>
作为优选,所述S105得到编辑序列文本嵌入向量H′和相似测试断言文本嵌入向量H的步骤如下:首先使用预先训练的模型,分别获取和/>的词嵌入序列。
然后使用双向长短期记忆Bi-LSTM来处理词嵌入序列,以访问上下文信息。对于编辑序列中的每一个编辑/>首先水平连接以及aj,然后输入到Bi-LSTM,如下所示:
其中,h′j是编辑Eij的上下文向量,是连接运算;同样地,断言编码器获得每个断言/>令牌xh的上下文向量hh。最终得到编辑序列文本嵌入向量H′=[h′1,h′2,…,h′s]和相似测试断言文本嵌入向量H=[h1,h2,…,ht]。
作为优选,所述S106包括如下步骤:所述注意力层将H′=[h′1,h′2,…,h′s]和H=[h1,h2,…,ht]作为输入,它们分别对应编辑序列和相似测试断言/>并为每个h′j输出对应的特征向量g′j以及原始上下文向量h′j,为每个hh输出对应的特征向量gh以及原始上下文向量hh。
g′j的公式如下所示,注意力权重α′j衡量每个断言令牌xj相对于编辑Eij的重要性:
其中,HT表示相似测试断言文本嵌入向量H的转置,表示可训练参数的转置。
特征向量gh的公式如下所示,注意力权重αh衡量每个编辑Eij相对于断言令牌xh重要性:
gh=H′αh;αh=softmax(H′TWαhh) (6);
其中,H′T表示编辑序列文本嵌入向量H′的转置,Wα表示可训练参数。
作为优选,所述S107计算zh和z′j的步骤如下:对于的每一个令牌xh的zh由hh和gh计算,如下所示:
对于中的每一个编辑Eij的z′j由h′j和g′j计算,如下所示:
作为优选,所述S108包括如下步骤:
在解码步骤k期间,解码器基于基本事实断言的第k个字嵌入先前隐藏状态sk-1和先前输出向量ok-1来计算隐藏状态sk,如下所示:
然后计算每个时间步长的上下文向量,作为点积注意力机制对编码器输入的表示,如公式(6)所示。给定两个编码器,解码器获得两个上下文向量,即来自检索到的断言的ck和来自焦点测试编辑序列的c′k。使用ck、c′k和sk计算输出向量ok,并使用softmax层获得相应的词汇表分布
其中Vc和V′c是可训练的参数。是记录每个令牌被生成的概率,其中具有最高概率的令牌将在解码步骤k下被输出。
采用指针生成器从检索到的相似测试断言和输入焦点测试中复制令牌:
其中和/>分别是从检索到的断言和输入焦点测试复制yk的概率,yk表示在解码步骤k下被输出的令牌。βkl和β′kl是yl和El在时间步长k的注意力权重,yl表示相似测试断言的令牌,El表示输入焦点测试的令牌。yk在时间步长k的条件概率是和/>的组合,即,
其中γk和θk分别表示通过从词汇表中选择和从检索到的断言中复制生成yk的概率。
相对于现有技术,本发明至少具有如下优点:
本发明通过检索输入焦点测试的相似焦点测试的断言视为原型,并将原型与输入焦点测试和类似焦点测试之间的语义差异所反映断言编辑模式相结合来生成目标测试断言。
通过实验结果证明,本发明方法大大优于最先进的基线。对于断言生成任务,检索类似的断言通过应用一组编辑操作来学习修改检索到的断言可以获得令人满意的性能。同时,本发明可以运用至实际的工作场景。
附图说明
图1为本发明方法的流程简图。
具体实施方式
下面对本发明作进一步详细说明。
本发明的核心思想是将相似焦点测试的断言视为原型,并利用神经序列到序列模型来学习用于修改原型的断言编辑模式。该发明的动机是:检索到的断言指导神经模型“如何断言”,断言编辑模式向神经模型强调“断言什么”。本发明可以:(1)全面理解输入和相似焦点测试之间的语义差异;(2)灵活性地应用适当的断言编辑模式;(3)生成多样的编辑操作。
本发明由检索组件和编辑组件两个主要组件组成。检索组件用于从语料库中检索给定输入焦点测试的类似焦点测试,并将检索到的相似焦点测试的测试断言作为原型。编辑组件训练序列到序列神经网络来学习给定输入焦点测试和类似焦点测试方法的编辑模式,并对原型进行编辑修改,以生成测试断言。
具体来说,在组件一中,给定输入焦点测试基于杰卡德相似度(Jaccardsimilarity)算法计算输入焦点测试/>和语料库中的每一条焦点测试/>的相似度/>最后得到语料库中相似度值最高的相似焦点测试/>以及其相对应的相似测试断言/>在组件二中,对于给定的输入焦点测试及其相似的焦点测试实例/>以及它们对应的断言/>和神经编辑模型旨在找到一个函数f,使得从而对于一个输入焦点测试生成目标测试断言assertionoutput。
参见图1,一种基于检索和编辑结合的软件单元测试代码自动生成方法,包括组件一和组件二,其中组件一基于输入焦点测试的相似性检索语料库以获得相似焦点测试与相对应的测试断言;组件二将相似焦点测试相对应的测试断言作为原型,将其与输入焦点测试和类似焦点测试之间的语义差异所反映断言编辑模式相结合,编辑原型从而生成目标测试断言。
一种基于检索和编辑结合的软件单元测试代码自动生成方法,包括组件一和组件二,所述组件一包括如下步骤:
S101:获取输入焦点测试每条输入焦点测试由输入测试前缀/>和输入被测方法/>组成。
S102:对于使用杰卡德相似度算法计算/>和语料库中的每一条焦点测试/>的相似度/>最终得到相似向量/>
S103:对于每一条得到语料库中相似度值最高的相似焦点测试以及其相对应的相似测试断言/>其中,相似焦点测试由相似测试前缀/>和相似被测方法/>组成。对于每一条/>得到语料库中杰卡德相似度值最高值/>并得到相对应的序号为x的相似焦点测试/>和相似测试断言/>
组件二包含以下步骤;
S104:使用diff工具对与/>进行对比,并根据对比结果创建编辑序列/>
S105:分别对和/>进行词嵌入,并访问上下文信息。将/>中的每一个编辑Eij转换为文本嵌入向量h′j,/>中的每一个令牌xh转换为文本嵌入向量hh。最终得到编辑序列文本嵌入向量H′=[h′1,h′2,…,h′s]和相似测试断言文本嵌入向量H=[h1,h2,…,ht]。其中s代表编辑序列/>的编辑数量,t代表相似测试断言的令牌数量。
S106:构建和/>共享的注意力层来融合/>和/>的信息,并捕捉/>和/>之间的关系。
S107:使用两个不同的双向LSTM对的每一个令牌xh和/>中的每一个编辑Eij对应的生成最终表示向量zh和z′j。最终得到最终表示矩阵Z=[z1,z2,…,zt],Z′=[z′1,z′2,…,z′s]。
S108:将两个编码器输出的Z和Z′作为输入,使用基于LSTM的解码器生成目标测试断言assertionoutput。
具体的,所述S102中相似矩阵的计算步骤如下:
计算的公式为:
其中,|·|表示集合中元素的数量。
对于每一条得到相似向量/> 其中n表示语料库中数据的总数量。
具体的,所述S104创建编辑序列的具体步骤如下:
中的每个元素都是一个三元组/>将其称为编辑。其中,/>是/>中的一个令牌,/>是/>中的一个令牌,aj是/>转换为/>的编辑操作。
所述编辑操作一共有四种:插入、删除、相等或替换,当aj是插入或删除操作时,意味着或/>将是一个空的令牌/>构建这样的编辑序列不仅可以保留焦点测试(即/>和/>)的信息,而且可以通过aj突出它们的细粒度差异。
具体的,所述S105得到编辑序列文本嵌入向量H′和相似测试断言文本嵌入向量H的步骤如下:
为了捕获句法和语义信息,首先使用预先训练的模型,如fastText来分别获取和/>的词嵌入序列。
然后使用双向长短期记忆Bi-LSTM来处理词嵌入序列,以访问上下文信息。对于编辑序列中的每一个编辑/>首先水平连接以及aj,然后输入到Bi-LSTM,如下所示:
其中,h′j是编辑Eij的上下文向量,是连接运算;同样地,断言编码器获得每个断言/>令牌xh的上下文向量hh。最终得到编辑序列文本嵌入向量H′=[h′1,h′2,…,h′s]和相似测试断言文本嵌入向量H=[h1,h2,…,ht]。
具体的,所述S106包括如下步骤:
所述注意力层将H′=[h′1,h′2,…,h′s]和H=[h1,h2,…,ht]作为输入,它们分别对应编辑序列和相似测试断言/>并为每个h′j输出对应的特征向量g′j以及原始上下文向量h′j,为每个hh输出对应的特征向量gh以及原始上下文向量hh;
g′j的公式如下所示,注意力权重α′j衡量每个断言令牌xj相对于编辑Eij的重要性:
其中,HT表示相似测试断言文本嵌入向量H的转置,表示可训练参数的转置。
特征向量gh的公式如下所示,注意力权重αh衡量每个编辑Eij相对于断言令牌xh重要性:
gh=H′αh;αh=softmax(H′TWαhh) (6);
其中,H′T表示编辑序列文本嵌入向量H′的转置,Wα表示可训练参数。
具体的,所述S107计算zh和z′j的步骤如下:
对于的每一个令牌xh的zh由hh和gh计算,如下所示:
对于中的每一个编辑Eij的z′j由h′j和g′j计算,如下所示:
具体的,所述S108包括如下步骤:
为了构建LSTM的初始状态s0,将编码器输出的最终表示矩阵Z=[z1,z2,…,zt]和Z′=[z′1,z′2,…,z′s]连接起来。在解码步骤k期间,解码器基于基本事实断言的第k个字嵌入先前隐藏状态sk-1和先前输出向量ok-1来计算隐藏状态sk,如下所示:
然后计算每个时间步长的上下文向量,作为点积注意力机制对编码器输入的表示,如公式(6)所示。给定两个编码器,解码器获得两个上下文向量,即来自检索到的断言的ck和来自焦点测试编辑序列的c′k。使用ck、c′k和sk计算输出向量ok,并使用softmax层获得相应的词汇表分布
其中Vc和V′c是可训练的参数。是记录每个令牌被生成的概率,其中具有最高概率的令牌将在解码步骤k下被输出。
由于焦点测试的相似性,可以合理地假设新断言中的某些令牌也应该出现在检索到的断言中,而在检索到的断言中不存在的其他令牌应该包括在输入焦点测试中。因此,采用指针生成器从检索到的相似测试断言和输入焦点测试中复制令牌:
其中和/>分别是从检索到的断言和输入焦点测试复制yk的概率,yk表示在解码步骤k下被输出的令牌。βkl和β′kl是yl和El在时间步长k的注意力权重,yl表示相似测试断言的令牌,El表示输入焦点测试的令牌。yk在时间步长k的条件概率是和/>的组合,即,
其中γk和θk分别表示通过从词汇表中选择和从检索到的断言中复制生成yk的概率。
本发明所使用的数据来自Yu等人在论文中提供的两个公开可用的数据集,分别是Dataold和Datanew。
(1)Dataold:Dataold来源于ATLAS方法使用的原始数据集。最初,Dataold是从GitHub中的250万个测试方法池中提取的,其中包括测试前缀及其相应的断言语句。对于每种测试方法,Dataold都包括焦点方法。然后对Dataold进行预处理,以排除标记长度超过1K的测试方法,并按照自然语言处理的既定做法,过滤掉包含焦点测试和词汇中不存在的未知标记的断言。去除重复项后,Dataold获得156760个数据,这些数据以8:1:1的比例进一步划分为训练集、验证集和测试集。
(2)Datanew:排除具有未知令牌的断言可能会使断言生成问题过于简单化,使Dataold不适合代表真实的数据分布。这反过来又对实验结论的有效性构成了重大威胁。因此,Yu等人通过添加那些在Dataold中被排除的具有未知标记的样本,构建了一个扩展的数据集,表示为Datanew。除了Dataold中现有的数据项外,Datanew还额外包含108660个具有未知令牌的样本,共形成265420个数据,这些数据还按8:1:1的比例分为训练集、验证集和测试集。
为了验证本发明的有效性,我们与五个基线进行了比较。我们首先选择了ATLAS,这是第一个也是经典的基于神经网络的断言生成方法。ATLAS利用序列到序列模型从头开始生成断言。鉴于EDITAS旨在重新审视和改进检索增强的软件断言生成方法,我们采用了目前三种最先进的检索方法包括IRar、和/>以及检索与深度学习集成的方法Integration。IRar采用与ATLAS相同的输入,并基于Jaccard相似系数检索与给定焦点测试最相似的断言。然后,/>根据上下文进一步调整检索到的断言中的令牌。此外,Integration将基于IR的方法与基于DL的方法相结合,以提高断言生成能力。Integration方法首先验证检索到的断言与当前焦点测试之间的兼容性,如果兼容性超过阈值,则检索到的断言将作为最终结果返回。否则,基于DL的方法将生成断言。本发明提出的方法称作EDITAS。
本发明采用Accuracy和muti-BLEU分数作为评估指标。(1)Accuracy:生成的断言被认为是准确的,当且仅当它与基本事实完全匹配。准确性确定生成的输出在语法方面与预期输出匹配的样本百分比。(2)muti-BLEU:BLEU计算候选序列(即生成的断言)与参考序列(即基本事实)的修正n-gram精度,其中n的范围是1到4。然后对修正的n-gram精度值进行平均,并对过短的句子进行惩罚。
本发明计算了由不同方法生成的断言与人工编写的断言之间的准确性和BLEU分数。实验结果如表1所示。可以看到,ATLAS在所有方法中表现最差。这主要归因于两个原因:1)ATLAS作为一种典型的序列到序列DL模型,存在暴露偏差和梯度消失,导致生成长序列令牌作为断言的有效性较差。2)ATLAS生成包含未知令牌的语句的能力较弱,这会显著降低其整体性能。IRar从语料库中检索断言并将其用作输出结果,从而获得比ATLAS更好的性能。这表明类似焦点测试的断言包含了一些有价值和可重用的信息,这也表明我们使用相似焦点测试作为原型的断言是合理的。和/>进一步调整检索到的断言,以增强基于IR的方法生成断言的能力。然而,如表1所示,/>和/>的自适应操作性能都是有限的,尤其是对于复杂的数据集。例如,与IRar相比,/>在Dataold上可以提高20.33%的准确率,而在Datanew上提高的准确率仅为6.94%。Integration结合了IR和DL技术,并实现了比基于ATLAS和IR的断言生成方法更好的准确性和BLEU分数。
从表1中可以看出,与ATLAS相比,EDITAS实现了显著的性能改进,两个数据集的平均准确率提高了87.48%,BLEU得分提高了42.65%。这是因为EDITAS使用了检索到的断言中丰富的语义信息,而不是从头开始生成断言。本发明方法EDITAS在所有评估指标上都优于基于IR的基线方法和集成。具体而言,与IRar、和Integration相比,EDITAS的平均准确率分别提高了32.24%、21.19%、15.99%和10.00%,这证明了本发明编辑模块的有效性。与基于IR的基线相比,EDITAS采用检索到的断言作为原型,并通过考虑输入和相似焦点测试之间的语义差异进行修改。通过结合神经网络和基于IR的方法的优点,EDITAS实现了最佳性能。
表1 EDITAS在两个数据集上与五种最先进的测试断言生成方法的评估结果
我们进一步比较了EDITAS和基线方法对不同类型断言的有效性。表2显示了在数据集Dataold和Datanew中每种断言类型的详细统计信息。其中的每一列表示一种断言类型,每个单元格中的括号显示数据集中断言的数量及其相应的比率。
表2 Dataold和Datanew中每种类型的详细统计信息
表3、表4分别显示了每个基线在数据集Dataold和Datanew上对每种断言类型的有效性。其中的每一列表示一种断言类型,每个单元格中的括号显示正确生成的断言的数量及其相应的比率。结果表明,对于几乎所有断言类型,尤其是对于标准JUnit断言类型,EDITAS的性能都优于基线方法。总体而言,实验结果可以表明EDITAS在生成不同类型断言方面的通用性。
表3 EDITAS和每个基线在Dataold数据集上对每个断言类型的有效性
表4 EDITAS和每个基线在Datanew数据集上对每个断言类型的有效性
/>
EDITAS具有以下优势:1)EDITAS能够学习和应用不同的断言编辑模式,而和/>无法处理令牌添加或删除操作。2)/>和/>仅在检索到的断言包含至少一个不存在于输入焦点测试中的令牌时才修改该断言。然而,即使检索到的断言中的所有令牌都出现在输入焦点测试中,由于焦点测试之间的语义差异,它仍然可能需要修改。相反,EDITAS利用概率模型从现有的焦点测试的语义差异中学习断言编辑的常见模式。总体而言,EDITAS学习到的编辑模式更加多样化,可以覆盖更广泛的样本。
最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的宗旨和范围,其均应涵盖在本发明的权利要求范围当中。
Claims (7)
1.一种基于检索和编辑结合的软件单元测试代码自动生成方法,其特征在于:包括组件一和组件二,所述组件一包括如下步骤:
S101:获取输入焦点测试每条输入焦点测试由输入测试前缀/>和输入被测方法/>组成;
S102:对于使用杰卡德相似度算法计算/>和语料库中的每一条焦点测试/>的相似度/>最终得到相似向量/>
S103:对于每一条得到语料库中相似度值最高的相似焦点测试/>以及其相对应的相似测试断言/>其中,相似焦点测试由相似测试前缀和相似被测方法/>组成;
组件二包含以下步骤;
S104:使用diff工具对与/>进行对比,并根据对比结果创建编辑序列
S105:分别对和/>进行词嵌入,并访问上下文信息,将/>中的每一个编辑Eij转换为文本嵌入向量h′j,/>中的每一个令牌xh转换为文本嵌入向量hh,最终得到编辑序列文本嵌入向量H′=[h′1,h′2,...,h′s]和相似测试断言文本嵌入向量H=[h1,h2,...,ht],其中s代表编辑序列/>的编辑数量,t代表相似测试断言的令牌数量;
S106:构建和/>共享的注意力层来融合/>和/>的信息,并捕捉/>和/>之间的关系;
S107:使用两个不同的双向LSTM对的每一个令牌xh和/>中的每一个编辑Eij对应的生成最终表示向量zh和z′j,最终得到最终表示矩阵Z=[z1,z2,...,zt],Z′=[z′1,z′2,...,z′s];
S108:将两个编码器输出的Z和Z′作为输入,使用基于LSTM的解码器生成目标测试断言assertionoutput。
2.如权利要求1所述的基于检索和编辑结合的软件单元测试代码自动生成方法,其特征在于:所述S102中相似矩阵的计算步骤如下:
计算的公式为:
其中,|·|表示集合中元素的数量;
对于每一条得到相似向量/> 其中n表示语料库中数据的总数量。
3.如权利要求2所述的基于检索和编辑结合的软件单元测试代码自动生成方法,其特征在于:所述S104创建编辑序列的具体步骤如下:
中的每个元素都是一个三元组/>将其称为编辑,其中,/>是/>中的一个令牌,/>是/>中的一个令牌,aj是/>转换为/>的编辑操作;
所述编辑操作一共有四种:插入、删除、相等或替换,当aj是插入或删除操作时,意味着或/>将是一个空的令牌/>
4.如权利要求3所述的基于检索和编辑结合的软件单元测试代码自动生成方法,其特征在于:所述S105得到编辑序列文本嵌入向量H′和相似测试断言文本嵌入向量H的步骤如下:
首先使用预先训练的模型,分别获取和/>的词嵌入序列;
然后使用双向长短期记忆Bi-LSTM来处理词嵌入序列,以访问上下文信息,对于编辑序列中的每一个编辑/>首先水平连接以及aj,然后输入到Bi-LSTM,如下所示:
其中,h′j是编辑Eij的上下文向量,是连接运算;同样地,断言编码器获得每个断言令牌xh的上下文向量hh,最终得到编辑序列文本嵌入向量H′=[h′1,h′2,...,h′s]和相似测试断言文本嵌入向量H=[h1,h2,...,ht]。
5.如权利要求5所述的基于检索和编辑结合的软件单元测试代码自动生成方法,其特征在于:所述S106包括如下步骤:
所述注意力层将H′=[h′1,h′2,...,h′s]和H=[h1,h2,...,ht]作为输入,它们分别对应编辑序列和相似测试断言/>并为每个h′j输出对应的特征向量g′j以及原始上下文向量h′j,为每个hh输出对应的特征向量gh以及原始上下文向量hh;
g′j的公式如下所示,注意力权重α′j衡量每个断言令牌xj相对于编辑Eij的重要性:
其中,HT表示相似测试断言文本嵌入向量H的转置,表示可训练参数的转置;
特征向量gh的公式如下所示,注意力权重αh衡量每个编辑Eij相对于断言令牌xh重要性:
gh=H′αh;αh=softmax(H′TWαhh) (6);
其中,H′T表示编辑序列文本嵌入向量H′的转置,Wα表示可训练参数。
6.如权利要求3所述的基于检索和编辑结合的软件单元测试代码自动生成方法,其特征在于:所述S107计算zh和z′j的步骤如下:
对于的每一个令牌xh的zh由hh和gh计算,如下所示:
对于中的每一个编辑Eij的z′j由h′j和g′j计算,如下所示:
7.如权利要求3所述的基于检索和编辑结合的软件单元测试代码自动生成方法,其特征在于:所述S108包括如下步骤:
在解码步骤k期间,解码器基于基本事实断言的第k个字嵌入先前隐藏状态sk-1和先前输出向量ok-1来计算隐藏状态sk,如下所示:
然后计算每个时间步长的上下文向量,作为点积注意力机制对编码器输入的表示,如公式(6)所示,给定两个编码器,解码器获得两个上下文向量,即来自检索到的断言的ck和来自焦点测试编辑序列的c′k,使用ck、c′k和sk计算输出向量ok,并使用softmax层获得相应的词汇表分布
其中Vc和V′c是可训练的参数,是记录每个令牌被生成的概率,其中具有最高概率的令牌将在解码步骤k下被输出;
采用指针生成器从检索到的相似测试断言和输入焦点测试中复制令牌:
其中和/>分别是从检索到的断言和输入焦点测试复制yk的概率,yk表示在解码步骤k下被输出的令牌,βkl和β′kl是yl和El在时间步长k的注意力权重,yl表示相似测试断言的令牌,El表示输入焦点测试的令牌,yk在时间步长k的条件概率是和/>的组合即:
其中γk和θk分别表示通过从词汇表中选择和从检索到的断言中复制生成yk的概率。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310860338.3A CN116820484A (zh) | 2023-07-13 | 2023-07-13 | 基于检索和编辑结合的软件单元测试代码自动生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310860338.3A CN116820484A (zh) | 2023-07-13 | 2023-07-13 | 基于检索和编辑结合的软件单元测试代码自动生成方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116820484A true CN116820484A (zh) | 2023-09-29 |
Family
ID=88141056
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310860338.3A Pending CN116820484A (zh) | 2023-07-13 | 2023-07-13 | 基于检索和编辑结合的软件单元测试代码自动生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116820484A (zh) |
-
2023
- 2023-07-13 CN CN202310860338.3A patent/CN116820484A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Bakhtin et al. | Real or fake? learning to discriminate machine from human generated text | |
Guo et al. | Towards complex text-to-sql in cross-domain database with intermediate representation | |
Wang et al. | Bridging pre-trained models and downstream tasks for source code understanding | |
Lei et al. | Re-examining the Role of Schema Linking in Text-to-SQL | |
Choe et al. | A neural grammatical error correction system built on better pre-training and sequential transfer learning | |
Wang et al. | Search, align, and repair: data-driven feedback generation for introductory programming exercises | |
Zhang et al. | Editing-based SQL query generation for cross-domain context-dependent questions | |
CN111488137B (zh) | 一种基于共同注意力表征学习的代码搜索方法 | |
Gao et al. | A neural model for method name generation from functional description | |
CN111309607B (zh) | 一种代码方法级别的软件缺陷定位方法 | |
Wei et al. | Iterative domain-repaired back-translation | |
Savelieva et al. | Abstractive summarization of spoken and written instructions with BERT | |
CN113254604B (zh) | 一种基于参考规范的专业文本生成方法及装置 | |
Yang et al. | Applying deep learning algorithm to automatic bug localization and repair | |
CN113743133A (zh) | 融合词粒度概率映射信息的汉越跨语言摘要方法 | |
CN113190219A (zh) | 一种基于递归神经网络模型的代码注释生成方法 | |
CN111611814A (zh) | 一种基于相似度感知的神经机器翻译方法 | |
Gong et al. | Continual pre-training of language models for math problem understanding with syntax-aware memory network | |
JP3669870B2 (ja) | 最適テンプレートパターン探索方法,探索装置および記録媒体 | |
Wang et al. | Computer assisted translation with neural quality estimation and automatic post-editing | |
White et al. | Reassert: Deep learning for assert generation | |
CN114925170A (zh) | 文本校对模型训练方法及装置、计算设备 | |
CN111898337B (zh) | 一种基于深度学习的单句摘要缺陷报告标题自动生成方法 | |
CN116820484A (zh) | 基于检索和编辑结合的软件单元测试代码自动生成方法 | |
Shen et al. | Evaluating Code Summarization with Improved Correlation with Human Assessment |
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 |