唐磊的个人博客

软件度量-面向对象软件度量

Object-Oriented Metrics

OOSE metrics are different because of:

Localization

Encapsulation

Information hiding

Inheritance

面向对象软件爱你度量不同于其他度量因为:

本地化、封装型、信息隐藏、继承性

LK Metrics

LK量度组是由Lorenz和Kidd提出的,他们把基于类的量度分为四种类型:规模、继承、内部(特性)和外部(特性)。

LK:Class Size

CS

Total number of operations (inherited, private, public) 操作数的总数

Number of attributes (inherited, private, public) 属性的总数

May be an indication of too much responsibility for a class 可能暗示了类的职责。

LK:Number of Operations Overridden 重写方法数

NOO

A large number for NOO indicates possible problems with the design,NOO值过大暗示类的设计出问题了。

Poor abstraction in inheritance hierarchy继承级别抽象度低。

LK:Number of Operations Added

NOA

The number of operations added by a subclass 子类增加的方法数

As operations are added it is farther away from super class

As depth increases NOA should decrease.

子类方法增多,应该离父类越来越远,随着深度增加,NOA应该减少。

SI

LK:Specialization Index 专业化指数

SI = [NOO * L] / Mtotal

L is the level in class hierarchy:L是类层次级别。

Mtotal is the total number of methods:Mtotal是方法总数。

Higher values indicate class in hierarchy that does not conform to the abstraction。值越大暗示类的层次不符合抽象性。

CK metrics

CK量度组由Chidamber和Kemerer提出,他们建议使用6种基于类设计的量度,通称为CK量度组。

CK Metrics

WMC

(1) 每个类的加权方法WMC (weighed Methods per Class)

WMC=∑Ci (i=1~n)

其中,Ci为一个类的各个方法(或操作或服务)的复杂性,相当于传统方法中的环路复杂性,Ci可相加。方法的数量和它们的复杂性是用来实现和测试一个类工作量总量的指示器。方法的数量越大,继承树(所有子类都继承父类的方法)就越复杂。对一个给定的类,随着方法的数量增大,其应用很可能变得越来越专门化,由此将限制其可能的重用。所以,WMC的值应当合理。

计算:类中方法数量之和。

WMC

WMC 4 shopping_cart = 2;WMC 4 Credit_Card = 1

DIT

(2) 继承树的深度DIT (Depth of the Inheritance Tree)

这种量度被定义为从结点到树根的最大长度。

DIT的值越大,复杂性就越高。因为随着DIT的增大,层次的类可能会继承许多方法。当试图预测一个类行为时,困难不仅会增大,而且会增加设计的复杂性。当然DIT较大时,则表示有许多方法被重用,这是其好的一方面。

NOC

(3) 子的数量NOC (Number of children)

子类在类的层次内,子类可以最直接地从属于一类。随着子类数量的增大,重用也增加了。但父类抽象的表示可能减少,即一些子类可能不是父类真正的成员,同时,测试数量(用来检查每个子类在操作前后的要求)也将增加。

CBO

(4) 对象类间的耦合CBO

CBO(Coupling Between Object Classes)是指一个类合作(即相关)的数量。当CBO增大时,不仅降低了可重用性,而且使其修改和修改后的测试变得复杂。所以,每个类的CBO值应当保持合理。这与在传统软件中减少耦合的一般原则是一致的。

计算:类图中,与其他类关联的个数。

CBO(CreditCard)=2

CBO(ShoppingCart) =2

RFC

(5) 对一个类的响应RFC (Response for a Class)

一个类的响应设置是一组方法,它可能被执行,用来响应接收到的类对象的消息,RFC被定义为响应设置方法的数量。

RFC增加,测试序列增加,测试工作量也将增加。由此可以得出,当RFC增大时,类的设计复杂性也将增大。

计算:类中涉及的方法个数,包括自身方法和调用其他类的方法。

例题:

RS = { methodA1, methodA2, methodB1, methodC1}

RFC = 4

RFC Metrics

LCOM

(6) 方法中聚合的不足LCOM (Lack of Cohesion in Methods)

一个类内的每种方法访问一个或多个属性(也称实例变量)。LCOM是访问一个或多个相同属性方法的数量。

如果LCOM很大,则说明方法可以通过属性与