一种跨版本预测变异测试方法及系统转让专利

申请号 : CN202211697123.6

文献号 : CN116166538B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 史玉良徐瑞王新军孔凡玉李晖闫中敏

申请人 : 山东大学

摘要 :

本发明提供了一种跨版本预测变异测试方法及系统,其属于软件测试领域,包括获取每个方法和测试用例的文本特征和静态特征,对待测项目中的变异体和测试用例进行配对及特征映射,并获取测试用例执行变异所在行代码的次数;对于满足测试用例执行变异所在行代码次数大于零的变异体‑测试用例对,基于注意力机制的门控循环单元结构进行文本特征表示向量的提取,并对表示向量进行相似性学习,获得变异方法名和测试用例名的相似性向量及变异前后代码片段的相似性向量;将获得的多种特征进行拼接,得到变异体‑测试用例对信息向量;基于信息向量,利用前馈神经网络,获得变异体被测试用例检测出和未被检测出的概率分布,以概率最大的结果作为预测结果。

权利要求 :

1.一种跨版本预测变异测试方法,其特征在于,包括:

获取每个方法和测试用例的文本特征和静态特征,对待测项目源代码中的变异体和测试用例进行配对及特征映射,并通过执行测试用例获取测试用例执行变异所在行代码的次数;

对于每个满足测试用例执行变异所在行代码的次数大于零的变异体‑测试用例对,采用基于注意力机制的门控循环单元结构进行文本特征表示向量的提取,并通过对表示向量进行相似性学习,获得变异方法名和测试用例名的相似性向量及变异前后代码片段的相似性向量;

将变异方法名和测试用例名的相似性向量、变异前后代码片段的相似性向量、变异行特征的表示向量、测试用例执行变异所在行代码的次数和静态特征进行拼接,得到变异体‑测试用例对信息向量;

基于变异体‑测试用例对信息向量,利用前馈神经网络,获得变异体被测试用例检测出和未被检测出的概率分布,以概率最大的结果作为预测结果;

所述对待测项目源代码中的变异体和测试用例进行配对及特征映射,具体为:对变异体集合和测试用例集合进行笛卡尔积运算,得到所有变异体‑测试用例对集合;排除集合中变异处不在项目源代码函数中的变异体‑测试用例对,排除测试用例执行变异处所在行次数为零的变异体‑测试用例对;对于获得的文本特征进行分词和构建词汇表后与对应的变异体‑测试用例对进行关联映射;对于获得的静态特征,将其与对应的变异体‑测试用例对进行关联映射并基于预设值补全静态特征中的缺失数据;

所述文本特征包括变异方法名、测试用例名、变异行、变异前片段及变异后片段;所述静态特征包括变异算子、断言数量、包级圈复杂度、包级最大圈复杂度、包级引用变量数、包级方法数、包级类数、包级代码行数、包级可维护性指数、包级扇入、包级扇出、包级不稳定性、包级抽象性、类级可维护性指数、类级霍尔斯特德错误、类级方法调用数、类级导入包数、类级扇入、类级扇出、类级方法和字段数和、方法级霍尔斯特德难度、方法级字段引用数、方法级方法调用数、方法级引用变量数及返回值类型。

2.如权利要求1所述的一种跨版本预测变异测试方法,其特征在于,所述通过对表示向量进行相似性学习,获得变异方法名和测试用例名的相似性向量及变异前后代码片段的相似性向量,具体为:基于文本特征表示向量中的变异方法名和测试用例名表示向量,计算其拼接相似性结果,获得变异方法名和测试用例名的相似性向量;基于文本特征表示向量中的变异前后代码片段表示向量,计算其拼接相似性结果,获得变异前后代码片段的相似性向量。

3.如权利要求2所述的一种跨版本预测变异测试方法,其特征在于,所述拼接相似性为神经网络相似性、神经张量网络相似性、余弦相似性、欧几里得距离、减法相似性以及乘法相似性的拼接。

4.如权利要求1所述的一种跨版本预测变异测试方法,其特征在于,所述将变异方法名和测试用例名的相似性向量、变异前后代码片段的相似性向量、测试用例执行变异所在行代码的次数和静态特征进行拼接,具体为:将变异方法名和测试用例名的相似性向量、变异前后代码片段的相似性向量以及变异行特征的表示向量通过向量拼接的方式进行融合,获得文本相似性向量;

