静态分析策略 = 自动化的规则
解决什么问题:人工 review 难以覆盖所有规则—— 静态分析 = 把规则自动化 = 强制 + 标准化 + 规模化。
业务问题
真实场景
场景 1:人工 review 的局限
人工 review 难发现:
- 性能问题(需要理解运行时)
- 安全漏洞(需要专业知识)
- 风格违规(容易疲劳)
- 跨文件问题(信息不完整)
人工 review 容易:
- 个人偏好
- 风格争论
- 漏掉重要问题静态分析 4 层
L1:Lint(语法 + 风格)
- 风格违规
- 明显错误
- 工具:ESLint, Pylint, golangci-lint
L2:类型检查
- 类型错误
- 接口违规
- 工具:TypeScript, mypy, Go
L3:Bug 模式检测
- 常见 bug 模式
- 性能问题
- 安全漏洞
- 工具:Error Prone, SpotBugs, CodeQL
L4:架构检查
- 模块依赖
- 循环引用
- 接口一致
- 自研工具Google 的 Tricorder
功能:
- 自动运行所有静态分析
- 提交前 + 提交后
- 自动修复(auto-fix)
- 结果汇总到 review 工具
效果:
- 减少 review 工作量
- 强制执行规则
- 知识共享(发现的问题 → 共享给所有人)规则的生命周期
1. 提议(提议分析规则)
2. 实验(小范围)
3. 警告(warn 而非 error)
4. 强制(error)
5. 删除(不再需要时)工程实践
决策 1:投资哪一层
优先级:
L1 Lint:必做(最低成本最高收益)
L2 Type:强烈推荐(编译时错误)
L3 Bug 模式:建议(高价值)
L4 架构:成熟团队(投资回报高)决策 2:警告 vs 错误
新规则:
- 第 1-3 个月:警告(warn)
- 第 4-6 个月:默认错误,但可豁免
- 7+ 月:强制(必须修)与 L 层对位
关键洞察
- 静态分析是 review 的延伸——自动化部分规则。
- 类型系统是最强静态分析——投资编译器最划算。
- 规则需要生命周期——不能一步到位。
- 共享规则 = 知识共享——发现的问题组织共享。
- 与 cybernetics 同构——Ch 4 §4.6 不变量 = 静态分析检查的不变量。