静态分析工具
SonarQube、SpotBugs、ESLint 概念。
30 分钟
静态分析工具
测试验证 运行时行为;静态分析 在不执行程序的情况下扫描源码,发现空指针风险、资源泄漏、风格违规、重复块。它是 cq-style 与 cq-smells 的自动化延伸。
学习目标
- 理解 SonarQube、SpotBugs、ESLint 的定位差异
- 知道如何在 CI 中接入而不淹没团队
- 将工具结果纳入 cq-reviews 与 PR 流程
工具地图
| 工具 | 生态 | 主要能力 |
|---|---|---|
| SonarQube | 多语言 | 质量门禁、债务、重复、覆盖率汇总 |
| SpotBugs / PMD | Java | Bug 模式、复杂度 |
| Checkstyle | Java | 风格 |
| ESLint | JS/TS | 语法、React hooks、import 顺序 |
platform 已用 ESLint;backend 可逐步引入 SpotBugs 或 Sonar。不要一次开满规则,先 baseline 再收紧。
SonarQube 概念
- Quality Gate:如新代码覆盖率 ≥80%、无 Blocker
- Code Smell / Bug / Vulnerability 分级
- 技术债务 估算(分钟)→ 下一课 cq-debt
Sonar 不能替代 testing-essentials 的断言;也不能理解业务逻辑错误。
落地建议
本地:IDE 插件即时提示
PR: 只报告「新代码」问题(避免 legacy 洪水)
主干:Weekly 趋势,定 1 条债务偿还 OKR
与 git-essentials 保护分支配合:Quality Gate 不绿不 merge。Spring 项目注意 Lombok 与 SpotBugs 的已知误报,需在配置中排除或升级规则集,参考 spring-boot-essentials 构建插件文档。
AI 改大量文件时,静态分析 diff 是 第二道筛,见 ai-coding-essentials。
练习
- 本地对 backend 跑
mvn compile,看是否已有静态分析插件输出 - 在 platform 故意写一条 ESLint 可捕获的问题,确认 lint 失败
- 列出 3 条「值得 CI 阻断」vs「仅 warning」的规则