当前位置:首页 >专题 >Go 原生 Fuzzing 质量工程专题

Go 原生 Fuzzing 质量工程专题
Go 原生 Fuzzing 质量工程

Go 原生 Fuzzing 质量工程专题

从 fuzz target、种子语料到安全回归
单元测试验证的是开发者想到的输入,而 Fuzzing 专门寻找没有想到的输入。本专题以 Go 官方 testing.F、覆盖率引导模糊测试和安全文档为主线,精选 17Golang 真实文章,带你从最小 fuzz target 开始,理解语料、失败输入、最小化、测试缓存与持续回归,最后把模糊测试接入 API、解析器和安全质量门禁。

官方入口

先建立 Go Fuzzing 的术语、命令和安全边界

Go Fuzzing 入门教程
外链

Go Fuzzing 入门教程

Go 官方教程,从 FuzzXxx、f.Add、f.Fuzz 到 go test -fuzz 的完整入门路径。
Go Fuzzing 安全文档
外链

Go Fuzzing 安全文档

Go 官方安全文档,说明模糊测试如何发现意外输入、保存失败用例并形成回归测试。
testing 包 Fuzzing API
外链

testing 包 Fuzzing API

testing.F、Fuzz、Add 等标准库 API 的权威参考。
Go 1.27 发布说明
外链

Go 1.27 发布说明

当前 Go 工具链发布说明,便于确认 go test、标准库和构建环境的版本边界。
Go 安全开发指南
外链

Go 安全开发指南

Go 官方安全入口,覆盖输入处理、依赖和测试等安全实践。

实战学习路径

从最小案例推进到可复现、可回归的质量闭环

Go1.18新特性工作区模糊测试及泛型的使用详解
文章

Go1.18新特性工作区模糊测试及泛型的使用详解

介绍 Go 1.18 原生模糊测试、FuzzXxx、f.Fuzz、fuzztime 与失败输入文件。
Go中的新增对模糊测试的支持
文章

Go中的新增对模糊测试的支持

从 Go 工具链和 testing 标准库角度说明原生模糊测试的设计背景。
Go fuzz 测试怎么保存可复现的失败输入
文章

Go fuzz 测试怎么保存可复现的失败输入

聚焦失败输入的保存、定位和复现,让一次 fuzz 发现变成稳定测试用例。
Go 测试为何不考虑缓存而将 -count=1 参数应用?
文章

Go 测试为何不考虑缓存而将 -count=1 参数应用?

解释 Go 测试缓存、-count=1 与 fuzz seed 重跑时的关系。
go1.18 在进行模糊测试时是否进行仪器字符串比较?
文章

go1.18 在进行模糊测试时是否进行仪器字符串比较?

围绕字符串比较和覆盖率反馈,讨论 fuzz engine 能否持续发现深层输入。
Golang 函数测试框架如何选择?
文章

Golang 函数测试框架如何选择?

对比 testing、testify、gomock、go-fuzz 等 Go 测试工具的适用范围。
Golang框架安全测试的实战指南
文章

Golang框架安全测试的实战指南

从静态分析、单元测试到 Fuzzing,梳理 Go 框架的安全测试组合。
模糊测试:发现隐藏漏洞的综合指南
文章

模糊测试:发现隐藏漏洞的综合指南

解释模糊测试的目标、异常输入、漏洞发现和持续质量保障价值。

常见问题

把随机探索变成可解释、可复现的工程资产

Go Fuzzing 和普通单元测试有什么区别?

单元测试通常由开发者明确给出输入与期望结果;Fuzzing 会根据种子和覆盖率反馈持续生成输入,重点寻找 panic、错误状态和未预期行为。两者应组合使用,失败的 fuzz 输入还可以沉淀为普通回归测试。

Fuzz target 应该测试哪些函数?

优先选择解析器、编码解码、协议边界、鉴权输入和对外 API 校验等处理不可信输入的函数,并保证输入类型简单、断言稳定、执行成本可控。

发现失败输入后应该怎么处理?

先用 go test -run 复现并定位问题,修复后保留 testdata/fuzz/FuzzXxx 下的失败输入,让后续普通 go test 默认执行它,避免同一缺陷再次出现。

Fuzzing 适合在 CI 中一直运行吗?

CI 中通常运行固定时长或固定资源预算的 fuzz job,并缓存语料和上传失败样本;日常提交保持快速 seed 回归,夜间或专用 runner 承担更长的探索任务。

微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码