发表时间:2022-03-25来源:网络
在如今的软件开发中,因为软件的复杂度愈来愈高,业务也覆盖很广,各个业务模块业务错综复杂。这样就须要咱们须要团队开发,在咱们团队中开发人员的经验、代码风格样式都不一致,以及缺少统一的标准,从而致使咱们的整个项目的的代码难以阅读,不便于后期维护。这几天在研究代码质量管理,根据在网上搜集的资料及跟前辈学的一点经验整理一下,有须要的同窗们能够查看,也便于之后本身回顾。html
主要对下面的七块进行分析java
编码格式规范node
代码重复web
代码覆盖率编程
依赖项分析数组
复杂度监控安全
Java模拟技术网络
代码评审和重构多线程
接下来的使用Eclipse 插件来揭示这些分析领域:架构
编码格式规范:codeStyle和CheckStyle
代码重复:PMD 的 CPD
代码覆盖率:Coverlipse或者Emma
依赖项分析:JDepend
复杂度监控:Metrics
Java模拟技术:EasyMock、PowerMock
代码评审和重构:Jupiter
统一的代码规范能提升代码的可读性、可维护性。
通常规则和格式规范:如代码缩进、程序块规范、每行最大代码长度;
命名规范:如包名、类名、接口名、枚举、属性名、方法名、参数名等命名规则;
文档规范:如类文件头注释、变量注释、方法注释等;
编程规范:如异常、并发、多线程等;
其它规范:如日志格式等。

图1
能够导入代码格式,实现统一。
1. 下载地址:
http://pan.baidu.com/s/1o6LOSwM
2. 解压net.sf.eclipsecs-updatesite_5.6.1.201306282206-bin.zip文件,到系统路径下。如:D:\geyouchao\eclipse-plugins\cs(注:必定不用起名为checkstyle,不知道为何此名就是安装不成功),此文件夹下有两个文件夹features、plugins。
3. 咱们使用link的方式安装。在Eclipse的dropins文件夹下新建checkstyle.link文件,内容为:
path=D:\\geyouchao\\eclipse-plugins\\cs
4. 关闭Eclipse,重启。而后在Eclipse的window》Preferences下就能够看到checkstyle菜单,安装成功,以下图

图2
自定义CheckStyle规则,下面是我定义的CheckStyle模板,而后导入

图3
把新导入的,设置为默认

图4
能够修改其中的值,点击“Configure…”按钮。

图5
下面是我自定义的CheckStyle.xml文件,供参考。
下面是使用CheckStyle检查过得代码

图6
常见的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 haveaccessor 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
“)” 前面不能有空格
1. 下载地址:
http://jingyan.baidu.com/article/19192ad835de6ee53e57073c.html
2. 解压net.sourceforge.pmd.eclipse-3.2.6.v200903300643.zip文件,到系统路径下。如:D:\geyouchao\eclipse-plugins\pmd,此文件夹下有两个文件夹features、plugins。
3. 咱们使用link的方式安装。在Eclipse的dropins文件夹下新建pmd.link文件,内容为:
path=D:\\geyouchao\\eclipse-plugins\\pmd
4. 关闭Eclipse,重启。而后在Eclipse的window》Preferences下就能够看到PMD菜单,安装成功,以下图

图7

图8
下面是PCD生成的重复代码,能够对其中的代码进行分析,修改

图9
1. 下载地址:
https://sourceforge.net/projects/coverlipse/files/Coverlipse/
下载下图中5个文件

图10
1. 解压coverlipse-0.9.6.zip文件,到系统路径下。如:D:\geyouchao\eclipse-plugins\ coverlipse-0.9.6,此文件夹下有两个文件夹features、plugins。
2. 咱们使用link的方式安装。在Eclipse的dropins文件夹下新建coverlipse.link文件,内容为:
path=D:\\geyouchao\\eclipse-plugins\\coverlipse
3. 关闭Eclipse,重启。右键java代码,点击dubug,安装成功,以下图

图11
Wait..
Wait…
1. 下载地址:
http://andrei.gmxhome.de/jdepend4eclipse/links.html

