zoukankan      html  css  js  c++  java
  • 静态代码检测工具对比(Java)

    工具 目的   主要检查内容   特点 开源/付费 区别
    FindBugs 基于Bug Patterns概念,注重检测真正的bug及潜在的性能问题 ,尤其注意了尽可能抑制误检测(false positives)的发生。   主要包括: l 检查bytecode中的bug patterns l 也允许用户自定义特定的bug patterns l 检测equals() 实现时的一般规约违反 Null pointer的参照 l Method的返回值的check遗漏 l 初始化前field的访问 l Multi-thread的正确性 l 检测Code的脆弱性,可以变更的静态object ,内部数列参照的return等   主要包括: l FindBugs主要着眼于寻找代码中的缺陷,以bytecode(*.class、*.jar)为对象进行检查,不检查java源代码 l FindBugs可以通过命令行、各种构建工具(如Ant、Maven等)、独立的Swing GUI或是以IDE插件的方式来运行 l FindBugs输出结果既可以是XML的,也可以是文本形式的 l 不注重style及format,注重检测真正的bug及潜在的性能问题,尤其注意了尽可能抑制误检测(false positives)的发生 l findBugs有过滤器可以帮你过滤掉一些没必要的检测器 l findBugs可以编写自定义的检测器 开源 l FindBugs主要解决当前和潜伏故障。它寻找普通问题和常常显示某处出错的小处代码。 l 直接操作类文件(class文件)而不是源代码,使用字节码分析来生成他的故障报告 l 提供图形界面的独立程序,对jar进行检测,有报告生成,很方便 l findbugs 大多数提示有用,值得改 l FindBugs 处于非常活跃的开发中,并且你可以扩展它,通过插入机制将自定义检查包括进来
    PMD 检查java源文件中的潜在问题。   主要包括: l 潜在的bug l 未使用的代码 l 可选的代码 l 复杂的表达式 l 重复的代码   主要包括: l PMD通过静态分析获知代码错误 l PMD附带了很多规则,用户也可以自定义规则,利用这些规则可以找出源程序的很多错误 l PMD已于多种IDE集成在一起,使用比较方便 开源 l PMD使用源代码分析,与编译器工作方式类似,除了它生成故障报告而不是字节码之外 l 插件可以配置规则,有一个独立显示问题的视图,也很方便 l PMD 一部分值得改, 有些太严格了,一般来说,需要自定义规则才通过检验
    CheckStyle 检查java源文件是否与代码规范相符   主要包括: l Javadoc注释 l 命名规范 l Headers l Imports l Size冲突和度量,如过长的方法 l Whitespace l Modifiers l Blocks l Coding Problems l Class Design l 重复代码 l Miscellaneous Checks l Optional Checks l l 它可以有效的帮助我们检视代码以便更好的遵循代码编写标准,特别适用于小组开发时彼此间的样式规范和统一 l Checkstyle提供了高可配置性,以便适用于各种代码规范,它内带很多标准,用户也可以自定义一些标准 l Checkstyle提供了支持大多数常见IDE的插件 l Checkstyle可以检查代码层面的类设计的问题,重复代码,如锁的双重检查的bug模式 开源 l 检查源码,主要关注源码格式 l Checkstyle 与PMD相当相似,尽管它在寻找组织故障方面更为出色 l checkstyle 过于严格,自定义规则才行 l 插件自定义规则没有查找功能,查找规则麻烦
    Hammurapi 它是一个开源的代码审查/评审(review)工具,主要目的是用来强制代码设计规范的,操作对象是java源代码 l l Hammurapi使用另一个API,基于ANTLR 的JSEL(Java源程序工程类库),来访问抽象语法树。一旦树构建完成,一种树遍历算法就被用来访问树中每一个节点。每次访问到一个节点,一种回调机制(Visitor模式)被用来提示相应的检查器。在这些回调方法中,检查器收集相关的信息来确定是否有违反规范的地方存在。 l l Hammurapi是用来强制代码设计规范的 l Hammurapi是一个遵循设计的工具,提供了自动而且一致的方式来实现设计规范,因此使代码评审更加有效而轻松。 开源 l 操作对象是java源代码 l 强制代码设计规范 l 主要用于代码审查/评审
    Lint4j 针对Java的源代码分析工具,它可以对Java源码和字节码进行静态分析,判断其中是否存在死锁、性能问题或者伸缩性问题 l l 检测代码语法规则 l 潜在的bug l 检测编码模式对代码可读性及大小的影响 l 检测是否违反EJB规范 l l 能检测? 检测编码模式对代码可读性及大小的影响 l 能检测检测是否违反EJB规范 l 能判断代码中是否存在判断其中是否存在死锁、性能问题或者伸缩性问题 免费非开源 l 操作对象Java源码和字节码 l 用于检测代码是否存在死锁、性能问题或者伸缩性问题及编码模式
    Sonar 提供了设计与架构度量,是一个集成了CheckStyle 、PMD、 Findbugs的代码校验规则 ,重复代码发现,代码测试覆盖率, 代码注释率,及所有的检测率变化追踪的完美代码质量检查工具 l l 提供设计与架构度量 l 检测未使用的方法 l 检测代码结构 l 检测代码语法 l 检测重复代码等 l 潜在的bug l l 代码覆盖:通过单元测试,将会显示哪行代码被选中。 l 改善编码规则。 l 搜寻编码规则:按照名字,插件,激活级别和类别进行查询。 l 项目搜寻:按照项目的名字进行查询。 l 对比数据:比较同一张表中的任何测量的趋势。 l 单元测试 开源 l 提供了设计与架构度量 l 引入了针对Java应用的设计分析、架构与面向对象的度量 l 它集成了CheckStyle 、PMD、 Findbugs 的代码检验规则,安装 l 功能极其丰富、 强大, 可以对代码从可靠性, 执行效率, 可移植性, 可维护性, 可用性等多个方面进行评估
    JDepend 分析出我们的包是否是可靠的,稳定的,健壮的包,是否符合面向对象的设计原则 l l 检测类与类之间的依赖关系 l 检测package的循环依赖 l 分析包的稳定程度,抽象程度 l l 评价设计质量 l 翻转依赖性 l 支持并行开发和极限编程 l 独立的发布模块 l 识别package的循环依赖 开源 l 主要用于检测包与包之间的可靠性、稳定的性、健壮性 l 分析包的依赖关系及包的抽象程度
    BEAM (IBM Checking Tool for Bugs Errors and Mistakes) 分析并查找出 C, C++ 和 Java 代码中的一些不容易发现的潜在错误,从而达到提高代码质量的目的 l l 检测代码语法,并分析代码 l 与一些常见的bug模式比对,找出一些bug l l 可以检测代码中一些潜在的错误 l 利用了额外的定理证明技术判断错误是否是真正的错误,从而减轻了程序员判断真伪所需的工作量 开源 l 可以对多种语言进行检测 l 利用了额外的定理证明技术判断错误是否是真正的错误,从而减轻了程序员判断真伪所需的工作量 l 相比其他检测工具来说它的功能还不够强大
    LDRA Testbed 为应用软件的确认和验证提供强大的源代码测试和分析功能 l l 分析代码 l 利用源代码的插桩版本,使用测试数据执行,在运行时发现软件的缺陷 l l 定位软件缺陷 l 强制工业标准 开源 l 通过对源代码进行插桩 l 侧重于检测的认证问题 l 通过测试数据来生成报告
    Yasca 寻找安全漏洞,在程序的源代码中检测代码质量、性能以及一致性 l l 检测代码质量、性能以及一致性 l l 可以寻找出代码中存在的安全漏洞 l 它集成了其他开源项目,其中包括FindBugs , PMD, JLint ,Cppcheck ,并扫描某些文件类型,使用起来非常灵活,可以自定义规则 开源 l 分析源代码 l 侧重于检测一些有关于安全漏洞及性能问题

    本文转自:http://hi.baidu.com/yhl1234qwer/blog/item/8cd5d31fe57bf58587d6b6e9.html

  • 相关阅读:
    Docker基础-端口映射与容器互联
    Docker基础-Docker数据管理
    Docker基础-搭建本地私有仓库
    Docker基础-容器操作
    Docker基础-镜像操作
    CentOS 7.2安装Docker-ce
    CentOS7下搭建yum仓库
    phpize命令在安装AMQP插件是报错phpize:Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF envir的解决方法
    CentOS下安装PHP的AMQP扩展方法和步骤
    Python-面向对象编程01_什么是面向对象
  • 原文地址:https://www.cnblogs.com/daichangya/p/12960114.html
Copyright © 2011-2022 走看看