System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种基于历史测试信息反馈的Java虚拟机模糊测试方法技术_技高网
当前位置: 首页 > 专利查询>西北大学专利>正文

一种基于历史测试信息反馈的Java虚拟机模糊测试方法技术

技术编号:43785964 阅读:2 留言:0更新日期:2024-12-24 16:20
本发明专利技术公开了一种基于历史测试信息反馈的Java虚拟机模糊测试方法,本发明专利技术首先通过从OpenJDK中搜集修复历史缺陷的补丁测试代码组成语料库,随后对语料库的修复代码片段进行解析,提取出与缺陷相关代码片段,再对缺陷相关代码片段进行组装得到测试用例,能够尽可能的利用缺陷触发片段覆盖深层缺陷源码分支。然后对组装完成的测试用例进行差分测试,在差分测试过程中通过历史测试信息对缺陷相关代码片段进行反馈调度,更高效地发现JVM的功能缺陷和软件漏洞。

【技术实现步骤摘要】

本专利技术涉及自动化软件测试领域,具体涉及一种基于历史测试信息反馈的java虚拟机模糊测试方法。


技术介绍

1、java虚拟机(jvm)通过软件技术实现了一个抽象的计算机平台,它不仅能够执行和优化java语言,还兼容scala、jython等其他语言编写的程序。由于jvm在不同的操作系统上存在相应版本,实现了“一次编写,到处运行”的设计理念。java等语言的源码首先编译成字节码文件,然后由jvm加载并执行,提升了jvm的可移植性和灵活性。但是由于其设计的复杂性,维护和修复jvm不仅成本高昂,而且修复过程中可能会引入新的缺陷。尽管jvm技术已经成熟,但潜在的软件缺陷仍然带来严峻的挑战。因此,确保jvm的安全性和正确性至关重要,准确识别和修复jvm缺陷尤为关键。

2、差分模糊测试是一种自动化软件缺陷检测技术,广泛应用于编译器和解释器的测试中。该技术主要用于发现软件功能实现上的问题。然而,目前的研究仍然面临两个主要挑战,限制了差分模糊测试在缺陷发现方面的效果。首先,如何构建能够触发缺陷的测试用例是关键问题。虽然生成正确的测试用例是测试jvm的基础要求,但要能覆盖与缺陷相关的路径,才能更有效地触发jvm的潜在缺陷。其次,如何利用测试过程中的历史信息来自动指导测试用例的生成也是一个难点。在差分测试中,执行结果信息往往难以有效指导下一轮测试用例的合成,因此自动化反馈生成能够触发jvm缺陷的测试用例仍然面临挑战。


技术实现思路

1、本专利技术的目的在于提供一种能够提高jvm模糊测试的效率的基于历史测试信息反馈的java虚拟机模糊测试方法。

2、为达到上述目的,本专利技术提供如下技术方案:

3、一种基于历史测试信息反馈的java虚拟机模糊测试方法,包括以下步骤:

4、步骤一:首先从openjdk中搜集修复历史缺陷的补丁测试代码组成语料库,对语料库中的修复代码片段进行解析,并提取与缺陷相关代码片段及执行该代码片段所需的参数定义语句;其次,构建种子池,为组装测试用例提供种子;最后,通过gcov工具对jvm的底层进行插桩,记录调用执行次数;

5、步骤二:对缺陷相关代码片段进行组装得到测试用例;

6、步骤三:对组装完成的测试用例进行差分测试。

7、进一步的,步骤一所述解析通过使用javaparser工具进行操作。

8、进一步的,步骤一所述种子池的构建是使用comfuzz模糊测试工具中开源的种子生成方法构建种子池。

9、进一步的,步骤二所述的组装过程为对步骤一中获取的缺陷相关代码片段进行综合组装,并随机引入符合参数类型的定义语句,以构建完整的测试用例。

10、进一步的,步骤二所述的组装过程为在合成测试用例过程中,将步骤一中的缺陷触发代码片段与种子进行组合拼接。

11、进一步的,所述缺陷触发代码片段与种子在进行组合拼接时通过以下步骤保证语法正确性:

12、步骤1:在待组装的缺陷相关代码片段中存在未定义变量、未导入包环境时,需要将缺陷相关代码片段中缺失的定义存入“上下文依赖信息”列表中,并与api标准信息库匹配,生成变量声明、包导入语句等相关上下文代码;

13、步骤2:解决种子与缺陷触发代码片段之间的冲突;

14、从种子中获取已存在的变量列表,也就是从种子中代码的起始位置到缺陷触发代码片段插入位置所有被声明的变量名称和类型列表,通过与上下文依赖信息匹配,进行修改重复变量名称,添加变量声明操作解决种子与缺陷触发代码片段之间的冲突,保证测试用例的语法正确性。

15、进一步的,步骤三所述差分测试的执行结果包括:

16、步骤三所述差分测试的执行结果包括:

17、所有jvm的返回值均为0且输出或报错信息一致,则判定为“通过”,即差分测试结果为“pass”;

18、所有jvm的返回值为0,但各jvm的输出信息不一致,则判定为“标准输出错误”,即差分测试结果为“stdout error”,表示某些jvm的输出信息存在问题;

19、大部分jvm返回值为0并且执行通过,而部分报错同时返回值为1,则判定为“标准错误”,即差分测试结果为“stderr error”,表示某些jvm运行时发生错误;