图12
2. 拷贝de.loskutov.eclipse.jdepend_1.2.4.201406241900.jar文件,到Eclipse的dropins目录下。如:D:\geyouchao\eclipse4.2-xu\dropins。
3. 关闭Eclipse,重启。经过右键单击源文件夹并选择 Run JDepend Analysis。必定要选择一个含源代码的源文件夹;不然看不到此菜单项。

图13

图14
下面对jdepend的分析的结果简单介绍

图15
1. Selected objects():选择分析的包
2. Package:包全路径
3. CC(concr.cl.):当前行对应包的具体类的数量。
4. AC(abstr.cl.):当前行对应包的抽象类和接口的数量。
5. Ca(aff.):依赖于被分析package的其余package的数量,用于衡量pacakge的职责。即有多少包调用了它。(AfferentCouplings)
6. Ce(eff.):被分析package的类所依赖的其余package的数量,用于衡量package的独立性。即它调用了多少其余包。(EfferentCouplings)
7. A:被分析package中的抽象类和接口与所在package全部类数量的比例,取值范围为0-1。(Abstractness )
8. I:I=Ce/(Ce+Ca),用于衡量package的不稳定性,取值范围为0-1。I=0表示最稳定,I=1表示最不稳定。即若是这个类不调用任何其余包,则它是最稳定的。(Instability )
9. D:分析package和理想曲线A+I=1的垂直距离,用于衡量package在稳定性和抽象性之间的平衡。(Distance)
理想的package要么彻底是抽象类和稳定(x=0,y=1),要么彻底是具体类和不稳定(x=1,y=0)。取值范围为0-1,
D=0表示彻底符合理想标准,
D=1表示package最大程度地偏离了理想标准。即你的包要么全是接口,不调用任何其余包(彻底是抽象类和稳定),要么是具体类,不被任何其余包调用。
10. Cycle!:循环依赖
11. Package with cycle:包与包直接有循环调用
12. Depends upon-efferentdependencies:依赖的包
13. Used by-afferentdependencies:被引用的包

图16
Instability:不稳定
Abstractness:抽象性

图17
针对上图中Cycle!列中有感叹号图标问题,是由于以上三个包中的类有传递依赖,故出现此警告。
解决办法:
把其中的某个或者某些类再单独抽出新包,解决此问题。
1. http://www.ibm.com/developerworks/cn/java/j-ap01117/
2. http://www.clarkware.com/software/JDepend.html
1. 下载地址:
https://sourceforge.net/projects/metrics/

图18

图19

图20

图21
2. 解压updatesite_1.3.6.zip文件,net.sourceforge.metrics.updatesite文件夹下有features和plugins分别拷贝到Eclipse的对应目录下。如:D:\geyouchao\eclipse4.2-xu\plugins等。
3. 关闭Eclipse,重启。而后在Eclipse的window》Preferences下就能够看到Metrics Preferences菜单,安装成功,以下图

图22
下图是metrics提供的配置项,下面对各个配置项进行解释

