还剩15页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
Java静态检测工具的简洁介绍静态检查:静态测试包括代码检查、静态结构分析、代码质量度量等它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行代码检查代码检查包括代码走查、桌面检查、代码审查等,主要检查代码和设计的一样性,代码对标准的遵循、可读性,代码的逻辑表达的正确性,代码结构的合理性等方面;可以发觉违反程序编写标准的问题,程序中担忧全、不明确和模糊的部分,找出程序中不行移植部分、违反程序编程风格的问题,包括变量检查、命名和类型审查、程序逻辑审查、程序语法检查和程序结构检查等内容看了一系列的静态代码扫描或者叫静态代码分析工具后,总结对工具的看法静态代码扫描工具,和编译器的某些功能其实是很相像的,他们也须要词法分析,语法分析,语意分析…但和编译器不一样的是他们可3)搜寻编码规则依据名字,插件,激活级别和类别进行查询4)项目搜寻依据项目的名字进行查询5)对比数据比较同一张表中的任何测量的趋势6)单元测试3)Sonar
2.1Sonar还基于Squid引入了一个全新的规则引擎、Sonar解析器既可以处理源代码,也可以处理字节码,解析器带有内建的规则,可以检测未运用的私有与爱惜方法以及客户端对不建议运用的方法的调用Squid通过分析应用源代码、Java API和外部程序库的字节码来确定哪些方法、类和属性是不建议运用的Sonar
2.1的新特性1)一个全新的“Libraries”页面,显示了项目中全部的程序库和依靠,该特性要求运用Maven来构建项目一旦在Sonar站点的主页上选择了一个项目,该服务就会以可视化的树形结构展示出项目依靠止匕外,还有一个可选的动态过滤器,可以依据名称过滤程序库以便在应用的依靠间导航2用于搜寻程序库运用状况的“Dependencies”页面比如说,可以搜寻到运用了第三方框架如Commons Logging
1.1的全部项目3可以运用各种插件扩展Sonar的功能现在有一个全新的“System Info”页面显示了系统属性、已装插件和Java虚拟机内存统计信息该页面还给出了关于Sonar配置和数据库统计的详细信息4一个用于管理已装插件和系统信息的管理限制台最新版的Sonar为这些插件引入了一个测试框架和一个客户化的Maven生命周期管理工具它还带有一个用于集成项目事务的Web Service并在项目的size widget中增加了一个新的度量模块JDepend1JDepend一个开放源代码的可以用来评价Java程序质量的优秀工具,它遍历Java class的文件书目,以Java包(package)单位,为每一个包/类自动生成包的依靠程度,稳定性,牢靠度等的评价报告,依据这些报告,我们可以得到包或类之间的依靠关系,并分析出包的稳定程度,抽象程度,是否存在循环依耐关系等可以依据JDepend给出的报告数据,分析出我们的包是否是牢靠的,稳定的,健壮的包,是否符合面对对象的设计原则2)特点1)评价设计质量2)翻转依靠性3)支持并行开发和极限编程4)独立的发布模块5)识别package的循环依靠3)Depend生成的Java包的质量评价报告主要包括l)Number ofClasses andInterfaces实现类与抽象接口的数目2)Abstractness(A)包的抽象度指一个包内包含的抽象类或接口占整个包中的类的比重3Afferent CouplingsCa向心耦合依靠该包包含的类的外部包类的数目i.e.incoming dependencies,该数值越大,说明该包的担当的职责越大,也就越稳定4Efferent CouplingsCe离心耦合被该包依靠的外部包的数目i.e.outgoing dependencies,该数值越大,说明该包越不独立因为依靠了别的包,也越不稳定5Instability I衡量一个包的不稳定程度I=Ce/Ce+Ca它的值处于[0,1]之间1=0时说明包是最稳定的,反之1=1则说明包极不稳定6Distance fromthe MainSequence D该指标主要用来评价包的抽象程度与稳定程度的平衡关系,它可以用二维直线图A+I=1来表示7Package DependencyCycles包的循环依靠度
8.IBM CheckingTool forBugs Errorsand Mistakes简称BEAM1定义是IBM开发的一个静态分析工具,可以用于分析并查找出C,C++和Java代码中的一些不简洁发觉的潜在错误,从而达到提高代码质量的目的同动态分析工具和其它静态分析工具相比,它拥有一些宝贵的特性2)特点:1)对代码进行语法扫描,通过算法对代码进行检查分析2)和一些bug模式进行比较,最终标明问题区域,输出分析结果3)运用了额外的定理证明(theorem proving)技术来推断一个潜在的错误是否是真正的错误,从而减轻了程序员推断错误真伪所需的工作量
9.LDRATestbed1)定义LDRATestbed为应用软件的确认和验证供应强大的源代码测试和分析功能,是独特的质量限制工具它有助于提高计算机软件必需的牢靠性,健壮性和尽可能的零缺陷,它的运用带来时间、成本和效率上真实的节约,这些都是无法衡量其价值的它是强大和完整的集成工具包,使先进的软件分析技术应用在开发生命周期的关键阶段2)LDRATestbed供应强大的分析功能,用于两个主要的测试领域,静态分析和动态分析)1静态分析分析代码,并且供应对代码结构的理解2)动态分析利用源代码的插装版本,运用测试数据执行,在运行时发觉软件缺陷3)运用LDRA testbed的好处软件开发和测试过程的成本效率分析工具单元、集成和系统测试的志向工具贯穿于软件开发的整个生命周期LDRATestbed应用于许多不同的领域过程改进软件测试软件维护LDRA Testbed的优点改进软件质量定位软件缺陷强制执行工业标准削减维护费用40%以上削减开发和测试成本75%以上通过自动化过程提高员工动力
10.Yasca1)定义yasca是一个开源静态代码分析工具插件框架,集成流行的多语言静态分析工具如findbugs/pmd/jlint/rats/cppcheck,由于插件本身多样故可支持javaC++等语言静态分析.Yasca是一个用来找寻平安漏洞,在程序的源代码中检测代码质量、性能以及一样性的软件它集成了其他开源项目,其中包括FindBugsPMD,JLint,Cppcheck,并扫描某些文件类型,以及自定义扫描书面的Yasca这是一个叮嘱行工具,与报告中生成的HTML,CSV格式,XML的,的SQLite,和其他格式以自定义各种各样的困难的规则去对代码进行分析静态检测工具PMD1)PMD是一个代码检查工具,它用于分析Java源代码,找出潜在的问题1)潜在的bug空的try/catch/finally/switch语句2)未运用的代码未运用的局部变量、参数、私有方法等3)可选的代码String/StringBuffer的滥用4)困难的表达式不必需的if语句、可以运用while循环完成的for循环5)重复的代码:拷贝/粘贴代码意味着拷贝/粘贴bugs2)PMD特点1)与其他分析工具不同的是,PMD通过静态分析获知代码错误也就是说,在不运行Java程序的状况下报告错误2)PMD附带了许多可以干脆运用的规则,利用这些规则可以找出Java源程序的许多问题3)用户还可以自己定义规则,检查Java代码是否符合某些特定的编码规范3)同时,PMD已经与JDeveloper EclipsejEdit JBuilderBlueJCodeGuide、NetBeans SunJavaStudioEnterprise/Creator IntelliJIDEA TextPadMavenAnt GelJCreator以及Emacs集成在一起4PMD规则是可以定制的可用的规则并不仅限于内置规则您可以添加新规则可以通过编写Java代码并重新编译PDM,或者更简洁些,编写XPath表达式,它会针对每个Java类的抽象语法树进行处理5只运用PDM内置规则,PMD也可以找到你代码中的一些真正问题某些问题可能很小,但有些问题则可能很大PMD不行能找到每个bug,你照旧须要做单元测试和接受测试,在查找已知bug时,即使是PMD也无法替代一个好的调试器但是,PMD的确可以帮助你发觉未知的问题FindBugs lFindBugs是一个开源的静态代码分析工具,基于LGPL开源协议,无需运行就能对代码进行分析的工具不留意style及format,留意检测真正,的bug及潜在的性能问题尤其留意了尽可能抑制误检测false positives的发生以bytecode*.class、*.jar为对象进行检查除了单独动作,还可以用作Eclipse的plug-in,以及嵌入Ant作为task之一进行利用2)findbugs自带检测器的介绍findbugs自带60余种Badpractice,80余种Correntness,1种Internationalization,12种Malicious code,,vulnerability27种Multithreaded correntness23种Performance,43种Dodgy3)Findbugs的一些特点l)FindBugs主要着眼于找寻代码中的缺陷,这就与其他类似工具有些区分了,(干脆操作类文件class文件)而不是源代码2)FindBugs可以通过叮嘱行、各种构建工具(如AntMaven等)、独立的Swing GUI或是以Eclipse和NetBeans IDE插件的方式来运行3)FindBugs输出结果既可以是XML的,也可以是文本形式的4)开发者可以通过多种方式来运用FindBugs,最常见的是在新编写模块的代码分析以及对现有代码进行更大范围的分析5)不留意style及format,留意检测真正的bug及潜在的性能问题,尤其留意了尽可能抑制误检测false positives的发生4FindBugs可检测的bug pattern举例:检测java programing中简洁陷入的bug pattern,equals实现时的一般规约违反,Null pointer的参照Method的返回值的check遗漏,初始化前field的访问,Multi-thread的正确性,同期化处理的冲突,无条件的wait,Code的脆弱性,可以变更的静态object,内部数列参照的return等Checkstyle1定义Checkstyle是一款检查Java程序源代码样式的工具2特点1它可以有效的帮助我们检视代码以便更好的遵循代码编写标准,特别适用于小组开发时彼此间的样式规范和统一2Checkstyle供应了高可配置性,以便适用于各种代码规范,所以除了运用它供应的几种常见标准之外,你也可以定制自己的标准3Checkstyle供应了支持大多数常见IDE的插件,大部分插件中就含有最新的Checkstyle,就不用费心再部署一份了4)Checkstyle可以检查代码的许多方面,从传统观点看,它主要是用来检查代码层面的,自从第三版以后,它的内部架构作了重大变更,许多其它意图的检测加了进来,现在Checkstyle可以检查像类设计的问题,重复代码,如锁的双重检查的bug模式3)CheckStyle的主要流程是1)对Java文件进行词法语法分析,生成语法树2)载入配置文件(checkstyle-metadata.xml以及自定义的配置文件)register check事务3)依据深度优先遍历对语法树进行解析,依据注册的事务,在到达某些节点(AST)时进行style检查(AST,A child-SiblingTree,是语法树中的某个节点,其类型在TokenTypes类中定义)4)我们所说的自定义Style的检查,就是在其次步设定的这里牵涉到一个叫com.puppycrawl.tools.checkstyle.api.Check的类,我们通常须要重载其中的两个函数public int[]getDefaultTokens和public voidvisitTokenDetailAST ast.这两个函数的含义为,在遍历语法树的过程中,每当到达getDefaultTokens函数所返回的AST类型,程序就进入visitToken进行详细的检查和分析,即,真正的分析检查过程是在visitToken中实现的Hammurapi1定义Hammurapi它是一个开源的代码审查/评审review工具它可以帮助改进Java代码的质量它可以基于一套设计规范来分析代码库当它遇到违反规范的地方,会在报告中标识就像Checkstyle一样,它与Ant无缝集成并且由基于XML配置文件来驱动2特点:1Hammurapi是用来强制代码设计规范的2Hammurapi是一个遵循设计的工具,供应了自动而且一样的方式来实现设计规范,因此使代码评审更加有效而轻松3Hammurapi如何工作Hammurapi这样的代码分析工具都带有语言分析器语言分析器是一种输入语言代码并输出抽象语法树的工具这个树上的节点代表语言标识例如,考虑一下简洁的算术表达式3+
4.语言分析器会解析他成为一个如图5所示的语法树在这个树中,节点+代表操作符标识节点3和4是操作数标识Hammurapi运用ANTLR(另一个语言识别工具)作为语言分析器然而ANTLRAPI是相当底层的为改善可用性,Hammurapi运用另一个API,基于ANTLR的JSEL(Java源程序工程类库),来访问抽象语法树一旦树构建完成,一种树遍历算法就被用来访问树中每一个节点每次访问到一个节点,一种回调机(制Visitor模式)被用来提示相应的检查器在这些回调方法中,检查器收集相关的信息来确定是否有违反规范的地方存在Lint4j1)定义:Lint4J是一个针对Java的源代码分析工具,它可以对Java源码和字节码进行静态分析,推断其中是否存在死锁、性能问题或者伸缩性问题它可以集成到任何IDE种或构建系统2)特点:1)检测代码语法规则2)潜在的bug3)检测编码模式对代码可读性及大小的影响4)检测是否违反EJB规范Sonar1)定义代码质量管理工具Sonar供应了设计与架构度量Sonar
2.0引入了针对Java应用的设计分析、架构与面对对象的度量,Sonar
2.1可以检测到未运用的方法以及对不建议运用方法的调用是一个集成了CheckStyle,PMD,Findbugs的代码校验规则,重复代码发觉,代码测试覆盖率,代码注释率,及全部的检测率变更追踪的完备代码质量检查工具它包含了代码质量检测的七个方面,如下图2)特点1)代码覆盖通过单元测试,将会显示哪行代码被选中2)改善编码规则。