1 / 22

软 件 工 程

软 件 工 程. 第 24 章 面向对象系统的技术度量. 第 24 章 面向对象系统的技术度量. 24.1 面向对象度量的目的 24.2 面向对象度量的识别特征 24.3 对 OO 设计模型的度量 24.4 面向类的度量 24.5 面向操作的度量 24.6 对面向对象测试的度量 24.7 对面向对象项目的度量 24.8 小结. 24.1 面向对象度量的目的. 更好地理解产品的质量。 评估过程的效率。 改善在项目级别完成的工作的质量。. 24.2 面向对象度量的识别特征. 局部化 封装 信息隐蔽 继承 抽象.

diamond
Download Presentation

软 件 工 程

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 软 件 工 程 第24章 面向对象系统的技术度量

  2. 第24章 面向对象系统的技术度量 24.1 面向对象度量的目的 24.2 面向对象度量的识别特征 24.3 对OO设计模型的度量 24.4 面向类的度量 24.5 面向操作的度量 24.6 对面向对象测试的度量 24.7 对面向对象项目的度量 24.8小结

  3. 24.1 面向对象度量的目的 • 更好地理解产品的质量。 • 评估过程的效率。 • 改善在项目级别完成的工作的质量。

  4. 24.2 面向对象度量的识别特征 • 局部化 • 封装 • 信息隐蔽 • 继承 • 抽象

  5. 24.2.1 局部化 局部化是软件的一个特征,它指明信息在程序 中被集中的方式,例如,针对功能分解的传统 方法围绕功能局部化信息,它们典型地以过程 模块来实现。数据驱动方法围绕特定的数据结 构局部化信息。在OO语境中,信息是通过封装 数据和处理在类或对象的边界内而集中的。

  6. 24.2.2 封装 封装通过将测度的焦点从单个模块改变到数据(属性)和 处理模块(操作)包而影响度量。此外,封装鼓励在高抽 象层的测度,例如,在本章后面,将介绍和每个类的 操作数量关联的度量。将此层次的抽象同传统的度量 相比较,传统的着重于布尔条件的计数(cyclomatic复 杂性)或代码行数。

  7. 24.2.3 信息隐蔽 • 信息隐蔽隐瞒(或隐藏)程序构件的操作细节,只将对访问该构件必需的信息提供给那些希望访问它的其他构件。

  8. 24.2.4 继承 继承是使得某对象的责任能够传播到其他 对象的机制,继承出现在类层次的所有层 面上,通常,传统的软件不支持该特征。

  9. 24.2.5 抽象 抽象是使得设计者能够关注程序构件(数 据或过程)的本质性细节而不需考虑低层 细节的机制。

  10. 24.3 对OO设计模型的度量 • 大小 • 复杂性 • 耦合性 • 充足度 • 完备性 OO设计可测度的特征: • 内聚性 • 原始性 • 相似性 • 易变性

  11. 23.4 面向类的度量 23.4.1 CK度量套件 6种基于类的设计度量 1.每个类的加权方法(WMC) 假定对类C定义了复杂度为c1,c2,…cn的n个方法,所 选择的特定的复杂性度量(如cyclomatic环复杂度)应该 规范化,使得对某方法的名义上的复杂性取值1.0。 WMC=Σci

  12. 6种基于类的设计度量 2.继承树的深度(DIT) 3.子女的数量(NOC) 4.对象类之间的耦合(CBO) 5.对类的响应(RFC) 6.方法中缺少内聚 (LCOM)

  13. 度量体系的样本如下: • 类大小(CS):可通过被封装在类中的操作的总数和属性的数量来测度。 • 由子类覆写的操作数量(NOO):若NOO大,则导致了弱的类层次和可能难于测试和修改的OO软件。 • 由子类加入的操作的数量(NOA):当NOA值增大时,子类漂离超类隐含的抽象。当DIT变大时,在层次中低层的NOA值将下降。 • 特例化指标(SI):特例化可通过加入或删除或覆写来达到,SI=[NOO*level]/Mtotal,SI值越高,越有可能类层次中包含了更多不遵从超类抽象的类。 24.4.2 Lorenz和Kidd建议的度量

  14. 24.4.3 MOOD度量套件 度量样本如下: • 方法继承因子(MIF) • 耦合因子(CF) • 多态因子(PF)

  15. 方法继承因子(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软件的影响的指示。

  16. 耦合因子(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软件的复杂性也将增加,而可理解性、可维护性和复用潜力都将受到影响。

  17. 多态因子(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)为后代计数(某基类的后代类的数量)

  18. 24.5 面向操作的度量 三个简单度量: • 平均操作大小(OSavg):可以用操作发送的消息的数量作为对操作大小的一种度量。 • 操作复杂度(OC):可使用针对传统软件提出的任何复杂度度量来计算。应保持OC尽可能低。 • 每个操作的平均参数的数量(NPavg):操作参数的数量越大,对象间的协作越复杂。 NPavg应保持尽可能低。

  19. 24.6 对面向对象测试的度量 • 封装 • 在方法中内聚性的缺乏(LCOM):LCOM值越高,必须被 测试的状态越多,以保证方法不产生副作用。 • 公共和保护属性的百分比(PAP):PAP的高值增加了类 间副作用的可能性。 • 对数据成员的公共访问(PAD):PAD的高值导致了类间 副作用的潜在可能。

  20. 24.6 对面向对象测试的度量 • 继承 • 根类的数量(NOR):NOR增加时,测试工作量也增加; • 扇入(FIN):OO语境中,FIN是多继承的指标,FIN>1 指明类从多于一个的根类继承属性和操作。FIN>1应尽 量避免。 • 子女数(NOC)和继承树的深度(DIT) :超类的方法必须 针对每个子类被测试。

  21. 24.7 对面向对象项目的度量 下面的OO度量可提供对软件大小的考察: • 场景脚本的数量 • 关键类的数量 • 子系统的数量

  22. 24.8 小结 面向对象软件和用传统方法开发的软件有根本性不同,因此,OO系统的度量着重于以下度量:可以应用于类和用于那些使得类独特的设计特征——局部化、封装、信息隐蔽、继承和对象抽象技术的度量。

More Related