介绍软件自动化测试的电子书"The Fuzzing Book"
www.fuzzingbook.org/
《模糊测试之书》是一本帮助读者掌握模糊测试技术,提升软件质量和安全性的权威指南:
第一部分“开胃菜” 简单介绍了软件测试的基础知识,包括测试的必要性、方法、以及如何评估测试的有效性,并引导读者熟悉后续内容中将使用的Python语言和交互式笔记本工具。
第二部分“词法模糊测试” 专注于介绍基于字符序列的测试生成技术。从最基础的随机输入生成开始,逐步引入代码覆盖率的概念来衡量测试效果,进而介绍了基于变异的模糊测试,通过对现有输入进行微小改动来探索新的程序行为,并借鉴了流行的AFL fuzzer的理念。此外,还探讨了灰盒模糊测试,即如何引导变异朝向特定目标(如提高代码覆盖率),以及如何利用搜索算法和变异分析技术来生成更有效的测试用例。
第三部分“语法模糊测试” 则转向了更高级的、基于语法结构的测试生成方法。这部分内容讲解了如何利用形式语法来描述合法的输入格式,并基于语法进行高效的测试生成,特别是针对复杂输入格式的程序。书中不仅介绍了基础的语法模糊测试,还进一步探讨了如何优化算法、进行语法覆盖、解析输入、引入概率以及结合生成器和灰盒技术来增强测试的针对性和效率。同时,还介绍了减少故障诱导输入的技术,以简化调试过程。
第四部分“语义模糊测试” 进一步深入,开始考虑输入的语义信息,即程序处理输入时的行为。这部分内容包括了如何处理带有约束的输入、如何自动挖掘输入语法、利用信息流和污点分析来生成更智能的测试用例,以及如何利用混合执行和符号执行技术来探索更广阔的输入空间。此外,还介绍了一种挖掘函数规范的技术,用于自动提取函数行为的抽象描述。
第五部分“特定领域模糊测试” 则将模糊测试技术应用到各种具体的领域。书中分别介绍了如何对软件配置、API接口、编译器、Web应用程序以及图形用户界面进行模糊测试,并针对每个领域都提供了相应的模糊测试工具和输入结构分析工具。
第六部分“管理模糊测试” 关注的是如何在实际生产环境中,尤其是在大规模场景下,有效地管理和运用模糊测试。这部分内容介绍了像Mozilla的FuzzManager这样的基础设施,用于在多台机器上长时间运行模糊测试,并收集和分析故障数据。同时,还讨论了一个重要的问题:何时应该停止模糊测试。
附录部分 提供了一些支持性的内容,包括学术和工业原型设计的指导,以及一些用于错误处理、计时、设置超时、绘制类图和铁路图,以及生成控制流图的实用工具。