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

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

OCP
对扩展性的开放
对修改的封闭
关键技术:抽象技术

LSP
子类型必须能够替换其基类型
派生类必须 能够通过其基类的接口使用,客户端无需了解二者之间的差异
ISP
不能强迫客户端依赖于它们 不需要的接口:只提供必需的接口
将接口细分开来,让客户端只需要访问他们需要的接口,而不是访问一个“胖”接口去为很多不使用的功能浪费资源.
DIP
抽象的模块不应依赖于具体的模块
具体应依赖于抽象
delegation时应该通过接口建立联系,而不是具体子类
网友评论