主要观点:模糊测试很有用但存在黑箱问题,文中通过cargo llvm-cov
和cargo fuzz
来获取代码覆盖信息,探讨了好的语料库对模糊测试的重要性,以及如何生成覆盖报告和处理错误分支等。
关键信息:
cargo llvm-cov
可用于确定测试套件对代码基某些部分的覆盖情况,但其不支持从模糊器获取覆盖信息。cargo fuzz
命令可用于获取模糊器的覆盖信息,通过运行模糊目标处理语料库中的文件并存储覆盖数据。- 好的语料库能引导模糊器生成更有趣的输入,如使用
Arbitrary
trait和自定义语料库(如compression-corpus
)。 - 生成覆盖报告需使用
llvm-cov
命令,注意相关配置和依赖。 - 模糊器中的错误处理代码可能未被覆盖,可通过返回特定类型值来告知模糊器保留输入以报告错误路径。
- 在 CI 中使用
cargo fuzz
和llvm-cov
来跟踪和可视化模糊测试的覆盖情况,且仅在 CI 运行中短时间运行模糊器以确保语料库的重要性。
重要细节: - 文中以
zlib-rs
的uncompress
模糊器为例,展示了如何获取覆盖信息和处理相关问题。 - 介绍了在
inflate.rs
中使用不同语料库的覆盖情况对比,自定义压缩语料库效果显著。 - 感谢 Ameer Ghani 和 Sergey "Shnatsel" Davidoff 在模糊测试相关工作中的贡献。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。