(计算机软件与理论专业论文)面向对象软件的度量技术研究.pdf_第1页
(计算机软件与理论专业论文)面向对象软件的度量技术研究.pdf_第2页
(计算机软件与理论专业论文)面向对象软件的度量技术研究.pdf_第3页
(计算机软件与理论专业论文)面向对象软件的度量技术研究.pdf_第4页
(计算机软件与理论专业论文)面向对象软件的度量技术研究.pdf_第5页
已阅读5页,还剩52页未读 继续免费阅读

(计算机软件与理论专业论文)面向对象软件的度量技术研究.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

面向对象的软件度量 摘要 随着面向对象技术的广泛应用,一方面,为了更好的控制软件的质量,人们 对于度量的需求越来越迫切:另一方面,由于面向对象有着自身独特的特征,一 些传统的方法在面向对象领域就显得有些力不从心了,因此,相应的度量研究的 进展就显得比较缓慢。这两方面之间的巨大反差,促使人们加快了对于面向对象 的软件度量的研究步伐,并且已经获得了一些不错的结果。 本文在i s o 模型的基础上,提出了面向对象开发中必须考虑的八个要素一 一耦合、内聚、规模、抽象、复用、信息隐蔽、继承和多态。并将这八个要素与 i s o 模型联系在一起,以利于对面向对象的软件的质量进行度量。 然后,本文着重分析了面向对象系统的耦合和继承程度,分别列出了一些主 要的观察点,并针对每个观察点提出了各种常见的情况。在进行了相应的分析之 后,本文针对面向对象中最重要的概念类,分别提出了一组度量类在耦合和 继承方面的各种表现,并对每个度量方法进行了分析和讨论。 对于面向对象系统的耦合程度,本文首先提出了三个度量方法用来对系统中 的耦合情况作一个大致的和粗略的评价,接着,又针对了耦合度量中会遇到的五 个问题各提出了一个度量方法。对于面向对象系统的继承程度,本文则针对了继 承度量中会遇到的五个问题各提出了一个度量方法。 本文提出的度量方法中,有相当一部分方法的度量结果包含多个数值,这样 就能够传达更多的信息,以利于对度量结果进行进一步的分析和研究。 关键字:面向对象,度量 面向对象的软件度量 a b s t r a e t n o w a d a y s ,t h eo b j e c t o r i e n t e dt e c h n o l o g yi sb e i n gu s e dm o r ea n d m o r ew i d e l y o no n eh a n d ,p e o p l en e e dm e t r i c sm o r ea n dm o r es e r i o u s l y w h i c hi su s e dt oh e l p c o n t r o l l i n gt h eq u a l i t yo ft h es o f t w a r e o nt h eo t h e rh a n d ,h o w e v e r ,f o rt h es p e c i a l c h a r a c t e r i s t i c so ft h eo b j e c t o r i e n t e dt e c h n o l o g y , al o to ft r a d i t i o n a lm e t h o d sa r en o t a se f f i c i e n ta sw h a tt h e yw e r ei nt h eo l dt i m e ,a n d ,t h e r e f o r e ,t h er e s e a r c ho ft h e c o r r e s p o n d i n gm e t r i c si ss o m e w h a t b e h i n dt h e p r o g r e s s a l lt h e s eg e tp e o p l ee x p e d i t e t h er e s e a r c ho no b j e c t - o r i e n t e dm e m c s ,a n d ,f o r t u n a t e l y , s o m en i c er e s u l t sw e r e a r c h i v e d b a s e do nt h ei s oq u a l i t ym o d e l ,t h i sd i s s e r t a t i o n p r o m o t e de i g h t f e a t u r e s i n c l u d i n gc o u p l i n g ,c o h e s i o n ,s i z e ,a b s t r a c t ,r e u s e ,i n f o r m a t i o nh i d i n g ,i n h e r i t a n c ea n d p o l y m o 印h i s m ,w h i c hs h o u l db ec o n s i d e r e di no b j e c t o r i e n t e dd e v e l o p m e n t t oh e l p t h em e a s u r i n go f o b j e c t - o r i e n t e ds o f t w a r e ,t h e s ee i g h tf e a t u r e sw e r el i n k e d t ot h ei s o m o d e l a f t e rt h a t ,t h i sd i s s e r t a t i o nm a i n l ya n a l y z e dt h ec o u p l i n ga n di n h e r i t a n c eo ft h e o b j e c t o r i e n t e ds y s t e m s ,l i s t e ds o m em a i nv i e w p o i n t sa n dc o r r e s p o n d i n gt y p i c a lc a s e s t h e n , a i m e d a tt h ec l a s s e s ,w h i c ha r et h em o s t i m p o r t a n tc o n c e p t si nt h ef i e l d ,as e to f m e t r i c sw e r e s u g g e s t e d ,a n d r e s u l to f e a c hm e t r i ci sa n a l y z e da n dd i s c u s s e d f o rc o u p l i n g ,a tf i r s t ,t h r e em e t h o d sw e r ep r o v i d e dt o g e tag e n e r a la n db r i e f k n o w l e d g eo f t h ec o u p l i n gi n s i d et h es y s t e m a n dt h e nf o rt h ef i v ei s s u e st ob em e ti n t h ep r o c e s so f c o u p l i n g m e a s u r i n g ,o n em e t h o dw a sp r o v i d e df o re a c h f o ri n h e r i t a n c e , f o rt 1 1 ef i v ei s s u e st ob em e ti nt h ep r o c e s so fi n h e r i t a n c em e a s u r i n g o n em e t h o dw a s p r o v i d e d f o re a c h ,t o o i nt h em e t h o d sp r o v i d e dh e r e ,t h er e s u l t so fs o m ea r e m u l t i v a l u e d ,w h i c h c o n t a i n sm o r ei n f o r m a t i o na n d c a nb eu s e di na d v a n c e d r e s e a r c h i n gw i t h e a s e k e y w o r d s :0 b j e e t - o r i e n t e d ,m e t r i c 2 堕塑型墨竺竺竺壁里 1 绪论 1 1 前言 从6 0 年代爆发软件危机,诞生了软件工程这一新兴学科以来,软件工程的 研究不断前进,一方面积累了一大批的成果,形成成熟的传统软件工程技术;另 一方面不断引入新的工程方法,使之日益完善。但是,这并不意味着软件危机的 终结,主要体现在以下几个方面 p r e s s m a n 0 1 】: 1 软件成本和进度的估计较以前有了很大的进步,但依然不能保证十分准 确,仍然有改进的空间。 2 用户对正在使用的软件不满,需求没有完全的保障。 3 软件的可靠性不高,质量得不到有效保证。 4 软件的维护费用太高。 5 软件的成本高居不下。 软件工程研究目前依然面临着两大问题: 1 如何合理、有效、快速的构造应用系统 2 如何保证开发出来的产品具备令人满意的质量。 本文更关注对于后者的研究,即设法通过某种手段来保障产品的质量。 1 2 软件质量 质量是事物的特征和属性,它是指事物可测量的特征就一般事物而言我 们可以通过比较标准来衡量,如长度、色彩、电子特性以及延展性等。但是软件, 是一个纯智力的特殊产品,对软件的质量的刻画则比实体物品面临着更大的挑战 【p r e s s m a n 0 1 】。 国际化标准组织i s o 在i s o i e c 9 1 2 6 中将软件质量定义为:反映软件产品 满足规定需求和潜在需求能力的特征和特征的总和。 m j f i s h e r 杨扬0 0 1 将软件质量定义为:所有描述计算机软件优秀程度的特 性的组合,也就是说,为了满足软件的各项精确定义的功能、性能要求,符合文 档化的开发标准,需要相应的给出或设计一些质量特性及其组合,要得到高质量 的软件产品,就必须使这些质量特性得到满足。 p r e s s m a n 0 1 定义软件质量为:满足明确提出的功能和性能要求,符合文 档化的开发标准,以及拥有所有专业开发的软件都应拥有的隐含特性,并认为: 1 软件的需求是质量衡量的基础 2 遵从一系列的开发标准可以指导软件工程过程的行为 面向对象的软件度量 3 隐含的软件需求必须重视,如软件易用性和易于维护性等 有关提高软件质量的研究已经全面开展,目前,对此的研究主要从两方面展 开: 1 软件开发过程的质量保证,以过程文档化和管理科学化为内容 2 软件过程和产品的质量评估,包括中间产品和最终产品,采用软件度量 技术作为软件质量特性量化的主要技术,目前流行的标准和模型充分体 现了这一点,其中最具代表性的就是i s o 系列标准和c m m 。 1 3 备受关注的软件度量技术 在c v i m 模型和i s o 系列标准中p a u l k 9 4 ,除了传统的软件工程技术外,大 量采用了现代度量技术: i s 0 9 0 0 0 的2 0 0 0 版本中加入了度量,软件产品评估标准i s 0 9 1 2 6 和软件过 程评估标准i s 0 1 4 5 9 8 更是把自身的模型建立在软件度量的基础上。 c m m 的第四级已管理级,其中软件过程都包含妥善定义的且一致的测量活 动,这些测量数据是定量评价项目的软件过程和产品的基础。c m m 的第五级优 化级,是建立在第四级的基础上,从现行软件过程中获得量化的反馈信息,从而 进行过程改进。 此外,i e e e l 0 6 1 中专门定义方法来选择、验证度量并讨论它们与过程和产 品属性的关系,i e e e l 0 4 5 中定义了关于规模和生产率度量的相关内容。 事实上,软件度量并非是新鲜事物,国外采用度量来衡量软件质量在上世纪 7 0 年代就已经出现,并且在上世纪9 0 年代后进入空前的发展期,成为软件工程 研究中的热点方向之一。统计表明i f e n t o n 9 9 】,上世纪末关于软件度量方面的文 章多达1 6 0 0 多篇,出版的专著至少4 0 余本。随着各种度量标准的进一步发展, 相应的模型的验证与完善,加上度量理论的进步坚实,将推动实用化软件度量 技术的成熟,目前,国外已经出现了商品化的度量工具。 1 4 面向对象的软件度量 不幸的是,虽然面向对象技术已经被广泛应用,相应的度量的使用比其他面 向对象方法的使用的进展要慢得多。 b e r a r d 9 5 中提到,软件人员一方面轻视和 不信任任何听起来或看起来像测量的东西,他们能迅速指出测量软件产品、过程 和其他软件人员的论据中的“缺陷”。另一方面,同样是这些人员,他们似乎很 轻易就能够标识哪些程序设计语言是最好的、管理者所作的“破坏”项目的最愚 蠢的事情、以及谁的方法学适用于什么环境等。 面向对象度量的基本目标和那些针对传统软件的度量的目标是一致的,因 此,在研究面向对象度量时,可以也应该借鉴传统方法中成功的经验,同时,由 面向对象的软件度量 于面向对象本身的特征,又需要使用一些以前从未使用过的方法或技术来进行研 究。 1 5 本文的工作 本文对i s o 质量模型进行了扩充,提出了八个面向对象开发中所需要考虑 的要素耦合、内聚、规模、抽象、复用、继承、多态和信息隐蔽。并将这些 要素与软件质量模型联系在一起。 接着,着重讨论了其中的两个要素耦合和继承,系统的耦合程度对于维 护至关重要,虽然传统方法已经进行了很深入的研究,但是在面向对象领域,耦 合的内涵已经发生了改变,需要根据面向对象的特征进行进步的分析和讨论。 继承是面向对象方法和传统方法之间最显著的差别,善用继承会收到很好的效 果,而滥用继承机制的话,极易导致不可预期的结果。因此,耦合和继承是八个 要素中相对比较重要的两个要素。本文在对他们进行了讨论和分析后,又分别提 出了一些度量的方法。 在本文提出的度量方法中,有相当部分度量的结果是由多个数值所组成 的,这样做的好处是保持了信息的完整性,有利于人们对度量结果进行进一步的 分析和研究。 全文的安排如下 在接下来的一章中介绍了软件度量的基本理论,对度量标度进行了细致的分 类,还介绍了两个较为有名的评价度量的标准。 第三章中介绍了一些目前较为著名的面向对象度量方法,并对每个方法进行 了适当的评价。 第四章中对i s o 质量模型进行了扩充,并分析了软件的质量子特性与面向 对象开发中所需要注意的一些要素之间的内在联系。 第五章中分析和讨论面向对象系统中的耦合情况。在分析的同时,还提出 些度量方法。 第五章中分析和讨论面向对象系统中的继承情况。在分析的同时,还提出 些度量方法。 第七章对全文进行了总结,并对以后的研究工作进行了展望。 面向对象的软件度量 2 度量理论 2 1 进行度量需要遵循的原则 进行度量时,我们必须遵守一些原则,这些原贝i j 保证度量的一致性,并且有 助于对度量数据的分析。度量理论给出了一些原则,这些原则是我们进行研究与 改进度量的基础。 2 1 1 经验关系 。 度量理论的本质在于形式化我们对客观世界的理解。度量数据是我们所观测 的实体属性的数学描述,而对度量数据的操作也应保持我们所观测到的实体属性 间的关系。也就是说,对客观世界的理解是一切度量的出发点。 我们对客观世界的认知是通过比较而不是通过给它们赋予数值来进行的。以 我们对于程序规模的理解为例,我们可以不进行精确度量就说一段程序比另一段 长。这种直觉的观测反映了一些基本的规则,即随机挑选两段程序并定义一个二 元关系。本例中的二元关系是“比长”。对于两段程序x 和y ,我们可以说x 比y 长或者y 比x 长。因此“比长”是一种基于程序规模的经验关系。 当两段程序差不多长时,对于两者的关系就会产生分歧,经验关系允许这种 情况存在,但它采纳大多数人的意见,即经验关系是对多数人的意见总结。经验 关系不一定是二元的,可以定义一元的或者多元的经验关系。我们可以认为关系 是从经验的客观世界到形式化的数学世界的一种映射,对客观世界里的实体和它 们的属性,我们可以定义一个数学上的映射,其能保持我们观测到的这些关系。 有时候,一个属性的经验关系会未被一致认可,尤其是当这些关系反映了个 人的主观喜好时,例如对于艺术品的鉴赏。这种经验关系只是一种主观评估结果, 还不是度量。 2 1 2 映射规则 度量从客观世界起步,研究一个实体,并努力加深对其的理解。客观世界是 映射的定义域,数学世界是值域。当我们把一个属性映射到一个数学系统时,对 映射和值域的范围会有许多选择。我们可以使用实数域、整数域或是符号集。 个完整的度量必须明确表明它的定义域、值域和映射定义。日常生活中度 量是与数字相联系的,人们往往知道度量的意义但表达却不确切,在软件度量中 会遇到同样的问题。例如,很多机构用源代码的行数来度量软件的规模,这里, 定义域就是软件,值域是自然数集,但是,什么是一行代码应被准确定义。不同 4 重塑型叁堕塾壁壅垦 一一一 的选择可以产生不同的代码行计数规则,可以根据具体情况进行裁减。 2 1 3 度量的表示条件 度量同时也将经验关系映射为数学系统中的值之间的关系。我们希望在数学 系统中这些度量值之间的关系与客观世界中实体属性间的关系保持一致,通过研 究这些数字之间的关系,就可以认识客观世界。这是度量的特征条件,称为表示 条件。它要求度量映射m 在将实体属性映射为数字的同时也将客观世界中的经 验关系映射为数字间的关系。如经验关系“比长”就映射为数字的“ ”关 系。对此,我们有如下的断言: 程序彳比程序b 长m ( 爿) m ( 雪) 对于同一种属性存在不同的度量,因此,我们利用表示条件的概念来定义有 效性,只要满足表示条件的度量就是有效的度量。经验关系越复杂,有效的度量 就越少,因为经验关系的增加意味着度量映射在表示条件中所需要满足的特征条 件也会增加。 2 2 软件度量的基本概念 2 2 1 名词解释 i e e e 在 i e e e 9 3 中对度量( m e t r i c s ) 和测量( m e a s u r e 、m e a s u r e m e n t ) 分别给出 定义: 度量( m e t r i c s ) :是对一个系统、构架或过程具有的某个给定属性的度的一个 定量测量。 测量( m e a s u r e ,动词) :是指对一个产品或过程的某个属性的范围、数量、 维度、容量或规模提供了个定量的指示。 测量( m e a s u r e m e n t ,名词) :是指确定一个测量的行为。 2 2 2 直接度量和间接度量 f e n t o n 9 4 1 一旦确认需要度量的软件属性,就可以定义度量。我们用到的许多例子都使 用从属性到数字的直接映射,并且用数字去回答问题,评价结果。但当在属性之 间存在复杂的关系,或当一个属性必须要通过结合其多个方面来度量时,我们就 需要一个模型,给出如何结合多个相关的度量。正是由于此原因,我们要区分直 接度量与间接度量。 直接度量是指可以通过测量直接得到结果的那种度量,相应的,需要在测量 结果上进行一定运算后才可以得到结果的度量称为间接度量。 对一个实体的一个属性的直接度量不涉及其他实体和属性,例如,在测量物 体的长度时,无需考虑其他属性。而在测量物体的密度时,则必须考虑物体的体 面向对象的软件度量 积属性与质量属性。下面是它们三者之间关系的一个模型: 密度= 质量体积。 因此,直接度量形成我们的评价的基础单元,而许多更有用的属性则可能是 通过间接度量得到的。问接度量有利于理清各直接度量成分间的关系。有时候, 通过直接度量成分的合理组合,可以使我们进一步地了解被度量对象。 2 2 3 主观度量与客观度量【蔡希尧9 6 】 在度量时,如果度量是通过判断得到定性结论的话,这种度量称为主观度量, 相应的,如果度量可以得到单一数值的话,则称为客观度量。 在进行度量时,要尽力保持度量的客观性。无论是在度量资源、过程还是产 品,无论是谁来度量,应该保证度量结果的一致性。这种一致性对度量来说尤其 重要。许多度量或多或少地带有一定的主观成份,主观成份的多少取决于具体的 度量环境。对于主观度量,度量的结果可能会随着度量者的不同而有所变化,这 种变化反映了度量人员判断水平的不同。但是又有什么判断依据来评判谁的判断 准一些,谁的判断又差一些昵? 对此至今尚无共识,特别是在对产品、过程和资 源的质量进行度量时。 然而,只要能意识到它的不精确性,即使度量带有主观性,它对我们仍是有 用的。在通常情况下,尽管度量有主观性和不精确性,但还是能通过它收集实体 的有用信息。 2 2 4 度量标度 度量是从经验关系系统到数字关系系统的映射表示。映射的目的是为了在数 字关系系统中处理数值并将分析的结论反馈到经验关系系统。举例来说,人们利 用代码行数来测量程序规模,来得出一个程序员是否努力工作的结论,其中数字 是进行判断的基础。 但不是所有的映射都一样,映射值域种类的不同,对映射结果可采取的分析 手段也不同。为了更好的阐述这一点,接下来我们将介绍度量标度的概念。通常, 可以将度量标度看成是一种映射,使用数值和单位来一齐表达度量结果,例如, 我们可以说一段程序需要花费3 0 0 0 0 个人时,有2 0 0 0 0 0 行代码,这里,3 0 0 0 0 和2 0 0 0 0 0 就是度量结果的值,而人时和代码行则是度量结果的单位,两者紧密 结合,才能表达一个完整的意思。当度量活动发生时,无论其形式如何,都会需 要良好定义的度量标度来捕获和记录度量结果。 2 3 标度类垂d p f l e e g e r 9 7 k i t c h e n h a m 9 5 通常,对一个给定经验系统我们有许多不同的表示方法。下面,将对表示方 法的度量标度的类型进行分类定义和讨论。 面向对象的软件度量 标度类型的形式化定义背后的思想是相当简单的。假如我们有一个与经验关 系系统吻合较好的度量,我们就会想找到其它好的度量。举例来说,我们可以用 英寸来度量物体的长度,同样我们也可以用英尺、英里、公尺等来进行度量。这 几种度量方法十分相近,它们之间的转换只需要乘上一个常数。同一种标度类型 的度量之间的转换叫做可容许转换。在长度的测量中,对可容许转换的限制非常 严格,其转换必须具有形式: m = a m m 是原始的度量,m 是转换后新的度量,a 为转换常数。 而转换形式 m = b + a m ( b :;a o ) 或m = a m6 ( b 1 ) 都是不容许的。因此,长度的可容许转换的集合相对比较小。对可容许转换 的限制越多,度量的标度类型越复杂,同时,对这个度量可运用的计算操作也就 越多。 2 3 1 指定型标度( n o m i n a ls c a l e ) 指定型标度就是根据实体属性的值,把每个实体放在一个特定类或类别中。 它包括以下两个重要特点: 1 经验关系系统仅由不同的类别构成,类别之间没有顺序。 2 类的任何可互相区别的数字或符号表示都是一个可接受的度量,但不存 在与数字或符号相关联的范围这样的概念。 换句话说,指定型标度度量是一种分类方案。该方案中各类间是无序的,即 使是用1 到n 来标识这n 个类别,也并不表示这些类别间的顺序。实际上,映射 的值域换成符号也完全可以,并且任意两个映射之间也有一一对应关系。因此任 意两种指定型标度间的转化都是一种一一映射。 2 3 2 有序型标度( o r d i n a ls c a l e ) 在指定型标度的类别概念中引进顺序的概念就形成有序型标度,有序型标度 通常包含以下特征: 1 经验关系系统由不同的类别构成,类别之间有顺序关系。 2 任一种保序单调映射都是可容许的。 3 数字只用于排序,对数字进行的算术运算毫无意义。但是,类别之间可 以组合,只要这种组合能保序。 对应于一个有序型标度的映射要保持类别之间一种单调递增的顺序,所以经 验关系系统中的有序类别 被映射到一列递增的数字 。任何一个可接受的映射,只要a 的序列能映射到另外一个递增的序列,就 可被转换成任何其它的映射。因此,在一个有序型标度中,任两个标度都可由一 个单调映射关联在一起。 2 3 3 间距型标度( i n t e r v a ls c a l e ) 间距型标度抓住了区分两个类别的间距程度的信息。具有以下特征: 1 应保持经验关系中的类别问的有序性。 2 保持差值信息( 而不保持比率信息) 。即我们要知道在映射的范围内任两 个有序类之间的差别值,但计算这两个有序类在该范围内的比率则是无 意义的。 3 在间距标度上加、减法操作是可接受的,但乘、除法操作不可以。 为了进一步理解间距型标度,可以同一个例子来说明。 例如,在度量软件复杂性的时候,首先将复杂性分为五个级别,分别是“微 不足道”、“简单”、“中等”、“复杂”和“深不可测”,并且如果假设复杂性“微 不足道”与“简单”之间的差别与复杂性“简单”与“中等”之间的差别是一样 的话,那么复杂性的间距型标度必须保持这种等距性,如下面的m 1 和m 2 就是 满足这种条件的复杂性间距型度量标度 m i = 0 如果x 的复杂性为微不足道 2 如果x 的复杂性为简单 4 如果x 的复杂性为中等 ,m 2 = 6 如果x 的复杂性为复杂 8 如果x 的复杂性为深不可测 间距型标度间的换算都属于仿射变换 上例中,存在捣= 2 3 , 1 l + 1 1 。 f 1 1如果x 的复杂性为微不足道 l5 1如果x 的复杂性为简单 9 1如果x 的复杂性为中等 1 3 1 如果x 的复杂性为复杂 i1 7 1 如果x 的复杂性为深不可测 即v m ,m ,3 a ,b ,使m = a m + b ,在 我们常用的摄氏温度,其实就是一种间距型标度,一个2 0 c 的物体,并不 比一个1 0 c 的物体热两倍,不过,同一个物体,不考虑液化、汽化的问题的话, 从1 0 c 到2 0 c 需要的热量,与从2 0 c 到3 0 c 需要的热量是相同的,换句话说, 间距关系被保持了下来。 2 3 4 比值型标度( r a t i os c a l e ) 尽管与指定型或有序型相比,间距型标度给予我们更多的度量对象的信息, 但我们有时还需要更多的信息。例如,我们有时说这杯茶比那杯茶烫两倍,这个 项目的费时是那个项目的两倍。这时我们就需要比值型标度,这也是物理学上常 用的一种标度。个比值型标度应具有以下几个特征: 1 标度的映射应保持经验关系中的顺序和实体间的比率值。 2 标度存在一个0 刻度,它表示所度量的属性完全不存在。 3 标度刻度从0 开始,等距增长,这种等距的间隔即是单位。 4 所有的算术操作都可有意义的用于在度量映射的范围内的类别。 与指定型、有序型和间距型相比,比值型标度最重要的特点是它反映了经验 关系中的比例关系。对于比值型标度的任何可接受的转换都具有形式m 5 a m , 其中a 是正系数,这种形式的转换称为比率转换。 物理上常用的k 氏温度,就是一种比值型标度,还有如长度或时间段长度 中用到的各种标度,都属于比值型标度。 2 3 5 绝对型标度( a b s o l u t es c a l e ) 随着度量标度携带的信息增多,对可容许转换的定义类别限制要求越来越严 格。绝对型标度则是其中最严格的一种标度,具有以下特征: 1 绝对型标度主要用于对实体集中的元素计数。 2 被度量的属性一般为“实体中x 发生的次数”这类形式 3 只存在唯一一种度量映射,我们称之为“实际计数” 4 对度量结果可进行所有的算术操作。 软件工程中绝对型标度的例子有许多。如在集成测试时所发现的错误数目的 度量,或进行某项目开发人数的度量都属于这种计数形式的标度类型。由于绝对 型标度是唯一的,则标度间的换算只可能为全等转化。这种唯一性是绝对型标度 与比值型标度之间最重要的区别。 2 3 6 小结 表2 1 标度类型小结 标度类型可容许的转换形式例子 指定型从m 到m 的一一映标签化的实体,分类的实 射体 有序型单调递增函数 优劣、困难程度、i q 间距型标度m = a m + b相对时间、华氏温度、摄 氏温度 比值型标度m = a m时间段、长度、k 氏温度 绝对型标度m = m实体计数 上表对这五种度量标度进行了总结,随着所度量属性的经验关系系统的丰 富,度量映射也满足越来越多的特征条件。度量的标度也具有越来越多的限制。 2 4 度量指标的验证与评估 度量指标的定义,不应该随意进行,应该满足可用性原则,这就是度量的验 9 面向对象的软件度量 证f v a l j d a 廿o n ) 和评估( e v a l u a t i o n ) 周莹新9 8 ,李茜0 1 。 w e y u k e r w e y u k e r 8 8 1 采用形式化的方法提出了评估软件度量的9 个性质, 其中p 表示正在评价的度量方法: 1 j j p ,q :( p ) ( q ) 。这个性质表明存在不同的实体,他们的度量结果是 不同的。 2 对于非负数a ,只有有限个实体具有度量值a 。如果有无数个实体具有 相同的度量值,则暗示着这个度量可能需要进一步区分不同的实体。 3 9 p ,q :p q a ( p ) = z ( q ) ,这个性质表明不同的实体也可以有相同的 度量结果,事实上,正是由于这个性质,才使得人们可以通过比较两个 实体的度量值来判断两个实体的某个属性是否相同。 4 3 p ,o :p z q ( p ) ( q ) ,其中;表示功能相同,这个性质表示设计 的细节是决定度量结果的关键,两个实体,即使外在功能完全相同,对 于结果起决定性作用的仍然是设计的细节。 5 v p ,q :( 尸) ( p + o ) a f ( q ) s ( 尸+ q ) ,其中加号表示实体的合并, 这表示了一种单调性,实体的规模变大后,相应的度量结果也应该变大。 6 9 p ,q ,r :( p ) = u ( q ) a ( p + r ) i - t ( q + r ) ,这反映了实体间交互的差 异性,两个实体,即使原来的度量结果完全一样,由于跟同一个实体问 交互的细节不同,合并后的实体仍可能产生不同的度量结果。 7 j 尸,q :其中q 是肿语句的重排,但( 户) ( q ) ,这个性质在传统的软件 方法中较为重要,在面向对象领域,这个性质经常会不被满足。 8 如果p 是q 的重命名,则( p ) = ( q ) ,这个性质表明度量结果与实体的 名称无关。 9 9 p ,q :( p ) + k t ( q ) ( p + q ) ,这个性质反映了交互可能增加复杂度, 因此,两个实体合并后,其表现出来的度量结果可能比两个实体的度量 结果的算术和还要大。不过,这个性质对于复杂度度量以外的度量,可 能就显得不那么正确了。 w e y u k e e r 的这组准则对度量的形式化起了很大的推动作用,但并不完美。 c h e m i a v s k y 和s m i 也认为该准则中部分性质只是衡量好坏度量指标的必要而非 充分条件 c s 9 1 :大多数研究者采用在实践中应用并通过测量学方法来验证指标 的定义的合理性和准确性 h a r r i s o n 9 8 ,b a s i l i 9 6 1 。 另外,别的些研究人员也提出过一些评价度量的标准,如m o o d 方法中 的7 条标准 a c 9 4 1 : 1 形式化定义 2 应与系统规模无关 面向对象的软件度量 3 无度量尺度或采用统一的度量单位 4 在软件生命周期中早期可用 5 向下可扩展 6 易计算 7 与语言无关 不过,与w e y u k e e r 的标准相比,这组标准缺乏形式化的定义,因此,在使 用时可能会存在一定的误解。 这两组标准各有优缺点,因此,在文中所提出的度量方法中,兼顾了这两组 标准,使之能够成为一组高质量的度量方法。 面向对象的软件度量 3 现有的面向对象度量方法 w h i t m i r e 总结提出了反映面向对象设计水平的9 个可度量特性:规模、复杂 度、耦合、充分性、完全性、内聚、简单、相似性和冲突性 p r e s s m a n 0 1 。其中: 1 充分性是展示设计超过满足目标需求的抽象性能,反映了继承的情况和 重用的可能。 2 完全性是展示目标需求被设计组件完全对应的程度。 3 相似性是多个类之间在结构、功能行为和目的的相似程度。 4 冲突性是需求修改时可能发生的设计修改的程度。 目前有很多面向对象的度量方法,其中,主要有这样一些方法( 下面,主要 将以提出某个度量方法的研究人员的名称来区分不同的度量方法) c h i d a m b e ra n dk e m e r e r c k 9 4 】、m o r r i s m o r r i s 8 8 、k o l e w e k o l e w e 9 3 、 m c c a b ea n dd r e y e r 等人 m d 9 4 、l o r e n za n dk i d d l k 9 4 、w e il i w e i 9 3 ,w e i 9 8 、 m o o d a c 9 4 、f gw i l k i e w i l k i e 9 8 】。这里将主要介绍c & k 、l o r e n z k i d d 、 m o o d 方法,它们分别对应了9 个特性中的一部分,如下表所示: 表3 1 现有度量方法与面向对象设计特性之间的关系 l c & kl o r e n z & k i d dm o o d 【规模 复杂度 耦合 充分性 完全性 内聚 简单 相似性 冲突性 3 1c h i d a m b e r & k e m e r e r 3 1 1 模型 c & k 度量的模型是w w ( w a n d e r w e b e r ) 元, 模型的一部分,如下图所表示: 面向对象的软件度量 图3 1c & k 中用到的模型 t c & k 度量中只考虑了一个类中新引入的实例变量和方法,而不是考虑所有 实现和继承的特征。这样做的原因是为了在真实系统中更容易获取度量值。 另外,在定义度量之前,还有三个重要的假设: 1 不同的类中的方法个数之间没有任何依赖关系,此外,一个方法可能调 用的方法个数、一个方法用到的实例变量的个数以及一个类与别的类之 间的耦合次数也满足这个约束。换句话说,对于外部观察者来说,根据 其中的一些数据,是无法预钡出另一些数据的。 2 总的说来,两个方法之间可能存在有限个相同的方法,也就是说,当两 个类进行合并后,可能导致其中一个类的某些方法成为冗余。 3 继承树是“满”的,也就是说,这个树中存在根节点、中间节点和叶子 节点。这个假设主要说明了一个应用不仅仅包含相互独立的类,而是在 一定程度上使用了继承。 3 1 2 定义 所有的c & k 度量都是针对单个类进行的,必须组合起来才能估算整个系统 或者子系统的值。一共有6 个基于类的设计的度量方法: 1 每个类的方法的权重和( w e i g h t e dm e t h o d s p e rc l a s s ,w m c ) w m c = c j i = 1 其中c 。是类c 的方法m i 的复杂度,可以用l o c 或者m c c a b e 等方法计算。 当c i 设定为1 时,w m c 等于类的方法的个数。 2 继承树深度( d e p t ho f i n h e r i t a n c et r e e ,d i t l d 盯:0 没有父类 f m a x ( d i t ( p f ) ) + 1 其余情况 堕旦翌墨堕墼堡里量 其中只表示类的父类 3 子类个数州u m b e r o fc h i l d r e n ,n o c ) n o c = 1 j ( c ) 其中s ( c ) 表示类c 的所有直接子类的集合。 4 类间耦合( c o u p l i n g b e t w e e no b j e c tc l a s s e s ,c b o ) c b o = 与类相耦合的其他类f 下面给出耦合的定义: 一个对象与另一个对象相耦合,当且仅当其中的一个对另一个实施了行为, 也就是说,其中的一个对象的某令方法访问了另一个对象的方法或者属性。 5 类的响应( r e s p o n s e f o rac l a s s ,r f c ) r f c = i r s l 其中r s 是类对消息的响应集 r s = m j u 。“r 。 其中 m ) 是类的方法集, r ) 是被方法m i 调用的方法集。 6 类内方法间的聚合的缺乏( l a c ko f c o h e s i o n i n m e t h o d s ,l c o m ) 上c o m = n 旧裂鬻f 假设一个类有n 个方法m l ,m 2 ,m 。,设为方法m ,所用的实例变量 集。因此存在n 个这样的集合,i ,厶,厶。设p = ( ,b ) j n ,= 辨,再设 q = ( ,川n ,办,若所有的集合厶,如,厶都是空集巾,则设p 2 中a 3 1 3 小结 这六个度量方法是用来测量b o o t h 对于面向对象设计的定义中的三个非实 现步骤的,它们与这个三个步骤之间的关系参加下表: 表3 2 c & k 方法小结 度量标识类标识类的语义标识类间的关系 w m c d n o c r f c c b o l c o m 、, 通过对一些实例进行应用,这组度量有助于项目管理人员发现设计人员中的 面向对象的软件度量 一些倾向性,这组度量还可发现设计中可能存在的缺陷或者与设计思路的冲突。 如果将其中的一些度量结合起来使用的话,将使得管理人员或者主管设计人员能 够测量一些系统结构上的数据。 当从设计转入实现时,度量结果有可能会发生改变,在项目的生命周期内跟 踪这些改变,将提供一些监控面向对象系统演化的数据给管理人员。c & k 认为, 这组工具有助于维护系统结构的一致性。 不过,这组度量仍存在以下不足: 1 对于早期估算来说,每一个度量都显得略晚。 2 l c o m 对于描述内聚度尚显不妥。 3 要成为一个真正的质量度量,其中的c b o 和l c o m 不应该是计数型的, 而应该与被度量实体的规模无关。 4 对于这组度量方法所获得的结果,如何将结果与“好”、“坏”这类评价 联系起来尚未达成共识。 3 2l o r e l l z & k i d d 3 2 1 模型 l o r e n z 和k i d d 将类的度量分成四大类:规模( s i z e ) 、继承( i a h e r i t a n c e ) 、内部 ( i n t e m a l ) 和外部( e x t e r n a l ) ,并分别定义些度量方法来刻画面向对象系统在这些 方面的表现。 在面向对象系统中: 1 面向规模的度量着重于个体类的属性和操作的计数以及面向对象整体 系统的平均值。他们认为,类的值则可以通过类所包含的方法和属性个 数来体现。 2 基于继承的度量着重于在整个类层次中操作被复用的方式。如果一个子 类继承了父类的方法,则父类的方法被复用,若子类覆盖( o v e r r i d e ) 了父 类的方法,或者子类新增了方法或属性,则体现了子类与父类之间的差 异。 3 类的内部度量考察内聚性和面向代码的f n - i 题。这里,可以借助传统的方 法,来考察方法的内部结构。 4 外部度量检查耦合和复用。可以通过计算一个类在整个系统中被引用的 次数来粗略估计类的复用程度,进一步的,还可以计算一个类被不周应 用使用的次数来估计类的复用程度。 3 2 2 定义 原文中定义了许多度量方法,这里抽取了其中的一部分。 面向对象的软件度量 1 类的规模( c l a s ss i z e ) n c m 刊类中定义的方法l m y = l 类中定义的属性1 这里的方法和属性包含继承的和私有的方法和属性。 2 子类覆盖的方法数( n u m b e ro f o p e r a t i o n so v e r r i d d e nb y a s u b c l a s s ) n 0 0 爿类中覆盖的方法i 3 予类中增加的方法数( n u m b e r o f o p e r a t i o n s a d d e d b y s u b c l a s s ) n o a = i 类中非继承的方法j 4 特殊化索 ( s p e c i a l i z a t i o ni n d e x ) s i = ( n 0 0 l e v e l ) m t e t 。| 其中l e v e l 是继承层次的位置,m 。,则是类所封装的所有的方法。 3 2 3 小结 上面提出的一些度量方法中,c s 刻画了类的职责,c s 较大的类,意味着类 的职责较多。此外,原文中还定义了类的平均规模,类的平均规模越小,则系统 中的类被重用的可能性越大。n 0 0 刻画了子类的特殊化程度,如果n 0 0 值比较 大的话,则说明设计人员违反了父类的抽象,这就导致了类结构变得更加脆弱, 整个系统可能难以测试或修改。类似的还有n o a ,随着n o a 的增大,子类与父 类的差别渐渐加大。总的说来,随着继承深度的增大,较低层的类的n o a 会慢 慢减小。最后提出的s i 粗略反映了每个子类的特殊化程度,若s i 比较大的话, 则说明类的继承结构中可能存在一些没有遵守父类抽象的类。原文中,对于源代 码中的注释也有一定的关心,并定义了一些度量方法来反映类的定义中注释的比 例。 总体上来说,这组度量较好的刻画了面向对象的些主要特征。这组度量中 的方法,不需要系统完全实现就可以进行度量,因此,可以较早的发现设计中的 问题。不过这组度量也有其自身的缺陷,最明显的就是以下两点: 1 对于耦合和内聚反映得不够 2 个别度量,如s i ,计算比较复杂,不易于自动化。 3 3m o o d 3 3 1 模型 m o o d 工作组认

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论