(计算机科学与技术专业论文)基于语义的软件演化的度量.pdf_第1页
(计算机科学与技术专业论文)基于语义的软件演化的度量.pdf_第2页
(计算机科学与技术专业论文)基于语义的软件演化的度量.pdf_第3页
(计算机科学与技术专业论文)基于语义的软件演化的度量.pdf_第4页
(计算机科学与技术专业论文)基于语义的软件演化的度量.pdf_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

武汉科技大学硕士学位论文第1 页 摘要 随着计算机应用的深入和软件工程的发展,软件系统已成为现代社会最重要的资产之 一。越来越多的公司和社会机构依赖于其内部的软件系统来提高竞争力和减少成本。软件 系统与其他系统一样,随着技术的进步和环境的不断变化,其自身也会逐渐老化,不再适 应用户和环境的需要而变成遗产系统。因此,为了充分有效地利用这些有用资源,对遗产 系统进行持续改造使之能满足客户的需要变得十分重要。软件演化就是指对遗传软件系统 在其生命周期中不断维护,不断完善的系统动力学行为。在软件演化领域,人们提出了许 多不同的方法,但仍然有较大的研究空间,特别是在软件演化的技术度量方面。在研究国 内外现有方法的基础之上,文章提出基于模型切片的软件演化度量框架,在这个框架中, 模型切片成为演化的核心。模型是系统形式化的规约,文章扩展程序切片的思想对模型进 行切片,并将模型切片以赋权类依赖图的形式表示,这样可以利用图论中的方法来计算软 件演化过程中模型的改变以及这种变化带来的波及效应的度量值。此外,本体定义元模型 的研究将知识工程与软件工程结合在一起,文章提出在本体定义元模型的基础上构造本体 依赖图,并利用切片规则对其本体切片,在此基础上研究基于语义的软件演化的度量。 关键字:软件演化;模型切片;演化度量;本体;本体依赖图 第1 l 页武汉科技大学硕士学位论文 a b s t r a c t w i t ht h ei n c r e a s i n g l yd e v e l o p m e n to fc o m p u t e ra p p l i c a t i o na n ds o f t w a r ee n g i n e e r i n g ,m o r e a n dm o r ec o m p a n i e sa n do r g a n i z a t i o n su s ev a r i o u ss o f t w a r e ,w h i c hh e l p st h e mt og e tal e a d i n g p o s i t i o n si nt h ef i e r c ec o m p e t i t i o na n d t or e d u c et h e i rm a n a g e m e n tc o s t s o f t w a r es y s t e m ,j u s t a so t h e rs y s t e m s ,i tw o u l db e c o m eo l d - a g e i n gg r a d u a l l yd a i l y w en a m e dt h es y s t e mw h i c hi so u t o fd a t ea sl e g a c ys y s t e m t h e r e f o r e ,i no r d e rt ou s et h e s er e s o u r c e se f f e c t i v e l ya n de f f i c i e n t l y , i t i sv e r yi m p o r t a n tt o u p d a t el e g a c ys y s t e m s s o f t w a r ee v o l u t i o ni s t h ed y n a m i cb e h a v i o ro f p r o g r a m m i n gs y s t e m sa st h e ya r em a i n t a i n e da n de n h a n c e do v e rt h e i rl i f et i m e s t h es o f t w a r e s y s t e m sc h a n g ec o n t i n u o u s l y w i t ht h ec h a n g e si n t e c h n i q u e sa n dr e q u i r e m e n t s s o f t w a r e e v o l u t i o ni sc o n s i d e r e dc o n t i n u o u sr e - e n g i n e e r i n g t h o u g hm a n ym e t h o d sh a v e b e e np r o p o s e di n s o f t w a r ee v o l u t i o n ,t h e r ea r eb l o c kb l a n k si nt h i sf i e l de s p e c i a l l yi nt h ea s p e c to ft h ee v o l u t i o n m e t r i c i nt h i sp a p e r , t h ea u t h o rp r o p o s e das o f t w a r ee v o l u t i o nm e t r i cf r a m e w o r kb a s e do nm o d e l s l i c ea f t e rs t u d yam o u n to fr e s e a r c h e si na b r o a do ra th o m e i nt h ef r a m e w o r k ,m o d e li st h ec o r c o ft h ee v o l u t i o nb e h a v i o r , a n dt h em e t h o di sr o o t e di nt h ec l a s s i c a ld e f i n i t i o no fp r o g r a ms l i c i n g b u te x t e n d st h a t c o n c e p tt o t h eu m lm o d e l s i na d d i t i o n ,w i t ht h eo n t o l o g yd e f i n i t i o n m e t a m o d e lh a sb e e nd e e p l ys t u d i e d ,i tg i v e sar e l a t i o nb e t w e e no n t o l o g ya n ds o f t w a r e e n g i n e e r i n g i nt h i sp a p e r , t h ea u t h o ra l s op r o p o s e dam e t h o dt og e to n t o l o g ys l i c i n gf r o mas e t o fo n t o l o g yb yu s i n go n t o l o g yd e p e n d e n c yg r a p ha n do n t o l o g ys l i c i n gc r i t e r i o n k e yw o r d s :s o f t w a r ee v o l u t i o n ,m o d e ls l i c i n g ,m e t r i co fe v o l u t i o n ,o n t o l o g y , o n t o l o g y d e p e n d e n c yg r a p h 武汉科技大学 研究生学位论文创新性声明 本人郑重声明:所呈交的学位论文是本人在导师指导下,独立进行研 究所取得的成果。除了文中已经注明引用的内容或属合作研究共同完成的 工作外,本论文不包含任何其他个人或集体已经发表或撰写过的作品成果。 对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。 申请学位论文与资料若有不实之处,本人承担一切相关责任。 论文作者签名:盘渺 日期:冱叠:矽 研究生学位论文版权使用授权书 本论文的研究成果归武汉科技大学所有,其研究内容不得以其它单位 的名义发表。本人完全了解武汉科技大学有关保留、使用学位论文的规定, 同意学校保留并向有关部f - j ( 按照武汉科技大学关于研究生学位论文收录 工作的规定执行) 送交论文的复印件和电子版本,允许论文被查阅和借阅, 同意学校将本论文的全部或部分内容编入有关数据库进行检索。 注:请将本表直接装订在学位论文的扉页和目录之间 武汉科技大学硕士学位论文 第1 页 第一章引言 随着计算机应用的深入和软件工程的发展,软件系统已成为现代社会晟重要的资产之 一。越来越多的公司和社会机构依赖于其内部的软件系统来提高竞争力和减少成本。现在, 软件系统的规模变得越来越大,结构也越来越复杂。软件系统与其他系统一样,随着技术 的进步和环境的不断变化,其自身也会逐渐老化,不再适应用户和环境的需要而变成遗产 系统( l e g a c ys y s t e m ) 。为了充分有效地利用这些有用资源,对遗产系统进行持续改造使 之能满足客户的需要变得十分重要。人们最初对遗产系统进行的改造只是为了适应环境的 变化,随着新的理论的提出和技术的进步,又有人提出了软件重用的思想和相应的方法。 这些方法在一定时期和一定程度上解决了遗产系统对环境的适用性问题,但这两种方法均 是以一种被动、消极的方式来改变软件系统,他们的出现并不能从根本上解决问题,所以 大家又开始寻找一种从系统工程的角度对软件系统进行演化的方法,并称之为软件演化 ( s o f t w a r ee v o l u t i o n ) 。 1 1 论文的研究背景 当今的社会已经越来越离不开计算机系统,因而人们也越来越关心软件系统的使用寿 命问题。为了延长软件的使用期限就必须不断对软件系统进行维护,而系统也在不断的维 护过程中不断演化。软件系统的演化和维护问题虽然越来越受到重视。软件演化的目的是 为了适应变化环境的需要而保持或提高用户的满意度。它要求系统的功能和行为必须与变 化的环境保持同步,缺陷被修正、参数被调整、功能被改善和扩展、操作被改进。软件演 化的实质上就是软件系统不断逆向工程和正向工程的统一,即不断的再工程1 2 j 。 尽管软件系统的演化和维护问题越来越受到重视,然而不幸的是当前对软件演化和维 护的研究仍然处于一个很低的水平。据统计,仅有2 的研究是基于软件演化和维护的, 而用于软件演化和维护的工作往往占整个软件活动的8 0 以上。导致这种情况的主要原因 在于以下几方面: ( 1 ) 改变难以被捕获。尤其是在大型系统中,程序小规模的变化很难被发现,而且演 化是建立在对程序的理解之上,在这种情况下对系统的理解也是比较困难的。 ( 2 ) 难以收集数据。对软件的演化需要对数据进行收集分析,但往往收集数据的范围 以及时问都难以界定,通常造成数据过度收集或者过少收集。或者由于收集数据的倾向性 容易造成对软件演化判断的失误。还有就是数据收集过程中数据的完整性可能遭到破坏等 问题。 ( 3 ) 软件演化难以解决语义上的差异。普通的软件演化注重的多是解决程序语法上的 差异,但在某些情况下,语法的差异并不影响程序的运行,但会在语义上可能造成较大的 第2 页武汉科技大学硕士学位论文 误差。 ( 4 ) 演化带给程序的影响无法准确估量。在软件演化过程中,程序的某个部分改变有 可能对程序其它部分造成影响,而这种影响会波及到程序的那些方面以及影响的大小目前 都很难准确估量。 ( 5 ) 缺乏一套行之有效的理论和方法。没有完整的理论来描述软件系统演化和维护的 规律及特点。也没有有效的方法来指导软件系统演化和维护,来有效地提高系统演化和维 护活动的效率。 因而,找到一个普遍适用的软件演化办法成为解决这种软件危机的当务之急。另外, 随着软件技术的不断进步,特别是m d a 3 】成为事实上的标准和本体【4 】表示的知识工程与软 件工程的结合应用,人们越来越关心软件在语义层面上的行为。当软件演化成为人们研究 的热点时,在语义层面上洞察软件演化并对其精确度量也成为关注的方向之一。 1 2 本文的选题目的 针对当前软件演化中出现的种种问题,本文寻求在软件演化方面找出一种合适的演化 办法,这种演化是建立在对系统的切片基础之上,对系统的切片保证了对系统准确的洞察 以及变化的捕获,并且这种办法也是基于语义的,因为语义差异更能够反应出程序的改变 所引起的程序行为的变化,而且语义的演化可以被精确的数学量度,来表示这个语义演化 波及的影响范围以及程度。为了实现这个目标,文章所做的主要工作是: ( 1 ) 研究软件演化理论已经软件度量方法; ( 2 ) 在研究程序切片的基础上提出利用模型切片来表示软件演化在模型级别上引起的 波及效应,并通过赋权类依赖图来度量u m l 类图模型切片演化的带来的影响; ( 3 ) 在m d a 以及本体的基础上,分析研究基于m d a 的软件演化理论以及基于本体 语义的软件演化理论和演化的度量方法。 1 3 国内外研究现状 l e h m a n 在2 0 世纪7 0 年代提出了软件演化的概念,最初主要是针对程序级的演化,后 来逐步扩展到软件系统和模型级,以及软件开发过程的演化。对软件演化的研究随着越来 越广泛的软件系统的应用而受到越来越多的关注,国内外的研究机构在软件演化理论、技 术和开发方法上都开展了广泛的研究,其代表性的研究工作包括: ( 1 ) 基于自反射中间件的软件动态演化研究。反射式中间件( r e f l e c t i v em i d d l e w a r e ) 是一种通过开放内部实现细节以获取高灵活性的中间件【6 j 。具体而言,通过引入反射原理, 中间件运行时的内部状态和行为可通过一种受限方式访问和操纵。系统的反射性是指系统 能够提供对自身状态和行为的自我描述,并且系统的实际状态和行为始终与自述保持一 致,也就是说,对自述的改变能够立即反映到系统实际的状态和行为,而系统的实际状态 武汉科技大学硕士学位论文第3 页 和行为改变也能够立即在自述中反映出来。一个反射系统通常定义了个层次化的反射体 系,包括一个基层( b a s e 1 e v e l ) 和一个或多个元层( r e c t a 1 e v e l ) 。工作在基层中的基层实 体执行系统正常的业务功能,而工作在元层中的元层实体负责建立和维护系统自述。自反 射中间件由于在软件系统结构中引入了元数据( m e t a l 1 e v e l ) ,通过改变元数据,可以有效 地改变建立在元层之上的基层运行系统,因此自反射中间件在一定程度上支持软件系统的 开放性、动态性。北京大学黄罡、梅宏【7 】研究了基于自反射中间件p k u a s 的运行时软件 体系结构( r u n t i m es o f t w a r e a r c h i t e c t u r e ) ,实现了e j b 构件的在线演化,他们的研究基于 单个e j b 容器内的构件演化,没有涉及分布式环境下的演化问题。 ( 2 ) 基于软件体系结构的软件演化研究。软件体系结构( s o f t w a r ea r c h i t e c t u r e ,s a ) 从提出之日起,就受到学术界和产业界的广泛关注,成为软件工程研究与实践的重要领域 之一。s a 是一组构件、连接子以及约束所描述的软件系统总体结构。作为需求规约与系 统实现之间的桥梁,s a 为系统的构造和组装提供了指导性的蓝图。具体而言,s a 有助于 理解大型软件系统,支持构件与体系级别的复用,标识待开发系统中的主要构件及其之间 的关系与约束,揭示系统的变化性,在高层校验和验证目标系统等。随着研究的深入和应 用的普及,s a 己经成为软件开发过程中的核心制品,起着主导作用。从软件生命周期的。 角度看,软件维护与演化是软件开发的延续,自然地,将软件开发中的s a 应用于软件维 护与演化成为可能。在设计时演化方面,一些研究者希望在设计阶段考虑系统运行时的变 化并将之纪录在设计文档中,如d a r w i n 、x a d l t 剐。这种软件体系结构拥有丰富的语义信 息,为在软件系统设计阶段捕获系统的动态特性提供了形式模型和自动化支持。拥有丰富 的语义信息。但是,实际应用中设计阶段可预测的运行时变化有限,准确度难以保证,运 行时如何使能或保障这些变化也没有考虑。 在动态演化方面,o r e i z y l 9 】等人研究了如何基于c 2 1 0 l 体系结构风格,实现软件系统的 运行时修改,他们开发的一个演化终端a r c h s h e l l 实现了运行时软件系统构件的动态组装、 添加,但没有实现构件的在线演化和删除,同时没有涉及分布式环境下的演化问题。 ( 3 ) 基于图的动态体系结构的研究。文献【1 1 】提出一种面向“图”的分布式w e b 应用软 件系统架构技术,利用严格定义的“图”作为描述分布式w e b 应用软件体系结构的基本手段, 并用图上的操作来支持系统体系结构的动态重配置。这种以图来表示的软件体系结构不仅 仅是高层的抽象描述,同时也是具体的可操作的对象实体,从而有助于提高体系结构与最 终实现之间的可追溯性。该对象存在于具体的系统实现中,充当了两个关键的角色:1 ) 沟通各分布的计算构件之间的通信中间件;2 ) 整个应用的体系结构框架。通过在系统实 现中显式地使用表述体系结构的对象,整个系统获得了类似自反射中间件的能力,从而为 支持体系结构的动态重配置提供了便利。 基于图的体系结构将分布式系统抽象为一个无向图或有向图,便于对分布式系统进行 理论分析和形式模型的研究。但由于分布式系统的各个节点需要维护一个全局拓扑结构 图,在系统规模增大的情况下,图的维护变得相当困难。同时基于图的体系结构在进行动 第4 页武汉科技大学硕士学位论文 态演化时,需要对图的整体拓扑结构进行变换,包括图的状态信息的转换,当系统规模增 大时,动态演化的复杂程度和代价都相当大,使得这一结构难以适应i n t c r n e t 动态广域计 算环境。 1 4 文章的组织形式 除本章论述论文的研究背景,国内外研究背景、现状以及研究的主要内容外,本文的 组织形式如下: 第二章阐述了软件演化的理论,以及软件技术度量的概念。 第三章是文章的核心部分。这一章将首先阐述什么是程序切片技术,然后在程序切片 技术的基础上扩展,引入模型切片技术。然后讨论软件演化过程中模型切片演化的波及效 应产生的影响,并提出一种模型切片演化度量技术来准确量度这种波及效应。 第四章在第三章的研究基础上进一步深入,专门就基于m d a 的软件演化以及基于本 体语义的软件演化就做了分析和讨论。在基于本体语义的软件演化的讨论中,引入本体切 片概念,提出用本体依赖图来表示这个切片,并通过相应的计算精确度量出本体演化的波 及效应。 第五章对文章的工作进行总结,并就未来软件演化的发展方向做出展望。 武汉科技大学硕士学位论文第5 页 第二章软件演化理论和软件度量的概念 理论指导实践,度量是检验质量的最佳方法。本章首先介绍软件演化的基本概念,接 着介绍软件演化的一般过程和特征,然后从传统面向过程的软件和当前流行的面向对象的 软件两个方面介绍软件技术度量的概念和方法,最后指出软件演化的过程度量及其目的。 2 1 软件演化的基本概念 软件演化( s o f t w a r ee v o l u t i o n ) 指在软件系统的生命周期内软件维护和软件更新的动态 行为。在现代软件系统的生命周期内,演化是一项贯穿始终的活动,系统需求的改变、功 能实现的增强、新功能的加入、软件体系结构的改变、软件缺陷的修复、运行环境的改变 无不要求软件系统具有较强的演化能力,能够快速适应改变,减少软件维护的代价,保持 或提高用户的满意度。 软件演化的核心问题是软件如何适应改变,软件的演化能力主要体现在4 个方面【1 2 】: 可分析性( a n a l y z a b i l i t y ) :软件产品根据演化需求,定位待修改部分的能力。具有良 好演化能力的软件应该容易分析、理解,从而可以根据变化迅速定位需要改变的部分。 可修改性( c h a n g e a b i l i t y ) :软件产品实现特定部分修改的能力。具有良好演化能力的 软件可以方便的修改,以支持变化。 稳定性( s t a b i l i t y ) :软件产品避免软件修改造成不良后果的能力。 可测试性( t e s t a b i l i t y ) :软件产品验证软件修改有效性的能力 2 1 1 软件演化与软件再工程 l e h m a n 等人把软件演化定义为软件程序系统在其生命周期中不断维护、不断完善的系 统动力学行为。如果系统的一个或多个部件随时间经历不断改进,则称之为演化,演化的 目的是为了适应变化环境的需要而保持或提高用户的满意度。系统的功能和行为必须与变 化的环境保持同步,缺陷被修正、参数被调整、功能被完善和扩展、操作被改进。 软件再工程( r e e n g i n e e r i n g ) 也称再加工( r e n o v a t i o n ) ,首先它必须对既存软件系统 即遗产系统进行调查,并将系统重新构造为可以适应新的应用需要的新系统,它是软件系 统不断逆向工程和正向工程的统一,即不断的再工程。 重构是指在保留原系统的外部行为的前提下,对系统在同层抽象中的表示进行转换, 它包括代码重构和数据重构,目的是改善和提高这部分代码的质量。 逆向工程( r e v e r s ee n g i n e e r i n g ) 是指对现有系统进行分析,尽量建立比代码抽象层次 更高的表达形式。逆向工程的结果应该包括现有系统中被执行的处理、被使用的程序数据 结构等信息。 第6 页武汉科技大学硕士学位论文 正向工程是指以重构后的抽象表示为起点开发现有系统的新形式。 再工程将一次工程后的成品软件进行再次开发,因而软件维护期的适应性、完善性、 预防性维护都属于再工程范畴。再工程面对的不是原始需求,而是既存软件,是从既存软 件开发出新软件的过程,这与软件从无到有的第一次开发是有很明显的区别的。目前的再 工程主要为三类: 适应性维护的再工程:伴随硬件和操作系统更新换代的软件维护、业务环境变化带来 的软件维护、系统运行环境变化带来的软件修正、适应系统开发环境变化的软件维护。 完善性维护的再工程:增加或修改功能,以提高系统的安全性、处理能力等性能。 预防性维护的再工程:为了提高可维护性而对系统进行优化( 再结构化、再标准化等) , 对文档进行重构,对数据进行重组。 重用是再工程的灵魂,再工程可以在不同层次重用一次工程的资源,软件重用包括产 品重用和过程重用。 2 1 2 软件演化与软件复用 - 软件复用的目的是避免软件开发的重复劳动,提高软件开发的质量和效率。而软件演 化着眼于整个软件的生命周期,研究如何在较低的开发代价的情况下,延长软件的生命周 期,提高软件适应改变的能力。 2 1 3 软件演化与软件维护 从概念上看,软件工程研究领域对软件维护和演化的定义分别如下: s o f t w a r ee v o l u t i o n :“t h ed y n a m i cb e h a v i o ro fp r o g r a m m i n gs y s t e m sa st h e ya r em a i n t a i n e d a n de n h a n c e do v e rt h e i rl i f et i m e s ,【1 3 l s o f t w a r em a i n t e n a n c e :“t h ec o r r e c t i o no fe r r o r sa n dt h ei m p l e m e n t a t i o no fm o d i f i c a t i o n n e e d e dt oa l l o wa ne x i s t i n gs y s t e mt op e r f o r mn e wt a s k sa n dt op e r f o r mo l do n e su n d e rn e w c o n d i t i o n s , 1 4 l 从上面可以看出软件维护和软件演化是两个不同却又相关的概念。软件维护是对现有 的己交付的系统进行修改,使得目标系统能够完成新的功能,或是在新的环境下完成同样 的功能,主要是指在软件维护期的维护活动。而软件演化则是着眼于软件的整个生命周期, 从系统功能行为的角度来观察系统的变化。这种变化是软件的一种向前的发展过程,主要 体现在软件功能的不断完善、完备。在软件维护期,通过具体的维护活动可以使系统不断 向前演化。研究软件演化一般都从维护阶段的维护活动着手。维护活动可以分为四类: 改正性维护:诊断和改正错误的过程。占全部维护过程的1 7 一2 1 。 适应性维护:为了和变化了的环境相适应而进行的修改软件的活动,是既必要又经常 的维护活动。占全部维护过程的1 8 2 5 。如客户运行平台的升级和更换。 完善性维护:在使用软件的过程中用户往往提出新的功能或修改己有的功能的建议, 还可能提出一般性的改进意见。为了满足这类要求,需要进行完善性维护。这类维护占全 武汉科技大学硕士学位论文第7 页 部维护工作的大部分5 0 一6 0 。如客户对界面要求和录入方式的改变。 其它维护过程:除上述以外的维护活动占全部维护过程的4 。 综上,软件维护和软件演化可以归结为这样一种关系:前者是后者特定阶段的活动, 并且前者直接是后者的组成部分。 2 2 软件演化过程及其特征 2 2 1 软件演化过程模型 软件演化是一个工程过程,在成功的将遗产系统演化成为一个新的系统过程中必须遵 循一系列活动,这些活动包括: 演化计划:对遗产系统进行可行性研究,掌握工作范围及所花代价,进行成本预算和 软件演化计划。 软件理解:对遗产系统的内部结构进行分析,用来识别系统组件及其相互关系,产生 系统的另一种表示形式或更高层的抽象。 需求变更分析:遗产系统的产生往往是由于用户需求改变所致。必须对用户的前后需 求进行对比分析,找出其中的差异。 程序重构:对遗产系统的程序进行重构以使之能适应用户的当前需要。 系统测试:对改造后的部件和整个系统进行测试,以便检查出其中的错误和不足之处。 图2 - 1 软件演化过程模型 2 2 2 软件演化过程特征 软件演化过程具有一下特征: 迭代性:在软件演化过程中,由于软件系统必须不断地进行变革,许多活动要以比传 统开发过程更高频率进行重复执行。 并行性:为了提高软件演化过程的效率,必须对软件演化过程进行并行性处理。 反馈性:用户的需求和软件系统所处的环境是在不断变化的。当环境变化后就必须做 出反馈,以便软件演化过程的执行。 多层次性:软件演化过程是一项多层次的工作,它是多方面共同作用的结果。 交错性:软件演化过程是连续性与间断性的统一,它们是交错进行的。 第8 页武汉科技大学硕士学位论文 2 3 软件的技术度量 从本质上讲,工程是一个量化的学科,而测度是任意一个工程过程中的重要元素。运 用测度,我们能更好的理解我们所建立的模型的属性,并运用测度来评价我们所建立的工 程化产品或系统的质量,软件工程也不例外。利用软件的技术度量,可以帮助我们获取对 建造的系统的设计和构造的深层洞察。 2 3 1 软件质量 产品的价值取决于产品的质量,软件质量的特性是多方面的。必须包括:( 1 ) 与明确 确定的功能和性能需求的一致性。即软件需求是质量度量的基础,缺少与需求的一致性就 无质量可言。( 2 ) 与明确成文的开发标准的一致性。不遵循专门的开发标准,将导致软件 质量低劣。( 3 ) 与所有专业开发的软件所期望的隐含的特性的一致性。忽视软件隐含的需 求,软件质量将不可信。 影响软件质量的因素可以分为两大类:( 1 ) 可以直接测量的因素( 比如说每个功能点 的缺陷) 。( 2 ) 只能间接测量的因素( 如软件的可用性和可维护性等) 。m c c a l l 、r i c h a r d s 和w a i t e r s 提出了对影响软件质量的因素的有用分类1 1 5 】,分类认为这些软件质量因素集中 在软件产品的三个重要方面:它的运行特性、它承受改变的能力以及对新环境的适应能力。 开发一个对质量因素的直接测度是很难的,在某些情况下也是不可能的。因此,度量常常 以组合的形式被定义。 2 3 2 软件度量 按照i e e e 在“i e e es t d 1 0 6 1 1 9 9 2 ,1 9 9 3 ”中对“软件度量”的定义,“软件度量( s o f t w a r e m e a s u r e m e n t ) 是一个函数,其输入是软件,输出是单一的数值,能用以解释软件所具有的 一个给定属性对软件质量影响的程度。”软件度量主要包括程序复杂性度量、模块性度量、 易维护性度量、测试充分性度量等。其中有些度量可以用数值表达出来,称为“定性度量”, 如软件的模块性度量;而其中不能用单一数值表达出来的就称为“定性度量”,如软件的易 理解性等。 ( 1 ) 软件度量的目的 无论是针对传统软件导出的度量还是面向对象度量,其度量目标是一样的:都是为了 更好的理解软件产品的质量;评估软件过程的效率;改善在项目级别完成的工作的质量等。 即软件度量的目的就是为了指导建造更高质量的软件。 ( 2 ) 传统的软件度量方法 传统的软件工程方法从需求工程开始,经过分析和设计建模得到系统原型,接下来就 是体系结构设计,用户界面设计以及软件测试,直至得到称为产品的系统。而软件工程的 技术性工作开始与分析模型的创建,所以,提供对分析模型质量的洞察的技术度量是有必 要的。在设计阶段,对设计模型的度量能够给设计者提供改善的洞察且能将设计演化到一 武汉科技大学硕士学位论文第9 页 个更高质量的水平。 分析模型的度量集中于分析模型的三个元素功能、数据和行为。功能点度量和b a g 度量各自给评价分析模型提供了定量的方法,他们都可以由分析模型得到对将要实现的软 件的大小的指示。 设计度量分别考虑了高层次、构件层次和界面设计问题。高层次设计度量考虑了设计 模型的体系结构和结构方面。构件层次设计度量通过建立内聚、耦合和复杂度的间接度量 提供了模块质量的指示。界面设计度量给g u i 的布局恰当性提供了指示。 除此之外,传统的软件度量方法还提出对源代码的度量,对测试的度量,对维护的度 量等等。对源代码的度量主要是测度在代码中出现的操作符和操作数来评价程序质量。虽 然说很少有技术度量是为直接用于软件测试和维护中提出来的,但是,许多其它的技术度 量可以用来指导测试过程和作为一种机制来评价计算机程序的可维护性。 ( 3 ) 面向对象软件度量方法 面向对象软件和传统方法开发的软件有根本的不同,因此,对面向对象系统的度量着 重于度量可以应用于类和那些使得类独特的设计特征局部化、封装、信息隐蔽、继承 和对象抽象技术。 。 c k 度量套件【1 6 】( c k m e t f i c ss u i t e ) 是一种最为广泛引用的面向对象软件度量体系之一, 它由c h i d 锄b e r 和k e m e r e r 提出。c k 度量套件定义了6 个面向类的软件度量,它们着重 于类和类层次。该度量套件也给出了评估类问协作和驻留在类中的方法的内聚性的度量。 在面向类的级别上,c k 度量套件可以用l 0 r e n z 和硒d d 提出的度量【1 7 】和m o o d 度量【1 8 】 来增强,这些度量包括类“大小”的测度和对子类的特例话程度提供考察的度量。 因为类是面向对象系统中的支配单元,很小有针对类操作提出的度量方法。面向操作 的度量着重于个体操作的大小和复杂度,比如说平均操作大小、操作复杂度以及每个操作 的平均参数数量等等。 在面向对象测试的度量方面,大量的面向对象度量已经被提出,这些度量着重于封装、 继承、类复杂度和多态性。它们多是修改自c k 度量套件和l 0 r e n z 和髓d d 提出的度量。 向对象的软件度量方法作为文章观点的基础,将在下一节重点讨论。 2 4 面向对象的度量技术 作为当前最为流行的技术,面向对象技术已经在软件业中得到广泛的运用。面向对象 度量作为对象技术不可分割的一部分,在面向对象软件开发中的应用具有以下作用1 1 9 j :定 量理解系统的体系结构和详细设计,利用度量的反馈信息构造更好的系统;提供面向对象 项目开发成本估算和进度预计的基础;以系统的生产率、可维护性和可复用性等定量化评 估对象技术在软件开发中的应用。因而面向对象度量日益成为软件工程研究的热点,并在 产业界具有良好的应用前景。 第1 0 页武汉科技大学硕士学位论文 软件工程的最高目标是生产高质量的系统、应用软件或产品。为了减少软件开发过程 的主观性、盲目性及改进软件过程,软件度量应贯穿软件开发的全过程。本节从一个具体 实例出发,主张运用c k 度量和m o o d 度量方法分别从类和系统两个角度对面向对象系 统实施定量计算,计算的结果将用来衡量系统质量的好坏,并可以及时有效地对有缺陷的 类进行演化,增强系统的可理解性、可维护性和可测试性,提高软件质量。 2 4 2 面像对象的c k 度量 s r c h i d a m b e r 和c ek e m e r e r 于1 9 9 4 年提出了6 个面向对象设计和复杂性的度量, 后来这些度量通常被称为c k 度量。c k 度量组的理论基础是b u n g e 的数学本体论,并用 w e y u k e r 公理作为评价标准。c k 度量组在不断受到批评的同时,也在被不断验证、接受。 c k 度量包含六个度量指标: 每个类加权方法数( w e i g h t e dm e t h o d sp e rc l a s s 。w m c ) 。假定对类c 定义了复杂度 为c l , c 2 ,c n 的n 个方法,被选择的特定的复杂性度量( 如环复杂度) 应该被规范化,使 得对某方法的名义上的复杂性取值1 o 。 w m c = s q 对i = l n ,方法的数量和它们的复杂性是实现和测试类所需的工作量的合理指标,此 外,方法数越大,继承树也越复杂( 所有的子类继承他们父类的方法) ,最后,随着一个 给定类的方法的数量的增大,它有可能变得越来越成为应用特定的,因此限制了潜在的复 用。由于这些理由,w m c 应该保持合适的低值。 继承树深度( d e p t ho f i n h e r i t a n c et r e e ,d i t ) 。c k 将d i t 定义为一个类继承树的深度。 即从节点到根的继承树里最大路径的深度。d i t 与b u n g e 的属性范围的概念相关。d i t 度 量有多少祖先会潜在的影响这个类。c k 认为,1 ) 一个类在继承层次中的位置越靠下,就 会有越多的方法继承,预测它的行为也就越复杂;2 ) 继承树越深,导致设计复杂度越大。 因为这将涉及更多的方法和类;3 ) 从另一方面看,继承也加大了此类重用性。 每个类的孩子数( n u m b e ro f c h i l d r e n ,n o c ) 。c k 将n o c 定义为在类层次中,直接 继承自本类的孩子数。其理论基础也是属性范围。c k 认为,1 ) 孩子数越多,重用性就越 大,因为继承是重用的一种形式;2 ) 继承树越深,导致设计复杂度越大。因为这将涉及 更多的方法和类;3 ) 一个类的孩子数反映了在设计上一个类的潜在影响。如果一个类有 大量的孩子,这个类可能需要更多的测试。 类耦合( c o u p l i n gb e t w e e no b j e c tc l a s s e s ,c b o ) 。c b o 是指和本类耦合的类的数目。 如果一个类作用于另一个类,那么它们耦合。例如一个类的方法调用另一个类的方法或者 实例变量。简言之,如果定义在一个类中的方法使用了定义在另一个类中的方法或实例变 量,那么这两个类耦合。c k 认为:1 ) 类之间的高耦合将破坏模块设计和阻碍重用。类独 立性越强,就越容易在其它应用中重用它;2 ) 为了提高模块性和封装性,类之间的耦合 须保持最小。祸合数量越大,就使设计的其它部分作改动的敏感性增加。从而使维护更加 困难;3 ) 对于决定测试设计我不同部分可能有多复杂,耦合的度量很有用。类之间耦合 武汉科技大学硕士学位论文第1 1 页 程度越高,所要做的测试也就要越严格。 类的响应( r e s p o n s ef o rac l a s s ,r f c ) 。r f c 是本类方法加上被本类方法调用方法的 和。c k 将它定义为:r f c = i r s l ,r s 为类的响应的集合。一个类的响应集合就是方法的集 合,这些方法可以被执行,以响应这个类的对象发出的信息。该响应集就是本类方法及被 本类方法调用的方法。这个集的势是对类的对象的属性的度量。因为它包含来自类外方法 的调用,所以这也是一个类与类之间潜在通信量的度量。c k 认为:1 ) 如果为了响应一个 消息,有大量的方法被触发,那么对这个类的测试和调试将变得更复杂,因为这需要测试 者的理解层次更高;2 ) 一个类被触发的方法数量越多,这个类越复杂;3 ) 根据类的响应 值,可以对测试时间分配的更合理,类的响应值越高,所需测试时间越多。 方法间内聚缺乏( l a c ko fc o h e s i o ni nm e t h o d s ,l c o m ) 。l c o m 的值为相似度为o 的方法对的数量,减去相似度不为0 的方法对的数量。相似方法的数目越大,这个类的内 聚就越强。这与传统的程序部分间相互关系的度量是一致的。c k 认为:1 ) 一个类中方法 间需要较强的内聚,因为它增强了封装性;2 ) 内聚缺乏意味着这个类可能应该分成两个 或更多的类;3 ) 方法间全异的任何度量值都有助于找到类设计的缺陷;4 ) 低内聚会增加 复杂性,从而会使开发过程中出错的可能性增加。 2 4 3 面向对象的m o o d 度量 h a r r i s o n 、c o u n s e l l 和n i t h i 在1 9 9 8 年提出了一组面向对象设计的度量,这个度量被人 们称为m o o d 度量,它提供了系列面向对象设计特征的定量指标。这些指标均从封装、 继承、耦合、多态性四个方面提出提出六个度量指标: 方法隐藏因子( m e t h o dh i d i n gf a c t o r ,m h f ) 。m h f 的定义如下: m h f 。至! 竺:坚二! 坐型塑。厶丝厶掣l 二_ = 型 :。m d ( c 。) 这里m d ( c i ) 是类的总数目, 哪,= 登一一叫潆c 。 c 一上 、” 1 0 具它 对于系统中所有类,加入方法可以被别的类使用,记为o ,不能就记为1 。系统中不被 其它类调用的方法数除以系统中定义的方法总数目,就得出系统内隐藏的方法的百分比。 属性隐藏因子( a t t r i b u t eh i d i n gf a c t o r ,a h f ) 。a i f 也是以与m h f 同样的方法定义 的,只是使用属性,而不是方法。a h f 和m h f 使用类的属性和方法对其它类的代码的可 见性来度量信息隐藏。 方法继承因子( m e t h o di n h e r i t a n c ef a c t o r ,m i f ) 。某面向对象系统的类体系结构针对 方法( 操作) 和属性而使用继承的程度被定义为: 第1 2 页武汉科技大学硕士学位论文 这里是对i 从1 到t c 求和。t c 被定义为在体系结构中的类的总数,c i 是在体系结构 中的一个类,而且 m 。( c i ) = m d ( c i ) + m i ( c i ) 其中,m 。( c i ) 为可在和c i 关联中被调用的方法的数量,m d ( c i ) 茭j 在类c i 中声明的m i f 的值提供了继承对面向对象软件影响的指示。 属性继承因子( a t t r i b u t ei n h e r i t a n c ef a c t o r ,甜f ) 以类似的方法定义 耦合因子( c o u p l i n gf a c t o r ,c f ) 。在本章前面我们提到,耦合是对面向对象设计元素 间连接的指示。m o o d 度量套件中以如下方式定义耦合: c f = s i s j i s _ c l i e n t ( c i ,q ) ( t 一t c ) 这里针对i 从1 到t c 和j 从1 到t c 的求和。函数i sc l i c n t = l ,当且仅当客户端类c c 和服务器类c s 间存在关系,且= 时i sc l i e n t = o ,否则虽然很多因素影响复杂性、可理解性、 可维护性,但是,可合理地导出这样的结论:当c f 值增加时,面向系统的复杂性也将增 加,而可理解性、可维护性和复用潜力都将受到影响。 多态因子( p o l y m o r p h i s mf a c t o r ,p f ) 。m o o d 度量方法中用多态因子( p f ) 来度量 系统中存在多态的可能性。p f 定义如下: p f = s s m o ( c a ) s i m 。( c ox d c ( c i ) 】 这里对i 从1 到t c 求和。且 m d ( c i ) = m n ( c i ) + m o ( c i ) 其中,m 。( c i ) 为新方法的数量,m “c i ) 为复写方法的数量,d c ( c i ) 为某基类后代类的数 量。p f 的计算是重新定义继承的方法数目除以可能出现多态情况( 子孙类的新方法是重载 的) 的最大方法数目得出的。因而,p f 反映了一个系统的动态连接( d y n a m i cb i n d i n g ) 情 况。 2 4 4 基于u m l 类图模型的c k 度量分析 类图作为常见的u m l 图之一,提供对系统模型的静态结构的显示,特别是模型中存在 的类、类的内部结构以及它们与其他类的关系等等。它用于描述系统的结构化设计。 一 移动堡惫、e b 应用服务器 p c 用户 ( p d 手机) 、叠黼 八双绞线 i 如弗翟k p c 用户 曛双绞线 i p j i i 络摄像机 、双绞线 蕊 图2 2 某控制系统拓扑图

温馨提示

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

评论

0/150

提交评论