静态代码检查之checkstyle

介绍: 
 解析依赖源代码,不依赖与编译后文件,依赖于java语法定义,编程规范,自定义规则对源代码进行扫描分析,生成可视化报告,为开发人员提供编码参考,同时通过形成历史记录,对研发项目进行风险预警,同时可针对异常版本进行分析。
A)checkstyle 主要检查项:
a.javadoc 注释
b.命名约定
c.标题
d.import 语句
e.代码体积大小
f.修饰符
g.代码块
h.类设计
i.修饰符
j.非必须内容(例如:system.out...)
B)集成方式:
a.IDE插件方式(可查找其余相关文章,主要为rd与白盒测试人员使用)
b.服务器执行(持续集成,形成历时记录与可视化报告)
重点介绍第二种:
checkstyle的解析都是基于checkstyle-5.5-all.jar文件进行,通过该jar文件提供入口,进行相关参数的注入执行解析。
例如:
java -cp $CHECKSTYLE_HOME/checkstyle-5.5-all.jar com.puppycrawl.tools.checkstyle.Main -c $CHECKSTYLE_HOME/sun_checks.xml -f xml -r   源码地址 -o 输出报告地址
通常执行时使用ant进行执行过程组装以方便执行,例如:
<patternset id="java.files.pattern" includes="**/*.java"/>
<target name="checkstyle" depends="执行准备操作target" targetdescription="target 描述">
<property name="checkstyle.data.dir" location="${build.dir}/docs/checkstyle"/>     <!-- 生成数据存放目录 -->
<property name="checkstyle.data.file" location="${checkstyle.data.dir}/checkstyle.xml"/>    <!-- 生成xml文件地址 -->
<property name="checkstyle.report.file" location="${checkstyle.data.dir}/checkstyle.html"/>  <!-- 生成html 文件地址 -->
<property name="checkstyle.xsl.file" location="${checkstyle.dir}/contrib/checkstyle-noframes.xsl"/>  <!-- 美化报告 -->
<mkdir dir="${checkstyle.data.dir}"/>
<taskdef resource="checkstyletask.properties" classpath="${checkstyle.jar}"/>
<!-- ${checkstyle.dir}/sun_checks.xml 该文件内容代表检查规则,下面将具体介绍 -->
<checkstyle config="${checkstyle.dir}/sun_checks.xml" failOnViolation="false" failureProperty="checkstyle.failure">
    <fileset dir="src">                                                              
     <patternset refid="java.files.pattern"/>
    </fileset>
    <fileset dir="other">                                   
     <patternset refid="java.files.pattern"/>
    </fileset>
    <formatter type="xml" toFile="${checkstyle.data.file}"/>
</checkstyle>
<xslt in="${checkstyle.data.file}" out="${checkstyle.report.file}" style="${checkstyle.xsl.file}"/> 
</target>

C)checkstyle 规则解析:
例如:
<!-- 成员变量名称相关检查 -->
<module name="MemberName">
     <property name="applyToPublic" value="true"/> <!-- 应用到public声明对象 -->
     <property name="applyToProtected" value="false"/><!-- 非public 不应用-->
     <property name="applyToPackage" value="false"/>
     <property name="applyToPrivate" value="false"/>
     <property name="format" value="^[a-zA-Z0-9]*$"/><!--非静态变量名称定义规则-->
</module>
<!-- 如下容易理解,不做解析了-->
<module name="LineLength">
<property name="max" value="100"/>
<property name="tabWidth" value="4"/>
</module>

具体的module与property名称请查阅官方:http://checkstyle.sourceforge.net/checks.html

D)工具目录结构解析:
*.jar 工具使用jar文件与相关依赖文件
contrib: 一些依赖于checkstyle编写的界面format等工具组合
site:基础样式文件及生成html界面需要的控件基础页面
sun_checks.xml:sun 公司的检查规则(太严格,需自定义或修改)
suppression.xml :依据过滤器定义的特殊场景,可用于进行指定块,文件或者行等不需遵守检查规则等

建议:
1.checkstyle 功能不错,但检查点有限,需要结合一些其他代码检查工具使用,才能完成对代码的全面覆盖。
2.检查规则需要自定义(或者从其他网点寻找一些成熟规则,例如android_check.xml)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值