经常说的软件“低耦合,高内聚”,哪么如何衡量高内聚呢?其实原来在sonar qube中有一个指标叫LCOM4,用来衡量。
一个类是否有高内聚性,可以使用LCOM4来度量。LCOM4用来说明class内部方法和变量之间的关系, 值越大, 说明内聚性越差. 一般情况下 LCOM4=1是内聚性最佳的. LCOM4=2说明可以拆成两个类, 以此类推。如何判断两个方法是否有关系了?举个例子:我们有一个类,类中有两个方法A和B,如果满足下面一个条件,我们就认为这两个方法有联系:
1)他们都调用了同一个类级别的变量。
2)方法A调用了方法B,或者方法B调用了方法A。
官网的一个图片来解释
上面的图中,有两个类,他们都是由两个类级别的变量x,y和5个方法(A,B,C,D,E)组成的。左边的图中方法A调用了方法B,方法B存取了实例变量x,方法C和方法D存取了变量y,方法D又调用了方法E。方法A,B以及实例变量x和方法C,D,E没有任何关系,所以缺乏凝聚度量为2,建议拆分为两个类。右边的图就不多做解释了,所有的方法之间紧密联系,内聚度很高
Sonar2.0带来了实验性且有前途的度量:用LCOM4 (缺乏内聚性的方法)来衡量类的内聚性。解释这个度量是非常简单的,值1表示这个类只有一个职责(好),值X代码这个类有X个职责(差),值X得类应该重构/分割。
当进入Sonar,事情仍然非常简单。在项目面板的第一个窗口小部件就可以快速的查看:
[img]http://sonar.codehaus.org/wp-content/uploads/2010/03/sonar_lcom4_widget.png [/img]
参考文档:
1) http://www.aivosto.com/project/help/pm-oo-cohesion.html
分享到:
相关推荐
缺乏方法的凝聚力内聚性度量标准衡量一类方法之间的关联程度。 有凝聚力的班级有一个责任。 非粘性类具有更多不相关的功能,因此不止一种责任。 当LCOM4和LCOM4都使用公共属性或方法调用时,它们都认为该方法与其他...
LCOM-2020-2021
Error: java.lang.NoSuchMethodError: com.lmax.disruptor.dsl.Disruptor.<init>(Lcom/lmax/disruptor/EventFactory;...Lcom/lmax/disruptor/dsl/ProducerType;Lcom/lmax/disruptor/WaitStrategy;)V
cflap:为LCOM开发的项目
AR7240+AR9287双天线LCOM2 BIN格式 刷机固件 默认管理IP 20
西门子SIMOTION辅助功能件说明书pdf,西门子SIMOTION辅助功能件说明书
注:本想单独提供一个示例,结果编译时老是出现如下错误...> com.android.build.api.transform.TransformException: com.android.dex.DexException: Multiple dex files define Lcom/google/zxing/common/BitMatrix;”
红色商城商品订单页面HTML模板,一个静态的商城订单页面,利用了前段框架,有良好的用户视觉效果
FEUP-LCOM 电脑实验室| MIEIC | 2ºAno | 1º塞米特 Esterepositóriocontém: 滑梯 实验室 普罗耶托 分类 最终= 0.5 *(0.66 *MÁXIMO(Teste 1,Teste 2)+ 0.33 *MÍNIMO(Teste 1,Teste 2))+ 0.5 * Projeto...
Android的SDK是每一个Android的开发人员的必备事务,在csdn放一个,方便相同的Android的开发的需求。
7. 糟糕的设计 通过sonar可以找出循环,展示包与包、类与类之间的相互依赖关系,可以检测自定义的架构规则 通过sonar可以管理第三方的jar包,可以利用LCOM4检测单个任务规则的应用情况, 检测藕合。
Java 代码规范检查插件: ...7. 糟糕的设计 通过sonar可以找出循环,展示包与包、类与类之间相互依赖关系,可以检测自定义的架构规则 通过sonar可以管理第三方的jar包,可以利用LCOM4检测单个任务规定。
CaysnPrinter打印开发包示例程序 使用PrinterLibs For Android开发的示例程序
1.有效性和责任 5.保养 4.操作 2.环境 3.检查 1.前视灯 2.急停开关 3.顶部电气面板 4.顶部舱室面板 7.尾部电气面板 6.尾部防撞管 5.标
7. 糟糕的设计 通过sonar可以找出循环,展示包与包、类与类之间相互依赖关系,可以检测自定义的架构规则 通过sonar可以管理第三方的jar包,可以利用LCOM4检测单个任务规则的应用情况, 检测耦合。
WHACK-A-MOLE
Sonar简介 Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量 通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol... 可以利用LCOM4检测单个任务规则的应用情况 检测耦合
Sonar简介 Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量 通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol... 可以利用LCOM4检测单个任务规则的应用情况 检测耦合
3、在jboss启动脚本的java参数中加入 -agentpath:/home/java/jvmti/tracer.so=/home/java/jvmti/trace_log.txt 输入日志格式类似 CALL Lcom/xxx/cc/test/Mtrace; | <clinit> | ()V | 2013/6/...
com.springsource.com.fasterxml.jackson.core.jackson-core-2.0.2开发包