Go语言精进之路读书笔记第45条——使用模糊测试让潜在bug无处遁形
模糊测试就是指半自动地为程序提供非法的、非预期、随机的数据,并监控程序在这些输入数据下是否会出现崩溃、内置断言失败、内存泄漏、安全漏洞等情况。
45.1 模糊测试在挖掘Go代码的潜在bug中的作用#
Dmitry Vyukov 2015年使用go-fuzz在Go标准库中发现了137个bug。
45.2 go-fuzz的初步工作原理#
工作流程:
- 生成随机数据
- 将上述数据作为输入传递给被测程序
- 观察是否有崩溃记录(crash),如果发现崩溃记录,则说明找到了潜在的bug
45.3 go-fuzz使用方法#
1.安装go-fuzz
2.带有模糊测试的项目组织
3.go-fuzz-build
4.执行go-fuzz
适用场景:
- 处理复杂输入数据的程序
- 比如文件格式解析、网络协议解析、人机交互界面入口等
45.4 使用go-fuzz建立模糊测试的示例#
被测代码
func ParseComplex(data [] byte) bool {
if len(data) == 5 {
if data[0] == 'F' && data[1] == 'U' && data[2] == 'Z' && data[3] == 'Z' && data[4] == 'I' && data[5] == 'T' {
return true
}
}
return false
}
fuzz测试代码
// +build gofuzz
package parser
func Fuzz(data []byte) int {
ParseComplex(data)
return 0
}
45.5 让模糊测试成为“一等公民”#
Go工具链还没有在原生上支持go-fuzz
作者:brynchen
出处:https://www.cnblogs.com/brynchen/p/18064718
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
标签:
Go语言精进之路
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理