CodeMR使用入门

1.是什么

  CodeMR 是一款软件质量和静态代码分析工具,可帮助软件公司开发更好的代码、质量更高的产品。
  CodeMR以不同视图,为C++、Java、Kotlin 和 Scala 项目 展示了可视化代码指标 和 高级质量属性(包括Coupling, Complexity, Size)。例如包结构、TreeMap、Sunburst、依赖关系(Dependency) 和 图形视图。
  CodeMR 中应用的图形可视化技术简单而直观。 CodeMR 具有不同的过滤选项并支持自定义查询。它可视化高级面向对象的质量属性和低级指标。质量属性源自多个指标的组合。您还可以为项目创建不同的 HTML 报告。
  使用 Community Edition,您最多可以提取 50 个源文件和 60 个类。

1.面向对象的指标描述1

1.1 SQA(Software Quality Attributes)

SQA是Software Quality Attributes(软件质量属性)的简写。
在出现问题时,软件外部质量会很容易被观察到,但根源往往是看不见的内部质量属性,如下:

  • 程序结构(program structure)
  • 复杂性(complexity)
  • 耦合性(coupling)
  • 可测试性(testability)
  • 可重用性(reusability)
  • 可读性(readability)
  • 可维护性(maintainability)

耦合性(Coupling)、复杂性(Complexity)、内聚性(Cohesion )和规模(Size)是软件的基本内部质量属性。

1.2 Coupling(耦合)

  • 如果A类和B类耦合,那么A和B之间会有如下关系:
    • A拥有一个指向(类型为)B的属性。
    • A调用对象B的服务。
    • A具有一个方法,该方法通过返回类型或参数引用B。
    • A有一个类型为B的局部变量。
    • A是类B的子类(或实现类)。
  • 紧密耦合的系统往往表现出以下特征:
    • 一个类的变化通常会导致其他类中的连锁变化。
    • 由于增加的依赖关系,需要更多的工作 和(或) 时间。
    • 由于必须包含依赖类,因此可能更难重用一个类。

1.3 LCohesion(Lack of Cohesion)

Lack of Cohesion(缺乏内聚性)的简写。
LCohesion是衡量一个类的方法之间,关联程度的指标。高内聚性往往更可取,因为高内聚性与软件的多个理想特性相关,包括健壮性(robustness)、可靠性(reliability)、可重用性(reusability)和可理解性(understandability)。相反,低内聚性与不良特征相关,如难以维护、测试、重用甚至理解。

1.4 Complexity

复杂性意味着难以理解,并描述了多个实体之间的交互。软件的复杂度越高,不经意间干扰交互的风险也随之增加,从而在进行更改时,也更容易引入缺陷。

1.5 Size

Size是最古老和最常见的软件度量形式之一。通过代码中的行数或方法数来衡量。非常高的计数可能表明某个类或方法正在尝试做太多工作,应该进行拆分。这也可能表明该类可能难以维护。

1.6 CLOC(Class Lines of Code)

Class Lines of Code(类的代码行数)的缩写。
相关的质量属性:Size。
类的所有非空、非注释行的数量。CLOC是size的度量,也间接与类的复杂性相关。

1.7 WMC(Weighted Method Count)

Weighted Method Count(加权方法数)的缩写。
相关的质量属性:Complexity, Size。
加权方法数是类所有方法的加权和,代表了类的McCabe复杂性。如果将每个方法的复杂性设定为1,则加权方法数等于方法的数量。方法的数量和复杂性可用于预测开发、维护和测试的工作量估计。在继承中,如果基类具有大量方法,它会影响其子类,并且所有方法都会在子类中表示。如果方法的数量很高,那么该类可能是特定领域的。因此,它们的可重用性较低。此外,这些类往往更容易发生变更和缺陷。

1.8 DIT(Depth of Inheritance Tree)

Depth of Inheritance Tree(继承树的深度)的缩写。
相关的质量属性:Complexity
类在继承树中的位置。对于根类和非继承类,其值为0。对于多重继承,该指标表示最大长度。在继承树中位置较深的类可能是继承而来的。因此,更难预测其行为。此外,这个类开发、测试和维护的难度也较大。

1.9 NOC(Number of Children)

Number of Children(子类的数量)的缩写。
相关的质量属性: Coupling
直接子类的数量。NOC的大小大致表示应用程序自身的重用程度。一般认为,一个类拥有的子类越多,类的维护者就越有责任不破坏子类的行为。因此,修改这个类会更加困难,需要进行更多的测试。