图23
number of overridden methods
重载方法的数量
number of attributes
属性的数量
number of children
子类的数量
number of classes
类的数量
method lines of code
代码的方法行
number of methods
方法的数量
nested block depth
块嵌套深度
depth of inheritance tree
继承树的深度
number of packages
包的数量
afferent coupling
传入耦合
number of Interfaces
接口的数量
mccabe cyclomatic complexity
McCabe圈复杂度
total lines of code
代码的总行数
instability
不稳定
number of parameters
参数的数量
lack of cohesion of methods
方法缺少凝聚力
efferent coupling
传出耦合
number of static methods
静态方法数
normalized distance
正常距离
abstractness
抽象性
specialization index
专业化指数
weighted methods per class
每类的加权方法
number of static attributes
静态属性数
lack of cohesion of methods:
介于0-1之间,0表示最有凝聚力,1表示彻底没有凝聚力。
1)若是全部方法都使用全部的实例字段,一个类是彻底有凝聚力的
2)静态方法和实例方法计数,它还包括构造函数、属性的getter和setter,全部方法。
在Since Sonar 4.1中此量度已经被删除。
3) 子的数量NOC(Number ofchildren)子类在类的层次内,子类能够最直接地从属于一类。随着子类数量的增大,重用也增长了。但父类抽象的表示可能减小,即一些子类可能不是父类真正的成员,同时,测试数量(用来检查每一个子类在操做先后的要求)也将增长。
4) 方法中聚合的不足LCOM(Lack ofcohesion in Methods)
一个类内的每种方法访问一个或多个属性(也称实例变量)。LCOM是访问一个或多个相同属性方法的数量
若是LCOM很大,则说明方法能够经过属性与其余方法耦合,这就增长了类设计的复杂性。一般,对LCOM值很大的类,能够把它分为两个或多个单独的类,这样每一个类能的设计更方便。
这里讲的耦合和聚合与传统软件中讲的是同样的。咱们但愿高聚合和低耦合,即保持低的LCOM.但在某些时候,LCOM很大也是合理的。
5)每一个类的加权方法WMC(Weighted Methodsper Class)
6)Out-of-range:超出范围,溢出
下面是metric的安全范围设置,在此页面中能够设置每项指标的安全范围。若警告启用,指标值超出咱们设置的安全范围就好发出警告。

图24
1. 右键单击您的项目并选择 Properties 菜单。在结果窗口中,选择 EnableMetrics plugin 复选框并单击 OK:

图25
2. 从 Eclipse 中选择 Window 菜单打开 Metrics 视图,而后选择 Show View | Other...。
3. 选择 Metrics | Metrics View 打开如图 13 中显示的窗口。您须要使用Java 透视图并从新构建项目,从而显示这些度量值。

图26
注:必定要从新构建项目

