这是一篇关于测试系统 Graft 及 Antithesis 超虚拟机的技术文章,主要内容如下:
- DST 起源故事:2010 年 FoundationDB 团队思考如何在真实故障条件下可靠测试分布式数据库,基于 Dave Scherer 的直觉,他们将模拟作为实现,开发出 Simulation 确定性测试工具,如今这种模式称为 DST,成为构建可靠基础设施的基础技术,但自建 DST 不易。2018 年,构建 FoundationDB 的团队开发了通用 DST 平台 Antithesis。
- Graft 案例研究:使用 Antithesis 改变了测试方式,定义关于系统行为的属性,让 Antithesis 探索状态空间、注入故障并发现隐藏的设计缺陷和并发边缘情况,如恢复期间连锁故障导致的错误回滚、请求突然终止导致的段损坏、SQLite 页面缓存导致的陈旧数据等问题。
- Antithesis 超虚拟机:为确定性运行任意软件,Antithesis 构建了一个低级别虚拟机即超虚拟机,在密封环境中运行整个软件栈,消除所有不确定性源,将服务转换为纯状态机,通过记录初始状态和操作序列实现时间回溯,探索可能的软件生命周期。
- 故障注入、测试组合与指导:Antithesis 向软件注入真实世界的故障,包括系统故障、并发故障和时间故障等,与特定场景结合推动软件偏离正常路径以发现隐藏错误;测试组合像自动集成测试生成器,通过混合测试命令生成随机场景;指导以“断言”形式出现,告知 Antithesis感兴趣或错误的事件,有 5 种不同类型的断言,如
AssertSometimes
等,可帮助 Antithesis 探索软件状态空间。 - DST + 指导 = 更安全软件:结合确定性模拟、故障注入、测试组合、指导和多宇宙,Antithesis 可精确深度地模糊测试复杂系统,不仅是 bug 查找器,还重塑测试思维,让开发者定义高级属性让 Antithesis 探索系统,随着时间推移,测试套件不断进化,是基于属性的模糊测试到整个系统的范式转变。
- 了解更多关于 Graft 的信息:可查看“Stop syncing everything”博客了解 Graft,或前往 GitHub 参与贡献,还可通过讨论、加入 Discord 或发邮件交流反馈,计划推出 Graft 管理服务,可注册等待名单。
脚注:
- 其他测试方法存在但不能确定性模拟全分布式系统。
- FoundationDB 已运行超过一万亿 CPU 小时的模拟测试。
- Antithesis 像放大的基于属性的测试系统。
- 该 bug 在 149784 个时间线中出现 64 次,失败率 0.04%。
- 将软件打包在 Docker 容器中。
- 想象 Electron 应用的状态机。
- Antithesis 的断言术语易混淆,作者创建了 precept 库用“expect”代替。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。