CN113010420A - 一种促进测试代码与产品代码协同演化的方法及终端设备 - Google Patents

一种促进测试代码与产品代码协同演化的方法及终端设备 Download PDF

Info

Publication number
CN113010420A
CN113010420A CN202110245711.5A CN202110245711A CN113010420A CN 113010420 A CN113010420 A CN 113010420A CN 202110245711 A CN202110245711 A CN 202110245711A CN 113010420 A CN113010420 A CN 113010420A
Authority
CN
China
Prior art keywords
code
test
sequence
evolution
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.)
Granted
Application number
CN202110245711.5A
Other languages
English (en)
Other versions
CN113010420B (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.)
Southwest University of Science and Technology
Original Assignee
Southwest University of Science and Technology
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 Southwest University of Science and Technology filed Critical Southwest University of Science and Technology
Priority to CN202110245711.5A priority Critical patent/CN113010420B/zh
Publication of CN113010420A publication Critical patent/CN113010420A/zh
Application granted granted Critical
Publication of CN113010420B publication Critical patent/CN113010420B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/3668Software testing
    • G06F11/3672Test management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02PCLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
    • Y02P90/00Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
    • Y02P90/30Computing systems specially adapted for manufacturing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Artificial Intelligence (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Quality & Reliability (AREA)
  • Evolutionary Computation (AREA)
  • Medical Informatics (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种促进测试代码与产品代码协同演化的方法及终端设备,方法包括步骤:从项目代码仓库中获取历史实例代码数据,并构建第一训练数据集;基于第一训练数据集对分类器进行训练,得到训练后分类器;基于训练后分类器自动识别过时的单元测试用例;对所述代码数据进行预处理,得到序列数据,根据序列数据构建第二训练数据集;基于第二训练数据集对seq2seq模型进行训练,得到训练后seq2seq模型;将导致单元测试用例过时的产品代码更改和原始测试代码输入所述训练后seq2seq模型中,输出完整的补丁,通过补丁对所述过时的单元测试用例进行修复,促进单元测试代码与产品代码协同演化。本发明实现了高效准确地促进单元测试代码与产品代码协同演化。

Description

一种促进测试代码与产品代码协同演化的方法及终端设备
技术领域
本发明涉及软件测试技术领域,尤其涉及一种促进测试代码与产品代码协同演化的方法及终端设备。
背景技术
软件测试技术被广泛应用于软件质量保证中,在工程实践中,软件开发人员经常编写测试代码,用以验证产品代码是否符合预期的软件需求。由于软件产品经常需要演化、更新,所以当产品代码经历诸如添加功能、删除功能等重大更改时,测试代码应该与相应的产品代码协同演化。这种协同演化使得测试代码持续具备软件质量保证的能力。若测试代码没有及时更新,可能导致产品代码中的缺陷难以被发现,也可能导致错误的告警,造成测试资源的浪费。然而,对于开发人员来说,保持测试代码的实时更新并不容易。有研究表明,在实际软件项目中,测试代码通常无法与产品代码协同演化,主要原因有以下几点:
1、缺乏维护测试用例或保障软件质量的资源;
2、缺少工具定位特定功能与其对应的测试用例;
3、运行所有测试用例较为耗时。
因此,现有技术还有待于改进和发展。
发明内容
鉴于上述现有技术的不足,本发明的目的在于提供一种促进测试代码与产品代码协同演化的方法及终端设备,旨在解决现有测试代码通常无法与产品代码协同演化的问题。
本发明的技术方案如下:
一种促进测试代码与产品代码协同演化的方法,其中,包括步骤:
从项目代码仓库中获取历史实例代码数据,并构建第一训练数据集;
基于所述第一训练数据集对分类器进行训练,得到训练后分类器;
基于所述训练后分类器自动识别过时的单元测试用例;
对所述代码数据进行预处理,得到序列数据,根据所述序列数据构建第二训练数据集;
基于所述第二训练数据集对seq2seq模型进行训练,得到训练后seq2seq模型;
将导致单元测试用例过时的产品代码更改和原始测试代码输入所述训练后seq2seq模型中,输出完整的补丁,通过所述补丁对所述过时的单元测试用例进行修复,促进单元测试代码与产品代码协同演化。
所述促进测试代码与产品代码协同演化的方法,其中,所述从项目代码仓库中获取历史实例代码数据,并构建第一训练数据集的步骤包括:
将从项目代码仓库中获取的历史实例代码数据划分为正样本和负样本,其中,正样本中测试代码与产品代码协同演化,负样本中测试代码不与产品代码协同演化;
根据测试文件级别对所述正样本进行标记,构建第一训练数据集。
所述促进测试代码与产品代码协同演化的方法,其中,根据测试文件级别对所述正样本进行标记的步骤包括:
若测试文件级别为二分类预测时,则将正样本标记为应该更改和不更改两类;
若测试文件级别为多分类预测时,则将正样本标记为应该创建、应该编辑和应该删除三类。
所述促进测试代码与产品代码协同演化的方法,其中,基于所述第一训练数据集对分类器进行训练,得到训练后分类器的步骤包括:
将所述第一训练数据集转换为结构化的向量表示,对于每个样本,从产品代码的补丁和原始产品代码中提取特征;
将提取的特征输入到分类器中进行训练,得到训练后分类器。
所述促进测试代码与产品代码协同演化的方法,其中,所述分类器为逻辑回归分类器、朴素贝叶斯分类器、随机森林分类器或梯度提升分类器中的一种。
所述促进测试代码与产品代码协同演化的方法,其中,对所述代码数据进行预处理,得到序列数据,根据所述序列数据构建第二训练数据集的步骤包括:
将产品代码更改划分为一个原始产品代码段和一个更改后产品代码段,对所述原始产品代码段和更改后产品代码段进行分词,得到对应的第一单词序列和第二单词序列,然后根据所述第一单词序列和第二单词序列构造成一个编辑序列;
对原始测试代码和更新后测试代码进行分词,得到对应的原始测试代码单词序列和更新后测试代码单词序列;
对编辑操作所在行的上下文进行分词得到编辑行的上下文单词序列;
根据所述编辑序列、原始测试代码单词序列和更新后测试代码单词序列以及所述编辑行的上下文单词序列构建第二训练数据集。
所述促进测试代码与产品代码协同演化的方法,其中,基于所述第二训练数据集对seq2seq模型进行训练,得到训练后seq2seq模型的步骤包括:
将原始测试代码单词序列、编辑序列和编辑行的上下文单词序列输入到seq2seq模型的编码器部分,对所述seq2seq模型进行训练,得到训练后seq2seq模型。
所述促进测试代码与产品代码协同演化的方法,其中,将原始测试代码单词序列、编辑序列和编辑行的上下文单词序列输入到seq2seq模型的编码器部分,对所述seq2seq模型进行训练,得到训练后seq2seq模型的步骤包括:
将所述原始测试代码单词序列、编辑序列和编辑行的上下文单词序列分别通过嵌入层映射到嵌入矩阵中;
之后分别通过Self-Attention Network进行建模得到三个相关向量;
接着将输入编辑序列和编辑行的上下文单词序列得到的相关向量输入到attention层,得到编辑操作在相关上下文语境下的最终表示;
将编辑操作在相关上下文语境下的表示连同输入原始测试代码单词序列得到的相关向量输入attention层,得到每个编辑操作的最终表示;
通过解码器部分将所述编辑操作在相关上下文语境下的最终表示以及每个编辑操作的最终表示作为输入,按顺序生成一个新的测试代码单词序列,完成对所述seq2seq模型进行训练。
一种存储介质,其中,所述存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现本发明促进测试代码与产品代码协同演化的方法中的步骤。
一种终端设备,其中,包括处理器,适于实现各指令;以及存储介质,适于存储多条指令,所述指令适于由处理器加载并执行本发明促进测试代码与产品代码协同演化的方法中的步骤。
有益效果:相较于现有技术,本发明提供一种促进测试代码与产品代码协同演化的方法,利用机器学习算法自动学习分类规则,最终实现自动识别过时的单元测试用例,它不仅能在二分类取得高精度结果,还可以进行高精度的多分类预测,在项目内和跨项目设置下都能取得很好的结果;进一步提出了利用seq2seq模型对过时的测试用例进行自动更新的方法,高效准确地促进单元测试代码与产品代码协同演化。
附图说明
图1为本发明一种促进测试代码与产品代码协同演化的方法较佳实施例的流程图。
图2为本发明基于所述训练后分类器自动识别过时的单元测试用例的流程图。
图3为本发明基于训练后seq2seq模型中对过时的单元测试用例进行修复,促进单元测试代码与产品代码协同演化的流程图。
图4为seq2seq模型的训练流程图。
图5为本发明终端设备的原理框图。
具体实施方式
本发明提供一种促进测试代码与产品代码协同演化的方法及终端设备,为使本发明的目的、技术方案及效果更加清楚、明确,以下对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
给定一个产品代码的更改,自动化地决定是否应该更新其相应的单元测试用例是一个具有挑战性的难题。虽然现有技术能够分析产品代码和测试代码之间的关联,但并不能明确指出在什么情况下测试代码应该与产品代码协同演化。若仅使用简单的启发式规则来预测测试代码是否应该更新,其效果也并不理想,而且这种方法缺少可扩展性,总体性能很差。
若想要自动更新测试代码,依据现有技术主要有两类方法:基于搜索的自动程序修复和基于语义的自动程序修复。基于搜索的自动程序修复技术通常遵循一种生成后验证的范式:它们首先通过故障定位技术定位修补点,然后根据预定义的变异规则生成一组候选补丁,而选择补丁的问题则被描述为一个优化问题。现有研究指出,基于搜索的自动程序修复技术的额有效性和效率受到两个因素的限制:补丁空间的完备性和搜索算法的效能。基于语义的自动程序修复技术通过直接分析代码语义从而合成补丁,这类技术通常使用形式化方法,如符号执行,来识别和验证补丁。然而,形式化方法经常依赖约束求解技术,该技术在很多场景下难以满足高效准确地基本要求,因为求解约束问题通常是困难的。总之,现有对测试代码自动更新的技术仍旧存在不少局限性,主要有:1、由于测试代码错误难以定位,因此测试代码的补丁难以生成;2、更新后的测试用例难以验证其正确性。
基于此,本发明提供了一种促进测试代码与产品代码协同演化的方法,如图1所示,其包括步骤:
S10、从项目代码仓库中获取历史实例代码数据,并构建第一训练数据集;
S20、基于所述第一训练数据集对分类器进行训练,得到训练后分类器;
S30、基于所述训练后分类器自动识别过时的单元测试用例;
S40、对所述代码数据进行预处理,得到序列数据,根据所述序列数据构建第二训练数据集;
S50、基于所述第二训练数据集对seq2seq模型进行训练,得到训练后seq2seq模型;
S60、将导致单元测试用例过时的产品代码更改和原始测试代码输入所述训练后seq2seq模型中,输出完整的补丁,通过所述补丁对所述过时的单元测试用例进行修复,促进单元测试代码与产品代码协同演化。
具体来讲,过时的测试用例可能会造成不良后果,同时,开发人员也难以保证测试代码实时更新。而现有自动程序修复技术难以修复测试代码,因此,本实施例旨在开发一种在产品代码演化时能够精准地识别过时的测试用例并将其自动更新的自动化技术,本实施例首先基于对开源Java项目的大规模实证研究,通过人工发现特征,并利用机器学习算法自动学习分类规则,从而实现自动识别过时的单元测试用例,具体是从项目的更新历史中学习更改的代码之间的关系,再综合考虑多个因素来预测测试代码的变化,从而识别出过时的测试用例。在识别出过时的测试代码之后,本实施例再通过seq2seq模型,学习历史中产品代码与测试代码协同演化的关系。最终,针对新提交的产品代码,预训练好的seq2seq模型能够针对新的产品代码生成测试用例的补丁,从而保证产品代码与测试代码的协同演化。该实施例提供的方法大大降低了测试代码的维护成本,从而保障了软件质量。
在一些实施方式中,所述从项目代码仓库中获取历史实例代码数据,并构建第一训练数据集的步骤包括:将从项目代码仓库中获取的历史实例代码数据划分为正样本和负样本,其中,正样本中测试代码与产品代码协同演化,负样本中测试代码不与产品代码协同演化;根据测试文件级别对所述正样本进行标记,构建第一训练数据集。
具体来讲,本实施例对975个ASF的Java项目中的代码协同演化进行了大量的实证研究,综合研究中的发现,提出了一种识别过时测试用例的自动化方法,如图2所示,该方法依据产品代码和测试代码协同演化的历史数据来训练模型,并在项目产生代码更新,即开发人员更改产品代码时自动识别过时的测试用例。对于没有历史数据的新项目,该方法也可以使用其他项目的数据来训练模型。作为举例,如图2所示,在构建第一训练数据集的过程中,首先通过匹配器查找并匹配项目代码仓库中的历史实例代码数据,其包括产品代码更改及相应的测试代码更新数据,将所述历史实例代码数据划分为正样本和负样本,其中,正样本中测试代码与产品代码协同演化,负样本中测试代码不与产品代码协同演化,如果测试代码在相应产品代码被更改的48小时内更新,则将其视为正样本;而如果测试代码在480小时内没有更新,则假设不会发生协同演化,则视为负样本。
进一步地,所述匹配器还根据测试文件级别对所述正样本进行标记,具体来讲,若测试文件级别为二分类预测时,则将正样本标记为应该更改(SC)和不更改(NC)两类;若测试文件级别为多分类预测是,则将正样本标记为应该创建(SSC)、应该编辑(SSE)和应该删除(SSD)三类。
在一些实施方式中,基于所述第一训练数据集对分类器进行训练,得到训练后分类器的步骤包括:将所述第一训练数据集转换为结构化的向量表示,对于每个样本,从产品代码的补丁和原始产品代码中提取特征;将提取的特征输入到分类器中进行训练,得到训练后分类器。
具体来讲,通过特征提取器将样本转换为结构化的向量表示,对于每个样本,从产品代码的“补丁”和原始产品代码中提取特征。Java文件中的每个语言结构对应于一个区间,特征提取器通过“区间穿刺”确定产品代码中更改的每一行对应于哪个区间(属于哪个语言结构),对于删除的行,查询原始产品代码所在的区间;对于添加的行,查询修改后的代码所在的区间。另外,为了优化查询效率,本发明构建线段树,实现了一次建树、多次查询,相较于蛮力解决方法,这种方法更加高效且更适合现实中复杂、大规模的项目。
在一些具体的实施方式中,使用项目代码仓库或其他仓库的提交历史记录对分类器进行训练,经过训练,分类器可以帮助预测开发人员更改产品代码时是否应该更新(或者相应地创建、编辑或删除)一段测试代码。该方法支持多种机器学习算法,并且同时支持二分类和多分类,能够预测应该对测试代码进行哪些类型的更改。通过实验对四种常用的分类器(逻辑回归分类器、朴素贝叶斯分类器、随机森林分类器和梯度提升分类器)进行比较后发现,在本发明所要解决的问题中,随机森林分类器的性能优于其他分类器,因此本发明采用随机森林分类器作为最终的分类器。
在一些实施方式中,利用机器学习算法自动学习分类规则,最终可自动识别过时的单元测试用例;之后本发明提出了一种利用seq2seq模型学习与产品代码更改相关的测试用例更新模式,并根据相应的产品代码更改和原始的测试代码,自动更新测试用例的方法,利用这种方法进行测试用例更新有助于保障测试用例的实时更新。该方法的具体过程如图3所示,主要分为三个部分:
1)、数据预处理:在这部分,将产品代码更改和测试代码转换为序列,以便通过seq2seq模型处理它们。将产品代码更改划分为一个原始产品代码段和一个更改后产品代码段,对所述原始产品代码段和更改后产品代码段进行分词,得到对应的第一单词序列和第二单词序列,然后根据所述第一单词序列和第二单词序列构造成一个编辑序列;对原始测试代码和更新后测试代码进行分词,得到对应的原始测试代码单词序列和更新后测试代码单词序列;对编辑操作所在行的上下文进行分词得到编辑行的上下文单词序列;根据所述编辑序列、原始测试代码单词序列和更新后测试代码单词序列以及所述编辑行的上下文单词序列构建第二训练数据集。
2)、seq2seq模型训练:本发明用到的seq2seq模型结构如图4所示,该模型主要分为两大部分:编码器部分和解码器部分。将原始测试代码单词序列、编辑序列和编辑行的上下文单词序列输入到seq2seq模型的编码器部分,对所述seq2seq模型进行训练,得到训练后seq2seq模型。具体来讲,首先将所述原始测试代码单词序列、编辑序列和编辑行的上下文单词序列分别通过嵌入层映射到嵌入矩阵中;之后分别通过Self-Attention Network进行建模得到三个相关向量;接着将输入编辑序列和编辑行的上下文单词序列得到的相关向量输入到attention层,得到编辑操作在相关上下文语境下的最终表示;将编辑操作在相关上下文语境下的表示连同输入原始测试代码单词序列得到的相关向量输入attention层,得到每个编辑操作的最终表示;通过解码器部分将所述编辑操作在相关上下文语境下的最终表示以及每个编辑操作的最终表示作为输入,按顺序生成一个新的测试代码单词序列,完成对所述seq2seq模型进行训练。
3)、测试用例更新:在该部分,将产品代码更改和原始的测试代码输入已经训练完成的模型中得到一个新的测试代码单词序列,语句重建模块从单词序列中生成完整的补丁,对过时的测试用例进行修复,从而促进单元测试代码与产品代码协同演化。
本实施例利用seq2seq模型对过时的测试用例进行自动更新的方法,高效准确地促进单元测试代码与产品代码协同演化。
在一些实施方式中,还提供一种存储介质,其中,所述存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现本发明促进测试代码与产品代码协同演化的方法中的步骤。
在一些实施方式中,还提供一种终端设备,如图4所示,其包括至少一个处理器(processor)20;显示屏21;以及存储器(memory)22,还可以包括通信接口(CommunicationsInterface)23和总线24。其中,处理器20、显示屏21、存储器22和通信接口23可以通过总线24完成相互间的通信。显示屏21设置为显示初始设置模式中预设的用户引导界面。通信接口23可以传输信息。处理器20可以调用存储器22中的逻辑指令,以执行上述实施例中的方法。
此外,上述的存储器22中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。
存储器22作为一种计算机可读存储介质,可设置为存储软件程序、计算机可执行程序,如本发明实施例中的方法对应的程序指令或模块。处理器20通过运行存储在存储器22中的软件程序、指令或模块,从而执行功能应用以及数据处理,即实现上述实施例中的方法。
存储器22可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端设备的使用所创建的数据等。此外,存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器。例如,U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等多种可以存储程序代码的介质,也可以是暂态存储介质。
此外,上述存储介质以及终端设备中的多条指令处理器加载并执行的具体过程在上述方法中已经详细说明,在这里就不再一一陈述。
综上所述,本发明提供一种促进利测试代码与产品代码协同演化的方法,利用机器学习算法自动学习分类规则,最终实现自动识别过时的单元测试用例的方法,它不仅能在二分类取得高精度结果,还可以进行高精度的多分类预测,在项目内和跨项目设置下都能取得很好的结果;进一步提出了利用seq2seq模型对过时的测试用例进行自动更新的方法,高效准确地促进单元测试代码与产品代码协同演化。
应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。