图27
Mock一般是指,在测试一个对象A时,咱们构造一些假的对象来模拟与A之间的交互,而这些Mock对象的行为是咱们事先设定且符合预期。经过这些Mock对象来测试A在正常逻辑,异常逻辑或压力状况下工做是否正常。
引入Mock最大的优点在于:Mock的行为固定,它确保当你访问该Mock的某个方法时老是可以得到一个没有任何逻辑的直接就返回的预期结果。
Mock Object的使用一般会带来如下一些好处:
隔绝其余模块出错引发本模块的测试错误。
隔绝其余模块的开发状态,只要定义好接口,不用管他们开发有没有完成。
一些速度较慢的操做,能够用MockObject代替,快速返回。
对于分布式系统的测试,使用Mock Object会有另外两项很重要的收益:
经过Mock Object能够将一些分布式测试转化为本地的测试
将Mock用于压力测试,能够解决测试集群没法模拟线上集群大规模下的压力
mock技术的目的和做用是模拟一些在应用中不容易构造或者比较复杂的对象,从而把测试与测试边界之外的对象隔离开。
在使用Mock的过程当中,发现Mock是有一些通用性的,对于一些应用场景,是很是适合使用Mock的:
真实对象具备不可肯定的行为(产生不可预测的结果,如股票的行情)
真实对象很难被建立(好比具体的web容器)
真实对象的某些行为很难触发(好比网络错误)
真实状况令程序的运行速度很慢
真实对象有用户界面
测试须要询问真实对象它是如何被调用的(好比测试可能须要验证某个回调函数是否被调用了)
真实对象实际上并不存在(当须要和其余开发小组,或者新的硬件系统打交道的时候,这是一个广泛的问题)
固然,也有一些不得不Mock的场景:
一些比较难构造的Object:这类Object一般有不少依赖,在单元测试中构造出这样类一般花费的成本太大。
执行操做的时间较长Object:有一些Object的操做费时,而被测对象依赖于这一个操做的执行结果,例如大文件写操做,数据的更新等等,出于测试的需求,一般将这类操做进行Mock。
异常逻辑:一些异常的逻辑每每在正常测试中是很难触发的,经过Mock能够人为的控制触发异常逻辑。
在一些压力测试的场景下,也不得不使用Mock,例如在分布式系统测试中,一般须要测试一些单点(如namenode,jobtracker)在压力场景下的工做是否正常。而一般测试集群在正常逻辑下没法提供足够的压力(主要缘由是受限于机器数量),这时候就须要应用Mock去知足。
在这些场景下,咱们应该如何去作Mock的工做了,一些现有的Mock工具能够帮助咱们进行Mock工做。
Easymock官网:
http://easymock.org/
EasyMock 是早期比较流行的MocK测试框架。它提供对接口的模拟,可以经过录制、回放、检查三步来完成大致的测试过程,能够验证方法的调用种类、次数、顺序,能够令 Mock 对象返回指定的值或抛出指定异常。经过 EasyMock,咱们能够方便的构造 Mock 对象从而使单元测试顺利进行。
EasyMock 是采用 MIT license 的一个开源项目
使用EasyMock大体能够划分为如下几个步骤:
① 使用 EasyMock 生成 Mock 对象;
② 录制 Mock 对象的预期行为和输出;
③ 将 Mock 对象切换到 播放 状态;
④ 调用 Mock 对象方法进行单元测试;
⑤ 对 Mock 对象的行为进行验证。
mockito官网
https://code.google.com/p/mockito/
因为官网上不了,能够到csdn上下载
http://download.csdn.net/download/wjjiang917/5519381
是EasyMock以后流行的mock工具。相对EasyMock学习成本低,并且具备很是简洁的API,测试代码的可读性很高。
使用mockito大体能够划分为如下几个步骤:
① 使用 mockito 生成 Mock 对象;
② 定义(并不是录制) Mock 对象的行为和输出(expectations部分);
③ 调用 Mock 对象方法进行单元测试;
④ 对 Mock 对象的行为进行验证。
PowerMock官网
https://code.google.com/p/powermock/
这个工具是在EasyMock和Mockito上扩展出来的,目的是为了解决EasyMock和Mockito不能解决的问题,好比对static, final, private方法均不能mock。其实测试架构设计良好的代码,通常并不须要这些功能,但若是是在已有项目上增长单元测试,老代码有问题且不能改时,就不得不使用这些功能了。
PowerMock 在扩展功能时彻底采用和被扩展的框架相同的API, 熟悉 PowerMock 所支持的模拟框架的开发者会发现 PowerMock 很是容易上手。PowerMock 的目的就是在当前已经被你们所熟悉的接口上经过添加极少的方法和注释来实现额外的功能。目前PowerMock 仅扩展了 EasyMock 和 mockito,须要和EasyMock或Mockito配合一块儿使用。
Jupiter
Wait…
1. http://wenku.baidu.com/link?url=HWBo4JC-pLcsC1plz5ZJtvUN8Y4t0WZ1beHiyvSyIFGjCJdpP4gMsnFHhhCRQTXD_-4XC213nEGK7zvgOGUHDG
2. http://www.ibm.com/developerworks/cn/java/j-ap01117/
3. http://www.blogjava.net/askcuix/archive/2009/02/08/253775.html
4. http://www.cnblogs.com/sunzhenchao/archive/2013/06/14/3136140.html
5. http://tieba.baidu.com/p/4304901637
6. http://www.ibm.com/developerworks/cn/opensource/os-cn-easymock/
7. http://www.ibm.com/developerworks/cn/java/j-easymock.html
8. http://www.cnblogs.com/huangbin/archive/2013/04/27/3047671.html
9.
下一篇:Java开发工具全套下载
皓盘云建最新版下载v9.0 安卓版
53.38MB |商务办公
ris云客移动销售系统最新版下载v1.1.25 安卓手机版
42.71M |商务办公
粤语翻译帮app下载v1.1.1 安卓版
60.01MB |生活服务
人生笔记app官方版下载v1.19.4 安卓版
125.88MB |系统工具
萝卜笔记app下载v1.1.6 安卓版
46.29MB |生活服务
贯联商户端app下载v6.1.8 安卓版
12.54MB |商务办公
jotmo笔记app下载v2.30.0 安卓版
50.06MB |系统工具
鑫钜出行共享汽车app下载v1.5.2
44.7M |生活服务
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-02-15
2022-02-14