220 likes | 312 Views
软 件 工 程. 第 24 章 面向对象系统的技术度量. 第 24 章 面向对象系统的技术度量. 24.1 面向对象度量的目的 24.2 面向对象度量的识别特征 24.3 对 OO 设计模型的度量 24.4 面向类的度量 24.5 面向操作的度量 24.6 对面向对象测试的度量 24.7 对面向对象项目的度量 24.8 小结. 24.1 面向对象度量的目的. 更好地理解产品的质量。 评估过程的效率。 改善在项目级别完成的工作的质量。. 24.2 面向对象度量的识别特征. 局部化 封装 信息隐蔽 继承 抽象.
E N D
软 件 工 程 第24章 面向对象系统的技术度量
第24章 面向对象系统的技术度量 24.1 面向对象度量的目的 24.2 面向对象度量的识别特征 24.3 对OO设计模型的度量 24.4 面向类的度量 24.5 面向操作的度量 24.6 对面向对象测试的度量 24.7 对面向对象项目的度量 24.8小结
24.1 面向对象度量的目的 • 更好地理解产品的质量。 • 评估过程的效率。 • 改善在项目级别完成的工作的质量。
24.2 面向对象度量的识别特征 • 局部化 • 封装 • 信息隐蔽 • 继承 • 抽象
24.2.1 局部化 局部化是软件的一个特征,它指明信息在程序 中被集中的方式,例如,针对功能分解的传统 方法围绕功能局部化信息,它们典型地以过程 模块来实现。数据驱动方法围绕特定的数据结 构局部化信息。在OO语境中,信息是通过封装 数据和处理在类或对象的边界内而集中的。
24.2.2 封装 封装通过将测度的焦点从单个模块改变到数据(属性)和 处理模块(操作)包而影响度量。此外,封装鼓励在高抽 象层的测度,例如,在本章后面,将介绍和每个类的 操作数量关联的度量。将此层次的抽象同传统的度量 相比较,传统的着重于布尔条件的计数(cyclomatic复 杂性)或代码行数。
24.2.3 信息隐蔽 • 信息隐蔽隐瞒(或隐藏)程序构件的操作细节,只将对访问该构件必需的信息提供给那些希望访问它的其他构件。
24.2.4 继承 继承是使得某对象的责任能够传播到其他 对象的机制,继承出现在类层次的所有层 面上,通常,传统的软件不支持该特征。
24.2.5 抽象 抽象是使得设计者能够关注程序构件(数 据或过程)的本质性细节而不需考虑低层 细节的机制。
24.3 对OO设计模型的度量 • 大小 • 复杂性 • 耦合性 • 充足度 • 完备性 OO设计可测度的特征: • 内聚性 • 原始性 • 相似性 • 易变性
23.4 面向类的度量 23.4.1 CK度量套件 6种基于类的设计度量 1.每个类的加权方法(WMC) 假定对类C定义了复杂度为c1,c2,…cn的n个方法,所 选择的特定的复杂性度量(如cyclomatic环复杂度)应该 规范化,使得对某方法的名义上的复杂性取值1.0。 WMC=Σci
6种基于类的设计度量 2.继承树的深度(DIT) 3.子女的数量(NOC) 4.对象类之间的耦合(CBO) 5.对类的响应(RFC) 6.方法中缺少内聚 (LCOM)
度量体系的样本如下: • 类大小(CS):可通过被封装在类中的操作的总数和属性的数量来测度。 • 由子类覆写的操作数量(NOO):若NOO大,则导致了弱的类层次和可能难于测试和修改的OO软件。 • 由子类加入的操作的数量(NOA):当NOA值增大时,子类漂离超类隐含的抽象。当DIT变大时,在层次中低层的NOA值将下降。 • 特例化指标(SI):特例化可通过加入或删除或覆写来达到,SI=[NOO*level]/Mtotal,SI值越高,越有可能类层次中包含了更多不遵从超类抽象的类。 24.4.2 Lorenz和Kidd建议的度量
24.4.3 MOOD度量套件 度量样本如下: • 方法继承因子(MIF) • 耦合因子(CF) • 多态因子(PF)
方法继承因子(MIF):OO系统的类体系结构针对方法(操作)和属性而使用继承的程度被定义为:方法继承因子(MIF):OO系统的类体系结构针对方法(操作)和属性而使用继承的程度被定义为: MIF=ΣMi(Ci)/ΣMa(Ci)对i从1到TC求和 其中TC为在体系结构中的类的总数,Ci是在体系结构中 的一个类。且: Ma(Ci)=Md(Ci)+Mi(Ci) 其中Ma(Ci)为可在和Ci关联中被调用的方法的数量, Md(Ci)为在类Ci中声明的方法的数量,Mi(Ci)为在类Ci 中继承(未被覆写的)的方法的数量。 MIF值提供了继承对OO软件的影响的指示。
耦合因子(CF): CF=ΣiΣjis_client(Ci,Cj)/(TC²-TC) 这里针对I从1到TC和j从1到TC求和。函数 is_client=1, 当且仅当在客户端类Cc和服务器类Cs 间存在关系,且Cc≠Cs时 is_client=0, 否则 当CF值增加时,OO软件的复杂性也将增加,而可理解性、可维护性和复用潜力都将受到影响。
多态因子(PF):重新定义被继承方法的方法数量,除以可能的不同多态情形的最大数量…..这样,PF是对系统中的动态绑定相对数量的间接测量。多态因子(PF):重新定义被继承方法的方法数量,除以可能的不同多态情形的最大数量…..这样,PF是对系统中的动态绑定相对数量的间接测量。 PF=∑iMo(Ci)/∑i[Mn(Ci)*DC(Ci)] 这里对i从1到TC求和。且 Md(Ci)=Mn(Ci)+Mo(Ci) 其中,Mn(Ci)为新方法的数量,Mo(Ci)为覆写方法的数量,DC(Ci)为后代计数(某基类的后代类的数量)
24.5 面向操作的度量 三个简单度量: • 平均操作大小(OSavg):可以用操作发送的消息的数量作为对操作大小的一种度量。 • 操作复杂度(OC):可使用针对传统软件提出的任何复杂度度量来计算。应保持OC尽可能低。 • 每个操作的平均参数的数量(NPavg):操作参数的数量越大,对象间的协作越复杂。 NPavg应保持尽可能低。
24.6 对面向对象测试的度量 • 封装 • 在方法中内聚性的缺乏(LCOM):LCOM值越高,必须被 测试的状态越多,以保证方法不产生副作用。 • 公共和保护属性的百分比(PAP):PAP的高值增加了类 间副作用的可能性。 • 对数据成员的公共访问(PAD):PAD的高值导致了类间 副作用的潜在可能。
24.6 对面向对象测试的度量 • 继承 • 根类的数量(NOR):NOR增加时,测试工作量也增加; • 扇入(FIN):OO语境中,FIN是多继承的指标,FIN>1 指明类从多于一个的根类继承属性和操作。FIN>1应尽 量避免。 • 子女数(NOC)和继承树的深度(DIT) :超类的方法必须 针对每个子类被测试。
24.7 对面向对象项目的度量 下面的OO度量可提供对软件大小的考察: • 场景脚本的数量 • 关键类的数量 • 子系统的数量
24.8 小结 面向对象软件和用传统方法开发的软件有根本性不同,因此,OO系统的度量着重于以下度量:可以应用于类和用于那些使得类独特的设计特征——局部化、封装、信息隐蔽、继承和对象抽象技术的度量。