将获得的文本相似性向量、测试用例执行变异所在行代码的次数和静态特征进行拼接,获得变异体‑测试用例对信息向量。

5.一种跨版本预测变异测试系统,其特征在于,包括:

数据获取单元,其用于获取每个方法和测试用例的文本特征和静态特征,对待测项目源代码中的变异体和测试用例进行配对及特征映射,并通过执行测试用例获取测试用例执行变异所在行代码的次数;

特征提取单元,其用于对于每个满足测试用例执行变异所在行代码的次数大于零的变异体‑测试用例对,采用基于注意力机制的门控循环单元结构进行文本特征表示向量的提取,并通过对表示向量进行相似性学习,获得变异方法名和测试用例名的相似性向量及变异前后代码片段的相似性向量;

特征融合单元,其用于将变异方法名和测试用例名的相似性向量、变异前后代码片段的相似性向量、变异行特征的表示向量、测试用例执行变异所在行代码的次数和静态特征进行拼接,得到变异体‑测试用例对信息向量;

结果输出单元,其用于基于变异体‑测试用例对信息向量,利用前馈神经网络,获得变异体被测试用例检测出和未被检测出的概率分布,以概率最大的结果作为预测结果;

所述对待测项目源代码中的变异体和测试用例进行配对及特征映射,具体为:对变异体集合和测试用例集合进行笛卡尔积运算,得到所有变异体‑测试用例对集合;排除集合中变异处不在项目源代码函数中的变异体‑测试用例对,排除测试用例执行变异处所在行次数为零的变异体‑测试用例对;对于获得的文本特征进行分词和构建词汇表后与对应的变异体‑测试用例对进行关联映射;对于获得的静态特征,将其与对应的变异体‑测试用例对进行关联映射并基于预设值补全静态特征中的缺失数据;

所述文本特征包括变异方法名、测试用例名、变异行、变异前片段及变异后片段;所述静态特征包括变异算子、断言数量、包级圈复杂度、包级最大圈复杂度、包级引用变量数、包级方法数、包级类数、包级代码行数、包级可维护性指数、包级扇入、包级扇出、包级不稳定性、包级抽象性、类级可维护性指数、类级霍尔斯特德错误、类级方法调用数、类级导入包数、类级扇入、类级扇出、类级方法和字段数和、方法级霍尔斯特德难度、方法级字段引用数、方法级方法调用数、方法级引用变量数及返回值类型。

6.一种电子设备,包括存储器、处理器及存储在存储器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1‑4任一项所述的一种跨版本预测变异测试方法。

7.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1‑4任一项所述的一种跨版本预测变异测试方法。

说明书 :

一种跨版本预测变异测试方法及系统

技术领域

[0001] 本发明属于软件测试技术领域,尤其涉及一种跨版本预测变异测试方法及系统。

背景技术

[0002] 本部分的陈述仅仅是提供了与本发明相关的背景技术信息,不必然构成在先技术。
[0003] 软件测试中,测试用例是检测软件中一个具体功能是否正确工作的一组测试输入、执行条件和预测结果,通常为单一方法。测试套件是测试用例的集合,其中包含许多测试用例,用于检测软件是否正确工作。
[0004] 变异测试(Mutat ion Test ing)是一种强大的检验测试用例或测试套件检测错误能力的技术。变异测试在源代码中注入人工错误,称注入错误后的代码为变异体;若注入的错误被测试发现,则称变异体被“杀死”(即检测出)。由于需要生成大量变异体,且需在每个变异体上执行测试,因此变异测试极其昂贵且耗时。
[0005] 预测变异测试(Pred ict ive Mutat ion Test ing,PMT)是一种使用机器学习技术预测变异测试结果,以解决变异测试昂贵耗时问题的技术。其中,一种预测方式是跨版本预测,即使用已进行变异测试的旧版本项目的变异测试结果进行监督学习,以预测同一项目新版本的变异测试结果。目前主流的PMT基于变异执行相关特征进行,也存在基于文本相似性的PMT。发明人发现,仅基于变异执行相关特征的PMT预测了测试套件是否“杀死”变异体,但未考虑测试用例与被测试方法之间的关系,且在仅考虑变异处执行次数不为0的变异体时预测效果不佳;仅基于文本相似性的PMT未考虑测试用例内容,无法预测因测试用例不完善导致的变异体未被“杀死”情况。

