14. CI 的质量门禁 1:Lint/格式化/静态分析(SAST)

把低成本问题尽量在最早阶段挡住。

本章目标

把“低成本错误”尽量挡在最前面:格式化/Lint/SAST 让问题更早暴露、更便宜修复。

你会掌握

Formatter 与 Lint 的职责边界、SAST 的定位与误报治理、以及如何分层落地质量门禁。

真实收益

减少评审摩擦与返工,让安全问题更早被发现;团队把精力从“抓低级错误”转向“讨论设计与风险”。

最痛苦的 bug 往往不是“难”,而是“蠢”:缩进乱、变量没用、空指针、SQL 注入、危险拼接……
这些问题如果在 PR 里才被发现,就会浪费评审时间;如果在生产才被发现,就会变成事故。
所以质量门禁的第一层,必须用自动化把“低成本错误”挡住——让人类把脑子用在更贵、更难、更需要判断的事情上。

1) 三个概念:Formatter / Lint / SAST 分别负责什么?

一句话区分:Formatter 管“长相”,Lint 管“行为习惯”,SAST 管“安全底线”。
它们组合在一起,才能既减少争论,又减少事故。

2) 门禁前移:为什么要越早越好?

同一个问题,越晚发现越贵:

图 1:门禁前移(动态)

把低成本错误尽量挡在最靠近开发者的地方:本地/预提交 → PR 门禁 → 合并后深度检查。

Local formatter + lint 秒级反馈 PR Gate lint + unit + SAST 分钟级 Main deep scans 更深更慢 Release pre-release checks 高风险才跑

3) 规则资产化:把“人的经验”变成“机器的护栏”

成熟团队会把规则当作资产(像测试一样):版本化、可评审、可回滚、可度量。

图 2:规则 → 门禁 → 反馈闭环(动态)

规则不是越多越好;关键是能否形成闭环:发现问题 → 抽象规则 → 自动化执行 → 度量误报与收益。

Finding 评审/事故发现问题 Rule 抽象为规则/模式 Gate CI 门禁自动执行 Metrics 误报率/耗时/拦截率 持续调优规则

4) SAST:安全门禁如何既“有用”又“不扰民”?

SAST 的最大风险不是“漏报”,而是误报太多导致团队不再相信它。

要让 SAST 有用,通常需要:

图 3:SAST 数据流(Source → Analyzer → Findings → Gate)(动态)

SAST 不是“跑一下工具”,而是一条数据链:输入、分析、产出、决策与治理。

Source code + config 上下文很重要 Analyzer SAST engine 规则 + 数据流 Findings severity + confidence 误报治理 Gate block / warn 分级决策

5) 本章小结:质量门禁要像护栏一样“默认正确”

← 上一章:增量与影响面 下一章:质量门禁 2(SCA/许可证)→