Nox-Lumen MfgNox-Lumen Mfg

Java 静态分析

Java 栈的 L1 静态分析由三件套协同,从源码规范字节码语义 Bug 全覆盖。

Skill维度一句话描述
checkstyle风格代码风格 + 命名规范(Google Java Style / Sun Coding Convention)
pmd规则可疑代码模式检测(死代码 / 过度复杂 / 异常处理反模式)
spotbugs字节码 BugJava 字节码级 Bug 检测 + FindSecBugs 安全扫描

checkstyle

用途:Java 代码风格与规范检查。

检测项示例
命名类名 PascalCase,方法 camelCase,常量 UPPER_SNAKE
缩进缩进 / 空格 / 大括号位置
Import顺序、分组、避免通配符
Javadoc公共 API 是否有文档
行长 / 方法长度行 ≤ 120、方法 ≤ 50 等

常用规则集:Google Java Style、Sun Coding Convention、企业定制(可通过 standards-converter 生成)。

触发:"Java 代码风格"、"checkstyle 检查"、"Google Java Style"

pmd

用途:检测可疑代码模式(不是语法错误,但通常是 Bug 温床)。

类别示例
死代码不可达分支、未使用变量
过度复杂圈复杂度过高、if/else 深嵌套
异常处理反模式catch (Exception) {} 吞异常
并发陷阱Vector/Hashtable 的误用
安全SecurityManager 缺失、反射滥用

规则集basiccodesizedesignnamingoptimizationsstrictexception 等。

触发:"Java 代码异味"、"PMD 检查"、"圈复杂度"

spotbugs

用途字节码级 Bug 检测(比源码分析更准,因为能看到编译器的实际产物)。

检测项示例
空指针NPE 可达路径
资源泄漏InputStream / Connection 未关闭
并发 Bug未同步的 static 变量写
序列化风险非 Serializable 字段
OWASPFindSecBugs 插件:SQL 注入 / XSS / SSRF

与 pmd 的区别

维度pmdspotbugs
分析对象源码 AST字节码(.class)
精度语法级语义级(更准)
覆盖代码异味真实 Bug + 安全

触发:"Java Bug 检测"、"spotbugs 扫描"、"FindSecBugs 安全扫描"

组合使用建议

checkstyle   → 代码规范(必跑)
pmd          → 代码异味(必跑)
spotbugs     → 字节码 Bug + 安全(必跑)

三者不冲突、互补。输出统一 CodeEvidence → 交给 code-review 做 L2 语义评审。

企业定制规则

通过 standards-converter 可以把"企业编码规范.md"自动转换为 checkstyle.xml / pmd-ruleset.xml / spotbugs.xml。

On this page