Maintainability——可维护性

Name

    Maintainability 可维护性

    Extensibility 可扩展性

    Flexibility 灵活性

    Adaptability 可适应性

    Manageability 可管理性

    Supportability 支持性


常见指标

Cyclomatic Complexity 圈复杂度

    the number of different code paths in the flow of the program.

代码运行过程中可能出现的分支数量.分支数量越多代表可能走出的运行路径越多,代表需要更多的测试才能达到很好的代码覆盖率,也就以为着更差的可维护性.

Lines of Code 代码行数

更高的代码行数说明这个方法做了太多工作,应该将它分开,以便于更好的维护.

Maintainability Index (MI) 可维护性指数

– Halstead Volume (HV)

– Cyclomatic Complexity (CC)

– The average number of lines of code per module (LOC)

– The percentage of comment lines per module (COM).

值越高就更好维护.

Depth of Inheritance 继承的层次数

值越低越好维护.

Class Coupling 类之间的耦合度

Unit test coverage单元测试的覆盖度

值越高越好

聚合度和耦合度

耦合性可以是低耦合性(或称为松散耦合),也可以是高耦合性(或称为紧密耦合)。以下列出一些耦合性的分类,从高到低依序排列:

内容耦合(content coupling,耦合度最高)

也称为病态耦合(pathological coupling)当一个模块直接使用另一个模块的内部数据,或通过非正常入口而转入另一个模块内部。

共用耦合/公共耦合(common coupling)

也称为全局耦合(global coupling.)指通过一个公共数据环境相互作用的那些模块间的耦合。公共耦合的复杂程序随耦合模块的个数增加而增加。

外部耦合(external coupling)

发生在二个模块共用一个外加的数据格式、通信协议或是设备界面,基本上和模块和外部工具及设备的沟通有关。

控制耦合(control coupling)

指一个模块调用另一个模块时,传递的是控制变量(如开关、标志等),被调模块通过该控制变量的值有选择地执行块内某一功能;

特征耦合/标记耦合(stamp coupling)

也称为数据结构耦合,是指几个模块共享一个复杂的数据结构,如高级语言中的数组名、记录名、文件名等这些名字即标记,其实传递的是这个数据结构的地址;

数据耦合/数据耦合(data coupling)

是指模块借由传入值共享数据,每一个数据都是最基本的数据,而且只分享这些数据(例如传递一个整数给计算平方根的函数)。

消息耦合(message coupling,是无耦合之外,耦合度最低的耦合)

可以借由以下二个方式达成:状态的去中心化(例如在对象中),组件间利用传入值或消息传递 (计算机科学)来通信。

无耦合:模块完全不和其他模块交换信息。

耦合度:对象之间的依赖程度.越低越好.

聚合度:对象内部的联系的紧密程度.越高越好.

SOLID


SOLID

SRP

不应该有多于1个原因让你的ADT发生变化,否则就拆分开


OCP

对扩展性的开放

对修改的封闭

关键技术:抽象技术

LSP

子类型必须能够替换其基类型

派生类必须 能够通过其基类的接口使用,客户端无需了解二者之间的差异

ISP

不能强迫客户端依赖于它们 不需要的接口:只提供必需的接口

将接口细分开来,让客户端只需要访问他们需要的接口,而不是访问一个“胖”接口去为很多不使用的功能浪费资源.

DIP

抽象的模块不应依赖于具体的模块

具体应依赖于抽象

delegation时应该通过接口建立联系,而不是具体子类



设计模式有较为形象的比喻,详情转见:可维护性中的设计模式


你可能感兴趣的:(Maintainability——可维护性)