CN108595341A - 测试用例自动生成方法及系统 - Google Patents
测试用例自动生成方法及系统 Download PDFInfo
- Publication number
- CN108595341A CN108595341A CN201810451163.XA CN201810451163A CN108595341A CN 108595341 A CN108595341 A CN 108595341A CN 201810451163 A CN201810451163 A CN 201810451163A CN 108595341 A CN108595341 A CN 108595341A
- Authority
- CN
- China
- Prior art keywords
- case
- test case
- seed
- variation
- function
- 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
Links
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/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明实施例提供了测试用例自动生成方法及系统,方法包括:基于符号执行生成测试用例种子,并基于启发式搜索对测试用例种子进行变异,得到第一变异测试用例;分别执行测试用例种子与第一变异测试用例,分别获取对应的执行路径信息,并确定变异的影响结果;根据影响结果,对测试用例种子或第一变异测试用例进行下一次变异,重复执行上述过程,直至满足预设条件。不需要人工参与,自动化程度很高。符号执行与启发式搜索进行结合,提高了整个方法的运行效率,而且采用反馈机制,通过变异的影响结果指导测试用例种子或第一变异测试用例进行下一次变异,这种方法不仅有利于短函数序列的测试用例的生成,对于长函数序列的测试用例的生成也同样适用。
Description
技术领域
本发明实施例涉及计算机软件测试技术领域,更具体地,涉及测试用例自动生成方法及系统。
背景技术
目前,软件已经遍布工业生产、国防、科研、交通、通信、医疗、航空航天等主要领域,也已经深入人们的日常生活中。软件质量不仅影响到人们的生活质量,还会影响到经济的安全平稳发展。因此检测软件质量至关重要。软件测试是检测软件质量的有效的、可行的手段。随着软件规模逐步增大,复杂程度越来越高,软件出现问题的可能性也相应增加,对于软件测试的挑战也进一步提升。
为了达到软件的测试目标,需要编写大量的测试用例。长期以来,测试用例需要耗费测试人员大量的时间和精力手工编写,成本高昂。在软件开发过程中,软件测试花费的时间占项目总时间的50%以上,而且尽管花费大量时间开展软件测试工作,但由于成本和时间的约束通常很难做到软件充分测试。如何降低软件测试的开销,提高软件测试的效率成为当前的一个重要任务。为了缩短传统软件测试的成本和时间周期,自动化测试被广泛地研究和运用。在自动化软件测试过程中,如何自动构建待测系统的测试输入,生成高质量的测试用例是保障测试结果的科学性和有效性的关键。
单元测试(Unit Testing),又称为模块测试,是针对程序单元(程序单元为软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个程序单元就是指单个程序、函数或过程等;而对于面向对象编程,可被测试的最小单元就是方法(Method)。为了避免用词的混淆,同时由于方法(Method)实际上是成员函数和静态函数的统称,所以本发明中将面向对象编程中可被测试的最小单元统一为待测函数(Function)。单元测试能在程序开发的早期发现错误,避免多单元的复杂交互影响错误来源的判断,是有效的测试手段。
由于Java语言在服务端编程、企业级开发和Android应用开发方面仍有重要地位,而JVM字节码是Java,Scala等高级语言的源代码编译器编译形成的符合JVM字节码文件格式要求的二进制文件。这些二进制文件由一次编译所得,能够在任意JVM环境中执行,具有“一次编译,到处执行”的优点,因而具有广泛的应用。
国内外学者已提出许多面向JVM字节码的Java程序测试用例自动生成方法,并开发出相应的软件测试用例自动生成工具。这些测试用例自动生成方法可大致分类为:基于规约的生成方法、基于搜索的生成方法以及基于符号执行的生成方法等。
(1)基于规约的生成方法:规约(Specification)是对程序的执行效果的约定。在基于规约的测试用例自动生成方法中,规约的形式一般是形式化的、能够被程序解析和计算的不变式约束,即固定约束。利用固定约束来生成满足约束的所有可能的测试输入的方法即被称为基于规约的测试用例自动生成方法。基于规约的Java程序测试用例自动生成的技术有Korat、TestEra和UDITA等。
(2)基于搜索的生成方法:基于搜索的测试用例自动生成技术(Search-BasedSoftware Testing,SBST)是基于搜索的软件工程(Search-Based Software Engineering,SBSE)的一个分支。此类方法通过定义适应度函数(Fitness Function),将测试用例自动生成问题转化为函数优化问题,然后利用启发式搜索算法来解决函数优化的问题,因此启发式搜索算法的选取至关重要。启发式搜索算法主要分为全局搜索算法和局部搜索算法两大类,全局搜索算法具体包括遗传算法、粒子群优化算法和蚁群算法等;局部搜索算法具体包括爬山算法和模拟退火算法等。基于搜索的Java程序测试用例自动生成的技术有JTest、JCrasher、eToc、Randoop、EvoSuite以及GRT等。
(3)基于符号执行的生成方法:符号执行(Symbolic Execution)是一种程序分析技术。它可以通过分析程序,让程序按某个指定的分支路径执行,以确定输入数据需要满足的条件。由于从输入数据需满足的条件中可以得出一组具体取值,即一个测试输入。所以,对于一个程序,如果符号执行能对所有路径成功求解,那么就可以得到覆盖所有分支的测试输入。基于符号执行的Java程序测试用例自动生成的技术有JBSE、JDart和SUSHI等。
但现有的上述三种面向JVM字节码的测试用例自动生成技术各有不足:基于规约的生成方法依赖于人工编写的形式化规约,一方面对规约编写人员的要求较高:既要具备待测程序的领域知识,又要掌握编写形式化规约的领域特定语言;另一方面,依赖人工编写规约,不能实现完全的自动化。基于搜索的生成方法的生成效果有较大随机性,对搜索策略的要求较高。基于符号执行的生成方法开销较大,且不能确保生成的引用类型的测试输入能以符合待测程序调用约定的方式产生。而且,基于符号执行的生成方法,一方面受符号执行本身的路径数量爆炸(Path explosion)问题、路径分歧(Path divergence)问题和复杂的路径约束难以求解的问题的限制,会导致运行效率低下;另一方面,符号执行虽然在解决基本数据类型(例如int/float/bool)的测试输入方面效果显著,但是在构造结构对象类型的测试输入时,往往会通过直接修改堆内存的方式来构造对象,很大可能导致构造的对象根本无法在实际场景中通过public函数的调用序列生成,导致生成的测试用例不符合待测程序调用约定,进而导致生成的测试用例难以被开发人员或测试人员信任。
综上所述,现有测试用例的生成方法具有自动化程度低、运行效率低、生成的测试用例不符合待测程序调用约定等局限性。
发明内容
为克服上述问题或者至少部分地解决上述问题,本发明实施例提供了测试用例自动生成方法及系统。
一方面,本发明实施例提供了一种测试用例自动生成方法,包括:
S1,基于对待测程序中不同待测类下的待测函数进行符号执行,生成变量参数类型为基本数据类型的测试用例种子,并基于启发式搜索对所述测试用例种子进行变异,得到第一变异测试用例;
S2,通过所述待测函数分别执行所述测试用例种子与所述第一变异测试用例,分别获取所述测试用例种子的第一执行路径信息和所述第一变异测试用例的第二执行路径信息,并根据所述第一执行路径信息和所述第二执行路径信息,确定所述变异的影响结果;
S3,根据所述影响结果,对所述测试用例种子或所述第一变异测试用例进行下一次变异,得到第二变异测试用例;
S4,将所述第二变异测试用例作为所述第一变异测试用例,重复执行S2-S3,直至满足预设条件。
另一方面,本发明实施例提供了一种测试用例自动生成系统,包括:第一变异测试用例获取模块、影响结果确定模块、第二变异测试用例获取模块和重复执行模块。其中,
第一变异测试用例获取模块用于基于对待测程序中不同待测类下的待测函数进行符号执行,生成变量参数类型为基本数据类型的测试用例种子,并基于启发式搜索对所述测试用例种子进行变异,得到第一变异测试用例;
影响结果确定模块用于通过所述待测函数分别执行所述测试用例种子与所述第一变异测试用例,分别获取所述测试用例种子的第一执行路径信息和所述第一变异测试用例的第二执行路径信息,并根据所述第一执行路径信息和所述第二执行路径信息,确定所述变异操作的影响结果;
第二变异测试用例获取模块用于根据所述变异影响结果,对所述测试用例种子或所述第一变异测试用例进行下一次变异,得到第二变异测试用例;
重复执行模块用于将所述第二变异测试用例作为所述第一变异测试用例,重复调用影响结果确定模块和第二变异测试用例获取模块的功能,直至满足预设条件。
另一方面,本发明实施例提供了一种测试用例自动生成设备,包括:至少一个处理器、至少一个存储器、通信接口和总线;其中,所述处理器、存储器、通信接口通过所述总线完成相互间的通信;所述通信接口用于该检测设备与显示装置的通信设备之间的信息传输;所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行上述所述的方法。
另一方面,本发明实施例提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述所述的方法。
本发明实施例提供的测试用例自动生成方法及系统,并不需要人工的参与,自动化程度很高。而且,由于符号执行生成的测试用例种子具有选择性,降低了符号执行过程对运行效率的影响。符号执行与启发式搜索进行结合,提高了整个方法的运行效率,而且采用反馈机制,通过变异的影响结果指导测试用例种子或第一变异测试用例进行下一次变异,这种方法不仅有利于短函数序列的测试用例的生成,对于长函数序列的测试用例的生成也同样适用。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一实施例提供的一种测试用例自动生成方法的流程示意图;
图2为本发明另一实施例提供的一种测试用例自动生成方法中测试用例变异的具体流程示意图;
图3为本发明另一实施例提供的一种测试用例自动生成方法中的待测程序示意图;
图4为本发明另一实施例提供的一种测试用例自动生成系统的结构示意图;
图5为本发明另一实施例提供的一种测试用例自动生成设备的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,本发明一实施例提供了一种测试用例自动生成方法,包括:
S1,基于对待测程序中不同待测类下的待测函数进行符号执行,生成变量参数类型为基本数据类型的测试用例种子,并基于启发式搜索对所述测试用例种子进行变异,得到第一变异测试用例;
S2,通过所述待测函数分别执行所述测试用例种子与所述第一变异测试用例,分别获取所述测试用例种子的第一执行路径信息和所述第一变异测试用例的第二执行路径信息,并根据所述第一执行路径信息和所述第二执行路径信息,确定所述变异操作的影响结果;
S3,根据所述变异影响结果,对所述测试用例种子或所述第一变异测试用例进行下一次变异,得到第二变异测试用例;
S4,将所述第二变异测试用例作为所述第一变异测试用例,重复执行S2-S3,直至满足预设条件。
具体地,为克服现有测试用例生成方法中自动化程度低、运行效率低、难以构造变量参数类型为结构对象类型的测试用例,导致生成的测试用例不符合待测程序调用约定等局限性,在本发明实施例中将基于搜索的测试用例生成方法与基于符号执行的测试用例生成方法进行结合,提供了一种基于符号执行和概率导向的测试用例生成方法,在快速生成大量短函数序列的测试用例以及准确确定出基本数据类型变量的测试用例种子的同时,可以更好的生成长函数序列的测试用例,同时生成的测试用例可以适用于复杂的结构对象类型的变量参数。
首先,通过符号执行技术生成高质量的测试用例种子。一个待测程序中可以包括多个待测类,每一个待测类又可以具有多个待测函数,使用符号执行技术分析待测类或待测函数可以得到变量参数的取值与覆盖的程序分支之间的关系。符号执行的过程中,需要选择待测函数中属于基本数据类型的变量参数作为符号进行符号执行,这是由于在构造结构对象类型的变量参数时,很大可能导致构造的变量参数根本无法在实际场景中通过public函数的调用序列生成,导致生成的测试用例不符合待测程序调用约定。所以本发明实施例中在符号执行时仅仅将属于基本数据类型的变量参数作为符号,这是符号执行技术完全可以实现的。其中,变量参数可以为基本数据类型的字面量、待测函数的输入参数,或者是以待测函数的输入参数为参数的、返回基本类型的函数调用,还可以是一个对象。本发明实施例中不对此进行限定。
符号执行技术首先获取令每一程序分支判定条件成立的变量参数的取值范围,再进行逐层取反获取令每一程序分支判定条件不成立时的变量参数的取值范围。然后通过综合变量参数取值范围,求解得到变量参数的一组具体取值。例如,待测函数A具有两个程序分支a1和a2,待测函数A的一个变量参数为n,程序分支a1条件为n=100,程序分支a2条件为n≠100,程序分支a2又具有两个程序分支b1和b2,程序分支b1条件为n>10,程序分支b2条件为n≤10。如果覆盖的程序分支为a2+b1,则变量参数n的取值范围应为n≠100且n>10,可以从n≠100且n>10这个范围中随机选取得到n的一组具体取值。如果覆盖的程序分支为a2+b2,则变量参数n的取值范围应为n≠100且n≤10,可以从n≠100且n≤10这个范围中随机选取得到n的另一组具体取值。也就是说,变量参数n的取值不同,可能会使产生的测试用例种子覆盖的程序分支不同。通过符号执行技术得到的测试用例种子中基本数据类型(如短整型int,长整型long,浮点数float)变量的取值具有非常高的价值,能够以较少的取值组合触发尽可能多的路径,因而适合作为用于进行变异测试用例种子。
由于符号执行技术产生的测试用例种子中只含有基本数据类型的变量参数的取值。为了生成引用类型(即结构对象类型)的变量参数,需要采用基于搜索的测试用例生成技术对测试用例种子做变异。由于一个测试用例是若干个语句形成的序列。本发明实施例中使用添加语句操作和修改参数操作两种变异操作对测试用例种子进行变异。其中,添加语句操作是指在已有序列的末尾添加一个语句,添加语句操作可以支持6种语句类型,分别为:函数调用类型、构造函数调用类型、字段读取或赋值类型、枚举类型常量声明类型、基本类型变量声明并初始化类型和数组声明并初始化类型。由于待测函数的每个语句中可能产生新的参数变量,如形如“Ta=f();”的函数调用语句产生了新变量a。每个语句也可能需要其他变量作为参数,此处的参数不局限于函数调用的实际参数,如数组声明并初始化语句“T[]arr={a};”中的变量a即为该语句的形式参数。
修改参数操作指的是将已有序列中的一个语句的某个变量参数的取值改为其他可用的值。这个其他可用的值可以来源于这个语句之前的语句所产生的新变量,也可以来源于基本数据类型变量的一些预设值。本发明实施例中将添加语句时给语句填入的参数称为添加语句操作的参数,将修改参数操作中改变后的参数称为修改参数操作的参数。
对所述测试用例种子进行变异,得到第一变异测试用例。通过待测函数分别执行测试用例种子与第一变异测试用例,分别获取测试用例种子的第一执行路径信息和第一变异测试用例的第二执行路径信息,根据获取到的执行路径信息,分析当前变异所得的第一变异测试用例对待测函数中各路径分支的影响。执行路径信息的变化反映了此次变异操作的影响,其中,第一执行路径信息包括测试用例种子覆盖的路径中所述目标变量参数的取值(称为第一值),以及测试用例种子覆盖的路径中的具体路径分支内容,所述第二执行路径信息包括第一变异测试用例覆盖的路径中所述目标变量参数的取值(称为第二值),以及第一变异测试用例覆盖的路径中的具体路径分支内容。根据此次所采用的变异操作或变量参数的区别,以及第一执行路径信息和第二执行路径信息,对此次变异进行分析,确定所述变异的影响结果,并可以生成相应类别的反馈信息。
根据得到的影响结果,指导测试用例的下一次变异操作;这里需要说明的是,进行变异的测试用例可以是测试用例种子,也可以是变异后的变异测试用例,本发明实施例中所述的“第一变异测试用例”、“第二变异测试用例”、“第一执行路径信息”、“第二执行路径信息”中的“第一”和“第二”仅仅用于区分变异测试用例或执行路径信息,并不能作为序数词,也不是起限定作用。
本发明实施例中,通过符号执行,生成变量参数类型为基本数据类型的测试用例种子,已经达到了仅通过调整基本数据类型的变量参数所能达到的最大覆盖率,从而避免测试用例种子在变异过程中再耗费时间在基本数据类型的变量参数上。仅对基本数据类型变量参数、而不对引用类型变量参数进行符号执行,避免通过符号执行直接生成引用类型变量参数的变异测试用例,从而避免生成不能以符合待测程序调用约定的方式产生的测试用例。
本发明实施例提供的测试用例自动生成方法,通过符号执行生成变量参数类型为基本数据类型的测试用例种子,提高了符号执行的效率,避免了通过符号执行直接生成引用类型变量参数的变异测试用例。将符号执行与启发式搜索进行结合,实现对所述测试用例种子进行变异,并根据变异影响结果,指导测试用例种子或第一变异测试用例进行下一次变异,将所述第二变异测试用例作为所述第一变异测试用例,重复执行上述过程,直至满足预设条件。本发明实施例提供的测试用例自动生成方法,并不需要人工的参与,自动化程度很高。而且,由于符号执行生成的测试用例种子具有选择性,降低了符号执行过程对运行效率的影响。符号执行与启发式搜索进行结合,提高了整个方法的运行效率,而且采用反馈机制,通过变异的影响结果指导测试用例种子或第一变异测试用例进行下一次变异,这种方法不仅有利于短函数序列的测试用例的生成,对于长函数序列的测试用例的生成也同样适用。
在上述实施例的基础上,S1中基于对待测程序中不同待测类下的待测函数进行符号执行,生成变量参数类型为基本数据类型的测试用例种子,具体包括:
生成用于所述待测函数进行符号执行的主入口函数,并确定选取所述待测函数中属于基本数据类型的变量参数作为符号;
基于所述主入口函数及所述符号,对所述待测函数进行符号执行,并将符号执行结果输出至文本格式的符号执行结果文件;
通过正则表达式匹配,从所述符号执行结果文件中解析符号执行结果,根据所述待测函数的格式需求,生成变量参数类型为基本数据类型的测试用例种子。
具体地,本发明实施例中,基于JDart软件工具实现符号执行,从而能够采用符号执行技术分析待测程序的JVM字节码文件,具体可通过如下4个步骤进行具体说明:
1)生成用于待测函数进行符号执行的主入口函数。这是由于,JDart软件在对一个待测函数进行符号执行时,需要待测函数在一个Java的main函数中被执行,这个main函数即为主入口函数。主入口函数给待测函数设定的具体取值被JDart软件用于增强符号执行的效果,这种技术被称为混合执行(Concolic Execution),意为具体取值(Concrete)和符号(Symbolic)的结合。由于在对待测函数进行单元测试时,并没有主入口函数,所以需要在进行符号执行之前生成需要的主入口函数。
为生成主入口函数,对于待测程序中的每个待测函数,由于EclipseJDT库提供了Java源代码的解析前端,以及相应的Java AST数据结构及在AST上的操作API,本发明实施例中直接利用EclipseJDT库的JavaAST构造接口,构造一个包含main函数的类B。在main函数中调用待测函数,待测函数的变量参数为参数类型的默认初始值(对于属于基本数据类型的变量参数)或null(对于属于引用类型的变量参数)。并将这个类B写入文本文件B.java。
2)从待测函数中提取属于基本数据类型的变量参数,以生成调用JDart符号执行引擎时所需的符号化方案配置。
调用JDart符号执行引擎时,需要确定出待测函数中哪些变量参数作为符号去做符号执行,哪些变量参数将不会参与符号执行。这个配置也需要从待测函数中抽取并生成。本发明实施例中选取待测函数中属于基本数据类型(基本数据类型具体为bool,byte,int,short,long,float,double七种)的变量参数作为符号进行符号执行。
用JDT库解析待测函数,得到待测函数的变量参数列表。识别变量参数列表中属于基本数据类型的变量参数,记录这些属于基本数据类型的变量参数的位置,并将这些位置上的变量参数设置为参与符号执行的符号,按照JDart指定的文本格式,输出到符号化方案配置文档。
3)使用JDart软件工具,输出符号执行结果。
将待测函数、主入口函数和符号化方案配置输入至JDart软件工具中,基于主入口函数及确定的符号,对待测程序中的待测函数进行符号执行,输出符号执行结果。首先对JDart软件工具进行配置,配置成功后在操作系统的shell中调用名为“jpf’的可执行程序。将待测函数和主入口函数编译打包到B.jar文件,并将B.jar文件所在的路径加入操作系统的环境变量$CLASSPATH中。假设符号化方案配置命名为C.jpf,则在操作系统的shell中调用命令jpf C.jpf即可产生符号执行结果,输出到文本格式的符号执行结果文件。
4)生成初始测试用例集合
使用正则表达式匹配,从符号执行结果文件中解析符号执行结果。然后根据待测函数的格式需求,即Java单元测试用例常用的JUnit的格式规范,生成初始测试用例集合,其中,初始测试用例集合中存储有变量参数类型为基本数据类型的测试用例种子。
本发明实施例中,基于JVM字节码,提供了一种通过符号执行生成变量参数类型为基本数据类型的测试用例种子的方法,该方法面向JVM字节码,以JVM字节码文件作为输入,经过自动生成,输出对待测程序内各个类的各个待测函数的单元测试用例集合,即生成多个测试用例种子。
在上述实施例的基础上,S1中所述基于启发式搜索对所述测试用例种子进行变异,具体包括:
基于预设概率模型确定变异操作和所述测试用例种子中需要变异的目标变量参数,并基于所述变异操作,对所述目标变量参数的取值进行变异;
其中,所述预设概率模型包括变异操作概率模型和变量参数权重概率模型。
具体地,本发明实施例中依照预设概率模型对测试用例种子进行变异。其中,预设概率模型包括变异操作概率模型和变量参数权重概率模型,变异操作概率模型用于为每一次变异的变异操作提供选择概率,变量参数权重概率模型用于为每一次变异的变量参数提供选择概率。变异操作的选择概率和变量参数的选择概率均以均匀分布开始,在变异过程中,根据得到的影响结果更新预设概率模型中的相应概率,每一次变异以当前的预设概率模型中的概率选择变异操作和测试用例种子中需要变异的变量参数。
如图2所示,本发明实施例中测试用例变异的具体步骤以伪代码描述。首先根据待测程序所具有的成员函数、成员变量、静态函数、静态变量,初始化可用变异操作集合M和可用变量参数集合N。将记录了各个变异操作的权重的变异操作概率模型P和记录了各个变量参数的权重的变量参数权重概率模型Q初始化为均匀分布,即各变异操作具有相同的权重、各变量参数具有相同的权重。然后初始化一个空的语句序列s作为变异产生的变异测试用例的容器。进行变异时,根据概率模型P来随机选取变异操作m,根据选取的变异操作m和当前构造的s来决定变量参数的可选值,可选值需要符合变异操作m的参数类型,且已在s中产生。根据概率模型Q,在可选值中选择参数args,然后构造语句序列s’,其内容是在s的末尾加上一个由变异操作m和变量参数args构成的语句而形成的语句序列。从s变异到s’做影响分析,根据影响结果改变P和Q中的权重。
本发明实施例中对测试用例种子的变异,实际上是在测试用例种子的基础上,产生测试用例种子中变量参数的具体取值集合,探索尽可能多的变量参数的具体取值空间,从而使找到变量参数取值的最优解成为可能。
在上述实施例的基础上,所述第一执行路径信息包括所述测试用例种子覆盖的路径中所述目标变量参数的取值为第一值,所述第二执行路径信息包括所述第一变异测试用例覆盖的路径中所述目标变量参数的取值为第二值;所述影响结果包括积极影响和消极影响;
相应地,S2中所述根据所述第一执行路径信息和所述第二执行路径信息,确定所述变异操作的影响结果,具体包括:
若判断获知所述第二值相比于所述第一值,与所述测试用例种子覆盖的路径中所述目标变量参数的目标值更接近,则确定所述变异操作的影响结果为积极影响;
若判断获知所述第一值相比于所述第二值,与所述目标值更接近,则确定所述变异操作的影响结果为消极影响。
具体地,积极影响的判断标准是第二值与目标值之间的差距小于第一值与目标值之间的差距,这里的第一值、第二值和目标值并不是单指数值,还可以是目标变量参数被赋予的一个对象,或者其他类型值,本发明实施例中不对此进行具体限定。
例如,假设某次程序运行的目标是某分支判定条件a=5成立,前次变异将目标变量参数a由第一值0变为第二值1,发现第二值1与目标变量参数a的目标值5接近,得到积极影响,则下次变异操作继续增加a。反之,若前次变异得到消极影响,则通过改变变异操作的具体方式或者方向,继续变异。
获取变异前的测试用例种子和变异后的第一变异测试用例(分别记作s和s’),执行、收集并对比两个测试用例的执行路径信息。s’是s经特定的变异操作得到的,因此,执行路径信息的变化反映了该次变异操作的影响。
如图3所示,Java语言的待测程序callLeapSum(int n)中有2个分支,即if的成真分支b1和成假分支b2。当测试输入n使得leapSum(n)==100为真时,分支b1被覆盖,于是这次执行的路径信息为{b1,leapSum(n)==100};当测试输入n使得leapSum(n)==100为假时,分支b2被覆盖,于是这次执行的路径信息为{b2,leapSum(n)≠100}。
对于每一个if判断,任务是:如何选取测试输入n,使得该if判断的条件p为真,从而使该if判断的成真分支b1被覆盖。
当对测试用例s及变异测试用例s’做影响分析时,首先执行s和s’,获取两次执行时待测函数的输入参数的实际取值n和n’,然后,按下述方式分析从n变化到n’对待测程序各个if分支的影响。if分支的条件可以转换为上述简单形式,其中t1可以是基本数值类型的字面量、待测函数的输入参数或者以待测函数的输入参数为参数的、返回基本类型的函数调用。按t1分类讨论,针对以下三种情况分别进行说明:
A)若t1是字面量,则它所在的逻辑公式t1==t2、t1>t2、t1<t2的成立与否是恒定的,测试输入参数的取值变化对其无影响。得到的影响结果为“无影响”。
B)若t1是输入参数,则根据t2的值选取t1的值作为输入参数,即可让t1==t2、t1>t2、t1<t2成立。这样所在的析取支d为真,即可让整个判断条件p为真。影响结果为“将t1取值为t2”、“将t1取值为大于t2的值”或“将t1取值为小于t2的值”。
C)若t1是返回基本数据类型的、以待测函数的输入参数为输入参数的函数调用,且其参数只含基本类型(bool,byte,int,short,long,float,double八种),则将其在根据多次执行获取的函数的输入输出对,使用分段线性模型做数值拟合。
在上述实施例的基础上,S2之后还包括:
根据所述影响结果,更新所述变异操作概率模型中各变异操作的概率,以及所述变量参数权重概率模型中各变量参数权重。
具体地,本发明实施例中,若判断获知所述影响结果为积极影响,则以预设幅度增加所述变异操作概率模型中本次变异操作的概率,以及所述变量参数权重概率模型中本次变异的变量参数的概率;
若判断获知所述影响结果为消极影响,则以所述预设幅度减少所述变异操作概率模型中本次变异操作的概率,以及所述变量参数权重概率模型中本次变异的变量参数的概率。
在上述实施例的基础上,S3具体包括:
基于更新后的预设概率模型确定下一次变异的变异操作和所述测试用例种子中需要变异的目标变量参数,并对所述测试用例种子或所述第一变异测试用例进行下一次变异。
具体地,以t1==t2形式的判定条件为例,记t1在变异前和变异后接收的输入参数分别为n和n’,计算d=t2-tl(n),d’=t2-t1(n’)。设d>0,n’>n,若0<d’<d,说明n’比n使得t1==t2更接近于为真。此时影响结果为“下次变异时,使n的变化量为n’-n+1”,即让输入参数n加速接近使得t1(n)==t2为真的取值。若d·d’<0,说明从n到n’的变化可能跨越了使得t1(n)==t2为真的取值n*,即n<n*<n’。此时影响结果为“下次变异时,使n的新取值为floor((n’+n)/2)”,即开始在n到n’的区间内二分查找使得t1(n*)==t2的n*,这样可以增加每次搜索的步长,加快搜索的速度。若d’=0,则t1==t2被满足,影响结果为“该条件已满足,结束搜索”。
以图3中示出的待测程序为例,待测程序1:callLeapSum中的唯一if判定条件符合此情形。其判定条件p为leapSum(n)==100,对应形式t1==t2,其中t2为字面量100,t1为函数调用leapSum(n);t1的参数n是基本类型,且为被测程序callLeapSum的输入参数。则影响分析使得t1(n)==t2逐渐为真的步骤如表1所示。
表1 leapSum输入输出信息
n | 0 | 5 | 11 | 18 | 14 | 16 |
leapSum(n) | 0 | 30 | 70 | 120 | 90 | 100 |
以下详细介绍表1中,以影像信息为反馈,引导概率模型选择变异操作令目标分支判定条件逐渐收敛的过程。
假设传来的被做影响分析的测试用例s和s’使得n=0,n’=5,按照上述步骤,计算leapSum(n)=0,leapSum(n’)=30,d=100-0=100,d’=100-30=70,判断0<d’<d,所以影响结果为“下次变异时,让n的变化量为n’-n+1=6”。
上述影响结果指导下次变异,所以下次传来的被做影响分析的测试用例s和s’会使得n=5,n’=5+6=11。计算leapSum(n)=30,leapSum(n’)=70,d=100-30=70,d’=100-70=30,判断0<d’<d,所以输出影响结果为“下次变异时,让n的变化量为n’-n+1=7”。
上述影响结果指导下次变异,所以下次传来的被做影响分析的测试用例s和s’会使得n=11,n’=11+7=18。计算leapSum(n)=70,leapSum(n’)=120,d=100-70=30,d’=100-120=-20,判断d·d’<0,所以影响结果为“下次变异时,让n的新取值为floor((n’+n)/2)=floor((11+18)/2)=14”。
上述影响结果指导下次变异,所以下次传来的被做影响分析的测试用例s和s’会使得n=18,n’=14。计算leapSum(n)=120,leapSum(n’)=90,d=100-120=-20,d’=100-90=10,判断d·d’<0,所以影响结果为“下次变异时,让n的新取值为floor((n’+n)/2)=16”。
上述影响结果指导下次变异,所以下次传来的被做影响分析的测试用例s和s’会使得n=14,n’=16。计算leapSum(n’)=100,d’=100-100=0,影响结果为“条件已满足,结束搜索”。
最终,得到了一个测试用例callLeapSum(16),它使得callLeapSum中的第一个if判定的成真分支被覆盖,达到50%的分支覆盖率。再将该if判断的条件取反,按照如上步骤生成测试用例,可覆盖原if判断的成假分支。这两个测试用例使得被测程序达到100%的分支覆盖率。
在上述实施例的基础上,所述满足预设条件包括:达到预设时间或生成预设数量个目标测试用例;
所述目标测试用例为覆盖所述待测函数预设分支的测试用例。其中,达到预设时间是指整个测试用例自动生成方法执行的时间达到预设时间。目标测试用例通常是从变异测试用例中选取,即从每次变异后得到的变异测试用例中选取得到。
上述得到的测试用例callLeapSum(16)即为一个目标测试用例。
如图4所述,在上述实施例的基础上,本发明另一实施例提供了一种测试用例自动生成系统,包括:第一变异测试用例获取模块41、影响结果确定模块42、第二变异测试用例获取模块43和重复执行模块44。其中,
第一变异测试用例获取模块41用于基于对待测程序中不同待测类下的待测函数进行符号执行,生成变量参数类型为基本数据类型的测试用例种子,并基于启发式搜索对所述测试用例种子进行变异,得到第一变异测试用例;
影响结果确定模块42用于通过所述待测函数分别执行所述测试用例种子与所述第一变异测试用例,分别获取所述测试用例种子的第一执行路径信息和所述第一变异测试用例的第二执行路径信息,并根据所述第一执行路径信息和所述第二执行路径信息,确定所述变异操作的影响结果;
第二变异测试用例获取模块43用于根据所述变异影响结果,对所述测试用例种子或所述第一变异测试用例进行下一次变异,得到第二变异测试用例;
重复执行模块44用于将所述第二变异测试用例作为所述第一变异测试用例,重复调用影响结果确定模块和第二变异测试用例获取模块的功能,直至满足预设条件。
具体地,本发明实施例中提供的系统中各模块的功能与上述方法类实施例的操作流程是一一对应的,本发明实施例在此不再赘述。
如图5所述,在上述实施例的基础上,本发明另一实施例提供了一种测试用例自动生成设备,包括:
至少一个处理器51、至少一个存储器52、通信接口53和总线54;其中,所述处理器51、存储器52、通信接口53通过所述总线54完成相互间的通信;所述通信接口53用于该生成设备与显示装置的通信设备之间的信息传输;所述存储器52存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如图1中所述的方法。
在上述实施例的基础上,本发明另一实施例提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如图1中所述的方法。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种测试用例自动生成方法,其特征在于,包括:
S1,基于对待测程序中不同待测类下的待测函数进行符号执行,生成变量参数类型为基本数据类型的测试用例种子,并基于启发式搜索对所述测试用例种子进行变异,得到第一变异测试用例;
S2,通过所述待测函数分别执行所述测试用例种子与所述第一变异测试用例,分别获取所述测试用例种子的第一执行路径信息和所述第一变异测试用例的第二执行路径信息,并根据所述第一执行路径信息和所述第二执行路径信息,确定所述变异的影响结果;
S3,根据所述影响结果,对所述测试用例种子或所述第一变异测试用例进行下一次变异,得到第二变异测试用例;
S4,将所述第二变异测试用例作为所述第一变异测试用例,重复执行S2-S3,直至满足预设条件。
2.根据权利要求1所述的方法,其特征在于,S1中基于对待测程序中不同待测类下的待测函数进行符号执行,生成变量参数类型为基本数据类型的测试用例种子,具体包括:
生成用于所述待测函数进行符号执行的主入口函数,并确定选取所述待测函数中属于基本数据类型的变量参数作为符号;
基于所述主入口函数及所述符号,对所述待测函数进行符号执行,并将符号执行结果输出至文本格式的符号执行结果文件;
通过正则表达式匹配,从所述符号执行结果文件中解析符号执行结果,根据所述待测函数的格式需求,生成变量参数类型为基本数据类型的测试用例种子。
3.根据权利要求1所述的方法,其特征在于,S1中所述基于启发式搜索对所述测试用例种子进行变异,具体包括:
基于预设概率模型确定变异操作和所述测试用例种子中需要变异的目标变量参数,并基于所述变异操作,对所述目标变量参数的取值进行变异;
其中,所述预设概率模型包括变异操作概率模型和变量参数权重概率模型。
4.根据权利要求3所述的方法,其特征在于,所述第一执行路径信息包括所述测试用例种子覆盖的路径中所述目标变量参数的取值为第一值,所述第二执行路径信息包括所述第一变异测试用例覆盖的路径中所述目标变量参数的取值为第二值;所述影响结果包括积极影响和消极影响;
相应地,S2中所述根据所述第一执行路径信息和所述第二执行路径信息,确定所述变异操作的影响结果,具体包括:
若判断获知所述第二值相比于所述第一值,与所述测试用例种子覆盖的路径中所述目标变量参数的目标值更接近,则确定所述变异操作的影响结果为积极影响;
若判断获知所述第一值相比于所述第二值,与所述目标值更接近,则确定所述变异操作的影响结果为消极影响。
5.根据权利要求4所述的方法,其特征在于,S2之后还包括:
根据所述影响结果,更新所述变异操作概率模型中各变异操作的概率,以及所述变量参数权重概率模型中各变量参数权重。
6.根据权利要求5所述的方法,其特征在于,S3具体包括:
基于更新后的预设概率模型确定下一次变异的变异操作和所述测试用例种子中需要变异的目标变量参数,并对所述测试用例种子或所述第一变异测试用例进行下一次变异。
7.根据权利要求1-6中任一项所述的方法,其特征在于,所述满足预设条件包括:达到预设时间或生成预设数量个目标测试用例;
所述目标测试用例为覆盖所述待测函数预设分支的测试用例。
8.一种测试用例自动生成系统,其特征在于,包括:
第一变异测试用例获取模块,用于基于对待测程序中不同待测类下的待测函数进行符号执行,生成变量参数类型为基本数据类型的测试用例种子,并基于启发式搜索对所述测试用例种子进行变异,得到第一变异测试用例;
影响结果确定模块,用于通过所述待测函数分别执行所述测试用例种子与所述第一变异测试用例,分别获取所述测试用例种子的第一执行路径信息和所述第一变异测试用例的第二执行路径信息,并根据所述第一执行路径信息和所述第二执行路径信息,确定所述变异操作的影响结果;
第二变异测试用例获取模块,用于根据所述变异影响结果,对所述测试用例种子或所述第一变异测试用例进行下一次变异,得到第二变异测试用例;
重复执行模块,用于将所述第二变异测试用例作为所述第一变异测试用例,重复调用影响结果确定模块和第二变异测试用例获取模块的功能,直至满足预设条件。
9.一种测试用例自动生成设备,其特征在于,包括:
至少一个处理器、至少一个存储器、通信接口和总线;其中,
所述处理器、存储器、通信接口通过所述总线完成相互间的通信;
所述通信接口用于该检测设备与显示装置的通信设备之间的信息传输;
所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如权利要求1-7中任一项所述的方法。
10.一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如权利要求1-7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810451163.XA CN108595341B (zh) | 2018-05-11 | 2018-05-11 | 测试用例自动生成方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810451163.XA CN108595341B (zh) | 2018-05-11 | 2018-05-11 | 测试用例自动生成方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108595341A true CN108595341A (zh) | 2018-09-28 |
CN108595341B CN108595341B (zh) | 2019-11-22 |
Family
ID=63637357
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810451163.XA Active CN108595341B (zh) | 2018-05-11 | 2018-05-11 | 测试用例自动生成方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108595341B (zh) |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109308265A (zh) * | 2018-10-26 | 2019-02-05 | 广州酷狗计算机科技有限公司 | 生成反向测试用例的方法和装置 |
CN109491360A (zh) * | 2018-09-30 | 2019-03-19 | 北京车和家信息技术有限公司 | 整车控制器的仿真测试方法、装置、系统及电子设备 |
CN110765020A (zh) * | 2019-10-25 | 2020-02-07 | 上海笃策信息科技有限公司 | 基于领域知识的测试用例生成方法 |
CN111611152A (zh) * | 2019-02-25 | 2020-09-01 | 北京嘀嘀无限科技发展有限公司 | 测试用例生成方法、装置、电子设备及可读存储介质 |
CN112286824A (zh) * | 2020-11-18 | 2021-01-29 | 长江大学 | 基于二分搜索迭代的测试用例生成方法、系统及电子设备 |
CN112532517A (zh) * | 2020-11-05 | 2021-03-19 | 东北大学 | 基于领域特定语言实现ospf协议配置综合方案 |
CN112817864A (zh) * | 2021-02-23 | 2021-05-18 | 北京字节跳动网络技术有限公司 | 一种测试文件的生成方法、装置、设备及介质 |
CN113051153A (zh) * | 2021-02-23 | 2021-06-29 | 国家计算机网络与信息安全管理中心 | 一种应用软件漏洞扫描方法及相关设备 |
CN113297061A (zh) * | 2020-05-29 | 2021-08-24 | 阿里巴巴集团控股有限公司 | 测试用例生成方法、装置、系统、离线服务器及存储介质 |
CN113407435A (zh) * | 2020-03-17 | 2021-09-17 | 北京新能源汽车股份有限公司 | 一种测试用例的生成方法、装置及控制设备 |
CN113574511A (zh) * | 2019-03-25 | 2021-10-29 | 三菱电机株式会社 | 测试用例生成装置、测试用例生成方法和测试用例生成程序 |
CN114490339A (zh) * | 2021-12-30 | 2022-05-13 | 天津大学 | 一种基于搜索测试的智能种子策略方法 |
CN114546816A (zh) * | 2020-11-25 | 2022-05-27 | 腾讯科技(深圳)有限公司 | 一种测试方法、平台、装置、电子设备及存储介质 |
CN114490339B (zh) * | 2021-12-30 | 2024-05-31 | 天津大学 | 一种基于搜索测试的智能种子策略方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104063325A (zh) * | 2014-07-11 | 2014-09-24 | 电子科技大学 | 一种针对嵌入式软件的测试用例自动化生成装置及其方法 |
JP2015228085A (ja) * | 2014-05-30 | 2015-12-17 | 富士通株式会社 | テストケース生成プログラム、テストケース生成装置、及びテストケース生成方法 |
CN107193731A (zh) * | 2017-05-12 | 2017-09-22 | 北京理工大学 | 使用控制变异的模糊测试覆盖率改进方法 |
-
2018
- 2018-05-11 CN CN201810451163.XA patent/CN108595341B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2015228085A (ja) * | 2014-05-30 | 2015-12-17 | 富士通株式会社 | テストケース生成プログラム、テストケース生成装置、及びテストケース生成方法 |
CN104063325A (zh) * | 2014-07-11 | 2014-09-24 | 电子科技大学 | 一种针对嵌入式软件的测试用例自动化生成装置及其方法 |
CN107193731A (zh) * | 2017-05-12 | 2017-09-22 | 北京理工大学 | 使用控制变异的模糊测试覆盖率改进方法 |
Non-Patent Citations (2)
Title |
---|
曾嘉彦: "符号执行技术在测试用例生成中的应用", 《现代计算机》 * |
杨波等: "基于变量影响分析与数据变异的回归测试用例生成", 《计算机学报》 * |
Cited By (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109491360A (zh) * | 2018-09-30 | 2019-03-19 | 北京车和家信息技术有限公司 | 整车控制器的仿真测试方法、装置、系统及电子设备 |
CN109491360B (zh) * | 2018-09-30 | 2021-05-07 | 北京车和家信息技术有限公司 | 整车控制器的仿真测试方法、装置、系统及电子设备 |
CN109308265A (zh) * | 2018-10-26 | 2019-02-05 | 广州酷狗计算机科技有限公司 | 生成反向测试用例的方法和装置 |
CN111611152A (zh) * | 2019-02-25 | 2020-09-01 | 北京嘀嘀无限科技发展有限公司 | 测试用例生成方法、装置、电子设备及可读存储介质 |
CN111611152B (zh) * | 2019-02-25 | 2023-08-04 | 北京嘀嘀无限科技发展有限公司 | 测试用例生成方法、装置、电子设备及可读存储介质 |
CN113574511A (zh) * | 2019-03-25 | 2021-10-29 | 三菱电机株式会社 | 测试用例生成装置、测试用例生成方法和测试用例生成程序 |
CN110765020A (zh) * | 2019-10-25 | 2020-02-07 | 上海笃策信息科技有限公司 | 基于领域知识的测试用例生成方法 |
CN110765020B (zh) * | 2019-10-25 | 2023-03-24 | 上海笃策信息科技有限公司 | 基于领域知识的测试用例生成方法 |
CN113407435B (zh) * | 2020-03-17 | 2024-06-07 | 北京新能源汽车股份有限公司 | 一种测试用例的生成方法、装置及控制设备 |
CN113407435A (zh) * | 2020-03-17 | 2021-09-17 | 北京新能源汽车股份有限公司 | 一种测试用例的生成方法、装置及控制设备 |
CN113297061A (zh) * | 2020-05-29 | 2021-08-24 | 阿里巴巴集团控股有限公司 | 测试用例生成方法、装置、系统、离线服务器及存储介质 |
CN112532517A (zh) * | 2020-11-05 | 2021-03-19 | 东北大学 | 基于领域特定语言实现ospf协议配置综合方案 |
CN112532517B (zh) * | 2020-11-05 | 2022-04-05 | 东北大学 | 基于领域特定语言实现ospf协议配置综合方案 |
CN112286824B (zh) * | 2020-11-18 | 2022-08-02 | 长江大学 | 基于二分搜索迭代的测试用例生成方法、系统及电子设备 |
CN112286824A (zh) * | 2020-11-18 | 2021-01-29 | 长江大学 | 基于二分搜索迭代的测试用例生成方法、系统及电子设备 |
CN114546816A (zh) * | 2020-11-25 | 2022-05-27 | 腾讯科技(深圳)有限公司 | 一种测试方法、平台、装置、电子设备及存储介质 |
CN113051153B (zh) * | 2021-02-23 | 2022-11-15 | 国家计算机网络与信息安全管理中心 | 一种应用软件漏洞扫描方法及相关设备 |
CN113051153A (zh) * | 2021-02-23 | 2021-06-29 | 国家计算机网络与信息安全管理中心 | 一种应用软件漏洞扫描方法及相关设备 |
CN112817864A (zh) * | 2021-02-23 | 2021-05-18 | 北京字节跳动网络技术有限公司 | 一种测试文件的生成方法、装置、设备及介质 |
CN112817864B (zh) * | 2021-02-23 | 2024-04-16 | 北京字节跳动网络技术有限公司 | 一种测试文件的生成方法、装置、设备及介质 |
CN114490339A (zh) * | 2021-12-30 | 2022-05-13 | 天津大学 | 一种基于搜索测试的智能种子策略方法 |
CN114490339B (zh) * | 2021-12-30 | 2024-05-31 | 天津大学 | 一种基于搜索测试的智能种子策略方法 |
Also Published As
Publication number | Publication date |
---|---|
CN108595341B (zh) | 2019-11-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108595341B (zh) | 测试用例自动生成方法及系统 | |
Chen et al. | Evaluating large language models trained on code | |
Park et al. | Fuzzing javascript engines with aspect-preserving mutation | |
Rajpal et al. | Not all bytes are equal: Neural byte sieve for fuzzing | |
Bouajjani et al. | Abstract regular (tree) model checking | |
Jiang et al. | RULF: Rust library fuzzing via API dependency graph traversal | |
Klarner et al. | Parameter identification and model ranking of thomas networks | |
Pei et al. | Can large language models reason about program invariants? | |
Liu et al. | Code execution with pre-trained language models | |
Chowdhury et al. | CyFuzz: A differential testing framework for cyber-physical systems development environments | |
Helmuth | General program synthesis from examples using genetic programming with parent selection based on random lexicographic orderings of test cases | |
Khalilian et al. | CGenProg: Adaptation of cartesian genetic programming with migration and opposite guesses for automatic repair of software regression faults | |
Marginean | Automated software transplantation | |
Li et al. | Multi-Label Code Smell Detection with Hybrid Model based on Deep Learning. | |
Nosrati et al. | Test data generation using genetic programming | |
Scott et al. | Constraint solving on bounded string variables | |
Paulevé et al. | Analyzing large network dynamics with process hitting | |
Xu et al. | Active learning of one-clock timed automata using constraint solving | |
Alshraideh | A complete automation of unit testing for JavaScript programs | |
CN116702157A (zh) | 一种基于神经网络的智能合约漏洞检测方法 | |
Maragathavalli et al. | Automatic program instrumentation in generation of test data using genetic algorithm for multiple paths coverage | |
Qiu et al. | Chemfuzz: Large language models-assisted fuzzing for quantum chemistry software bug detection | |
Paduraru et al. | Automatic test data generation for a given set of applications using recurrent neural networks | |
Oh et al. | A Model Independent S/W Framework for Search‐Based Software Testing | |
Wappler | Automatic generation of object-oriented unit tests using genetic programming |
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 |