`

高内聚中的LCOM4指标衡量

 
阅读更多
经常说的软件“低耦合,高内聚”,哪么如何衡量高内聚呢?其实原来在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
分享到:
评论

相关推荐

    论文研究-面向对象软件中类内聚度度量分析与研究.pdf

    目前较为知名的内聚度度量方法包括Chidamber和Kemerer提出的LCOM(Lack of Cohesion in Methods)系列指标(如LCOM1、LCOM2、LCOM3等),以及Hitz和Montazeri提出的LCOM3、Henderson-Sellers提出的LCOM4、Simon提出...

    面向对象软件内聚度度量数据分布的实证研究.pdf

    面向对象软件内聚度是衡量一个类内部成员(如方法和变量)之间的相互关联程度的指标,它反映了类的功能集中程度。内聚度是软件质量评估的重要组成部分,高内聚度意味着类的功能更加单一和明确,有助于提高软件的...

    lcom:缺乏方法凝聚力指标

    缺乏方法的凝聚力内聚性度量标准衡量一类方法之间的关联程度。 有凝聚力的班级有一个责任。 非粘性类具有更多不相关的功能,因此不止一种责任。 当LCOM4和LCOM4都使用公共属性或方法调用时,它们都认为该方法与其他...

    Sonar参数分析参考.pdf

    - LCOM4 Lack of cohesion of methods class:通过LCOM4度量类中方法的内聚度。 - Package tangle index:包级别的纠缠指数。 - RFC Response for Class:类的响应度。 - Suspect LCOM4 density:LCOM4的疑似...

    set6_chapter012uml_度量软件工程_answer1

    8. LCOM(Lack of Cohesion in Methods)是衡量类中方法之间内聚程度的度量。在给定的选项中,A: CF(Coupling Factor)是度量类间关联的,B: NOC(Number of Children)表示子类数量,C: MIF(Method Inter-...

    cflap:为LCOM开发的项目

    LCOM方法的核心在于通过矩阵来表示晶体中的电子态,并通过求解这些矩阵来获得材料的电子性质。这种方法通常涉及到傅里叶变换、格林函数和自洽场迭代等概念。在`cflap`项目中,用户可能需要定义晶体结构、电子态参数...

    Sonar全参数分析报告.pdf

    - **Design Lack of Cohesion of Methods**(LCOM):方法内聚度的缺乏,高值可能意味着方法间职责不清晰。 - **Design Response for Class**(RFC):类的响应度,表示一个类与其他类的交互程度。 - **Design ...

    西门子SIMOTION辅助功能件说明书.pdf

    SIMOTION系统与其他组件一起使用时,其应用范围被限定在西门子产品目录或技术描述中描述的应用范围内。这意味着用户只能将SIMOTION系统用于其设计目的,并且只能与西门子认可或推荐的其他制造商的设备或组件配合使用...

    一种优化的面向对象软件复杂性度量方法

    6. 方法内聚缺乏度(LCOM):衡量类内方法之间的内聚性,LCOM大表示内聚度低,可能需要拆分为多个子类。 另一方面,MOOD度量则侧重于系统层面,关注面向对象的四个核心特性: 1. 封装性度量:通过属性隐藏因子...

    LCOM-2020-2021:回购MIEIC的20202021 LCOM类,包括实验室和最终项目

    【标题】"LCOM-2020-2021:回购MIEIC的20202021 LCOM类,包括实验室和最终项目"指的是一个关于LCOM课程的项目,这个课程可能在MIEIC(可能是某个大学的工程学院或信息技术系)进行。"回购"可能意味着这是课程内容的...

    disruptor-3.3.8.jar

    Error: java.lang.NoSuchMethodError: com.lmax.disruptor.dsl.Disruptor.<init>(Lcom/lmax/disruptor/EventFactory;...Lcom/lmax/disruptor/dsl/ProducerType;Lcom/lmax/disruptor/WaitStrategy;)V

    WHACK-A-MOLE:在MIEIC @ FEUP的LCOM课程中开发的带有游戏的存储库

    【标题】"WHACK-A-MOLE:在MIEIC @ FEUP的LCOM课程中开发的带有游戏的存储库" 是一个与计算机科学相关的项目,特别是面向C语言编程的学习实践。这个项目是学生们在MIEIC(工程学硕士课程)在FEUP(波尔图大学工程...

    ubnt LC m2固件

    AR7240+AR9287双天线LCOM2 BIN格式 刷机固件 默认管理IP 20

    Android--SDK

    **Android SDK:开发者的核心工具** Android SDK(Software Development Kit...通过不断学习和熟练掌握SDK中的工具和API,开发者能够创建出高质量、功能丰富的Android应用程序,满足全球数亿Android用户的多样化需求。

    Sonar参数分析

    17. Design Lack of Cohesion of Methods:LCOM(Lack of Cohesion of Methods),衡量方法间的凝聚力,值越高,凝聚力越弱。 18. Design Response for Class:RFC(Response For Class),表示类对外部的交互程度,...

    红色商城商品订单页面HTML模板.zip_-baijiahao_49717lCom_bluexyb_商城_红色商城商品订单页面H

    4. 支付方式选择:通常包括信用卡、支付宝、微信支付等多种支付选项,让用户根据自身喜好和便利性选择支付方式。 5. 确认与提交按钮:用户确认无误后,点击此按钮完成订单,触发后台处理逻辑,如库存扣减、生成订单...

    android生成二维码

    注:本想单独提供一个示例,结果编译时老是出现如下错误...> com.android.build.api.transform.TransformException: com.android.dex.DexException: Multiple dex files define Lcom/google/zxing/common/BitMatrix;”

    set6_chapter012uml_度量软件工程1

    - 度量类关系图中类之间关联的度量是LCOM( Lack of Cohesion in Methods),它度量类内方法之间的内聚性。其他选项如CF(Coupling Factor)度量类间的耦合,NOC(Number of Children)度量类的子类数量,MIF不在CK...

    Caysn打印机安卓打印示例代码 - Sample4_20160927

    在本文中,我们将深入探讨如何在安卓平台上使用CaysnPrinter进行打印操作,这是一个专为Android设备设计的打印开发包。我们将主要关注标题为"Sample4_20160927"的示例代码,它展示了如何利用PrinterLibs for Android...

    JNA库文件和文档

    1. 添加JNA库依赖:将JNA的jar文件添加到项目的类路径中,或者在Maven或Gradle项目中配置依赖。 2. 定义接口:创建一个Java接口,声明要调用的本地函数。这个接口应该使用`@Native`注解,并且继承自`...

Global site tag (gtag.js) - Google Analytics