




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件工程第15章面向对象系统的技术度量OO度量是OO技术不可分割的一部分,在O0软件开发中具有重要的作用。利用度量能定量理解系统的体系结构和详细设计,利用度量的反馈信息以构造质量更好的系统;提供OO项目开发成本估算和进度预计的良好基础;有助于确定各种软件开发策略的作用和效果。与其他方法相比较,OO量度的使用和发展要晚得多。与传统软件一样,OO量度的主要目的是:更好地理解产品的质量,评价过程的效率,改进项目级别完成工作的质量。OO度量的几个准则根据面向对象度量的特点,在满足一般度量理论的基础上,构造面向对象程序所适用的度量还应该遵循以下几个准则:(1)度量需要反映某一个面向对象的特征(继承、封装、多态)。(2)对于面向对象程序每一个方面的特征,要从单个类和整个面向对象系统两个角度进行度量;(3)单一的度量可能不能全面描述某一个面的特征,必须用一组度量从多个方面来反映;15.1OO度量的识别特征任何产品的技术量度都取决于产品的特性。OO软件与使用传统方法开发的软件的度量方法截然不同,Berard定义了OO软件的5个特征:15.1.1局部化局部化指信息被集中在一个程序内的方式。传统方法中:数据与过程分离、功能分解,实现了功能局部化。传统软件工程使用数据驱动功能,其度量着重放在模块内部结构或复杂性(如模块规模、内聚性、环复杂度等)或模块间相互连接的方式(如模块耦合)上。在OO系统中,类是OO系统的基本单位,对象封装数据和过程,所以局部化是基于对象的,因此,要把类(对象)作为一个完整实体进行度量。而且,操作和类之间的关联不一定是“一对一”的,所以,类合作的度量必须能适应“一对多”或“多对多”的关联。15.1.2封装封装是指一组项的包装。传统软件中的记录、数组只有数据没有过程,是低层次的封装;子程序(如过程、函数、子例程、段等)只有过程没有数据,是中层的封装。其度量的重点在代码行的计数和环复杂度。在OO系统中,封装包含了类的职责(包括类的属性和操作)以及特定的类属性值定义的类的状态。其度量的重点不是单一的模块,而是包含数据和过程的包,是在较高抽象层次上的度量。15.1.3信息隐蔽信息隐蔽是指隐藏了程序构建的操作细节,只将访问该构件所必需的信息提供给那些访问该构件的其它构件。OO方法和传统方法是一致的。15.1.4继承继承是指一个对象的属性和操作能够传递给其它对象的机制。继承发生在类层次的所有层面上。通常,传统软件不支持这种特性。继承是OO系统的一个重要的关键特性,因此,很多OO系统的度量以此为重点,包括子女的数量(类的直接子类的数量)、父辈数(直接上层的数量)、类的嵌套层次(在一个继承层次中类的深度)等等。15.1.5抽象抽象是使设计者只关心程序构件的主要细节(数据和过程)、而不考虑低层细节的一种机制。抽象是一种相对概念,在OO和传统开发方法中都被采用,处于抽象的较高层次时,可以忽略更多的细节,只提供一个关于概念或项的更一般的视图;处于抽象的较低层次时,可以引入更多的细节,即提供一个关于概念或项的更详细的视图。在OO系统中,类从许多不同的细节层次上并以许多不同方式(如作为一个操作列表、一个状态序列、或是一系列协作)来观察,因此,OO度量可以用一个类度量的项作为抽象的表示,如每个应用类实例化的数量、每个应用类被参数化的数量,以及类被参数化的数量与未被参数化的数量的比例等。15.2分析、设计模型的度量对设计的客观观察应该有量化的成分——从而导向OO度量。在现实中,OO系统的技术度量不仅应用于设计模型,也可应用于分析模型。Whitmire描述了9个关于OO设计的可测度特征:大小(size)复杂性耦合性充足度完备性内聚性原始性易变性15.3OO项目的度量项目管理人员的任务是计划、协调、跟踪和控制软件项目的进行。其中第一个活动就是计划,而早期的计划任务之一是估算。项目管理者在计划过程中面临的主要问题之一就是如何对软件的实现规模进行估算。Lorenz和Kidd提出了用于OO项目的度量:场景脚本的数量关键类的数量支持类的数量每个关键类的平均支持类数量子系统的数量15.4面向类的度量经过近年来的研究,人们已经根据面向对象系统的特点提出了一系列面向对象度量,有的得到了广泛的认可和应用。这些度量分别从面向对象系统本身和系统中单个类的角度进行度量.其中较有名的有C&K度量集和Mood度量集。15.4.1CK度量套件CK度量套件(度量集)是一组针对类的度量,主要由Chidamber和Kemerer根据度量理论和有经验的面向对象软件开发人员的建议提出,他们建议使用6种基于设计的度量,度量面向对象系统中的单个类,从不同方面给出了评价类的准则。类的加权方法数(WMC):类的加权方法数反映了类的复杂性.一般来说,类的方法数越多.类越复杂。由于类中不同方法的复杂程度不一致,所以不能用单纯的方法数相加来衡量类的复杂程度,而需要把每个方法赋予一个权值。对于一个有m个类的系统而言,其WMC是m个类的类加权方法的平均值,即其中WMCj为第j个类的加权方法。方法数和其复杂度可以预测开发和维护该类所需的时间和人力;.由于类继承了父类的所有方法,父类的方法数越多,对类的潜在影响越大;.那些拥有众多方法的类更可能适合特定领域的应用,从而限制了其重用。例:下图是ATM系统的部分类视图,对该系统进行类的加权方法计算(假定方法的复杂度都为1)。类名方法Transaction2TransferAccount3Withdraw1Inquiry1WMC=7/4=1.75方法/类继承树的深度(DIT):DIT指从结点到根的最大长度,即对象所属类在继承树中的深度,从继承的角度反映了类的复杂性。DIT越大,复杂性也越大。DIT度量被定义为“从结点到树根的最大长度”,类的继承树深度可以直接从继承树中得到,树根的深度为零。一般来说,DIT越大,它从父辈类中继承下来的属性和方法就越多,类的复杂性就越大。随着DIT的增大,低层次的类可能会继承很多方法,其行为的预测变得困难;但是当DIT值很大时,又意味着很多方法被复用。那些拥有众多方法的类更可能适合特定领域的应用,从而限制了其重用。子女的数量(NOC):类的直接子类个数(NOC):在类层次中,直接从属于某类的子类称为该类的子女。类的直接子类个数反映了该类的重用程度。NOC越大,类的重用性越好。对系统的影响就越大。类的直接子类个数可以从继承树中得到。随着NOC的增大,针对每个子女的测试数量也增加了。对象类之间的耦合(CBO):如果一个类作用于其他类,比如一个类的方法或实例被另一个类的方法使用了,就称为耦合。CBO指的是类之间合作的数量,是与一个类相耦合的他类的个数。CBO反映了类和其它类之间的耦合程度。类之间的耦合不利于系统的模块化设计,类的耦合度越大,独立性越小,越容易受系统中其它部分的影响,越不易于重用。当CBO增大时,不仅降低了可重用性,而且使其修改和修改后的测试变得复杂。所以,每个类的CBO值应当保持合理。这与在传统软件中减少耦合的一般原则是一致的。例:下图是ATM系统的部分类视图,对该系统进行类的耦合的计算。类耦合类CBOATMBankServer,BankAccount,Transaction3BanServerATM,BankAccount,Transaction3BankAccountATM,BankServer,Transaction3TransactionATM,BankServer,BankAccount,Log4LogTransaction1对类的响应(RFC):方法可能调用类外的方法,加入对他们的度量,是增加了对类间潜在通信的度量。类的响应集合从另一个方面度量类的复杂度,它是所有可能被该类调用的方法的集合,执行它可以响应接收到的类对象的消息。RFC定义为响应集中方法的数量。当RFC增大时,测试序列增大,测试工作量也增加了,类的总的设计复杂度也随之增大。例:下图是ATM系统的部分类视图,对该系统进行类的响应的计算。类响应集合RCFATMATM,cardInsert,inquiryReq,Inquiry,inquiry,doTransaction6InquiryInquiry,inquiry,doTransaction,MessageFrom,display,BankAccount,inquiry7MessageFormMessageForm,display2BankAccountBankAccount,changePassword,inquiry3方法中内聚性的缺乏(LCOM):类的内聚性表明了类中所有元素相互联系的程度,内聚性的高低表明对类所进行的封装是否合理。设计合理的类中的元素之间的关系应该比较紧密,因此内聚性要求较大。一个类中的每个方法可能会访问一个或多个属性,LCOM是访问一个或多个相同属性的方法的数量。如果没有方法访问相同的属性,则LCOM=0。如果一个类中总共有10个方法,其中6个方法共用一个或多个属性,则LCOM=6。如果LCOM的值比较大,说明该类中的某些方法通过属性与其它方法耦合,缺乏内聚的程度大,类中的元素关联程度较低,对类进行的封装可能具有不合理之处,增加了设计的复杂性,通常把它分为两个或多个独立的类。我们总是希望LCOM值比较低,这与传统软件中的高内聚、低耦合是一致的。15.4.2LK度量套件LK度量组是由Lorenz和Kidd提出的,他们把基于类的度量分为4种类型:规模、继承、内部特性和外部特性。类的规模CS在类中被封装的操作(继承和私有实例的操作)的总量。在类中被封装的属性(继承和私有实例的属性)的总量。CK套件中的WMC实际上也是类的规模的度量。与WMC相类似,如果CS的值比较高,说明一个类有很多功能,这就会减少类的可复用性,并使实现和测试复杂化。由子类覆盖的操作数量NOO有的子类,为了自身需要,用自己的特定版本代替从父类继承的操作,这称为覆盖。NOO的值越大,说明子类覆盖的操作越多。较高的NOO可以提高类的复用性,并减少实现和测试的复杂性;但是如果NOO过大,则违反了超类所蕴含的抽象,削弱了类的层次结构,使得测试和修改的难度增大。由子类增加的操作数量NOA子类是通过加入私有操作或属性实现实例化。当NOA的值增大时,则子类漂离超类所隐含的抽象。当类层次的深度增大时,在低层的类的NOA的值将下降。特例化指标SI特例化指标为OO系统中的每一个子类提供了特例化等级的粗略指示,可以通过增加或删除操作或覆盖实现。SI=[NOO×level]/Mtotal,其中,level表示类在类层次中的层数,Mtotal表示类方法的总数。SI的值越大,类层次中包含了不遵从超类抽象的类的可能性也就越高。15.4.3MOOD度量套件MOOD度量套件是由Harrison、Counsell和Nithi提出的,是OO设计特征的一组量化指标,它从整个面向对象系统的角度对系统的面向对象特征进行评估。MOOD度量方法从封装、继承、耦合、多态性四个方面提出了6个度量元。每一个度量的计算都是以商的形式给出,分子是系统中特定机制的实际使用次数,分母是同样的机制最大可能的使用次数。因此,每一个度量的值都介于【0,1]。方法继承因子(MIF):MIF表明系统类结构中对方法(操作)和属性使用继承的程度,它是所有类中继承的方法的总数,系统中所有类的所有可获得的方法(类中定义的方法加上继承的方法)总数的比值。
其中TC为体系结构中类的总数,Ci为体系结构中的一个类,Ma(Ci)=Md(Ci)+Mi(Ci),Ma(Ci)为与Ci相关联的被引用的方法的数量,Md(Ci)为类Ci中声明的方法的数量,Mi(Ci)为类Ci中继承(没有被覆盖)的方法的数量。由MIF的计算方法以看出,方法继承因子是一个0到1之间的值,它的值越大,表明系统中的方法继承的程度越高。属性继承因子(AIF):AIF与MIF的定义类似。MIF和AIF提供了方法和属性继承对OO软件影响的量化指标。耦合因子(CF):CF表明系统中所有类间的耦合程度,它是系统中实际发生的耦合数目和可能发生的耦合的最大数目的比值。
其中函数is_client=1,当且仅当客户类Cc和服务器类Cs间存在关联,且Cc≠Cs;否则is_client=0。耦合因子CF是对OO设计元素之间关联的指标,一般情况下,认为在两个类之间有任何形式的消息传递,它们就存在耦合关系。系统中可能发生的耦合的数目最大时的情况就是每个类和其它类都有耦合关系。CF的值在0到1之间,值越大,表明耦合的发生越频繁。例:下图是ATM系统的部分类视图,对该系统进行耦合因子CF的计算。序号类is_client类1ATMBankServer、BankAccount、Transaction2BankServerBankAccount3BankAccount无4TransactionBankServer、BankAccount、Log5Log无CF=7/(52-5)=7/20多态因子(PF):多态性是一个值(属性、方法)具有多于一种类型的能力,使它可以被运用到不同类型的多个语境中。重载就是多态的一种常见的形式,它允许一个函数名被多次使用,每次都带有不同类型的参数。系统在运行时,根据类的类型确定调用那段代码。相对于其它语言,具有多态特征的语言具有很多优势,如灵活性强、抽象性好、支持一定程度的代码共享和行为共享。PF表明系统中所有类的方法使用多态机制的程度,它是系统中实际发生的多态数目和可能发生的多态情况的最大数目的比值。
其中,Mn(Ci)为新方法的数量,Mo(Ci)为覆盖的方法的数量,DC(Ci)为某基类后代类数量的计数。可以看出,PF中考虑的多态,都是由于继承引起的,它的值在0到1之间,值越大,表明多态的发生越频繁。例:用MOOD套件对下列java代码进行MIF和PF的度量。
publicclassTransaction{
privateStringtransactionDate;
privateATMatm;
privateBankAccount
currentAccount;
publicBankServer
m_BankServer;
protectedvoidTransaction(BankAccount
bankaccount,ATMatm){ }
publicboolean
doTransaction(BankAcount
currentAccount){ }
}
publicclassInquiryextendsTransaction{
publicboolean
doTransaction(BankAcount
currentAccount){ }
privatebooleaninquiry(){ }
}
publicclassWithdrawextendsTransaction{
publicboolean
doTransaction(BankAcount
currentAccount){ }
privatebooleanwithdrawal(){ }
}MIF=2/(2+6)=1/4PF=2/(2*2+1*0+1*0)=1/2类Mi(Ci)(类i中继承的方法的数目)Md(Ci)(类i中声明的方法的数目)Transaction无Transaction(),doTransaction()InquiryTransaction:Transaction()doTransaction(),inquiry()WithdrawTransaction:Transaction()doTransaction(),withdrawal()类Mn(Ci)Mo(Ci)DC(Ci)TransactionTransaction(),doTransaction()无2Inquiryinquiry()doTransaction()0Withdrawwithdrawal()doTransaction()0对CK度量和Mood度量的评价CK度量和Mood度量是现在被广泛接受的度量,它们分别从类的角度和面向对象系统的角度对程序的面向对象特征进行度量。需要注意的是,度量值的大小并不能说明面向对象软件质量的好环,因为不同的程序面对的问题域不同,所对应的面向对象特征也不相同。但是这些度量可以从面向对象特征的角度衡量程序或程序中模块的复杂度,从而为重点测试提供依据。15.5面向操作的度量系统的连接性结构可能比个体模块的内容更为重要,但是,通过检查类操作的一般特征也可以帮助我们更好地度量系统。根据Lorenz和Kidd的建议,有三种简单的度量。平均操作规模OSavg(averageOperationSize)代码行LOC可以作为操作规模的指标,但是LOC测量存在依赖于程序设计语言、不适用于非过程语言等问题,因此,在OO软件中,操作传送的消息的数量成为操作规模的另一个度量方法。操作规模增大,表明操作所传送的消息增多。OSavg值越大,说明操作越复杂,责任在类中没有很好地分配。操作复杂度OC(OperationComplexity)操作
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年数字电路的功能测试项目发展计划
- 正心立德 劳动树人 -小学“新劳动教育”的实践
- 2025年吉林省工业和信息化厅下属事业单位招聘考试笔试试题【答案】
- 2025年务川自治县“特岗计划”招聘 考试笔试试题【答案】
- 2025年南宁市第十三中学招聘高中顶岗教师考试试题【答案】
- 消防员个人工作总结5篇
- 2025年减震系统材料合作协议书
- 2025年低功率气动阀岛用控制阀合作协议书
- 教育新星的成长路径从校园到职场
- 中职数学说课课件教学
- 安保工作月度总结
- 开业美容项目活动方案
- 2025年技术玻璃制品行业市场调研报告
- 2025至2030高纯氯化钾行业产业运行态势及投资规划深度研究报告
- 2025年吉林省中考数学试卷真题(含答案详解)
- 2025年中国自由锻件行业发展运行现状及投资潜力预测报告
- 医学美容技术专业教学标准(高等职业教育专科)2025修订
- QGDW11970.7-2023输变电工程水土保持技术规程第7部分水土保持设施质量检验及评定
- 变电站创优工程汇报
- 党课课件含讲稿:以作风建设新成效激发干事创业新作为
- DB62T 4134-2020 高速公路服务区设计规范
评论
0/150
提交评论