已阅读5页,还剩56页未读, 继续免费阅读
(计算机软件与理论专业论文)面向aspect技术在单元测试中的应用研究.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
独创性声明 删 y 1 8 2 4 d 崔l j c j ; 本人声明所呈交的学位论文是本人在导师指导下进行的研究工作及取得的研 究成果。据我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他 人已经发表或撰写过的研究成果,也不包含为获得重麽虫鱼太堂或其他教育 机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡 献均已在论文中作了明确的说明并表示谢意。 学位论文作者签名:狻子 答字目期:沙7 “肛日 学位论文版权使用授权书 本学位论文作者完全了解 重麽由电太堂有关保留、使用学位论文的规 定,有权保留并向国家有关部门或机构送交论文的复印件和磁盘,允许论文被查 阅和借阅。本人授权 重庞由电太堂可以将学位论文的全部或部分内容编入 有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存、汇编学位论 文。 ( 保密的学位论文在解密后适用本授权书) 学位论文作者虢坦乎 导师签 料醐:q 引膨日擀醐 重庆邮电大学硕士论文 摘要 摘要 面向方面编程( a s p e c t o r i e n t e dp r o g r a m m i n g ,a o p ) 是在o o p 基础上 提出的一种新的编程范式,它允许程序员将跨越多个模块的横切行为封 装到一个可重用的模块中,极大地增强了系统的可维护性和代码的重用 性,可以很好地解决代码分散和代码纠缠问题,使系统易于设计和扩展。 a o p 带来的不仅仅是实现了将横切系统多个模块的行为封装成一个方 面,更重要的是这种横切的思想。 由于极限编程x p ( e x t r e m ep r o g r a m m i n g ) 的逐渐兴起,单元测试重 新引起越来越多开发人员的重视,是当前研究和应用的热点。但是,现 有的单元测试技术依然存在着难于解决的问题,包括面向对象封装引起 的不能完全访问被测类、契约式设计的验证、被测单元与外部模块的依 赖等等,而这些问题往往又是进行单元测试时必须面对的。 在对单元测试的特点和存在的问题进行研究分析以后,将a o p 的横 切思想引入到了单元测试中,即用a o p 的横切思想来描述测试用例代码 和被测对象之间的关系,把测试用例看作是个切面。然后,把这一思 想应用到了单元测试中,从而有效地解决了上述单元测试中存在的问题。 接着,围绕上述单元测试中存在的问题,设计了一个基于a o p 技术 的单元测试框架。该框架利用a s p e c t j 语言来编写测试用例代码,集成 了断言类、计数器、容器和报表系统等部件,可实现完整的测试流程。 然后针对实际工作中三类典型的应用场合( 函数、模块、系统) ,分别通 过实际的程序例子进行全面的测试流程演示,实现了将测试用例代码横 切于被测试类的构想,同时验证了利用a o p 技术确实可以解决上述单元 测试中的问题,而且该框架还可以作为一个良好的检验契约式编程的工 具。 关键词:a o p ,横切,单元测试,测试用例,测试框架 重鏖坚皇丕堂堡主堡塞 垒! ! ! 型 - _ i _ - _ _ - 。_ - - i _ - _ - _ _ - - _ _ _ - _ _ _ _ - _ _ _ - _ _ - _ _ l _ _ - _ _ - _ _ _ - _ - _ _ _ - _ - _ - _ _ - i i _ _ - i _ _ - - - - _ - - _ _ - _ _ l _ _ _ - - _ - _ - _ 。- _ _ 。_ - 。一一 a b s t r a c t a s p e c t o r i e n t e dp r o g r a m m i n g ( a o p ) ,an e w e rp r o g r a m m i n gp a r a d i g m t h a ta l l o w sp r o g r a m m e r sp a c k a g et h eb e h a v i o rt h a ts p a nm u l t i p l em o d u l e s i n t oar e u s a b l e m o d u l e , w h i c h i m p r o v e s c o d e s r e u s a b i l i t y a n d m a i n t a i n a b i l i t yg r e a t l y ,c a ns o l v et h ep r o b l e m so fc o d es c a t t e r i n ga n d c o d e t a n g l i n gv e r yw e l l ,a n dm a k e t h es o f t w a r es y s t e me a s yt od e s i g na n de x t e n d a n di m p r o v et h eq u a l i t yo fc o d e sa n dt h ee f f i c i e n c yo fd e v e l o p m e n t ,a l s ot h e m o d u l a r i t ya n dr e u s a b i l i t yo fs o f t w a r e a o pi s n o to n l yb r i n g i n gu st h e p a c k a g eo fa s p e c t ,b u ti st h et h i n k i n go fc r o s s c u t t i n g u n i tt e s t i n gi sa l s oc a u s e dt om o r ea n dm o r ea t t e n t i o no fm a n y d e v e l o p e r sb e c a u s eo ft h eg r a d u a le m e r g e n c eo fx p ( e x t r e m ep r o g r a m m i n g ) , w h i c hi st h ec u r r e n th o ts p o ti nr e s e a r c ha n da p p l i c a t i o n s b u t ,e x i s t i n gu n i t t e s t i n gt e c h n o l o g i e sr e m a i n sd i f f i c u l tp r o b l e m sw h i c ha r eh a r dt or e s o l v e , i n c l u d i n gc o u l dn o tv i s i te n t i r e l yc a u s e db y t h eo b je c t - o r i e n t e dp a c k a g e , c o n t r a c td e s i g nv e r i f i c a t i o n ,u n i tu n d e rt e s td e p e n d so ne x t e r n a lm o d u l e s a n ds oo n a n d ,t h e s ep r o b l e m sa r et h a tu n i tt e s t so f t e nh a v et of a c e a f t e rs t u d y i n gt h ec h a r a c t e r i s t i c sa n de x i s t i n gp r o b l e m so fu n i tt e s t , w ei n t r o d u c et h ec r o s s c u t t i n gt h i n k i n gt ou n i tt e s t ,t h a ti s ,d e s c r i b et h e r e l a t i o n s h i pb e t w e e n t e s t c a s ea n dc o d eu n d e rt e s tw i t ht h et h i n k i n go f c r o s s c u t t i n g ,a n dt h i n kt h a tt e s t c a s ec o u l db es e e na sac r o s s c u t t i n ga s p e c t t h e n , a p p l y i n g t h i s t h i n k i n g t ou n i t t e s t , a n ds o l v et h e s ep r o b l e m s e f f e c t i v e l y i no r d e rt ov e r i f yt h ea b o v e m e n t i o n e dp r o b l e m se x i s ti nu n i tt e s t ,t h i s d a d e rd e s ig n sat e s t i n gf r a m e w o r kb a s e do na o p t h i sf r a m e w o r kc o u l d p a p e rd e s l g n sat e s t l n gt r a m e w o r kd a s e d o na 。u 上, ln l si r a r i l e w o r kc o u l u i m p l e m e n t eac o m p l e t et e s t i n gp r o c e s sa n d u s e da s p e c t j t oc o d e ,w h i c h i n t e g r a t e ss e v e r a lp a r t si n c l u d i n ga s s e r t i o n ,c o u n t e r ,c o n t a i n e ra n dt e s t i n g r e p o r t t h e nv e r i f yt h ep r o b l e m si nu n i tt e s tc o u l db es o l v e dw i t ha o pb y t h r e ep r a c t i c a lo c c a s i o n si nt h i sf r a m e w o r k ,a n dr e a l i z et h ei d e at h a tm a k e s t e s t c a s ec o d ec r o s s c u tt h ec l a s su n d e rt e s t i n g a 1 s 0 ,t h i sf r a m e w o r kc a n s e r v ea sag o o dt o o li nt e s t i n gc o n t r a c td e s i g na n dt e s t i n gc o v e r a g es t a t i s t i c k e yw o r d s :a o p ,c r o s s c u t t i n g ,u n i tt e s t ,t e s t c a s e ,t e s t i n gf r a m e w o r k i l 重庆邮电人学硕士论文目录 目录 摘要i a b s t r a c t i i 第一章绪论1 1 1 研究背景1 1 2 研究现状4 1 3 本文的主要工作5 1 4 论文组织结构5 第二章面向a s p e c t 的软件开发技术7 2 1a o p 概j 苤7 2 1 1a o p 横切机制8 2 1 2a o p 的基本特征8 2 1 3a o p 与o o p 9 2 1 4a o p 优势1 0 2 2 现有a o p 开发工具介绍1 0 2 2 1a s p e c t j 语言1 0 2 2 2s p r i n ga o p l1 2 2 3j b o s sa o p 1 1 2 2 4 几种工具的对比1 1 2 3a s p e c t j 介绍1 2 2 3 1 连接点( j o i n p o i n t ) 1 2 2 3 2 切入点( p o i n t c u t ) 1 3 2 3 3 建议( a d v i c e ) 1 3 2 3 4 类型间声明( i n t e r t y p ei n t r o d u c t i o n ) 1 4 2 3 5 方面( a s p e c t ) 1 4 2 4 小结1 4 第三章单元测试1 5 3 1 测试的基本概念15 3 1 1 静态测试和动态测试15 3 1 2 黑盒测试和白盒测试1 6 i i i 重庆邮电大学硕士论文 目录 3 2 单元测试1 7 3 2 1 单元测试介绍1 7 3 2 2 测试用例2 0 3 2 3 单元测试框架j u n i t 2 l 3 3 单元测试中存在的问题2 2 3 3 1 契约式设计的验证2 2 3 3 2 封装引起的问题一2 3 3 3 3 被测单元与外部服务的依赖2 4 3 3 4 动态白盒测试2 5 3 4 小结2 6 第四章a o p 在单元测试中的应用2 7 4 1 解决思路分析2 7 4 1 1 验证契约式设计2 7 4 1 2 破除o o 的封装2 8 4 1 3 利用a o p 实现隔离2 9 4 1 4 利用动态织入实现白盒测试2 9 4 1 5 其他应用3 0 4 2 测试用例是一个切面一3 0 4 3 小结3 2 第五章基于a o p 的单元测试框架的设计3 3 5 1 引言3 3 5 2 设计思想3 3 5 3 工作流程3 5 5 4 特点一3 7 5 5 实验分析3 7 5 5 1 编程环境3 7 5 5 2 一个函数3 8 5 5 3 一个模块3 9 5 5 4 一个系统4 0 5 6 小结4 7 第六章总结及未来工作4 8 6 1 总结4 8 重庆邮电人学硕士论文 6 2 未来工作 致谢 攻硕期间从事的科研工作及取得 参考文献 重庆邮电大学硕士论文第一章绪论 1 1 研究背景 第一章绪论弟一早瑁化 从2 0 世纪6 0 年代提出面向对象的概念到现在,o o p ( 0 b j e c t o r i e n t e d p r o g r a m m i n g ) 已经发展成为一种比较成熟的编程思想并逐步取代了传统 的结构式编程思想。事实证明,在小型和大型项目中都可以成功应用面 向对象编程。它对信息科学、人工智能、教育应用等行业的发展,都起 到了巨大的推动作用。面向对象的分析、设计与编程为软件开发带来了 很大的好处: 代码的可重用性大大提升 软件代码的复杂度降低 封装性、模块化的提高 软件维护成本减少等等 面向对象思想引入了类、对象、消息等概念,以及加入了继承、封 装、多态等机制,实现了软件的模块化,并且提高了软件重用的粒度。 然而,面向对象技术并没有彻底解决软件开发中的维护、复用等问题。 在面向对象世界里,现实世界中的实体和它的行为建模为抽象的对象。 软件被封装成了多个不同的类,系统变成一系列相互协作的类,每个类 担任一个角色,以此来实现软件系统角色的划分。面向对象 2 】设计最根 本的魅力在于,它能够将真实世界领域中的实体及各自的行为建模为抽 象的对象。以面向对象方式设计的系统产生了很多有效的业务对象,比 如p e r s o n 、a c c o u n t 、o r d e r 以及e v e n t 。面向对象设计的缺点在于,这样 的业务对象会因为混合的属性和与对象最初意图不一致的操作而变得混 乱。但是,面向对象只是通过继承机制描述了软件模块之间纵向的联系, 对于系统内跨越多个不相关模块的横切行为的描述却捉襟见肘。很多系 统级的需求,例如日志记录、安全验证、性能等模块,都会横切若干个 核心模块。在这种情况下,类不仅要处理自己的核心关注点,而且还必 须实现横切关注点,以便满足相关的系统需求。类由于承担了多个角色 而导致系统代码混乱,结果使得封装不严密,划分的角色也不清晰,这 显然违背了面向对象的初衷。o o p 中,由于横切关注点带来的问题可以 分为两类【3 】【4 】: 重庆邮电大学硕十论文第一章绪论 代码交织( c o d et a n 9 1 i n g ) :一个软件系统的组件可能要同时与数 个需求交互,所以各个组件包含满足不同的关注点的实现。举例来说, 开发者经常要同时考虑业务逻辑、性能、同步、日志和安全等问题,兼 顾各方面的需要导致相应关注点的实现元素同时出现,引起代码交织, 这导致了系统不易理解。 代码分散( c o d es c a t t e r i n g ) :由于横切关注点本来就涉及到多个组 件,相关实现也就得遍布在这些组件里。如在一个使用了数据库的系统 里,性能问题就会影响所有访问数据库的模块。这导致代码分散在各处, 使得不管是关注点的需求发生变化还是设计发生变化,都需要修改多个 组件。 为了解决这些问题,2 0 世纪9 0 年代早期美国硅谷p a r c 研究中心 首席科学家g r e g o rk i c z a l e s ( 目前是加拿大不列颠一哥伦比亚大学计算机 科学教授) 带领的研究小组先后尝试了反射( r e n e c t i o n ) 和元对象协议 ( m e t a o b j e c tp r o t o c 0 1 ) 等多种技术,但这些技术非常复杂,难以被广泛利 用。最终,g r e g o rk i c z a l e s 等抓住了问题的要害:“横切”( c r o s s c u t t i n g ) , 并在19 9 7 年欧洲面向对象程序设计大会( e c 0 0 p 9 7 ) 提出了面向方面的程 序设计【5 。7 】:a o p ,其目的是让程序员能够在自己的代码中将“横切结构” 模块化,a o p 就诞生于这样的应用背景之下。a o p 作为种新的程序设 计范型体现出了强大的生命力,而且生命可能才刚刚开始。 横切是一种蕴含强大力量的相对简单的设计和编程技术,尤其是当 它被用于建立松散耦合的、可扩展的企业系统时。a o p 将横切于系统的 关注点从原来系统中分离抽取出来,集中到了方面( a s p e c t ) 中,并为软件 开发者提供了一种描述横切关注点的机制,从而实现了横切关注点的模 块化。通过划分横切系统的代码,横切行为变得容易处理。开发者可以 在编译时更改、插入或者除去系统的横切关注点代码,甚至重用系统的 这些横切关注点代码。图1 1 和图1 2 形象地表现了a o p 对分散于各个 模块的横切行为封装后的效果【5 】【6 】: 图1 1o o p 系统中分散的关注点 2 重庆邮电大学硕十论文 第一章绪论 图1 2a o p 的横切实现 软件测试 软件测试是软件开发流程中重要的组成部分之一,是用来确认一个 程序的品质或者性能是否符合开发之前所提出的一些要求。软件测试就 是在软件投入运行前,对软件需求分析、设计规格说明和编码的最终复 审,是软件质量保证的关键步骤。g r e n f o r dj m y e r s 所著t h ea r to f s o f t w a r et e s t i n g 中罗列了4 条测试观点【8 】: 软件测试是为了发现错误而执行程序的过程。 测试是为了证明程序有错,而不是证明程序无错。 一个好的测试用例在于它能发现至今尚未发现的错误。 一个成功的测试是发现了至今尚未发现的错误的测试。 软件测试不以发现错误为唯一目的,查不出错误的测试并非没有价 值,整个测试过程本身就是评定测试质量的一种方法,如果测试过程持 续的运行多次仍未发现软件错误,那么多少可以证明:被测软件已经相 当完善了,或者需要重新构建一套测试过程了。 单元测试【9 】是针对软件设计中的最小单位一一程序模块,进行正确 性检验的测试工作,其目的在于发现每个程序模块内部可能存在的差错。 单元测试不仅仅用来发现代码的错误,更重要的是单元测试保证了程序 代码的质量。由于敏捷开发的兴起,单元测试这个曾经的“昔日黄花 再度被受到追捧。没有采用敏捷开发方式的软件企业也在重新审视单元 测试的重要性。对于单元测试的定义,应该分成广义的和狭义两种。狭 义的单元测试是指编写测试代码来验证被测试代码的正确性。广义的单 元测试则是指小到一行代码的验证,大到一个功能模块的功能验证,从 代码规范性的检查到代码性能和安全性的验证都包括在内,视单元的范 围而定义。 但是,单元测试在面向对象程序上的实施遇到了不少的问题。面向 对象编程思想把对象的属性和行为封装( e n c a p s u l a t e ) 在一个封闭的模块 中,并尽可能隐藏对象的内部细节,使用了不同的访问修饰符来限制外 重庆邮电大学硕士论文第一章绪论 部对象对模块内变量和函数访问,而单元测试大都是基于代码的,这样 的话,如果单元测试无法访问到被测试的类内部,而且也无权修改程序 代码( 很多时候测试人员甚至得不到代码) ,这就会造成测试不充分的现 象。如果将a o p 技术应用到单元测试领域就可以解决单元测试中的不少 难题。 1 2 研究现状 面向方面编程a o p 相对于o o p 而言,是一种新的编程范式,也是 一种强大的程序设计方法。尽管不少研究者和开发人员对于面向方面编 程仍持有保留的态度,但随着时间的推移,a o p 已经受到了越来越广泛 的关注,越来越多的学者和程序员已经开始意识到a o p 的强大和便捷 性,纷纷加入到了面向方面编程的研究之中,各种理论相互碰撞融合, 各种工具不断涌现。再者,国内相关的研究因起步较晚,虽然至今已有 一些专家、学者开始着手研究a o p 并取得了一定成果,但国内研究在整 体上仍然落后于国外。所以该课题在国内是一个新的研究领域,对面向 a s p e c t 技术的发展有着重要的意义。 目前,大多数针对a o p 技术的研究还是集中在问题分析、软件设计、 以及实现技术上,对a o p 本身的测试以及利用a o p 技术进行软件测试 的研究不是很多,而且在期刊库罩所检索到的文章也很少。在a o p 与软 件测试相结合的研究点上,现有的研究可以分为两个方向:针对a o p 程 序本身的测试和把a o p 技术应用到软件测试中来对o o p 程序进行测试: 1 针对a o p 程序本身的测试偏重于单元测试,而且侧重点也各不相 同,有基于数据流进行测试的,也有为要测试的单元创建包装类,再用 传统面向对象测试工具进行测试的,还有利用工具将a s p e c t j 程序转成 基础类,再用j u n i t 进行单元测试的。但是a o p 毕竟还是一个新生事物, 现有的利用a o p 进行软件开发的产品少之又少,所以就目前来说,单纯 研究针对a o p 程序的测试对现实的软件开发指导意义不是很大。所以本 文的重点放在了利用a o p 技术来对0 0 p 程序进行测试。 2 利用a o p 技术来对o o p 程序进行软件测试的研究也不是很多。 其中一个研究点就是把a o p 技术应用到软件测试中,利用a o p 的横切 机制来解决传统测试技术不能或者难以解决的问题,但是这些研究大都 是站在理论角度进行分析,并没有用实际的工具或者测试框架来对其进 行验证。如果没有实践的验证,这些分析和研究是不能够令人信服的。 4 重庆邮电大学硕士论文第一章绪论 1 3 本文的主要工作 软件测试在整个软件系统实现的过程中占据着十分重要的地位,大 量统计资料表明,软件测试的工作量往往占软件开发总体工作量的4 0 以上。各种新思想、新技术、新工具不断的涌入软件测试领域,交融在 一起,大大地冲击了传统的软件测试思想、技术。而a o p 技术对于软件 测试来说,还是一个新面孔,相关的研究为数不多。因此,本文正是在 对a o p 技术进行深入研究分析后,将其应用到了软件测试领域,并成功 的解决了传统测试中遇到的若干问题: 1 基于本课题的研究背景,研究分析了面向方面技术、以及其与面 向对象技术的一些本质区别,软件测试等领域的一些概况,并对现有的 主流a o p 语言和工具进行了分析介绍。 2 将a o p 的横切思想应用到了单元测试中,把测试用例看作是一个 切面,使用面向方面技术有效地解决了传统测试中的若干难题。 3 基于a s p e c t j 编程语言和j a v a 编程语言,设计实现了一个基于a o p 技术的单元测试框架,可以对面向对象程序进行测试。该框架集成了报 表系统,可以在测试结束后,自动将测试结果以h t m l 网页的形式清晰、 明朗地呈现出来。最后在实验中验证了该测试框架的实现。 1 4 论文组织结构 本文的组织结构如下: 第一章介绍课题的研究背景,对面向方面编程技术a o p 以及软件测 试领域的概况作一些大致的介绍,并分析国内外的研究现状。最后给出 本文要做的主要工作和论文的组织结构安排。 第二章详细介绍面向a s p e c t 的软件开发,及其实现机制、基本特征、 实现工具。最后详细介绍a o p 的编程语言a s p e c t j ,本文的研究即基于 这种语言。 第三章对软件测试进行讨论,包括静态测试、动态测试以及测试用 例等软件测试活动中的重要概念,并着重讨论单元测试以及主流的单元 测试框架j u n i t ,然后分析单元测试存在的问题。 第四章主要研究如何把a o p 应用到软件测试,分析讨论传统测试中 遇到的若干问题,例如验证契约设计、返回数据模拟等等,并尝试利用 a o p 技术进行解决。 重庆邮电人学硕士论文 第五章围绕单元测试存在 试框架,详细介绍该框架的设 操作系统下,分别在三个场合 对具体的示例程序,对框架的 第六章对全文进行总结, 方向作出展望。 第二章面向a s p e c t 的软件开发技术 2 1a o p 概述 a o p 【1 0 。3 】把软件系统分为两个部分:核心关注点和横切关注点。其 中,关注点就是一个特殊的目标、概念或感兴趣区。核心关注点包括业 务逻辑,横切关注点包括日志记录、用户身份鉴别、安全验证、性能优 化等等。a o p 的核心思想即是关注点的分离,也就是将核心关注点和横 切关注点分离,对于核心关注点,可以继续使用o o p 的方法进行开发, 对于横切关注点,a o p 引入了a s p e c t 即方面的机制来对其进行描述,并 能够自动将横切关注点织入( w e a v e ) 到面向对象的软件系统中,从而实现 了横切关注点的模块化。a o p 在o o p 的缝隙之中【6 - 8 】【11 1 ,抽象出“方面” 的概念,目的就是为了打破对象的封装性,以“方面”的方式对原有的 模块进行重组,抽取那些与业务无关却为整个系统所通用的功能,最终 封装在一起。 a o p 允许开发者动态修改o o p 定义的静态模型,即不用修改原始的 0 0 模型,甚至可以不用修改o o 代码本身,即可完成对横切面问题的解 决。比如,将系统中处理日志、安全性、事务及其他企业级服务的代码 集中放置在一个地方。因此,a o p 使得o o p 中的重复代码能够大范围的 减少【1 引。 a o p 的织入过程可以用下图清晰地展示出来【0 5 】: c r o s s c u t t i n g b a s ec o d e 图2 1a o p 的织入过程 7 w e a v e d c o d e 重庆邮电人学硕十论文 第二章面向a s p e c t 的软件开发技术 从上图可以看出a o p 的开发步骤包括: 1 方面提取:分解需求提出横切关注点,把核心关注点和系统级的 横切关注点分离开来。 2 关注点的封装实现:把提取出的横切关注点封装进a s p e c t 中,各 自独立地实现这些关注点。 3 方面的织入:在这一步,方面代码通过a s p e c tw e a v e r 织入核心 关注点( b a s ec o d e ) ,实现了方面与系统的重组。 2 1 1a o p 横切机制 什么是横切? 横切,是面向方面编程的专有名词。它指的是在一个 给定的编程模型中穿越既定的职责部分( 比如日志记录和性能优化) 的操 作。横切是一种蕴含强大力量的相对简单的设计和编程技术,尤其是当 它被用于建立松散耦合的、可扩展的企业系统时。 在横切的世界里,有两种类型:动态横切和静态横切”】。 1 动态横切:动态横切是通过切入点和连接点在一个方面中创建行 为的过程,连接点可以在执行时横向地应用于现有对象。动态横切通常 用于帮助向对象层次中的各种方法添加日志记录或身份认证。在很多应 用场景中,动态横切技术基本上代表了面向方面编程本身,所以,到目 前为止,主流的a o p 技术采用的都是动态横切机制。 2 静态横切:静态横切和动态横切的区别在于它不修改一个给定对 象的执行行为。相反,它允许通过引入附加的方法字段和属性来修改对 象的结构。此外,静态横切可以把扩展和实现附加到对象的基本结构中。 虽然现在静态横切在a o p 领域受到的关注还比较少,还无法谈及静态横 切的普遍使用,但是这一技术蕴含的潜力是巨大的。使用静态横切,架 构师和设计者能用一种真j 下面向对象的方法有效地建立复杂系统的模 型。静态横切允许开发人员不用创建很深的层次结构,以一种本质上更 优雅、更逼真于现实结构的方式,插入跨越整个系统的公共行为。 2 1 2a o p 的基本特征 a o p 多量化( q u a l i t i f i c a t i o n ) 和不知觉性( 0 b l i v i o u s ) 的基本特征使得 a o p 提供的封装机制与合成机制密不可分16 1 。 多量化是指方面的单个表示会影响到多个程序模块,不知觉性是指 重庆邮电人学硕士论文 第二章面向a s p e c t 的软件开发技术 受影响的模块并不包含任何对该行为的显式调用或者声明。在a o 软件 中,横切关注点被封装为方面模块,然后在合成机制中,方面模块体现 出与被横切的基本功能模块之间的一对多的强耦合特性,从而使得类似 与传统的单元隔离测试难以直接应用到a 0 软件之上。a o p 提供的方面 合成机制相对于0 0 p 中的对象继承和聚合而言粒度更小。下面一节中将 对a o p 与o o p 的实现机制做出形象的对比,a o p 的这种多量化和不知 觉性特征就很明显地体现了出来。 2 1 3a o p 与o o p a o p 与o o p 非常的相似,也含有c l a s s 、i n t e r f a c e 、m e t h o d 、p a c k a g e 等等,它不是0 0 p 的替代品,而是对o o p 的进一步补充和完善,两者 有着相辅相成的关系。a o p 与o o p 最重要的不同在于它们处理横切关注 点的方式,在a o p 中,每个关注点的实现都不知道其他关注点是否会“关 注它,如下图所示【3 - 6 1 : o b j e c tm o a t l l ei si m o k e db yo t h e rm o d u l e s t h r o u g hm e s s d g es e n d s a s p e c tc a p n l r e si t s ( n v ni m ,o c d t i o nf h a f c r o s s c u t so t h e rm o d u l e s 图2 2o o p 和a o p 在调用方法上的区别 上图中,右边代表了用a s p e c t 来描述实现横切关注点的情形,左边 则代表了利用o o p 思想来实现横切模块的情形。从图中可以清晰地看 到,在o o p 实现中,所有的模块都要连续不断地调用“t r a c es u p p o r t 模块( 虚线代表了模块调用) 。但是,假设“t r a c es u p p o r t ”模块被移除, 那么所有和它有着调用关系的模块统统都需要进行代码修改,否则系统 就会出错。然而,当我们利用a o p 来解决这一问题时,一切都变得迎刃 而解。a o p 把横切于各个模块的t r a c es u p p o r t 封装在一个方面里面,由 方面来主动感知( 隐式调用) 其他模块对t r a c es u p p o r t 的调用。这种隐式 9 调用的机制需要a s p e c t 来指定它需要在“什么时候、什么地方”主动感 知调用,而这也涉及到了a o p 一些语言构造p o i n t c u t 、a d v i c e 的概念, 将在后面详细阐述。利用这种机制,一个a o p 实现可以借助其他编程范 型作为它的基础范型,从而原封不动的保留其基础范型的优点。 2 1 4a o p 优势 总之,a o p 除了可以解决o o p 中的代码纠缠和代码分散带来的问题 以外,还有一些其他的优点: 1 易扩展性:由于方面模块根本不知道横切关注点,所以很容易通 过建立新的方面来加入新的功能。另外,当往系统中加入新的模块时, 已有的方面自动横切进来,使系统易于扩展。 2 模块化横切关注点:a o p 用最小的耦合处理每个关注点,使得即 使是横切关注点也是模块化的。用这样的实现方式产生的系统,其代码 的冗余非常小。这样的实现还有助于增强系统的可维护性和可理解性。 3 高内聚、低耦合性:a o p 把每个方面封装为独立的模块,模块内 部是高耦合的,模块之间是松散耦合的。松散耦合意味着更好的代码重 用性,一个简单的例子就是,可以把横切系统的同志记录模块封装为方 面,以此来替代之前嵌在系统中的同志记录代码,这样就利于降低系统 的耦合性。 2 2 现有a o p 开发工具介绍 2 2 1a s p e c t j 语言 a s p e c t j 【1 7 - 1 9 】中对a s p e c t 的声明类似于j a v a 语言中的c l a s s 。由于 a s p e c t j 是j a v a 语言在语法和语义上的扩展,因此它加入了一些新的用 于处理方面的关键字,例如p o i n t c u t 、a d v i c e 等等,来实现a o p 的核心 思想,使得核心关注点和横切关注点无缝集成。构建a s p e c t j 程序与j a v a 程序非常相似,其中包括调用a s p e c t j 的递增编译器,构建所有的项目 源文件,包括普通的j a v a 源文件。同时,a s p e c t j 程序也是在j a v a 虚拟 机上运行的。 a s p e c t j 是目前相对最为成熟、最为完善、功能最为强大的a o p 开 发语言。本文使用的就是a s p e c t j 。 l o 重庆邮电大学硕士论文 第二章面向a s p e c t 的软件开发技术 2 2 2s p r i n ga o p s p r i n ga o p 实现是s p r i n g 框架的重要组成部分,与i o c ( i n v e r s i o no f c o n t r o l ,反转模式) 容器紧密集成,这种整合可以让熟悉s p r i n gi o c 的开 发者不需要专门学习a o p 知识。它也实现了a o p 联盟制订的方法拦截 接口,使得用户不必绑定在特定的拦截器接口上。 s p r i n ga o p 【1 4j 是由j a v a 开发完成的,因此它秉承了j a v a 的一切优 势一一“一次编写,到处运行”。目前,s p r i n ga o p 只实现了方法级的 j o i n p o i n t ,不支持字段拦截,只有通过s p r i n gi o c 容器获取的对象才能 进行通知;不能在类装载器的层面进行通知,而且拦截器代码中没有强 类型检查。 2 2 3j b o s sa o p j b o s sa o p 【2 0 1 是j b o s s 4 o 附带的一个a o p 框架,将a o p 作为应用 服务器的核心功能之一提供出来。采用修改类装载器来实现a o p 。拦截 器必须实现一个j b o s s 规定接口,具有a o p 能力的类装载器应用于p o j o 上,切入点则是在x m l 文件中定义的,所以只有规范的字段和方法会被 拦截。 2 2 4 几种工具的对比 下面就具体说说每一种开发工具的特点和优缺点。 a s p e c t j 是采用类j a v a 的代码风格进行切入点声明【2 l 】,作为j a v a 语 法和语义的无缝扩展,a s p e c t j 用一些关键字来处理切入点:此外,a s p e c t j 也使用修饰符和通配符。j b o s sa o p 框架使用x m l 或者注释来声明切入 点,如果用x m l 的话,方面、切入点和通知的声明都是用x m l 描述的, 切入点和通知的绑定是在x m l 的注释之中,而通知的具体实现则使用 j a v a 代码,至于这个代码如何被调用的则是透明的,这是j b o s sa o p 框 架的责任。在程序运行的时候,j b o s sa o p 框架将会拦截与切入点匹配 的函数调用,并执行相应的通知部分。s p r i n ga o p 框架和j b o s sa o p 框 架非常相似,但功能上比j b o s sa o p 更强大更细致,并且所需要的代价 也更少,因为s p r i n ga o p 框架不需要像j b o s sa o p 框架那样依赖一个独 立的后台进程来完成所有的横切任务。但是,s p r i n ga o p 的框架相对 j b o s sa o p 而言,复杂程度大大增加,难以掌握和控制。 2 3a s p e c t j 介绍 a s p e c t j 是施乐公司开发的基于j a v a 语言的a o p 扩展,它既是一种 a o p 语言规范,又是一种语言实现。a s p e c t j 的语言构造是从j a v a 语言 中扩展而来的,因此所有合法的j a v a 程序也都是合法的a s p e c t j 程序。 a s p e c t j 编译器生成的是符合j a v a 字节码规范的c l a s s 文件,这使得所有 符合规范的j a v a 虚拟机都可以解释、执行其所生成的代码【1 7 24 1 。a s p e c t j 是对j a v a 的扩充与a o p 是对o o p 的补充是相对应的。 a s p e c t j 的织入器,即a s p e c t j 编译器,负责把不同的方面组合在一 起。目前,a s p e c t j 的编译器有两种【2 2 。2 9 】,一种是a j c ,其在字节码上进 行编织,由前端编译器和后端编织器组成,设计重点是快速地增量编译 和集成到e c l i p s e 开发工具中;另外一种是a b c ,其在j i m p l e ( 一种中间代 码) 上进行编织,建立在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 前端技术实践如何制定有效的数字计划
- 人力资源部人才招聘与培训方案
- 供销社农产品展销中心面试成功秘籍
- 职业卫生师面试礼仪
- 软考中级面试常见问题及应对策略
- 保险经纪人高端客户方向-资产配置与风险保障方案设计
- 心理治疗师初级职业生涯中的挑战与应对策略
- 中级碳汇计量评估师岗位轮岗计划与实施方案
- 系统集成工程师团队合作能力考核方案
- 县级体育馆桨板教练团队管理办法
- 中山大学考博外科学历年真题
- 思想道德与法治课件:第六章 第三节 维护宪法权威
- 高边坡锚杆施工记录表
- 天使投资人 以及联系邮箱完全版
- 员工应聘职位申请表(模版二)
- JIS G3141-2021 冷轧钢板及钢带标准
- 临床医师“三基三严”考试试题及答案
- psv500b硬件手册多功能全场扫描式激光
- 展开式二级斜齿圆柱齿轮减速器
- 学术论文审查备案管理制度
- 110kVI段母线PT、母联、线路CT更换改造施工方案
评论
0/150
提交评论