本发明涉及一种用于为模糊软件测试生成至少一个新测试用例的方法。本发明还涉及用于此目的的训练方法、机器学习模型、计算机程序、设备以及存储介质。
背景技术:
1、随着时间的推移而多次更改软件是很常见的,特别是在应用敏捷开发方法、修复错误或适配函数的情况下。当前的软件开发实践促进使用持续集成和开发管道(ci/cd),这些管道使得能够随着时间的推移对软件的每个版本进行测试。
2、多个软件程序支持相同的消息或协议格式作为输入(例如jpeg、xml、pdf、can)也是很常见的。当对此类目标程序进行模糊测试时,可以使用正式的语法规范(参见[1]、[4],其中在说明书末尾列出参考文献),以便生成针对相应的格式的有效测试用例。但是,实现方案可能与所述规范不同,或者语法无法充分描述接口。在实践中,最感兴趣的测试用例是那些显示出语法和软件之间差异的测试用例,因为这些测试用例可能表示错误。此外,对于语法的简单定义来说,接口可能过于复杂。对于许多输入格式来说,定义语法是最困难的点。
技术实现思路
1、本发明的主题是具有权利要求1的特征的方法、具有权利要求7的特征的训练方法、具有权利要求8的特征的机器学习模型、具有权利要求9的特征的计算机程序、具有权利要求10的特征的设备以及具有权利要求11的特征的计算机可读存储介质。本发明的进一步的特征和细节从相应的从属权利要求、说明书和附图中得出。在此,在根据本发明的方法的上下文中所描述的特征和细节当然也适用于根据本发明的训练方法、根据本发明的机器学习模型、根据本发明的计算机程序、根据本发明的设备以及根据本发明的计算机可读存储介质的上下文,并且分别反之亦然,使得关于本发明的各个方面的公开,总是相互参考或可以相互参考。
2、本发明的主题特别是一种用于为模糊软件测试生成至少一个新测试用例的方法,包括以下优选地依次执行和/或重复执行的步骤:
3、-为模糊软件测试提供至少一个现有测试用例,其中模糊软件测试可以被设置用于,对测试目标的多个不同设计方案(ausbildungen)中的至少一个设计方案进行测试,
4、-基于至少一个现有测试用例并且基于训练测试用例对测试目标的其中多个不同设计方案的效果来生成表示信息,
5、-基于生成的表示信息生成用于模糊软件测试的至少一个新测试用例。
6、因此,本发明的一个优点可以是:自动产生新测试用例,其涵盖(erstreckenüber)测试目标的不同设计方案,例如不同的目标程序和/或目标程序的多个版本,优选地包括更大的发布版本(release)并且还可能有对需要模糊测试的接口进行的更改。表示信息可以是嵌入,即,特别是可以形成测试用例(特别是目标程序输入)与效果(auswirkung)(特别是以覆盖率信息的形式)之间的映射的表示。覆盖率信息可以是关于目标程序或不同版本情况下的代码覆盖率的信息。因此,根据本发明的方法尤其使得可以利用来自代码库(codebasis)的一个版本的认识来测试相同软件的未来版本。
7、模糊测试,也称为fuzz-testing(模糊测试),是一种动态软件测试方法,例如,在[6]中对其进行了更详细的描述。在模糊测试中可以将无效的、非预期的或随机的数据作为输入而输入到软件中以自动化执行软件测试。待测试软件在下文中也称为目标程序、模糊目标或待测试程序。
8、可以使用模糊测试来监控目标程序是否存在异常,例如崩溃、失败的内置代码断言或潜在的内存泄漏。在此,处理结构化输入的模糊器可以被用于测试目标程序。该结构例如以特定的格式或协议来指定,并且将有效输入与无效输入区分。有效的模糊器因此可以生成半有效的输入,它们是“足够有效的”,使得它们不会被目标程序直接拒绝但会在目标程序中的更深层区域引起非预期的行为模式,并且它们是“足够无效”的,以揭示未正确处理的边界情况(eckfall)。fuzz-testing(模糊测试)或模糊测试因此可以包括自动化过程,其中将随机产生的输入发送到目标程序并观察其响应。模糊器,也称为模糊引擎,相应地是自动生成输入的软件。模糊器能够插装代码、生成测试用例并执行待测试的目标程序。已知的模糊器示例是afl和libfuzzer。
9、待测试的软件也可以称为目标程序或模糊目标。具有要通过模糊测试进行测试的仅一个函数或多个函数的软件程序被理解为目标程序。模糊目标的一个主要特征可以是:所述模糊目标潜在地处理了在模糊测试过程期间由模糊器生成的不可信输入。还可以设置如下模糊测试,所述模糊测试代表了模糊器和模糊目标的组合版本。模糊目标可以是其输入处装有(versehen mit)模糊器的经插装的代码。模糊测试可以是可执行的。模糊器还可以启动、观察和停止多个正在运行的模糊测试(例如每秒数百或数千次),每个测试都有由模糊器生成的略有不同的输入。
10、测试用例可以是模糊测试的特定输入和/或测试轮次。为了确保可重现性,相关的测试轮次(其显示出新的代码路径或崩溃)可以被存储。通过这种方式,特定测试用例可以利用相应输入也在未连接到模糊器的模糊目标上、例如在其发布版本中执行。
11、此外,还可以设置覆盖引导的模糊测试(英文:coverage-guided fuzzing)。其使用代码覆盖率信息作为模糊测试期间的反馈,以识别出输入是否引起了执行新的代码路径或块。此外,还可以设置基于生成的模糊测试,其使用有关要测试的目标程序的先验知识来创建测试输入。一个例子是与输入规范相符的语法。
12、模糊测试也可以作为基于变异的模糊测试来执行。在此情况下生成新的程序输入,其方式为,对现有输入(也称为种子(seed))进行小的更改,这种小的更改虽然仍保持输入有效,但会触发新的行为。种子是初始程序输入,其可用作针对基于变异的模糊测试的起始点。种子通常可以由用户提供。种子的能量是可以通过变异由种子生成的测试用例的数量。功率规划(leistungsplan)是基于变异的模糊器分派给种子的重要性,它直接影响种子排队等待变异的顺序。
13、静态插装特别是被理解为将指令插入到目标程序中以获得关于所述执行的反馈。这通常由编译器实现,并且例如可以描述在所述执行期间所到达的代码块。动态插装是在运行时期间对目标程序的执行的控制,以便获得关于所述执行的反馈。其例如通过操作系统功能性或通过使用仿真器来实现。
14、为了执行软件测试,还可以设置调试器来控制目标程序并提供例如用于检索寄存器值或存储器值以及用于停止和中断单个步骤中的执行的功能。可以通过调试器将断点(breakpoint)设置到目标程序的指令上,以便在到达时停止执行并通知控制进程。可以通过调试器将数据观察点(watchpoint)设置到目标程序的存储地址,以便在对该存储地址进行访问时停止执行并通知控制进程。
15、在本发明的范畴内,可以规定,模糊测试,特别是传统的模糊测试,被扩展为包括机器学习方法。为此目的,可以训练机器学习模型来生成用于软件测试的测试用例,特别是生成跨多个目标程序版本的针对可测试接口的相关测试用例和/或生成用于多个目标程序的测试的相关测试用例。例如,可以训练机器学习模型来学习:生成跨多个目标程序版本的针对可测试接口的相关测试用例,特别是不需要语法。经过训练的模型从同一目标程序的多个版本中学习,因此可以是接口的泛化(verallgemeinerung),这种泛化实现了:基于生成的输入进行回归测试。此外,待测试的目标程序的输入中的变化可以代表针对模糊器的感兴趣的目标,因为这些变化中嵌入了感兴趣的边界情况,而这些边界情况在正常系统测试或集成测试中很少被测试。此外,可以训练机器学习模型来学习生成用于多个目标程序的测试的相关测试用例,尤其是不需要语法。所提出的方法从多个目标程序中学习,其可以旨在在这些目标程序之间进行泛化以及泛化到接受相同输入格式的其他目标程序。经过训练的机器学习模型可以作为输出并且特别是基于所述泛化来生成表示信息。
16、还可能的是,通过如下方式基于至少一个现有测试用例和表示信息来生成至少一个新测试用例,即,应用模型、优选地应用机器学习模型或者所述机器学习模型、优选地经过训练的神经网络和/或编码器,用于生成表示信息。在此,该模型可以是基于对效果的预测所训练的。换句话说,模型可以已经被训练为基于现有测试用例生成新的相关测试用例。例如,可以将该表示信息例如计算为针对至少一个预给定测试用例的模型的编码器的输出,优选地针对给定的目标程序输入的输出。
17、此外也有利的是,所述效果是由量化训练测试用例的成功(erfolg)的性能度量(performance-metrik)和/或适应度函数(fitness-funktion)所产生的。优选地,所述效果是测试目标中的代码覆盖率。例如,可以在训练中、在测试目标的所述多个设计方案中、特别是多个目标程序和/或目标程序的所述不同版本执行训练测试用例时确定所述效果。所述适应度函数可以例如评估针对特定函数的成功测试用例的数量和/或输出特定于测试成功的值。还可以使用特定于测试用例对测试目标的效果的性能度量,例如测试目标的代码覆盖率和/或存储器利用率和/或执行时间。
18、根据另一优点,可以规定,现有测试用例被实施为种子,并且通过如下方式基于表示信息生成至少一个新测试用例,即,基于所述表示信息而确定该种子变异。种子变异是对预给定测试用例的更改,以便生成不同的变体,并且因此在软件测试中达成更好的结果。例如,这些变异由如下变异生成器生成,该变异生成器对此评估该模型的输出。所述输出例如是特定于新测试用例的数据的数组。
19、根据本发明的有利的扩展,可以规定,测试目标的所述不同设计方案包括不同的目标程序和/或目标程序的不同版本,其优选地具有针对由这些测试用例产生的输入(目标程序输入)的相同输入格式。输入格式可以例如是消息和/或协议格式(例如jpeg、xml、pdf、can)和/或针对文件和/或命令行实参(befehlszeilenargument)和/或网络请求的格式。
20、也有利的是,由模糊软件测试执行所生成的新测试用例来测试该测试目标的所述至少一个设计方案,其中该测试目标的所述至少一个设计方案可以包括(目标)程序和/或嵌入式系统,其可选地用于控制至少部分自主的机器人,优选地是车辆。该车辆例如是机动车辆和/或自主车辆。
21、本发明的主题还是一种用于训练优选地根据本发明的机器学习模型以生成用于模糊软件测试的至少一个新测试用例的训练方法,其优选地使用于根据本发明的方法中,所述训练方法包括以下步骤:
22、-优选地通过至少部分手动和/或自动化地随机定义训练测试用例来提供训练测试用例,
23、-提供测试目标的不同设计方案,优选地提供目标程序的不同版本和/或不同的目标程序,
24、-训练机器学习模型以输出表示信息和/或预测训练测试用例对测试目标的不同设计方案的效果,其中可以基于所输出的表示信息来执行预测,
25、-提供经过训练的机器学习模型以用于生成至少一个新测试用例,优选地用于根据本发明的方法中。
26、因此,根据本发明的训练方法带来与参考根据本发明的方法所详细描述的相同的优点。
27、本发明主题还是一种由根据本发明的训练方法产生的机器学习模型。因此,根据本发明的机器学习模型带来与参考根据本发明的方法所详细描述的相同的优点。
28、可以规定:(机器学习)模型包括编码器,该编码器被训练用于或者是被训练用于输出诸如嵌入之类的表示信息。为此,可以在训练中设置另外的层,特别是解码器,该解码器是被分配给测试目标的不同设计方案的。所述训练可以例如使用训练数据和/或训练方法、例如反向传播而进行,以便鉴于如下方面优化该模型:预测训练测试用例对测试目标的效果。这可能意味着:优选地通过相应的解码器来预测对测试目标的不同设计方案的效果、诸如代码覆盖率。在此,可以将针对测试目标的不同设计方案(例如不同的目标程序和/或版本)的预测一起考虑以用于模型的训练。换句话说,具有(特别是单个)编码器和解码器的模型可以在训练中鉴于如下方面被共同适配或训练:预测训练测试用例对于测试目标的多个设计方案的效果。为此,可以例如通过如下方式而确定对此所需的注释数据:所述效果、例如代码覆盖率是针对这些训练测试用例预先确定的。作为该训练的结果,例如,可以仅提供编码器作为经过训练的模型,以便基于可由其生成的表示信息通过变异来生成另外的测试用例。
29、本发明主题还是一种计算机程序,特别是一种计算机程序产品,其包括命令,当该计算机程序由计算机执行时,所述命令促使所述计算机执行根据本发明的方法。因此,根据本发明的计算机程序带来了与参考根据本发明的方法已详细描述的相同的优点。
30、本发明主题还是一种被设置为执行根据本发明的方法的用于数据处理的设备。例如,可以设置执行根据本发明的计算机程序的计算机作为所述设备。该计算机可以具有至少一个用于执行计算机程序的处理器。还可以设置非易失性数据存储器,在所述非易失性数据存储器中可以存储计算机程序并且可以由处理器从所述非易失性数据存储器读取计算机程序以供执行。
31、本发明主题还可以是一种计算机可读存储介质,其具有根据本发明的计算机程序和/或包括命令,当由计算机执行时所述命令促使所述计算机执行根据本发明的方法。所述存储介质例如被设计为数据存储器,例如硬盘和/或非易失性存储器和/或存储卡。所述存储介质可以例如被集成到计算机中。
32、另外,根据本发明的相应方法还可以作为计算机实现的方法被执行。
1.一种用于为模糊软件测试生成至少一个新测试用例(110)的方法(100),所述方法包括以下步骤:
2.根据权利要求1所述的方法(100),
3.根据前述权利要求中任一项所述的方法(100),
4.根据前述权利要求中任一项所述的方法(100),其特征在于,所述现有测试用例(105)被实施为种子,并且通过如下方式基于所述表示信息(152)生成所述至少一个新测试用例(110):基于所述表示信息(152)而确定所述种子的变异。
5.根据前述权利要求中任一项所述的方法(100),
6.根据前述权利要求中任一项所述的方法(100),
7.一种用于训练机器学习模型(50)以生成用于模糊软件测试的至少一个新测试用例(110)的训练方法(200),所述训练方法包括以下步骤:
8.一种机器学习模型(50),所述机器学习模型由根据权利要求7所述的训练方法(200)产生。
9.一种计算机程序(20),所述计算机程序包括命令,当所述计算机程序(20)由计算机(10)执行时,所述命令促使所述计算机(10)执行根据权利要求1至7中任一项所述的方法(100)。
10.一种用于数据处理的设备(10),所述用于数据处理的设备被设置为执行根据权利要求1至7中任一项所述的方法(100)。
11.一种计算机可读存储介质(15),所述计算机可读存储介质包括命令,当由计算机(10)执行时,所述命令促使所述计算机执行根据权利要求1至7中任一项所述的方法(100)的步骤。