使用 Zest 的语义模糊测试
软件工程
2019-06-11 v3
摘要
期望结构化输入的程序通常由两个阶段组成:解析原始输入的语法分析阶段,以及对解析后的输入进行检查并执行程序核心逻辑的语义分析阶段。源自 QuickCheck 的基于生成器的测试工具是为这些程序生成随机语法有效测试输入的一种有前景的方法。我们提出了 Zest,这是一种自动引导类 QuickCheck 随机输入生成器以更好地探索测试程序语义分析阶段的技术。Zest 将随机输入生成器转换为确定性参数化生成器。我们提出了一个关键见解:无类型参数域中的变异映射到输入域中的结构变异。Zest 利用代码覆盖率和输入有效性形式的程序反馈来执行反馈导向的参数搜索。我们在五个 Java 程序上对 Zest 与 AFL 和 QuickCheck 进行了评估:Maven、Ant、BCEL、Closure 和 Rhino。在基准测试的语义分析阶段,Zest 覆盖的分支数是基线技术的 1.03 倍至 2.81 倍。此外,我们在这些基准测试的语义分析阶段发现了 10 个新 bug。Zest 是可靠且快速地发现这些 bug 的最有效技术,平均每个 bug 最多需要 10 分钟即可发现。
引用
@article{arxiv.1812.00078,
title = {Semantic Fuzzing with Zest},
author = {Rohan Padhye and Caroline Lemieux and Koushik Sen and Mike Papadakis and Yves Le Traon},
journal= {arXiv preprint arXiv:1812.00078},
year = {2019}
}
备注
To appear in Proceedings of 28th ACM SIGSOFT International Symposium on Software Testing and Analysis (ISSTA'19)