经常说的软件“低耦合,高内聚”,哪么如何衡量高内聚呢?其实原来在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
分享到:
相关推荐
目前较为知名的内聚度度量方法包括Chidamber和Kemerer提出的LCOM(Lack of Cohesion in Methods)系列指标(如LCOM1、LCOM2、LCOM3等),以及Hitz和Montazeri提出的LCOM3、Henderson-Sellers提出的LCOM4、Simon提出...
面向对象软件内聚度是衡量一个类内部成员(如方法和变量)之间的相互关联程度的指标,它反映了类的功能集中程度。内聚度是软件质量评估的重要组成部分,高内聚度意味着类的功能更加单一和明确,有助于提高软件的...
缺乏方法的凝聚力内聚性度量标准衡量一类方法之间的关联程度。 有凝聚力的班级有一个责任。 非粘性类具有更多不相关的功能,因此不止一种责任。 当LCOM4和LCOM4都使用公共属性或方法调用时,它们都认为该方法与其他...
- LCOM4 Lack of cohesion of methods class:通过LCOM4度量类中方法的内聚度。 - Package tangle index:包级别的纠缠指数。 - RFC Response for Class:类的响应度。 - Suspect LCOM4 density:LCOM4的疑似...
8. LCOM(Lack of Cohesion in Methods)是衡量类中方法之间内聚程度的度量。在给定的选项中,A: CF(Coupling Factor)是度量类间关联的,B: NOC(Number of Children)表示子类数量,C: MIF(Method Inter-...
- **Design Lack of Cohesion of Methods**(LCOM):方法内聚度的缺乏,高值可能意味着方法间职责不清晰。 - **Design Response for Class**(RFC):类的响应度,表示一个类与其他类的交互程度。 - **Design ...
6. 方法内聚缺乏度(LCOM):衡量类内方法之间的内聚性,LCOM大表示内聚度低,可能需要拆分为多个子类。 另一方面,MOOD度量则侧重于系统层面,关注面向对象的四个核心特性: 1. 封装性度量:通过属性隐藏因子...