CK软件度量元中各项含义

tera-promise数据集中收集了很多软件的度量元和缺陷信息,可以用作缺陷预测的数据集。其中包含不同种类的度量元。Marian Jureckzo收集了33个项目的许多度量元数据和缺陷信息[1],公开在tera-promise数据集中。下面对其中度量元的含义作简要记录。

软件基本信息

  • name:项目名称
  • version:项目版本号
  • name:文件名(类名)

CK度量元,专为面向对象程序设计的[2]

  • wmc:类中方法权重,表示一个类中所有方法的复杂度之和,在这里CK度量元没有用圈复杂度来衡量复杂度,而是将每个方法的复杂度都赋值为1,因此wmc也就相当于是每个类中的方法数
  • dit:继承树深度,表示一个类继承了多少个类
  • noc:一个类的直接子类数
  • cbo:对象间的耦合,是对与某个类耦合的类的计数。当一个类的方法调用了另一个类的方法,或是访问了这个类的变量,我们认为这两个类耦合。类A的cbo是引用了A或是被A引用的类的集合的大小
  • rfc:类的响应集的大小,也就是此类中所有的方法,以及被此类中方法调用的所有方法的集合的大小
  • lcom:方法内聚性的缺失。对于类中每一个方法对,如果这对方法没有共同引用任何实例变量,那么lcom加一,否则减一

Martin提出的两个度量元[3]

  • ca:依赖于当前类的类数量
  • ce:当前类依赖的类的数量

Bansiy和Davis提出的一个度量元[4]

  • npm:类中public方法的数量
  • dam:类中所有private(protected)属性占全部属性的比率
  • moa:类的字段中所有类型为用户定义类的字段数
  • mfa:类中被继承的方法占类中所有方法的比例,构造器和java.lang.Object不在其中
  • cam:类中每个方法中的参数类型的总和除以整个类中所有参数类型数量与类中方法数的积

Henderson-Sellers提出的一个度量元[5]

  • lcom3:
    L C O M 3 = ( 1 a j = 1 a μ ( A j ) ) m 1 m

    其中m表示类中的方法数,a表示类中的属性数, μ ( A ) 是访问到属性A的方法的数量

Chidamber&Kemerer度量元的扩展[6]

  • ic:一个类的继承耦合类的个数
  • cbm:于所有继承的方法耦合的新的/重定义的方法数
  • amc:类中方法的平均大小,每个函数的大小按Java二进制码的数量来衡量

McCabe的度量元[7]

  • max_cc:类中所有方法的圈复杂度中的最大值
  • avg_cc:类中所有方法圈复杂度的算数平均值

其他

  • loc:类的Java二进制码的行数

缺陷信息

  • bug:类中的缺陷数量,利用工具BugInfo,从SVN或CVS中抽取的带有bugfix字样的commit进行统计,此工具目前已不知所踪,感兴趣大概只能联系[1]的作者了。

参考文献:

[1] Marian Jureczko, Lech Madeyski. Towards identifying software project clusters with regard to defect prediction.
[2] Chidamber, S. R., Kemerer, C. F. A metrics suite for object oriented design.
[3] Martin, R. OO Design Quality Metrics - An Analysis of Dependencies.
[4] Bansiya, J. and Davis, C. G. A Hierarchical Model for Object-Oriented Design Quality Assessment.
[5] Henderson-Sellers, B. Object-Oriented Metrics, measures of Complexity.
[6] Tang, M-H., Kao, M-H., Chen, M-H. An Empirical Study on Object-Oriented Metrics.
[7] McCabe, T. J. A complexity measure.

猜你喜欢

转载自blog.csdn.net/m0_37924639/article/details/79784522