1.10 CBO(Coupling Between Object Classes)

Coupling Between Object Classes(对象类之间的耦合度)的缩写。
相关的质量属性: Coupling
CBO用于衡量一个类与其他类之间的耦合度。它衡量了一个类与其他类之间的依赖关系数量。
它是通过计算 被某个类调用了属性或方法的其他类,以及使用给定类的属性或方法的类。继承关系被排除在外。
CBO的值越高,表示一个类与其他类之间的耦合度越高,也就是说这个类与其他类之间的依赖关系较多。相反,CBO的值越低,表示一个类与其他类之间的耦合度越低,这意味着这个类与其他类之间的依赖关系较少。
作为耦合度的度量,CBO指标与类的可重用性(reusability )和可测试性(testability )相关。更高的耦合度意味着代码变得更难以维护,因为其他类的变化也可能导致该类的变化。因此,这些类的可重用性较低,需要更多的测试工作。

1.11 CBO_LIB(CBO Lib)

相关的质量属性: Coupling
依赖库类的数量。

1.12 CBO_APP(CBO App)

相关的质量属性: Coupling
应用程序中的依赖类数量。

1.13 RFC(Response For a Class)

Response For a Class(类的响应)的缩写。
相关的质量属性: Complexity
在特定类的对象接收到公共消息时,可能潜在地调用的方法数量。它包括从原始方法调用的任何方法的完整调用图。如果一个类中可以调用的方法数量很多,那么这个类被认为更复杂,并且可能与其他类高度耦合。因此,需要更多的测试和维护工作。

1.14 SRFC(Simple Response For a Class)

Simple Response For a Class(类的简单响应)的缩写。
相关的质量属性: Complexity
在特定类的对象接收到公共消息时,可以潜在地调用的方法数量。它包括直接从类中调用的方法。如果一个类中可以调用的方法数量很多,那么这个类被认为更复杂,并且可能与其他类高度耦合。因此,需要更多的测试和维护工作。

1.15 LCOM(Lack of Cohesion of Methods)

Lack of Cohesion of Methods(方法缺乏内聚性)的缩写。
相关的质量属性: Cohesion
衡量类的方法之间的关联程度。低内聚性意味着该类实现了多个责任。对其中一个责任的变更请求(无论是修复错误还是添加新功能)将导致该类的变更。缺乏内聚性还会影响可理解性,并暗示着类可能应该被拆分为两个或更多的子类。
LCOM3的定义如下:LCOM3 = (m - sum(mA)/a) / (m-1) ,其中:

  • m表示类中的方法数量。
  • a表示类中的属性(变量)数量,包括共享的(静态的)和非共享的。
  • mA表示访问某个属性(变量)的方法数量。
  • sum(mA)表示类中所有属性的访问方法数量之和。
    请注意,这是一种用于衡量方法之间关联程度的度量指标。

