用于 Kotlin 编译器差分测试的演化生成式模糊测试
软件工程
2024-01-15 v1
摘要
编译器正确性是可靠软件开发的基石。然而,鉴于可能程序的巨大空间和现代编程语言的复杂性,对编译器进行系统性测试是不可行的。在此背景下,差分测试提供了一种实用的方法,因为它通过比较给定相同程序集作为输入时替代编译器的输出,解决了测试预言问题。本文中,我们研究了差分测试在发现 JetBrains 开发的 Kotlin 编译器中的错误方面的有效性。我们提出了一种黑盒生成方法,为 K1 和 K2 编译器创建输入程序。首先,我们构建了 Kotlin 语义(语义接口)和句法(丰富的上下文无关文法)语言特性的可行模型,随后利用这些模型生成随机代码片段。其次,我们通过引入两种遗传算法(GA)来扩展随机采样,旨在生成更多样化的输入程序。我们的案例研究表明,所提出的方法有效地检测了 K1 和 K2 中的错误;这些错误已由 JetBrains 开发人员确认并(部分)修复。虽然我们没有观察到不同搜索算法在发现的缺陷数量方面存在显著差异,但随机搜索和遗传算法是互补的,因为它们发现了不同类别的错误。最后,我们提供了关于生成的输入程序的大小、复杂性和故障检测能力之间关系的见解。
引用
@article{arxiv.2401.06653,
title = {Evolutionary Generative Fuzzing for Differential Testing of the Kotlin Compiler},
author = {Calin Georgescu and Mitchell Olsthoorn and Pouria Derakhshanfar and Marat Akhin and Annibale Panichella},
journal= {arXiv preprint arXiv:2401.06653},
year = {2024}
}