C#属性和标准类结构度量
我试图理解如何根据C#属性计算基本类结构度量,例如ATFD(访问外来数据)和LCOM(方法中缺乏内聚性) 如果一个方法访问另一个类的单个属性,这是否意味着该方法的ATFD分数为1?是否根据是否存在支持私有字段而改变 例如,对于LCOM,当遵循NDepend列出的公式时,属性是否算作字段或方法(或两者兼而有之) 当我们有一个与地产相关的显式私有字段时,这种情况会发生什么变化?即,以下A类和C类的LCOM差异是什么:C#属性和标准类结构度量,c#,metrics,cohesion,C#,Metrics,Cohesion,我试图理解如何根据C#属性计算基本类结构度量,例如ATFD(访问外来数据)和LCOM(方法中缺乏内聚性) 如果一个方法访问另一个类的单个属性,这是否意味着该方法的ATFD分数为1?是否根据是否存在支持私有字段而改变 例如,对于LCOM,当遵循NDepend列出的公式时,属性是否算作字段或方法(或两者兼而有之) 当我们有一个与地产相关的显式私有字段时,这种情况会发生什么变化?即,以下A类和C类的LCOM差异是什么: class A { private int _b;
class A {
private int _b;
private int _bx;
public int B { get { return this._b; }
set { this._b = value; }
}
public void MethodA() {
B = 1;
}
public void MethodB() {
this._bx = 1;
}
}
class C {
public int B { get; set; }
public int Bx { get; set; }
public void MethodA() {
B = 1;
}
public void MethodB() {
Bx = 1;
}
}
我修改了问题中的代码以使其可编译
对于NDepend,这两个类的值为:
class A LCOM 0.7 LCOMHS 0.88
class C LCOM 0.0 LCOMHS 0.0
对于LCOM,属性是作为字段还是作为方法(或同时作为两者)计算的
答案是这样的
- LCOM=1–(总和(MF)/M*F)
- LCOM HS=(M–总和(MF)/F)(M-1)
- M是类中的方法数(统计静态方法和实例方法,还包括构造函数、属性getter/setter、事件添加/删除方法)
- F是类中实例字段的数目
- MF是访问特定实例字段的类的方法数
- Sum(MF)是类的所有实例字段的MF之和
NbFields>10和NbMethods>10之所以突出显示,是因为LCOM/LCOMHS值主要对大型复杂类而言非常重要。如果我的数学错误,我深表歉意,但看看A类,我有以下数字:M=3(B(或者由于get和set,这算是2吗?),MethA,MethB)F=2(_B,_bx)MF=2(B->B)(或者是因为get和set而将其计算为2?),MethB->bx)LCOM=1-2/6=0.67对于类A M=4,因为还有默认构造函数,即使它没有在源代码中声明。嗯,如果是这种情况,那么M*F是8,这意味着最终结果是1-2/8=0.75。是不是B计算为2个方法(get和set)所以我们有M=5,M*F=10,MF=3(B计为2),我们有1-3/10=0.7?