发明内容

[0006] 本发明为了解决上述问题,提供了一种跨版本预测变异测试方法及系统,所述方案同时考虑了测试用例和被测试代码之间联系以及二者的内容特征,并使用文本相似性和变异执行相关特征,从而有效提高了预测的准确性。
[0007] 根据本发明实施例的第一个方面,提供了一种跨版本预测变异测试方法,包括:
[0008] 获取每个方法和测试用例的文本特征和静态特征,对待测项目源代码中的变异体和测试用例进行配对及特征映射,并通过执行测试用例获取测试用例执行变异所在行代码的次数;
[0009] 对于每个满足测试用例执行变异所在行代码的次数大于零的变异体‑测试用例对,采用基于注意力机制的门控循环单元结构进行文本特征表示向量的提取,并通过对表示向量进行相似性学习,获得变异方法名和测试用例名的相似性向量及变异前后代码片段的相似性向量;
[0010] 将变异方法名和测试用例名的相似性向量、变异前后代码片段的相似性向量、变异行特征的表示向量、测试用例执行变异所在行代码的次数和静态特征进行拼接,得到变异体‑测试用例对信息向量;
[0011] 基于变异体‑测试用例对信息向量,利用前馈神经网络,获得变异体被测试用例检测出和未被检测出的概率分布,以概率最大的结果作为预测结果。
[0012] 进一步的,所述对待测项目源代码中的变异体和测试用例进行配对及特征映射,具体为:对变异体集合和测试用例集合进行笛卡尔积运算,得到所有变异体‑测试用例对集合;排除集合中变异处不在方法中的变异体‑测试用例对,排除测试用例执行变异处所在行次数为零的变异体‑测试用例对;对于获得的文本特征进行分词和构建词汇表后与对应的变异体‑测试用例对进行关联映射;对于获得的静态特征,将其与对应的变异体‑测试用例对进行关联映射并基于预设值补全静态特征中的缺失数据。
[0013] 进一步的,所述通过对表示向量进行相似性学习,获得变异方法名和测试用例名的相似性向量及变异前后代码片段的相似性向量,具体为:
[0014] 基于文本特征表示向量中的变异方法名和测试用例名表示向量,计算其拼接相似性结果,获得变异方法名和测试用例名的相似性向量;基于文本特征表示向量中的变异前后代码片段表示向量,计算其拼接相似性结果,获得变异前后代码片段的相似性向量。
[0015] 进一步的,所述拼接相似性为神经网络相似性、神经张量网络相似性、余弦相似性、欧几里得距离、减法相似性以及乘法相似性的拼接。
[0016] 进一步的,所述将变异方法名和测试用例名的相似性向量、变异前后代码片段的相似性向量、测试用例执行变异所在行代码的次数和静态特征进行拼接,具体为:
[0017] 将变异方法名和测试用例名的相似性向量、变异前后代码片段的相似性向量以及变异行特征的表示向量通过向量拼接的方式进行融合,获得文本相似性向量;
[0018] 将获得的文本相似性向量、测试用例执行变异所在行代码的次数和静态特征进行拼接,获得变异体‑测试用例对信息向量。
[0019] 进一步的,所述文本特征包括变异方法名、测试用例名、变异行、变异前片段及变异后片段;所述静态特征包括变异算子、断言数量、包级圈复杂度、包级最大圈复杂度、包级引用变量数、包级方法数、包级类数、包级代码行数、包级可维护性指数、包级扇入、包级扇出、包级不稳定性、包级抽象性、类级可维护性指数、类级霍尔斯特德错误、类级方法调用数、类级导入包数、类级扇入、类级扇出、类级方法和字段数和、方法级霍尔斯特德难度、方法级字段引用数、方法级方法调用数、方法级引用变量数及返回值类型。
[0020] 根据本发明实施例的第二个方面,提供了一种跨版本预测变异测试系统,包括:
[0021] 数据获取单元,其用于获取每个方法和测试用例的文本特征和静态特征,对待测项目源代码中的变异体和测试用例进行配对及特征映射,并通过执行测试用例获取测试用例执行变异所在行代码的次数;
[0022] 特征提取单元,其用于对于每个满足测试用例执行变异所在行代码的次数大于零的变异体‑测试用例对,采用基于注意力机制的门控循环单元结构进行文本特征表示向量的提取,并通过对表示向量进行相似性学习,获得变异方法名和测试用例名的相似性向量及变异前后代码片段的相似性向量;
[0023] 特征融合单元,其用于将变异方法名和测试用例名的相似性向量、变异前后代码片段的相似性向量、变异行特征的表示向量、测试用例执行变异所在行代码的次数和静态特征进行拼接,得到变异体‑测试用例对信息向量;
[0024] 结果输出单元,其用于基于变异体‑测试用例对信息向量,利用前馈神经网络,获得变异体被测试用例检测出和未被检测出的概率分布,以概率最大的结果作为预测结果。
[0025] 根据本发明实施例的第三个方面,提供了一种电子设备,包括存储器、处理器及存储在存储器上运行的计算机程序,所述处理器执行所述程序时实现所述的一种跨版本预测变异测试方法。
[0026] 根据本发明实施例的第四个方面,提供了一种非暂态计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现所述的一种跨版本预测变异测试方法。
[0027] 与现有技术相比,本发明的有益效果是:
[0028] 本发明提供了一种跨版本预测变异测试方法及系统,所述方案同时考虑了文本相似性和与变异执行相关的特征,前者揭示了测试用例与变异体的关系,后者提供了测试用例和变异体的内容相关信息,相互弥补了对方的不足,从而提高了预测效果;同时,所述方案在测试用例级别进行预测,预测一个测试用例是否检测出一个变异体,展示了测试用例与变异体间的联系。
[0029] 本发明附加方面的优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。