Claims (10)

1.一种促进测试代码与产品代码协同演化的方法,其特征在于,包括步骤:
从项目代码仓库中获取历史实例代码数据,并构建第一训练数据集;
基于所述第一训练数据集对分类器进行训练,得到训练后分类器;
基于所述训练后分类器自动识别过时的单元测试用例;
对所述代码数据进行预处理,得到序列数据,根据所述序列数据构建第二训练数据集;
基于所述第二训练数据集对seq2seq模型进行训练,得到训练后seq2seq模型;
将导致单元测试用例过时的产品代码更改和原始测试代码输入所述训练后seq2seq模型中,输出完整的补丁,通过所述补丁对所述过时的单元测试用例进行修复,促进单元测试代码与产品代码协同演化。
2.根据权利要求1所述促进测试代码与产品代码协同演化的方法,其特征在于,所述从项目代码仓库中获取历史实例代码数据,并构建第一训练数据集的步骤包括:
将从项目代码仓库中获取的历史实例代码数据划分为正样本和负样本,其中,正样本中测试代码与产品代码协同演化,负样本中测试代码不与产品代码协同演化;
根据测试文件级别对所述正样本进行标记,构建第一训练数据集。
3.根据权利要求2所述促进测试代码与产品代码协同演化的方法,其特征在于,根据测试文件级别对所述正样本进行标记的步骤包括:
若测试文件级别为二分类预测时,则将正样本标记为应该更改和不更改两类;
若测试文件级别为多分类预测是,则将正样本标记为应该创建、应该编辑和应该删除三类。
4.根据权利要求3所述促进测试代码与产品代码协同演化的方法,其特征在于,基于所述第一训练数据集对分类器进行训练,得到训练后分类器的步骤包括:
将所述第一训练数据集转换为结构化的向量表示,对于每个样本,从产品代码的补丁和原始产品代码中提取特征;
将提取的特征输入到分类器中进行训练,得到训练后分类器。
5.根据权利要求4所述促进测试代码与产品代码协同演化的方法,其特征在于,所述分类器为逻辑回归分类器、朴素贝叶斯分类器、随机森林分类器或梯度提升分类器中的一种。
6.根据权利要求1所述促进测试代码与产品代码协同演化的方法,其特征在于,对所述代码数据进行预处理,得到序列数据,根据所述序列数据构建第二训练数据集的步骤包括:
将产品代码更改划分为一个原始产品代码段和一个更改后产品代码段,对所述原始产品代码段和更改后产品代码段进行分词,得到对应的第一单词序列和第二单词序列,然后根据所述第一单词序列和第二单词序列构造成一个编辑序列;
对原始测试代码和更新后测试代码进行分词,得到对应的原始测试代码单词序列和更新后测试代码单词序列;
对编辑操作所在行的上下文进行分词得到编辑行的上下文单词序列;
根据所述编辑序列、原始测试代码单词序列和更新后测试代码单词序列以及所述编辑行的上下文单词序列构建第二训练数据集。
7.根据权利要求6所述促进测试代码与产品代码协同演化的方法,其特征在于,基于所述第二训练数据集对seq2seq模型进行训练,得到训练后seq2seq模型的步骤包括:
将原始测试代码单词序列、编辑序列和编辑行的上下文单词序列输入到seq2seq模型的编码器部分,对所述seq2seq模型进行训练,得到训练后seq2seq模型。
8.根据权利要求7所述促进测试代码与产品代码协同演化的方法,其特征在于,将原始测试代码单词序列、编辑序列和编辑行的上下文单词序列输入到seq2seq模型的编码器部分,对所述seq2seq模型进行训练,得到训练后seq2seq模型的步骤包括:
将所述原始测试代码单词序列、编辑序列和编辑行的上下文单词序列分别通过嵌入层映射到嵌入矩阵中;
之后分别通过Self-Attention Network进行建模得到三个相关向量;
接着将输入编辑序列和编辑行的上下文单词序列得到的相关向量输入到attention层,得到编辑操作在相关上下文语境下的最终表示;
将编辑操作在相关上下文语境下的表示连同输入原始测试代码单词序列得到的相关向量输入attention层,得到每个编辑操作的最终表示;
通过解码器部分将所述编辑操作在相关上下文语境下的最终表示以及每个编辑操作的最终表示作为输入,按顺序生成一个新的测试代码单词序列,完成对所述seq2seq模型进行训练。
9.一种存储介质,其特征在于,所述存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现如权利要求1-8任意一项促进测试代码与产品代码协同演化的方法中的步骤。
10.一种终端设备,其特征在于,包括处理器,适于实现各指令;以及存储介质,适于存储多条指令,所述指令适于由处理器加载并执行权利要求1-8任意一项促进测试代码与产品代码协同演化的方法中的步骤。
CN202110245711.5A 2021-03-05 2021-03-05 一种促进测试代码与产品代码协同演化的方法及终端设备 Active CN113010420B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110245711.5A CN113010420B (zh) 2021-03-05 2021-03-05 一种促进测试代码与产品代码协同演化的方法及终端设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110245711.5A CN113010420B (zh) 2021-03-05 2021-03-05 一种促进测试代码与产品代码协同演化的方法及终端设备

