跳转至

GitProject 代码质量检测

时间:2018/6/17 15:42:05

参考:

  1. SonarQube
  2. 常用 Java 静态代码分析工具的分析与比较

代码质量检测项目#

常用代码静态分析工具#

静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等。

  • Checkstyle

    Checkstyle 是 SourceForge 的开源项目,通过检查对代码编码格式,命名约定,Javadoc,类设计等方面进行代码规范和风格的检查,从而有效约束开发人员更好地遵循代码编写规范。

    内置规范:

    • Javadoc 注释:检查类及方法的 Javadoc 注释
    • 命名约定:检查命名是否符合命名规范
    • 标题:检查文件是否以某些行开头
    • Import 语句:检查 Import 语句是否符合定义规范
    • 代码块大小,即检查类、方法等代码块的行数
    • 空白:检查空白符,如 tab,回车符等
    • 修饰符:修饰符号的检查,如修饰符的定义顺序
    • 块:检查是否有空块或无效块
    • 代码问题:检查重复代码,条件判断,魔数等问题
    • 类设计:检查类的定义是否符合规范,如构造函数的定义等问题
    • FindBugs

    FindBugs 是由马里兰大学提供的一款开源 Java 静态代码分析工具。FindBugs 通过检查类文件或 JAR 文件,将字节码与一组缺陷模式进行对比从而发现代码缺陷,完成静态代码分析。

    内置规范:

    • Bad practice 坏的实践:常见代码错误,用于静态代码检查时进行缺陷模式匹配
    • Correctness 可能导致错误的代码,如空指针引用等
    • 国际化相关问题:如错误的字符串转换
    • 可能受到的恶意攻击,如访问权限修饰符的定义等
    • 多线程的正确性:如多线程编程时常见的同步,线程调度问题。
    • 运行时性能问题:如由变量定义,方法调用导致的代码低效问题。
    • PMD

    PMD 是由 DARPA 在 SourceForge 上发布的开源 Java 代码静态分析工具。PMD 通过其内置的编码规则对 Java 代码进行静态检查,主要包括对潜在的 bug,未使用的代码,重复的代码,循环体创建新对象等问题的检验。

    内置规范:

    • 可能的 Bugs:检查潜在代码错误,如空 try/catch/finally/switch 语句
    • 未使用代码(Dead code):检查未使用的变量,参数,方法
    • 复杂的表达式:检查不必要的 if 语句,可被 while 替代的 for 循环
    • 重复的代码:检查重复的代码
    • 循环体创建新对象:检查在循环体内实例化新对象
    • 资源关闭:检查 Connect,Result,Statement 等资源使用之后是否被关闭掉
    • Jtest

    Jtest 是 Parasoft 公司推出的一款针对 Java 语言的自动化代码优化和测试工具,Jtest 的静态代码分析功能能够按照其内置的超过 800 条的 Java 编码规范自动检查并纠正这些隐蔽且难以修复的编码错误。同时,还支持用户自定义编码规则,帮助用户预防一些特殊用法的错误。

    内置规范:

    • 可能的错误:如内存破坏、内存泄露、指针错误、库错误、逻辑错误和算法错误等
    • 未使用代码:检查未使用的变量,参数,方法
    • 初始化错误:内存分配错误、变量初始化错误、变量定义冲突
    • 命名约定:检查命名是否符合命名规范
    • Javadoc 注释:检查类及方法的 Javadoc 注释
    • 线程和同步:检验多线程编程时常见的同步,线程调度问题
    • 国际化问题:
    • 垃圾回收:检查变量及 JDBC 资源是否存在内存泄露隐患

代码质量检测平台 SonarQube#

简介:Sonar (SonarQube)是一个开源平台,用于管理源代码的质量。

  • 可以集成各种 静态分析工具 以及其他软件 开发测试工具
  • 提供Web界面。
  • 支持的语言包括:Java、PHP、C#、C、Cobol、PL/SQL、Flex 等。