最近团队想引进代码静态检测工具,稍微调研一下:
工具比较
功能比较
Checkstyle | FindBugs | PMD | Jtest | SonarQube | |
---|---|---|---|---|---|
使用方式 | IDE插件 | IDE插件 | IDE插件 | IDE插件 | IDE插件+独立部署的服务 |
自定义规则 | √ | √ | √ | √ | √ |
集成到Jenkins中 | √ | √ | √ | √ | |
多版本统计 | √ | ||||
缺陷跟踪记录统计 | √ | ||||
代码测试覆盖率 | √ (需要配合jacoco) |
工具查错能力比较
代码缺陷分类 | 示例 | Checkstyle | FindBugs | PMD | Jtest |
---|---|---|---|---|---|
引用操作 | 空指针引用 | √ | √ | √ | √ |
对象操作 | 对象比较(使用 == 而不是 equals) | √ | √ | √ | |
表达式复杂化 | 多余的 if 语句 | √ | |||
数组使用 | 数组下标越界 | √ | |||
未使用变量或代码段 | 未使用变量 | √ | √ | √ | |
资源回收 | I/O 未关闭 | √ | √ | ||
方法调用 | 未使用方法返回值 | √ | |||
代码设计 | 空的 try/catch/finally 块 | √ |
SonarQube 特征
- 支持超过25种编程语言:Java、C/C++、C#、PHP、Flex、Groovy、JavaScript、Python、PL/SQL、COBOL等。(不过有些是商业软件插件)
- 可以集成不同的测试工具,代码分析工具,以及持续集成工具,比如pmd-cpd、checkstyle、findbugs、Jenkins。通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理
- 可以在Android开发中使用
- 提供重复代码、编码标准、单元测试、代码覆盖率、代码复杂度、潜在Bug、注释和软件设计报告
- 提供了指标历史记录、计划图(“时间机器”)和微分查看
提供了完全自动化的分析:与Maven、Ant、Gradle和持续集成工具(Atlassian Bamboo、Jenkins、Hudson等) - 与Eclipse开发环境集成
- 与JIRA、Mantis、LDAP、Fortify等外部工具集
- 支持扩展插件
- 利用SQALE计算技术债务
- 支持Tomcat。不过计划从SonarQube 4.1起终止对Tomcat的支持。