Skip to content

静态分析策略 = 自动化的规则 ​

解决什么问题:人工 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 层对位 ​

关键洞察 ​

  1. 静态分析是 review 的延伸——自动化部分规则。
  2. 类型系统是最强静态分析——投资编译器最划算。
  3. 规则需要生命周期——不能一步到位。
  4. 共享规则 = 知识共享——发现的问题组织共享。
  5. 与 cybernetics 同构——Ch 4 §4.6 不变量 = 静态分析检查的不变量。

从名家方法论与工程化思路中蒸馏出自己的工程体系。