Publications (2)

Publication Number Publication Date
CN113010420A true CN113010420A (zh) 2021-06-22
CN113010420B CN113010420B (zh) 2023-05-30

Family

ID=76406932

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110245711.5A Active CN113010420B (zh) 2021-03-05 2021-03-05 一种促进测试代码与产品代码协同演化的方法及终端设备

Country Status (1)

Country Link
CN (1) CN113010420B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113688036A (zh) * 2021-08-13 2021-11-23 北京灵汐科技有限公司 一种数据处理方法、装置、设备以及存储介质
US20230351022A1 (en) * 2022-05-02 2023-11-02 Cisco Technology, Inc. Systems and Methods for Merging Performance and Security into a Unit Testing Environment

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103577195A (zh) * 2013-11-14 2014-02-12 中国联合网络通信集团有限公司 一种软件需求分析量化方法及系统
CN108563556A (zh) * 2018-01-10 2018-09-21 江苏工程职业技术学院 基于差分演化算法的软件缺陷预测优化方法
CN109376092A (zh) * 2018-11-26 2019-02-22 扬州大学 一种面向缺陷补丁代码的软件缺陷原因自动分析方法
CN111309607A (zh) * 2020-02-12 2020-06-19 扬州大学 一种代码方法级别的软件缺陷定位方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103577195A (zh) * 2013-11-14 2014-02-12 中国联合网络通信集团有限公司 一种软件需求分析量化方法及系统
CN108563556A (zh) * 2018-01-10 2018-09-21 江苏工程职业技术学院 基于差分演化算法的软件缺陷预测优化方法
CN109376092A (zh) * 2018-11-26 2019-02-22 扬州大学 一种面向缺陷补丁代码的软件缺陷原因自动分析方法
CN111309607A (zh) * 2020-02-12 2020-06-19 扬州大学 一种代码方法级别的软件缺陷定位方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
王斯南: "利用产品-测试代码共同演化预测测试用例更新状态", 中国优秀硕士学位论文全文数据库 信息科技辑 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113688036A (zh) * 2021-08-13 2021-11-23 北京灵汐科技有限公司 一种数据处理方法、装置、设备以及存储介质
US20230351022A1 (en) * 2022-05-02 2023-11-02 Cisco Technology, Inc. Systems and Methods for Merging Performance and Security into a Unit Testing Environment

