CheckStyle 统一编码规范

CheckStyle是什么:CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具。它能够自动化代码规范检查过程,从而使得开发人员从这项重要但枯燥的任务中解脱出来。

本文从测试人员角度,对N个项目的进行了代码规范的检查,汇总问题,并对各个规则设置处理方式,以及Eclipse中格式设置自动修复

1.

配置自己的checkstyle.xml

可以参考官方提供了sun、google的检查规则,两者检查都比较细,定义自己的检查规则,可以先把所有规则罗列出来,初步分出 必须检查、可忽略、不确认 三个分类,然后和BOSS有个沟通,将检查规则明确下来。

当前官网提供154种规则,自己定义的规则只检查83种。

ArrayTypeStyle检查数组类型定义的样式。

AvoidNestedBlocks检查不需要的嵌套’{}’

EmptyBlock检查空的代码块。

LeftCurly检查’{’和代码是否同行

NeedBraces检查是否需要大括号。主要是在if,else时的情况。

RightCurly检查’}’和代码是否同行

ArrayTrailingComma检查数组初始化是否以逗号结束

AvoidInlineConditionals检查inline的条件操作。(避免内联条件语句)

DeclarationOrder检查类和接口中的声明顺序。

DefaultComesLast检查default的clause是否在switch代码段的最后。

EmptyStatement检查空的代码段。

EqualsAvoidNull检查空字符串进行equals()比较

ExplicitInitialization检查类和对象成员是否初始化为默认值。

FinalLocalVariable检查未改变过的局部变量是否声明为final。

FallThrough检查switch代码的case中是否缺少break,return,throw和continue。

IllegalCatch检查是否catch了不能接受的错误。

IllegalThrows检查是否抛出了未声明的异常。

IllegalType检查未使用过的类。

MagicNumber检查是否有“magicnumbers”硬写到代码里的整数常量

InnerAssignment检查是否存在内部赋值(不允许)(已查)

MissingSwitchDefault检查switch语句是否有default的clause。

ModifiedControlVariable检查循环控制的变量是否在代码块中被修改。

MultipleStringLiterals检查一个字符串变量在不改变变量值的情况下或者字符串出现的次数

MultipleVariableDeclarations检查一次声明多个变量时,变量是否在同一行或者在同一个语句中

NestedIfDepth检查嵌套的层次深度。最多5层

NestedForDepth检查嵌套的层次深度。最多3层

NestedTryDepth检查try-catch异常处理,最多3层

PackageDeclaration检查类中是否有声明package。

ParameterAssignment检查是否存在不允许的参数赋值。

RequireThis检查代码中是否有“this.”。

ReturnCount限制return个数。默认为3(限制逻辑)

SimplifyBooleanExpression检查是否有过度复杂的布尔表达式。

SimplifyBooleanReturn检查是否有过于复杂的布尔返回代码段。

StringLiteralEquality检查字符串是否有用==或!=进行操作。

UnnecessaryParentheses检查是否使用了多余的小括号

MutableException确保异常是不可变的

ThrowsCount限制抛出异常的数量。(默认设置为3)

VisibilityModifier检查类成员的可见度。(类的属性为私有,静态才能有public,属性需带有修饰符)

FinalParameters检查方法名、构造函数、catch块的参数是否是final的。(资源是否要释放)

AvoidStarImport检查是否有使用*进行import。

ImportOrder检查import的分组和顺序。

RedundantImport检查是否有重复的import

UnusedImports检查是否有未使用的import。

Indentation检查代码中正确的缩进

JavadocMethod检查方法是否有注释,可以不声明RuntimeException

JavadocStyle检查javadoc的格式。

JavadocType检查类是否缺少注释(允许未知标签)

JavadocVariable检查变量是否缺少注释(只检查常量)

ModifierOrder检查修饰符的顺序是否遵照java语言规范。

RedundantModifier检查接口和annotation中是否有重复的修饰符

AbstractClassName检查抽象类的命名

ConstantName检查常量名。

LocalFinalVariableName检查局部的final类型的变量命名

LocalVariableName检查局部的非final类型的变量名

MemberName检查非静态变量。

MethodName检查方法的命名

PackageName检查包的命名。

ParameterName检查方法的参数的命名

StaticVariableName检查静态的,非final类型的变量名。

TypeName检查类和接口的命名

NewlineAtEndOfFile检查文件是否以一个空行结束。

Regexp检查程序是否有System.out.println(排除已注释)