附图说明

[0030] 构成本发明的一部分的说明书附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。
[0031] 图1为本发明实施例中所述的一种跨版本预测变异测试方法流程图;
[0032] 图2为本发明实施例中所述的文本相似性学习流程图;
[0033] 图3为本发明实施例中所述的向量相似性比较模型结构示意图;
[0034] 图4为本发明实施例中所述的一种跨版本预测变异测试方法的性能效果图。

具体实施方式

[0035] 下面结合附图与实施例对本发明做进一步说明。
[0036] 应该指出,以下详细说明都是例示性的,旨在对本发明提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本发明所属技术领域的普通技术人员通常理解的相同含义。
[0037] 需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本发明的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
[0038] 在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
[0039] 术语解释:
[0040] 项目Lang:开源项目commons‑l ang,此项目收录于defects4j数据集中;其中版本识别号为defects4j中基于该版本上的一个bug的id,例如版本标识号40表示defects4j中commons‑l ang项目编号为40的bug所属的版本
[0041] 方法:项目源代码中的函数;
[0042] 包:项目源代码中的文件夹。
[0043] 实施例一:
[0044] 本实施例的目的是提供一种跨版本预测变异测试方法。
[0045] 一种跨版本预测变异测试方法,包括:
[0046] 获取每个方法和测试用例的文本特征和静态特征,对待测项目源代码中的变异体和测试用例进行配对及特征映射,并通过执行测试用例获取测试用例执行变异所在行代码的次数;
[0047] 对于每个满足测试用例执行变异所在行代码的次数大于零的变异体‑测试用例对,采用基于注意力机制的门控循环单元结构进行文本特征表示向量的提取,并通过对表示向量进行相似性学习,获得变异方法名和测试用例名的相似性向量及变异前后代码片段的相似性向量;
[0048] 将变异方法名和测试用例名的相似性向量、变异前后代码片段的相似性向量、变异行特征的表示向量、测试用例执行变异所在行代码的次数和静态特征进行拼接,得到变异体‑测试用例对信息向量;
[0049] 基于变异体‑测试用例对信息向量,利用前馈神经网络,获得变异体被测试用例检测出和未被检测出的概率分布,以概率最大的结果作为预测结果。
[0050] 进一步的,所述对待测项目源代码中的变异体和测试用例进行配对及特征映射,具体为:对变异体集合和测试用例集合进行笛卡尔积运算,得到所有变异体‑测试用例对集合;排除集合中变异处不在方法中的变异体‑测试用例对,排除测试用例执行变异处所在行次数为零的变异体‑测试用例对;对于获得的文本特征进行分词和构建词汇表后与对应的变异体‑测试用例对进行关联映射;对于获得的静态特征,将其与对应的变异体‑测试用例对进行关联映射并基于预设值补全静态特征中的缺失数据。
[0051] 进一步的,所述通过对表示向量进行相似性学习,获得变异方法名和测试用例名的相似性向量及变异前后代码片段的相似性向量,具体为:
[0052] 基于文本特征表示向量中的变异方法名和测试用例名表示向量,计算其拼接相似性结果,获得变异方法名和测试用例名的相似性向量;基于文本特征表示向量中的变异前后代码片段表示向量,计算其拼接相似性结果,获得变异前后代码片段的相似性向量。
[0053] 进一步的,所述拼接相似性为神经网络相似性、神经张量网络相似性、余弦相似性、欧几里得距离、减法相似性以及乘法相似性的拼接。
[0054] 进一步的,所述将变异方法名和测试用例名的相似性向量、变异前后代码片段的相似性向量、测试用例执行变异所在行代码的次数和静态特征进行拼接,具体为:
[0055] 将变异方法名和测试用例名的相似性向量、变异前后代码片段的相似性向量以及变异行特征的表示向量通过向量拼接的方式进行融合,获得文本相似性向量;
[0056] 将获得的文本相似性向量、测试用例执行变异所在行代码的次数和静态特征进行拼接,获得变异体‑测试用例对信息向量。
[0057] 进一步的,所述文本特征包括变异方法名、测试用例名、变异行、变异前片段及变异后片段;所述静态特征包括变异算子、断言数量、包级圈复杂度、包级最大圈复杂度、包级引用变量数、包级方法数、包级类数、包级代码行数、包级可维护性指数、包级扇入、包级扇出、包级不稳定性、包级抽象性、类级可维护性指数、类级霍尔斯特德错误、类级方法调用数、类级导入包数、类级扇入、类级扇出、类级方法和字段数和、方法级霍尔斯特德难度、方法级字段引用数、方法级方法调用数、方法级引用变量数及返回值类型。
[0058] 具体的,为了便于理解,以下结合附图对本实施例所述方案进行详细说明:
[0059] 为了解决现有技术存在的问题,如图1所示,本实施例提供了一种跨版本预测变异测试方法,包括如下步骤:
[0060] 步骤1:通过代码静态分析提取每个方法和测试用例的文本特征和静态特征,将项目的变异体和测试用例配对,执行测试用例以获取测试用例执行变异所在行代码的次数,并将文本特征和静态特征映射到变异体‑测试用例对中。
[0061] 在具体实施中,将文本特征和静态特征映射到变异体‑测试用例对中之前,还包括:
[0062] 对特征进行预处理,包括对文本特征分词和构建词汇表、补全静态特征中的缺失数据、排除变异处不在方法中的变异体和排除测试用例执行变异处所在行次数为0的变异体‑测试用例对。
[0063] 例如:
[0064] 基于项目Lang的变异体‑测试用例对信息如表1所示,其中,版本识别号较小的版本为较新的版本。基于40版本的变异测试结果进行监督学习,以预测30、20、10、1版本的变异测试结果。
[0065] 表1数据集的基本统计信息
[0066]
[0067] 令M={m1,m2,...,m||}表示变异体,C={c1,c2,...,c||}表示测试用例,变异体和测试用例之间的检测矩阵被定义为Y=ym,|m∈M,c∈C},其中ym,的定义为:
[0068]
[0069] 对项目代码进行静态分析以获取表2所示文本特征和表3所示静态特征,执行测试用例以获取测试用例执行变异所在行的次数。
[0070] 表2文本特征
[0071]文本特征 特征描述
变异方法名 变异处所在方法的方法名
测试用例名 测试用例的方法名
变异行 变异处所在行代码
变异前片段 变异处变异前的代码片段
变异后片段 变异处变异后的代码片段
[0072] 表3静态特征
[0073]
[0074]
[0075] 步骤2:使用基于注意力机制的门控循环单元结构的连体网络得到文本特征的表示向量,并对表示向量进行相似性学习,得到相似性向量,如图2所示。其中,相似性比较部分所有特征使用共用的参数;其他部分变异方法名和测试用例名特征的处理模型使用共用的参数,变异行、变异前片段和变异后片段的处理模型使用共用的参数。
[0076] 具体地,文本特征的向量表示和相似性学习的过程为:
[0077] 步骤2.1:对每个变异体‑测试用例对的每个文本特征,令T={w1,...,wi,...,d×max|t|wmax|T|}∈R 表示此类文本特征的集合,其中d为词汇表大小,wi为特征中第i个单词的one‑hot向量,max|T|为本批次中单词数最多的此文本特征的单词数,对单词数不足max|T|的特征填充特殊单词至单词数等于max|T|。
[0078] 使用嵌入层降低特征的维度,得到的嵌入向量表示为X={x1,...,xi,...,xmax|T|},dim_emb其中xi∈R 由以下公式计算:
[0079] xi=Wembwi                     (2)
[0080] 其中,Wemb∈Rdim_emb×d为可学习参数,dim_emb为嵌入维度。
[0081] 步骤2.2:对于文本特征的每个单词的嵌入向量x1,使用双向门控循环单元结构得到单词的表示向量hi:
[0082] h_forwardi=GRU_forward(xi)             (3)
[0083] h_backwardi=GRU_backward(xi)            (4)
[0084]
[0085] 其中,GRU_forward表示正向门控循环单元结构,GRU_backward表示反向门控循环单元结构, 表示向量拼接。
[0086] 对于每个单词的表示向量hi使用注意力机制以得到文本特征的表示向量v,公式如下:
[0087] ui=tanh(Whi+bi)                (6)
[0088]
[0089] v=∑iαihi                           (8)
[0090] 其中,W∈Rdim_att×dim_gru,b∈Rdim_att,q∈Rdim_att为可学习参数,dim_gru为正向门控循环单元结构和反向门控循环单元结构输出维度之和。
[0091] 步骤2.3:比较每个变异体‑测试用例对的变异方法名和测试用例名表示向量的相似性以及变异前片段和变异后片段表示向量的相似性。如图3所示展示了本实施例中所述方案中向量相似性比较模型的结构,其比较了神经网络相似性cNN、神经张量网络相似性cNT、余弦相似性ccos、欧几里得距离ceuc、减法相似性csub、乘法相似性cmul,拼接相似性比较的结果得到比较向量vcmp,公式如下:
[0092]
[0093]
[0094]
[0095] ceuc=|sub(va,vb)|                 (12)
[0096] csub=sub(va,vb)                 (13)
[0097] cmul=mul(va,vb)                 (14)
[0098]
[0099] 其中,va和vb为进行比较的文本特征的表示向量,WNN、bNN、WNT、bNT为可学习参数,sub表示向量逐元素相减,mul表示向量逐元素相乘, 表示向量拼接。
[0100] 使用线性层对相似性向量进行降维,得到文本相似性向量vsim:
[0101]
[0102] 其中W1、b1、W2、b2为可学习参数,vcmp1为比较变异方法名和测试用例名表示向量的相似性的比较向量,vcmp2为比较变异前片段和变异后片段表示向量的相似性的比较向量,vbody为变异行特征的表示向量, 表示向量拼接。
[0103] 步骤3:拼接文本相似性向量、测试用例执行变异所在行的次数和静态特征,使用前馈神经网络得到变异体被测试用例检测出的概率分布,筛选概率最大的预测目标作为预测结果。
[0104] 对每个变异体‑测试用例对,拼接文本相似性特征、测试用例执行变异所在行的次数和静态特征,进行归一化得到变异体‑测试用例对信息向量vm‑c:
[0105]
[0106]
[0107]
[0108]
[0109] 其中,vcoverage为测试用例执行变异所在行的次数,vstatic为静态特征,v_alli,为批次中第i个变异体‑测试用例对的v_all的第j个元素,vi,为批次中第i个变异体‑测试用例对的vm‑c的第j个元素,n为批次大小,ε为防止分母为0的常数, 表示向量拼接。
[0110] 将变异体‑测试用例对信息向量vm‑c输入前馈神经网络,预测变异体是否被测试用例检测出,如下:
[0111] v_hiddenm‑c = ReLU(Whiddenvm‑c + bhidden)      (21)
[0112] v_outm‑c =Woutv_hiddenm‑c + bout          (22)
[0113] prob = softmax(v_outm‑c)              (23)
[0114]
[0115] 其中, 表示模型的预测结果,Whidden、bhidden、Wout、bout为可学习参数。
[0116] 步骤4:在用于训练的旧版本上基于预测值与真实值之间的差异计算交叉熵损失值,根据损失值进行误差反向传播,进而对模型中的参数进行优化,以提高预测准确性。模型训练完成后,输出实验样本集的预测结果。
[0117] 进一步的,所述一种跨版本预测变异测试方法,还包括:
[0118] 计算前馈神经网络输出值的损失函数,采用Adam算法训练文本相似性学习模型和前馈神经网络中的可学习参数,完成文本相似性学习模型和前馈神经网络的训练。
[0119] 采用交叉熵作为前馈神经网络输出值的损失函数,损失函数定义如下:
[0120]
[0121] 其中,n表示批次大小,yi表示批次中第i个变异体‑测试用例对的实际标签, 表示批次中第i个变异体‑测试用例对的预测标签。然后,使用Adam优化器进行优化。
[0122] 对待预测样本进行预测,如图4所示,并与实际的变异测试结果进行对比,表4描述了预测变异测试方法的性能比较:
[0123] 表4预测变异测试方法的性能比较
[0124] 模型 精度 召回率 F1基于文本相似性和变异执行相关特征 0.86 0.86 0.86
仅基于文本相似性 0.8375 0.8375 0.8375
仅基于变异执行相关特征 0.74 0.735 0.7325
[0125] 实施例二:
[0126] 本实施例的目的是提供一种跨版本预测变异测试系统。
[0127] 一种跨版本预测变异测试系统,包括:
[0128] 数据获取单元,其用于获取每个方法和测试用例的文本特征和静态特征,对待测项目源代码中的变异体和测试用例进行配对及特征映射,并通过执行测试用例获取测试用例执行变异所在行代码的次数;
[0129] 特征提取单元,其用于对于每个满足测试用例执行变异所在行代码的次数大于零的变异体‑测试用例对,采用基于注意力机制的门控循环单元结构进行文本特征表示向量的提取,并通过对表示向量进行相似性学习,获得变异方法名和测试用例名的相似性向量及变异前后代码片段的相似性向量;
[0130] 特征融合单元,其用于将变异方法名和测试用例名的相似性向量、变异前后代码片段的相似性向量、变异行特征的表示向量、测试用例执行变异所在行代码的次数和静态特征进行拼接,得到变异体‑测试用例对信息向量;
[0131] 结果输出单元,其用于基于变异体‑测试用例对信息向量,利用前馈神经网络,获得变异体被测试用例检测出和未被检测出的概率分布,以概率最大的结果作为预测结果。
[0132] 进一步的,本实施例所述系统与实施例一所述方法相对应,其技术细节在实施例一中进行了详细说明,故此处不再赘述。
[0133] 在更多实施例中,还提供:
[0134] 一种电子设备,包括存储器和处理器以及存储在存储器上并在处理器上运行的计算机指令,所述计算机指令被处理器运行时,完成实施例一中所述的方法。为了简洁,在此不再赘述。
[0135] 应理解,本实施例中,处理器可以是中央处理单元CPU,处理器还可以是其他通用处理器、数字信号处理器DSP、专用集成电路ASIC,现成可编程门阵列FPGA或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
[0136] 存储器可以包括只读存储器和随机存取存储器,并向处理器提供指令和数据、存储器的一部分还可以包括非易失性随机存储器。例如,存储器还可以存储设备类型的信息。
[0137] 一种计算机可读存储介质,用于存储计算机指令,所述计算机指令被处理器执行时,完成实施例一中所述的方法。
[0138] 实施例一中的方法可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器、闪存、只读存储器、可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。为避免重复,这里不再详细描述。
[0139] 本领域普通技术人员可以意识到,结合本实施例描述的各示例的单元即算法步骤,能够以电子硬件或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
[0140] 上述实施例提供的一种跨版本预测变异测试方法及系统可以实现,具有广阔的应用前景。
[0141] 以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。