核心问题
能不能在写代码前证明流程没有洞?
工程困境
订单、支付、退款、访问权组合起来后,状态空间很大。靠脑补很容易漏。
思想模型
TLA+、Alloy 这类工具的核心不是语法,而是思想:
定义状态
定义操作
定义不变量
让机器搜索反例
你不一定要精通形式化验证,但要学会形式化地问问题。
工程落地
用轻量方式也可以:
- 画状态表
- 列不变量
- 列非法状态
- 写 property-based tests
- 写并发场景测试
Atlas Action
对一个复杂流程写:
State:
Actions:
Invariant:
Forbidden:
然后找一个能破坏它的反例。
小结
形式化验证的核心价值,是逼你把“应该没问题”变成“找不到反例”。