AnonInnerLength检查匿名内部类的长度。默认为150。

FileLength检查java文件的长度。默认为1500。

LineLength检查代码行的长度。默认为80。

MethodLength检查方法和构造函数的长度。默认为60。

ParameterNumber检查方法和构造函数的参数个数。默认为5。

TodoCommentTODO检查,是否出现未办事项

TrailingComment确保代码没有尾行注释

Translation检查property文件中是否有相同的key。

UncommentedMain检查是否有未注释的main方法。

UpperEll检查long型约束是否有大写的“L”。

EmptyForInitializerPad检查是否有未初始化的循环变量

EmptyForIteratorPad检查是否有空的迭代

FileTabCharacter检查是否有Tab字符

MethodParamPad允许方法名后紧跟左边圆括号"("

NoWhitespaceAfter检查分隔符后的空白。

NoWhitespaceBefore检查分隔符前的空白。

OperatorWrap检查操作符的空白规则

ParenPad检查圆括号的空白规则

TypecastParenPad检查强制转型的圆括号的空白规则(String)object)

WhitespaceAfter检查分隔符后是否有空白

WhitespaceAround检查分隔符周围是否有空白


2.

使用ant 调用checkstyle 获取结果文件

ant 对应的文件检查文件: check.xml 

执行ant后 获取的检查结果: checkstyle_sccms.xml


3.

解析checkStyle的结果文件(XML),并存入数据库

解析代码在  CheckStyleErrorParse.java


4.

数据库数据分析

CheckStyle Into Mysql

1) 查每个种类有多少个Error:

SELECT source,COUNT(source) as total,message FROM checkstyle_error_scepg GROUP BY source order by source asc;

2) 查每个文件有多少个Error

SELECT file_name,COUNT(file_name) as total FROM checkstyle_error_scepg GROUP BY file_name order by total desc;


5.

统计汇总 

目的:对当前所有已检查的项目 能一目了然地看到有多少个错误,平均每个文件的错误数,每个检查项具体有多少问题等

CheckStyle 统计结果

6.

问题的处理方式

对检查出的问题定义了四种处理方式:

1)代码重构 (检查项NestedIfDepth、NestedForDepth、NestedTryDepth、ReturnCount、ThrowsCount、FileLength、MethodLength、ParameterNumber)

2)研发处理 (Naming Conventions、Javadoc、Design、部分Coding)

3)格式设置 (4个空白格替代Tab键值、分隔符、操作符前后空格设置,Imports 、RequireThis等从格式规避)

4)非强制性 (只检查,可不做修改)


7.

Eclipse格式设置

Code Style 的Clean Up、Code Templates、Formatter ,三者都是围绕checkstyle定义的检查规则,从格式上对需进行规避。

Clean up 配置如下,文件在cleanup.xml,Clean Up 可以帮忙找出不符合要求的,并自动删除/补全。

Clean up

Formatter 主要对coding 的显示样式进行规范化(操作符/分隔符/括号等前后空格、换行、是否同行等),设置好了之后,今后在项目上点击右键-source-Format,就可以自动调整文件的格式啦,非常方便,可设置有Indentation、Braces、White Space 、Blank Lines、New Lines、Control Statements、Line Wrapping、Comments

formatter1

Code Templates 主要对Coding 整体设置 注释模板、编码模板

1)注释模板:如对文件、类、方法、参数设置统一注释

2)编码模板:对文件、类、方法 须有哪些内容做统一

具体配置模板在 codeTemplates.xml

codeTemplates

8.

验证效果

第一步:在项目上右键-source-Format

第二步:在项目上右键-source-Clean up

这一步会检查出很多不符合规范的,点击下一步,进行清理 自动删除/补全 即可

第三步:执行ant的check.xml

第四步:查看新的检查结果

以sccms为例

检查结果对比
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,651评论 18 139
  • 本文主要介绍以下内容:(1)CheckStyle详细使用(2)如何定制专属CheckStyle检查规则(3)如何定...
    freddyyao阅读 14,836评论 11 16
  • 水浒传一 水泊梁山八百里,稼穑渔猎富饶地。 民不聊生北宋末,替天行道举大旗。
    小虫_6c80阅读 262评论 0 2
  • 有这样一个梦 去向没有尽头的远方 背着行囊 前路茫茫 总是独自在白雾中彷徨 梦的远方 是一个人游荡 带着一路走来的...
    梦想上天的小姑娘阅读 257评论 4 2