靜態代碼檢查之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)



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章