20、任意一个jvm的返回值为-9,则执行结果为“超时”,即差分测试结果为“timeout”,表示执行时间超过预期,存在性能问题;

21、任意一个jvm的返回值为除-9以外的其他负数,则执行结果为“崩溃”,即差分测试结果为“crash”,表示jvm崩溃,需要提交错误报告。

22、进一步的,通过以下步骤保证差分测试的效率:

23、反馈指标一:在步骤三执行过程中,差分测试通常会触发各种异常情况,根据这些异常反馈,将从数据中收集到的具有关键特征的正常测试用例添加到种子池中,从而有效地引入多个补丁历史测试片段;

24、反馈指标二:在步骤三执行过程中,插桩后的jvm可以实时统计源码的覆盖情况,并且通过gcov工具统计提取覆盖率信息

25、该反馈采用的方法是对上述cpp进行插桩后,对jvm源代码的每一行或每一个分支进行细粒度的覆盖率量化;从jvm源代码中收集从触发错误的代码段生成测试用例过程中的覆盖信息,建立触发错误的代码段与jvm源代码的单行和分支之间的关系;详细的覆盖信息难以调度缺陷触发代码片段,通过信息熵量化源码覆盖信息;

26、定义代码行和分支的总数量为c,每个cpp文件及其头文件中每个代码行或分支的被覆盖频数为fi,根据覆盖频数fi与源码代码行和分支的总数量为c的比值计算每个代码行或分支i的覆盖频率pi,并进行归一化处理,使用公式得到频率p′i,式中pj为每一行源码的覆盖频率,最后,通过公式根据得到的频率p′i计算当前源码覆盖情况的信息熵值h(m),信息熵值h(m)越高则缺陷触发代码片段的优先级越高,并使用该信息熵值h(m)更新缺陷触发代码片段的优先级,指导模糊测试器在后续迭代中选择信息熵值h(m)高的缺陷触发代码片段,则更有效地发现潜在的缺陷。

27、与现有技术相比,本专利技术具有以下有益效果:

28、本专利技术首先通过从openjdk中搜集修复历史缺陷的补丁测试代码组成语料库,随后对语料库的修复代码片段进行解析,提取出与缺陷相关代码片段,再对缺陷相关代码片段进行组装得到测试用例,能够尽可能的利用缺陷触发片段覆盖深层缺陷源码分支。然后对组装完成的测试用例进行差分测试,更高效地发现jvm的功能缺陷和软件漏洞。

29、进一步的,本专利技术通过收集测试用例执行结果以及在插桩jvm源码后收集覆盖率信息,组成历史测试信息,结合该历史测试信息设计了两个测试反馈策略,进一步结合步骤一中的组装测试用例,减少揭错的成本。

本文档来自技高网...

【技术保护点】

1.一种基于历史测试信息反馈的Java虚拟机模糊测试方法,其特征在于,包括以下步骤:

2.根据权利要求1所述的一种基于历史测试信息反馈的Java虚拟机模糊测试方法,其特征在于,步骤一所述解析通过使用JavaParser工具进行操作。

3.根据权利要求1所述的一种基于历史测试信息反馈的Java虚拟机模糊测试方法,其特征在于,步骤一所述种子池的构建是使用COMFUZZ模糊测试工具中开源的种子生成方法构建种子池。

4.根据权利要求1所述的一种基于历史测试信息反馈的Java虚拟机模糊测试方法,其特征在于,步骤二所述的组装过程为对步骤一中获取的缺陷相关代码片段进行综合组装,并随机引入符合参数类型的定义语句,以构建完整的测试用例。

5.根据权利要求1所述的一种基于历史测试信息反馈的Java虚拟机模糊测试方法,其特征在于,步骤二所述的组装过程为在合成测试用例过程中,将步骤一中的缺陷触发代码片段与种子进行组合拼接。

6.根据权利要求5所述的一种基于历史测试信息反馈的Java虚拟机模糊测试方法,其特征在于,所述缺陷触发代码片段与种子在进行组合拼接时通过以下步骤保证语法正确性:

7.根据权利要求1所述的一种基于历史测试信息反馈的Java虚拟机模糊测试方法,其特征在于,步骤三所述差分测试的执行结果包括:

8.根据权利要求1所述的一种基于历史测试信息反馈的Java虚拟机模糊测试方法,其特征在于,通过以下步骤保证差分测试的效率:

...

【技术特征摘要】

1.一种基于历史测试信息反馈的java虚拟机模糊测试方法,其特征在于,包括以下步骤:

2.根据权利要求1所述的一种基于历史测试信息反馈的java虚拟机模糊测试方法,其特征在于,步骤一所述解析通过使用javaparser工具进行操作。

3.根据权利要求1所述的一种基于历史测试信息反馈的java虚拟机模糊测试方法,其特征在于,步骤一所述种子池的构建是使用comfuzz模糊测试工具中开源的种子生成方法构建种子池。

4.根据权利要求1所述的一种基于历史测试信息反馈的java虚拟机模糊测试方法,其特征在于,步骤二所述的组装过程为对步骤一中获取的缺陷相关代码片段进行综合组装,并随机引入符合参数类型的定义语句,以构建完整的测...

【专利技术属性】
技术研发人员:汤战勇范镇业叶贵鑫胡天敏高杰韩佳祥
申请(专利权)人:西北大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1