怎样辨别一个项目代码写得好还是坏?优秀的代码和腐化的代码区别在哪里?怎么让自己写的代码既漂亮又有生命力?接下来将对代码质量的问题进行一些粗略的介绍。也请有过代码质量相关经验的朋友提出宝贵的意见。
代码质量所涉及的5个方面,编码标准、代码重复、代码覆盖率、依赖项分析、复杂度分析。这5方面很大程序上决定了一份代码的质量高低。

前期准备工作(包括相关工具或所使用的原料等)eclipse,jdk,tomcat 概述
编码标准:这个想必都很清楚,每个公司几乎都有一份编码规范,类命名、包命名、代码风格之类的东西都属于其中。
代码重复:顾名思义就是重复的代码,如果你的代码中有大量的重复代码,你就要考虑是否将重复的代码提取出来,封装成一个公共的方法或者组件。
代码覆盖率:测试代码能运行到的代码比率,你的代码经过了单元测试了吗?是不是每个方法都进行了测试,代码覆盖率是多少?这关系到你的代码的功能性和稳定性。
依赖项分析:你的代码依赖关系怎么样?耦合关系怎么样?是否有循环依赖?是否符合高内聚低耦合的原则?通过依赖项分析可以辨别一二。
复杂度分析:以前有人写的程序嵌套了10层 if else你信吗?圈复杂度之高,让人难以阅读。通过复杂度分析可以揪出这些代码,要相信越优秀的代码,越容易读懂。
在实际开发环境中,已经有很多工具为我们解决以上5个方面的问题,下列5个eclipse插件分别对这5个问题有很好的支持:
编码标准:CheckStyle 插件URL:http://eclipse-cs.sourceforge.net/update/
代码重复:PMD的CPD 插件URL:http://pmd.sourceforge.net/eclipse/
代码覆盖率:Eclemma 插件URL:http://update.eclemma.org
依赖项分析:JDepend 插件URL:http://andrei.gmxhome.de/eclipse/
复杂度分析:Eclipse Metric 插件URL:http://metrics.sourceforge.net/update
以checkstyle插件为例
在eclipse上安装好了CheckStyle插件后,我们来建一个类用它跑一下。这个类很简单,一个常见的用户实体,包含了id,用户名、密码、邮件等属性,并包含get set方法,一个标准的POJO。运行CheckStyle检查一下:

一个我们平时再普通不过的一个类,被checkstyle弄出这么多问题,情何以堪,我们来看看究竟是什么情况?
看一下这些警告信息:
line 1:说缺少package-info.java文件。
line 2:说第一句注释要以“.”结尾。
line 30:缺少java doc注释。
line 35:getId不是继承的方法,必须指定abstract,final或空。另外也缺少java doc注释。
这个类基本就这四类毛病,缺少package-info.java文件,这个文件是做什么的呢?他是用来描述包注释的类,有一定的特殊性,要想详细了解请 百度。如果对你的项目没有太大的影响,可以忽略它。配置CheckStyle的方法我们等会再说。第一句注释要以“.”结尾,这看你的习惯,你确定需要这 个,你就保留,不需要就忽略。缺少java doc,对于java类的属性来说,注释是必要的,所以这个要保留。不是继承的方法,需要加上final关键字,如果你有这个习惯,就保留,反之忽略。


常见的CheckStyle错误有这些:
1.Type is missing a javadoc commentClass 缺少类型说明 2.“{” should be on the previous line “{” 应该位于前一行 3.Methods is missing a javadoc comment 方法前面缺少javadoc注释 4.Expected @throws tag for “Exception” 在注释中希望有@throws的说明 5.“.” Is preceeded with whitespace “.” 前面不能有空格 6.“.” Is followed by whitespace“.” 后面不能有空格 7.“=” is not preceeded with whitespace “=” 前面缺少空格 8.“=” is not followed with whitespace “=” 后面缺少空格 9.“}” should be on the same line “}” 应该与下条语句位于同一行 10.Unused @param tag for “unused” 没有参数“unused”,不需注释 11.Variable “CA” missing javadoc 变量“CA”缺少javadoc注释 12.Line longer than 80characters 行长度超过80 13.Line contains a tab character 行含有”tab” 字符 14.Redundant “Public” modifier 冗余的“public” modifier 15.Final modifier out of order with the JSL suggestionFinal modifier的顺序错误 16.Avoid using the “.*” form of import Import格式避免使用“.*” 17.Redundant import from the same package 从同一个包中Import内容 18.Unused import-java.util.list Import进来的java.util.list没有被使用 19.Duplicate import to line 13 重复Import同一个内容 20.Import from illegal package 从非法包中 Import内容 21.“while” construct must use “{}” “while” 语句缺少“{}” 22.Variable “sTest1” must be private and have accessor method 变量“sTest1”应该是private的,并且有调用它的方法 23.Variable “ABC” must match pattern “^[a-z][a-zA-Z0-9]*$” 变量“ABC”不符合命名规则“^[a-z][a-zA-Z0-9]*$” 24.“(” is followed by whitespace “(” 后面不能有空格 25.“)” is proceeded by whitespace “)” 前面不能有空格
可以看出CheckStyle检查出来的问题,大多是编码规则以及风格上的问题,这是编写高质量代码最基本的。值得注意的是,我们将一些优秀的开源代码用 CheckStyle来检查也会检查出不少问题,这不能不说这些开源不优秀,而是每个公司组织有自己的编写规范度,这个度既可以减少程序员的工作量又可以 让代码的可读性合格,但这个度不一样符合CheckStyle的完整标准。所以我们一般使用CheckStyle都不会用他的默认标准,而是通过配置,制 定适合自己的编码规则。
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。作者声明:本教程系本人依照真实经历原创,未经许可,谢绝转载。- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
