[go: up one dir, main page]

CN113434408A - 一种基于近似测试预言的单元测试用例排序方法 - Google Patents

一种基于近似测试预言的单元测试用例排序方法 Download PDF

Info

Publication number
CN113434408A
CN113434408A CN202110711925.7A CN202110711925A CN113434408A CN 113434408 A CN113434408 A CN 113434408A CN 202110711925 A CN202110711925 A CN 202110711925A CN 113434408 A CN113434408 A CN 113434408A
Authority
CN
China
Prior art keywords
output
test
input
test case
under test
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
CN202110711925.7A
Other languages
English (en)
Other versions
CN113434408B (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.)
Beijing Institute of Technology BIT
Original Assignee
Beijing Institute of Technology BIT
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 Beijing Institute of Technology BIT filed Critical Beijing Institute of Technology BIT
Priority to CN202110711925.7A priority Critical patent/CN113434408B/zh
Publication of CN113434408A publication Critical patent/CN113434408A/zh
Application granted granted Critical
Publication of CN113434408B publication Critical patent/CN113434408B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Prevention of errors by analysis, debugging or testing of software
    • G06F11/3668Testing of software
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Prevention of errors by analysis, debugging or testing of software
    • G06F11/3668Testing of software
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Health & Medical Sciences (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Biomedical Technology (AREA)
  • Molecular Biology (AREA)
  • Biophysics (AREA)
  • Artificial Intelligence (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明涉及一种基于近似测试预言的单元测试用例排序方法,属于计算机软件测试技术领域。对于给定的被测方法,本发明自动生成数百万个输入输出对,训练神经网络模拟该方法的行为,比较被测方法的实际输出和神经网络的预期输出,当两种输出之间的距离越大时,则该测试用例就越可疑。最终选择前k个最可疑的测试用例进行手动验证。如果其中有测试用例能够揭示被测方法的缺陷,即实际的输出与预期的输出不一致,则通过本发明找到了被测方法的缺陷。对比现有技术,本发明可以自动的根据被测方法生成训练数据,并且在方法的动态执行中自动生成单元测试预言。本发明显著的减少手动验证测试用例的工作量。

Description

一种基于近似测试预言的单元测试用例排序方法
技术领域
本发明涉及一种基于近似测试预言的单元测试用例排序方法,属于计算机软件测试技术领域。
背景技术
在软件开发过程中,软件测试是其中一项重要工作,也是最耗时的工作之一。在软件测试中,如果没有准确的测试预言(test oracles)是无法自动识别测试用例通过或者失败的。因此,测试预言对于自动化软件测试是至关重要的。
目前,大多数的自动化软件测试方法都侧重于测试用例(输入)的自动生成。自动验证生成的测试用例往往很有挑战性,难以确定哪些测试用例能够揭示被测方法中的缺陷。通常将被测方法的实际输出与预期输出进行比较,只有当实际输出等于对应的预期输出时,测试用例才通过。然而,预期输出往往难以获得,因为大多数测试用例的生成工具无法生成被测系统的预期输出。当测试用例的数量很多时,如何自动化验证测试用例被称为测试预言问题。
现有很多方法致力于解决/缓解测试预言问题。最为直观的方法之一是指定被测系统的规范,并根据规范给出输入的预期输出。这种测试预言被称为指定测试预言(specified test oracles)。尽管这种方法直观且有效,但是,指定软件系统的规范是一个具有挑战性的工作。
蜕变测试中的蜕变关系也常作为测试预言的替代方案。蜕变关系并没有明确的指定预期的输出,而是得出了一个多次运行系统得出的输入与输出之间的关系。蜕变测试显著的缓解了测试预言问题,因为蜕变关系比系统的规范更容易指定。然而,手动找到蜕变关系仍然十分耗时。
发明内容
本发明的目的是为了克服已有技术的缺陷,为了解决现有测试用例生成方法中无法生成被测系统的预期输出的技术问题,提出一种基于近似测试预言的单元测试用例排序方法。
本发明的创新点在于:对于给定的被测方法,本发明自动生成数百万个输入输出对,训练神经网络模拟该方法的行为,比较被测方法的实际输出和神经网络的预期输出,当两种输出之间的距离越大时,则该测试用例就越可疑。最终选择前k个最可疑的测试用例进行手动验证。如果其中有测试用例能够揭示被测方法的缺陷,即实际的输出与预期的输出不一致,则通过本发明找到了被测方法的缺陷。
本发明是通过下述技术方案实现的:
一种基于近似测试预言的单元测试用例排序方法,包括以下步骤:
步骤1:对于被测方法,生成数量级至少为百万的该方法的输入。
具体地,根据被测方法输入参数的类型与规则,随机生成数量不少于一百万个的符合被测方法要求的输入。
步骤2:根据步骤1生成的输入,调用被测方法,得到对应的输出。
具体地,将步骤1的生成结果输入到被测方法中,运行该方法得到各输入对应的输出。步骤1生成的输入与步骤2得到的输出构成该被测方法的测试用例,即<方法输入,方法输出>。
步骤3:基于被测方法的签名,初始化神经网络。
具体地,根据被测方法的输入和输出的格式,初始化神经网络的输入层和输出层的神经元个数。
步骤4:训练神经网络。
具体地,使用步骤2生成的测试用例训练初始化后的神经网络。如果训练神经网络的结果并不稳定和准确,方法将失败且终止,否则,进行下一步骤。
步骤5:根据步骤1和步骤2生成新的测试用例,将生成的测试用例的输入传入到训练好的神经网络中,并将测试用例中的输出(称为实际输出)与神经网络的输出(称为预期输出)进行比较。其中,神经网络的损失函数分为两种类型,一种是对于测试用例的输入和输出都是数值型的数据,一种是测试用例的输入和输出都是非数值型(字符与字符串)的数据。两种损失函数的相关细节如下:
步骤5.1:对于测试用例的输入和输出都是数值型的数据,使用均方误差MSE作为损失函数。
步骤5.2:对于测试用例的输入和输出都是非数值型的数据,定义以下损失函数:
Figure BDA0003134111500000031
其中,loss为模型的损失函数,估量模型的输出和真实值之间的差距;n是训练数据的大小;acti是被测方法中第i个样例的实际输出,
Figure BDA0003134111500000032
是被测方法中第i个样例的预期输出。
Figure BDA0003134111500000033
其中,
Figure BDA0003134111500000034
表示被测方法中第i个样例的实际输出和预期输出之间的距离,m为方法输出参数的个数,acti是被测方法中第i个样例的实际输出,
Figure BDA0003134111500000035
是被测方法中第i个样例的预期输出。opti,j表示第i个样例第j个输出参数的实际值,
Figure BDA0003134111500000036
是第i个样例第j个输出参数的预期值。
Figure BDA0003134111500000037
表示第i个样例第j个参数的实际输出和预期输出之间的编辑距离与它们长度和的比值。
Figure BDA0003134111500000038
其中,
Figure BDA0003134111500000039
是两个字符串之间的编辑距离,|str|是字符串str的长度。
acti=<opti,1,…,opti,m> (4)
由于神经网络要求将输入和输出呈现为数值向量。因此,要把测试用例的输入和输出都转换成数值向量。本方法将测试用例中的非数值型数据通过其对应的ASCII码表示每个字符,并将数字ASCII码连接起来形成数字向量。最后,将数字值标准化到[0,1]范围区间。
与MSE相比,该损失函数有以下优点:
首先,该损失函数有利于对不同网络进行统一的评估。MSE反映的是实际输出和预期输出之间的绝对距离,因此,计算的结果受到输出范围的显著影响。考虑到不同网络的输出彼此显著不同,本发明提出的损失函数用相对误差代替绝对误差。其次,本发明提出的损失函数使用编辑距离计算两个字符串之间的距离,这比基于嵌入的向量距离更准确和更可解释。
如果神经网络的结果不收敛,则本方法无法模拟被测方法的功能,此时,本方法不会为被测方法推荐任何建议的测试用例。如果网络的结果收敛,则结果可以作为该方法单元测试的近似测试预言。
步骤6:将测试用例的实际输出和预期输出之间的距离,按降序对测试用例进行排名,并向开发人员展示前k个最可疑的测试用例。如果其中有可疑的测试用例揭示了被测方法的缺陷,开发人员需修复该缺陷。
具体地,本方法为所有自动生成的测试用例均计算出一个可疑分数。测试用例的可疑分数等于该测试用例输入网络后网络的损失。本方法将可疑分数降序排序,展示前k个最可疑的测试用例,供开发人员检验。如果任何一个经人工验证的测试用例揭示了被测方法中的缺陷,开发人员应当修复这些缺陷,并且在被测方法的修复版本上重复单元测试。
有益效果
本发明方法,对比现有技术,具有如下有益效果:
1.本发明可以自动的根据被测方法生成训练数据,并且在方法的动态执行中自动生成单元测试预言;
2.本发明使用训练后的神经网络建议的排序后的最可疑的测试用例进行验证被测方法的缺陷,显著的减少手动验证测试用例的工作量;
3.本发明在Defects4J缺陷数据集中使用真实的缺陷函数进行评估,结果表明该发明是准确且可用的;
4.本发明提出的神经网络在Defects4J缺陷数据集上能够准确的模拟出78%有缺陷的方法;
5.本发明在Defects4J缺陷数据集测试的14个有缺陷的方法中有12个神经网络结果的精度都是100%,这表明所有建议的测试用例都是可以揭示方法缺陷的。
附图说明
图1是本发明工作原理示意图。
具体实施方式
下面结合附图和实施例对本发明做进一步说明和详细描述。
实施例
如图1所示,一种基于近似测试预言的单元测试用例排序方法。
本实施例详细阐述了本发明在Defects4J缺陷库中的18个方法下具体实施时的过程和效果。
表1硬件环境配置信息表
硬件环境配置 处理器型号 内存 操作系统
测试环境 3.2GHz Core i7-8700 16G 64-bit Windows 10
步骤1:从缺陷库Defects4J中选择合适的方法用于试验评估。
值得注意的是,并不是该库中的所有缺陷方法都适合于评估。需要排除以下不可用的方法:
1.由于异常(运行时错误)而报错的方法。对于有这种错误的方法,可以通过捕获异常来区分失败的测试用例和成功的测试用例。因此,不需要使用该发明来进行区分。这类方法占了缺陷库中所有方法的38.1%。
2.方法的错误不是由不正确的实现而引起的。错误可能由于各种原因引起的,例如,不正确的实现、不正确的规范(需求)、以及对规范的不正确的解释。值得注意的是,本发明方法是为进行单元测试的开发人员设计的,旨在识别由不正确的实现引起的错误。因此,本发明排除了那些不是由不正确的实现引起错误的方法,这些方法中有超过40%的测试用例都能揭示出缺陷。如此高的失败测试用例比率表明,如果错误不是由不正确的实现引起的,那么它们应该很容易被发现。忽略这类错误的一个合理原因是这类错误是开发人员误解了需求(或者需求是有误的)造成的。这类方法占了缺陷库所有方法的26.4%;
3.将外部复杂文件作为输入或输出的方法。例如,在项目Compress中,getNextZipEntry()方法需要一个zip文件作为输入。将这些方法排除在评估之外,因为目前方法的实现还不能自动生成如此复杂的输入。这类方法占了缺陷库所有方法的32.5%。
排除了这些方法后,最终选取8个项目中的18个缺陷方法进行评估。表2给出了所选方法的概述。在如表1所示的硬件环境下,对表2中选取的18个方法的输入输出进行了训练和测试。
表2选择的被测方法
Figure BDA0003134111500000051
Figure BDA0003134111500000061
步骤2:对于步骤1中选择的方法,指定它的输入和输出以及它们相应的范围。利用本发明的方法生成测试用例(输入)。总的来说,它为每种方法生成了1,100,000个测试用例。随机选择一百万个测试用例作为训练样本,其他十万个测试用例作为测试样本。
步骤3:训练数据被输入到提出的模型当中进行训练,如果训练网络的损失函数值大于β=0.02,由于“不准确的模拟”,本方法会失败,并且将会终止对这种方法的评估。若能够准确的模拟被测方法,再在测试数据上验证网络模拟的效果。当且仅当方法的当前(错误)版本及其修复版本(对于Defects4J中的所有错误方法的修复版本都是公开可用的)为测试用例指定的相同输入生成不同的输出时,该测试用例失败。基于这个标准,计算本发明所提出的方法的性能(即精度和召回率),如表3所示:
表3被测方法的模拟效果
Figure BDA0003134111500000071
Figure BDA0003134111500000081
可以看出,所提出的神经网络能够准确地模拟出78%(78%=14/18)的含缺陷的方法,验证了本方法的基本假设。
将该模型应用于14种缺陷方法上,其对应的神经网络是收敛的。
表4给出了评估的结果,这个表显示了根据损失函数降序排列,排在前k(k分别为1、10和100)的测试用例中有多少是揭示了缺陷的。
表4方法性能评估
Figure BDA0003134111500000082
Figure BDA0003134111500000091
结果表明,在14个有缺陷的方法中有12个(即M1-M12),本方法的precision@k是100%,这表明所有建议的可疑测试用例都是可以揭示缺陷的。对于前11种方法(即M1-M11),建议的前100个测试用例都是揭示缺陷的。如此高的准确性意味着开发人员只需检查本方法建议的一个测试用例就可以找到执行该测试用例被测方法的报错。本方法成功地找到了能揭示错误的测试用例,这可能将会极大地促进了单元测试的发展。
以上所述为本发明的较佳实施例而已,本发明不应该局限于该实施例和附图所公开的内容。凡是不脱离本发明所公开的精神下完成的等效或修改,都落入本发明保护的范围。

Claims (2)

1.一种基于近似测试预言的单元测试用例排序方法,其特征在于,包括以下步骤:
步骤1:根据被测方法输入参数的类型与规则,随机生成数量不少于一百万个的符合被测方法要求的输入;
步骤2:将步骤1的生成结果输入到被测方法中,运行该方法得到各输入对应的输出;步骤1生成的输入与步骤2得到的输出构成该被测方法的测试用例,即<方法输入,方法输出>;
步骤3:根据被测方法的输入和输出的格式,初始化神经网络的输入层和输出层的神经元个数;
步骤4:使用步骤2生成的测试用例训练初始化后的神经网络;
如果训练神经网络的结果并不稳定和准确,方法将失败且终止,否则,进行下一步骤;
步骤5:根据步骤1和步骤2生成新的测试用例,将生成的测试用例的输入传入到训练好的神经网络中,并将测试用例中的输出与神经网络的输出进行比较;其中,神经网络的损失函数分为两种类型,一种是对于测试用例的输入和输出都是数值型的数据,一种是测试用例的输入和输出都是非数值型的数据。
将测试用例中的非数值型数据通过其对应的ASCII码表示每个字符,并将数字ASCII码连接起来形成数字向量,最后,将数字值标准化到[0,1]范围区间;
步骤6:将测试用例的实际输出和预期输出之间的距离,按降序对测试用例进行排名,并向开发人员展示前k个最可疑的测试用例;如果其中有可疑的测试用例揭示了被测方法的缺陷,开发人员需修复该缺陷。
2.如权利要求1所述的一种基于近似测试预言的单元测试用例排序方法,其特征在于,步骤5中,两种损失函数如下:
步骤5.1:对于测试用例的输入和输出都是数值型的数据,使用均方误差MSE作为损失函数;
步骤5.2:对于测试用例的输入和输出都是非数值型的数据,定义以下损失函数:
Figure FDA0003134111490000011
其中,loss为模型的损失函数,估量模型的输出和真实值之间的差距;n是训练数据的大小;acti是被测方法中第i个样例的实际输出,
Figure FDA0003134111490000021
是被测方法中第i个样例的预期输出;
Figure FDA0003134111490000022
其中,
Figure FDA0003134111490000023
表示被测方法中第i个样例的实际输出和预期输出之间的距离,m为方法输出参数的个数,acti是被测方法中第i个样例的实际输出,
Figure FDA0003134111490000024
是被测方法中第i个样例的预期输出;opti,j表示第i个样例第j个输出参数的实际值,
Figure FDA0003134111490000025
是第i个样例第j个输出参数的预期值;
Figure FDA0003134111490000026
表示第i个样例第j个参数的实际输出和预期输出之间的编辑距离与它们长度和的比值;
Figure FDA0003134111490000027
其中,
Figure FDA0003134111490000028
是两个字符串之间的编辑距离,|str|是字符串str的长度;
acti=<opti,1,…,opti,m> (4)。
CN202110711925.7A 2021-06-25 2021-06-25 一种基于测试预言的单元测试用例排序方法 Expired - Fee Related CN113434408B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110711925.7A CN113434408B (zh) 2021-06-25 2021-06-25 一种基于测试预言的单元测试用例排序方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110711925.7A CN113434408B (zh) 2021-06-25 2021-06-25 一种基于测试预言的单元测试用例排序方法

Publications (2)

Publication Number Publication Date
CN113434408A true CN113434408A (zh) 2021-09-24
CN113434408B CN113434408B (zh) 2022-04-08

Family

ID=77754580

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110711925.7A Expired - Fee Related CN113434408B (zh) 2021-06-25 2021-06-25 一种基于测试预言的单元测试用例排序方法

Country Status (1)

Country Link
CN (1) CN113434408B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN119149417A (zh) * 2024-08-28 2024-12-17 中国兵器工业信息中心 一种软件测试预言智能化生成方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105843743A (zh) * 2016-04-11 2016-08-10 南京邮电大学 一种特殊自动化测试用例实际输出结果正确性的验证方法
US20180011781A1 (en) * 2016-07-05 2018-01-11 Red Hat, Inc. Generating pseudorandom test items for software testing of an application under test (aut)
CN111026664A (zh) * 2019-12-09 2020-04-17 遵义职业技术学院 基于ann的程序检测方法和检测系统及应用

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105843743A (zh) * 2016-04-11 2016-08-10 南京邮电大学 一种特殊自动化测试用例实际输出结果正确性的验证方法
US20180011781A1 (en) * 2016-07-05 2018-01-11 Red Hat, Inc. Generating pseudorandom test items for software testing of an application under test (aut)
CN111026664A (zh) * 2019-12-09 2020-04-17 遵义职业技术学院 基于ann的程序检测方法和检测系统及应用

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
卜依凡等: "一种基于深度学习的上帝类检测方法", 《计算机软件及计算机应用》 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN119149417A (zh) * 2024-08-28 2024-12-17 中国兵器工业信息中心 一种软件测试预言智能化生成方法

Also Published As

Publication number Publication date
CN113434408B (zh) 2022-04-08

Similar Documents

Publication Publication Date Title
CN116450399B (zh) 微服务系统故障诊断及根因定位方法
US20220300820A1 (en) Ann-based program testing method, testing system and application
CN105760295A (zh) 基于搜索算法的多缺陷定位方法
CN111597122B (zh) 一种基于历史缺陷数据挖掘的软件故障注入方法
Eldh et al. A framework for comparing efficiency, effectiveness and applicability of software testing techniques
CN114936158A (zh) 一种基于图卷积神经网络的软件缺陷定位方法
CN115098389B (zh) 一种基于依赖模型的rest接口测试用例生成方法
CN109408385B (zh) 一种基于缺陷规则和分类反馈的缺陷发现方法
CN113434408B (zh) 一种基于测试预言的单元测试用例排序方法
CN111858377B (zh) 测试脚本的质量评价方法、装置、电子设备及存储介质
CN106021113A (zh) 一种精准测试的实现方法
CN114791883A (zh) 一种基于高阶变异的程序自动化错误定位方法及系统
CN113434390B (zh) 一种基于变异的fpga逻辑综合工具模糊测试方法
CN112685320B (zh) 一种基于多候选程序的软件缺陷修复方法及装置
Kadry A new proposed technique to improve software regression testing cost
CN118626381B (zh) 基于上位竞争的模糊测试方法及平台
CN113946506B (zh) 软件的埋点质量评估方法、装置、计算设备和存储介质
CN111880957A (zh) 一种基于随机森林模型的程序错误定位方法
Chu et al. FAST: a framework for automating statistics-based testing
CN111274129A (zh) 一种基于动态程序失效执行块的程序错误定位方法
CN111367789A (zh) 静态报告合并分析技术
CN115495348A (zh) 一种软件评估方法及系统
CN114528215A (zh) 交互页面的测试方法和元素模板的生成方法、装置
CN114546841A (zh) 基于云计算的软件质量评估方法
TWI735511B (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
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20220408

CF01 Termination of patent right due to non-payment of annual fee