Also Published As

Publication number Publication date
CN113010420B (zh) 2023-05-30

Similar Documents

Publication Publication Date Title
CN113010420B (zh) 一种促进测试代码与产品代码协同演化的方法及终端设备
CN113221960B (zh) 一种高质量漏洞数据收集模型的构建方法及收集方法
CN109657803B (zh) 机器学习模型的构建
CN111914066A (zh) 多源数据库全局搜索方法及系统
CN113138920A (zh) 基于知识图谱与语义角色标注的软件缺陷报告分派方法及装置
Kapur et al. Towards a Knowledge warehouse and expert system for the automation of SDLC tasks
CN112148595A (zh) 一种去除重复变更的软件变更级缺陷预测方法
CN110806977A (zh) 基于产品需求的测试用例集生成方法、装置及电子设备
CN116467219A (zh) 一种测试处理方法及装置
CN113033178B (zh) 用于商业计划书的文本评估方法、装置及计算机
CN115168085A (zh) 一种基于diff代码块匹配的重复冲突方案检测方法
CN114417828A (zh) 一种服务器告警日志描述文本的实体关系抽取方法及系统
CN114238768A (zh) 资讯信息的推送方法、装置、计算机设备和存储介质
CN113902531A (zh) 投标文件自动生成系统、方法、电子设备和存储介质
CN111913872A (zh) 一种基于缺陷预测的软件静态检查警告排序优化方法
CN117112400B (zh) 测试用例自动生成平台
Khan et al. Predicting bug inducing source code change patterns
Sheikhaei et al. Automated Self-Admitted Technical Debt Tracking at Commit-Level: A Language-independent Approach
CN113065605B (zh) 金银花识别模型的训练方法、装置、计算机设备及介质
CN117473510B (zh) 一种基于图神经网络和漏洞补丁关系的自动化漏洞挖掘技术
Alzuru et al. Human-Machine Information Extraction Simulator for Biological Collections
CN116149258B (zh) 基于多模态信息的数控机床代码生成方法及相关设备
CN114692595B (zh) 一种基于文本匹配的重复冲突方案检测方法
CN117668229A (zh) 一种元模型自动采集分类管理的方法、装置及存储介质
CN117421737A (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