LCOM3的取值范围在0到2之间。1到2之间的值被认为是令人担忧的。在一个正常的类中,其方法访问类自己的变量,LCOM3的取值范围在0(高内聚性)到1(无内聚性)之间。当LCOM3=0时,每个方法都访问所有变量。这表示最高可能的内聚性。LCOM3=1表示极度缺乏内聚性。在这种情况下,应该将该类拆分。
当存在没有被类中任何方法访问的变量时,1 < LCOM3 <= 2。如果这些变量是死变量或者只在类外部访问,就会出现这种情况。这两种情况都代表了设计缺陷。该类是重写为模块的候选对象。或者,应该使用访问器方法或属性来封装类变量。还可能需要删除一些死变量。
如果一个类中没有超过一个方法,LCOM3是未定义的。如果一个类中没有变量,LCOM3是未定义的。未定义的LCOM3显示为零[http://www.aivosto.com/project/help/pm-oo-cohesion.html]。

1.16 LCAM(Lack of Cohesion Among Methods(1-CAM))

Lack of Cohesion Among Methods(方法之间缺乏内聚性)的缩写。
相关的质量属性: Cohesion
CAM指标是基于方法的参数类型来衡量内聚性的度量。
LCAM是一种软件度量指标,用于衡量一个类中方法之间的耦合度。它衡量了一个类中方法对于实现一个特定功能是否紧密相关。具体来说,1-CAM计算了一个类中所有方法对于实现该类的功能所需的共享实例变量的数量。
LCAM的值越高,表示类中的方法之间的耦合度越低,也就是说这些方法在实现不同的功能时没有很强的关联性(方法之间的共享属性较少)。相反,LCAM的值越低,表示类中的方法之间的耦合度越高,这意味着这些方法在实现相同的功能时有很强的关联性。
LCAM = 1-CAM

1.17 NOF(Number of Fields)

Number of Fields(字段数量)的缩写。
相关的质量属性:Size
类中字段(属性)的数量。

1.18 NOM(Number of Methods)

相关的质量属性:Size
Number of Methods(方法数量)的缩写。
类中方法数量。

1.19 NOSF(Number of Static Fields)

相关的质量属性:Size
类的静态字段数量。

1.20 NOSM(Number of Static Methods)

相关的质量属性:Size
类的静态方法的数量。

1.21 SI(Specialization Index)

相关的质量属性:Complexity
定义为NORM * DIT / NOM。SI(专业化指数)度量子类覆盖其祖先类的程度。该指数是类中被重写方法的数量与方法总数之间的比率,并按该类的继承深度进行加权。Lorenz和Kidd指出:不包括调用超类方法或覆盖模板的方法。

1.22 CM-LOC(Class-Methods Lines of Code)

相关的质量属性:Size
类内所有非空、非注释方法的行数总和。

1.23 EC(Efferent Coupling)

相关的质量属性: Coupling
传出耦合(Outgoing Coupling)。
包内的类依赖于其他包中的类的数量,是衡量该包对外部依赖程度的指标。

1.24 AC(Afferent Coupling)

相关的质量属性:Coupling
传入耦合(Incoming Coupling)。
其他包中依赖于该包内类的类数量,是衡量该包责任程度的指标。

1.25 NoI(Number of Interfaces)

相关的质量属性:Size
接口总数。

1.26 NoCls(Number of Classes)

相关的质量属性:Size
类总数。

1.27 NoE(Number of Entities)

相关的质量属性:Size
接口和类的总数。

1.28 NORM(Number of Overridden Methods)

相关的质量属性:Complexity
重写方法的数量。

1.29 C3

相关的质量属性:Coupling, Cohesion, Complexity
Coupling, Cohesion, Complexity指标的最大值。

1.30 nofP(Number of Packages)

相关的质量属性: Size
项目中包的总数。

1.31 nofPa(Number of External Packages)

相关的质量属性:Size
项目引用的外部包数量。

1.32 nofEE(Number of External Entities)

相关的质量属性:Size
项目引用的外部类和接口数量。

1.33 NoPC(Number of Problematic Classes)

项目中具有高耦合度、高复杂度 或 低内聚度的类的数量。

1.34 NoHPC(Number of Highly Problematic Classes)

项目中具有高耦合度、高复杂度 和 低内聚度的类的数量。

1.35 LTCC(Lack of Tight Class Cohesion)

相关的质量属性:Cohesion
LTCC(缺乏紧密类内聚度)指标,衡量了类的公共方法之间的内聚缺乏性。即类中直接连接的公共方法的相对数量。具有较高缺乏内聚性的类,表明设计上存在错误。

1.36 ATFD(Access to Foreign Data)

相关的质量属性:Coupling
ATFD(访问外部数据)是指直接或间接可从被调查类访问到其属性的类的数量。具有较高ATFD值的类强烈依赖于其他类的数据,这可能是God Class(上帝类)的迹象。

1.37 I(Instability)

不稳定性度量用于衡量类对变化的相对敏感性。它定义为传出依赖与所有包依赖的比率,并接受从0到1的值。
Instability = EC / (EC+AC)
不稳定性 = 传出依赖 / (传出依赖 + 传入依赖)
其中:传出依赖(EC)为类的出度依赖,传入依赖(AC)为类的入度依赖。

1.38 Abs(Abstractness)

抽象度(Abstractness)用于衡量包的抽象程度。抽象度定义为包中抽象类的数量与所有类的数量之比。

1.39 ND(Normalized Distance)

标准化距离用于衡量稳定性和抽象度之间的平衡,计算公式为 ND = |Abs + I - 1|,其中 Abs 为抽象度,I 为不稳定性。

1.40 InDegree

类对应图顶点的入度。

1.41 OutDegree

类对应图顶点的出度。

1.42 Degree

类对应图顶点的度数。

2. 模型编辑器


  1. https://www.codemr.co.uk/blog/supported-metric-list-by-codemr/ ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值