




已阅读5页,还剩40页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要 摘要 健壮性测试是保证软件可靠性的重要手段。然而,现有的健壮性测试技术主要采刚故障注入方 法来评估系统的容错能力,使得测试代码与产鼬代码相互缠绕,形成横切关注,从两降低了代码的可 理解性,增加了代码的维护代价。面向方面程序设计能有效模块化横切关注,提高代码的可读性和 可维护性。鉴于a o p 是一种行之有效的横切关注模块化手段,利用a o p 辅助软件健壮性测试有较 高戆会理性。基此,本文提出了个基于a o p 救健壮性测试挺絮e a r t f ,旋扶很大程度上消除 产品代码和测试代码问的耦合,提高代码的可读性和可维护性。 本文分析了已有健壮性测试存在的问题,在此基础上提出了扩展的基于a o p 的软件健壮性测试 框架e a r t f ,该框架的主要功能包括:( 王) 对藤向对象糕序进行健壮性测试。与传统采用故障注入 的软件健壮性测试不同,该框架利削面向方面技术,将用于健壮性测试的代码封装于方面中,从而 能够同时提高产占矗代码和测试代码的质量。( 2 ) 对e a r t f 框架中辅助软件健壮性测试的方面进行 测试。本文提出使用m o c k 类对方面进行测试的技术,并将该技术添加到基于a o p 的链壮性测试框 架中,很大程度上方便了对方面的测试、保证了基于a o p 的健壮性测试的测试效果。 最后,本文给出该框架的详细设计,在e c l i p s e 平台上进幸亍实现,妻= 通过歼源项譬w e b s p h i n x 源 代码对框架进行了实例研究和分析。 论文的工作包括以f j l 个方面: 提出了一令基于a o p 的健壮性测试方法,实例表明,相比较传统故障注入健壮性测试方法, 该方法能在很大程度上消除产品代码和测试代码之间的耦合,提高代码的可设性和可维护 性。 提出了方面测试技术,该技术使用m o c k 类来辅助方面进行测试,以保证用于健壮性测试 的方面的正确性和完整性,从而在很大程度上保证基于a o p 的健壮性测试的测试效果。 提出了一拿扩展的基予a o p 静健桂健溅试框架e a r t f ,该框架集软件健壮健测试帮方覆 测试于一体,是个全新的软件健壮性测试框架。d 岍完整地实现了传统敝障注入健壮 性测试的基本功能,同时又具有提高测试代码的可理解性、降低测试代价的优点。此外, 抽象测试方面的使用令该框架具有良好的可配性和可扩展性。 关键字:a o p ,蘸囱方西编程,软馋测试,毽壮性溅试,赦障注入,方瑟溅斌 a b s t r a c t a b s t r a c t r o b u s t n e s st e s t i n gp l a y sa n i m p o r t a n tr o l ei ns o f t w a r er e l i a b i l i t ya s s u r a n c e h o w e v e r , e x i s t i n g r o b u s t n e s st e s t i n gt e c h n i q u e sm a i n l yd e p e n do nf a u l ti n j e c t i o n ,w h i c hl e a d st h et e s tc o d e st ob es c a t t e r e di n t h ep r o d u c tc o d e s t h i si sat y p i c a lc r o s s c u t t i n gc o n c e r n a o pi sat e c h n i q u et h a tm o d u l a r i z et h e c r o s s c u t t i n gc o n c e r n st oi m p r o v et h eu n d e r s i a n d a b j l i t ya n dm a i n t a i n a b i l i t yo fs o f t w a r e t h u s ,t h i sp a p e r p r o p o s e saf r a m e w o r kf o rr o b u s t n e s st e s t i n gb a s e do na o p , w h i c hc a ne l i m i n a t et h ec o u p l i n gb e t w e e n p r o d u c tc o d e sa n dt e s tc o d e sa n di m p r o v et h eu n d e r s t a n d a b i l i t ya n dm a i n t a i n a b i l i t yo fs o f t w a r e f i r s t l y , w ea n a l y z et h ep r o b l e m so ft h ee x i s t i n gr o b u s t n e s st e s t i n gt e c h n i q u e s t h e np r o p o s ea n e x t e n d e dr o b u s t n e s st e s t i n gf r a m e w o r kb a s e do na o p ( e a j :t v 3 ,t h ef u n c t i o n so fw h i c ha r ea sf o l l o w s :( 1 ) r o b u s t n e s st e s t i n gf o ro b j e c to r i e n t e ds o f t w a r e i ti sd i f f e r e n tf r o me x i s t i n gr o b u s t n e s st e s t i n gt e c h n i q u e s w h i c hd e p e n do nf a u l ti n j e c t i o n e a r t ff r a m e w o r kt r e a t st e s tc o d e sa sc r o s s c u t t i n gc o n c e r n sa n d e n c a p s u l a t e st h e mi n t oa l la s p e c t i tc a l li m p r o v et h eq u a l i t yo fp r o d u c tc o d e sa sw e l la st e s tc o d e s 国 a s p e c tt e s t i n g t h i sp a p e rp r o p o s e sat e c h n i q u ew h i c hu s e sm o c kc l a s sf o ra s p e c tt e s t i n g w ea d dt h i s a s p e c tt e s t i n gt e c h n i q u et ot h ef r a m e w o r kf o rr o b u s t n e s st e s t i n gb a s e d0 na o pt om a k et h ea s p e c tt e s t i n g m u c hc o n v e n i e n ta n dt oe n s u r et h eq u a l i t yo fr o b u s t n e s st e s t i n gb a s e do na o e a tt h ee n do ft h i sp a p e r , w es h o wt h ed e s i g no ft h ee x t e n d e dr o b u s t n e s st e s t i n gf r a m e w o r kb a s e do i l a o pi nd e t a i l ,w h i c hi sb a s e do ne c l i p s ep l a t f o r m 。ac a s es t u d yo na no p e ns o u r c ew e b s p h i n xs h o w st h e e f f e c t i v e n e s so ft h ef r a m e w o r k t h em a i nc o n t r i b u t i o n so ft h i sp a p e ra r el i s t e da sf o l l o w s 。p r o p o s ear o b u s t n e s st e s t i n gt e c h n i q u eb a s e do i la o et h ee m p i r i c a lr e s u l t si n d i c a t et h a tt h i s t e c h n i q u ec a ne l i m i n a t et h ec o u p l i n gb e t w e e np r o d u c tc o d e sa n dt e s tc o d e sa n di m p r o v et h e u n d e r s t a n d a b i l i t ya n dm a i n t a i n a b i l i t yo fs o f t w a r e 。p r o p o s ea na s p e c tt e s t i n gt e c h n i q u e ,w h i c hu s e sm o c kc l a s sf o ra s p e c tt e s t i n g t h i st e c h n i q u e e n s u r e st h ev a l i d i t ya n di n t e g r a l i t yo ft h ea s p e c tw h i c hu s e df o rr o b u s t n e s st e s t i n ga n de n s u r et h e q u a l i t yo fr o b u s t n e s st e s t i n gb a s e do na o pr a d i c a l l y 。p r o p o s ea l le x t e n d e dr o b u s t n e s st e s t i n gf r a m e w o r kb a s e do na o p , w h i c hc o n t a i n st h ef u n c t i o n s o fr o b u s t n e s st e s t i n ga n da s p e c tt e s t i n g i t sab r a n d n e wr o b u s t n e s st e s t i n gf r a m e w o r k e a r t f n o to n l yi m p l e m e n t st h eb a s i cf u n c t i o n sa se x i s t i n gr o b u s t n e s st e s t i n gw h i c hd e p e n do nf a u l t i n j e c t i o n ,b u ta l s oh a st h es t r o n g p o i n to fi m p r o v i n gt h eu n d e r s t a n d a b i l i t ya n dm a i n t a i n a b i l i t yo f s o f t w a r e 。f u r t h e r m o r e ,t h eu s eo ft h ea b s t r a c tr o b u s t n e s st e s t i n ga s p e c tm a k et h ef r a m e w o r ke a s y | ob ec o n f i g u r e da n de x t e n d e d k e yw o r d s :a o p , a s p e c to r i e n t e dp r o g r a m m i n g ,s o f t w a r et e s t i n g ,r o b u s t n e s st e s t i n g ,f a u l ti n j e c t i o n ,a s p e c t t e s t i n g 东南大学学位论文独创性声明 本人声明所甲交的学位论文是我个人在导9 i n l 导卜进行的研究i :作及取得的研究成果。尽我所 毛尚:j 上h j “u 加以 ,j :i i :和敛谢f f ,j 地乃外,沦义f | 彳、也禽j i 他人l 二红发农或撰。,;过的 l j 7 成泶 也1 :乜禽为获衔乃:南人。? ! :或其它教育机构的学何或“i ;而使川过的材i t ;:l 。与我。同i :1 1 的同忠刈小 6 j 究所做的任1 口j 贡献均己住论文 - - b f i :j 7 明确的说明升表示j 7 谢意。 研究生签名: 三叁堡垒 日期:型啦月n 日 东南大学学位论文使用授权声明 尔南人学、中国科学技术信息研究所、国家幽is 馆有权保留本人所送交学佗论文的复i :p , f l 币| 也 j 二艾梢,u j 。以采川影印、缩印或其他复制手段保存论文。本入电子文档的内容利纸质论文的内弈相 一致。除在保密期内的保密论文外,允许论文被究阅和借阅,可以公布( 包括刊登) 论文的全部或 部分内容。论文的公布( 包括刊登) 授权东南人学研究生院办理。 研究生签名:_ 哟 导师签名:日 期:2 ? 年碉弦日 第一章绪论 1 1 选题依据 第一章绪论弟一早珀下匕 软f , :测试是为了发现软件中存在的错误而分析或执行程序的过程。具体地说,软件测试是分析 程序或根据软件开发各阶段的规格说明和各程序的内部结构而精心设计出批测试用例,并利用测 试用例来运行程序,以发现程序错误的过程。软件测试的重要性毋庸置疑,它是保证软件质量的一 种很重要的途径i l 。j 。 软件的健壮性是指软件在无效输入或异常环境下能够正常工作的程度,也可理解为被测软件的 性能行为在异常或极端条件之下的可接受程度 4 1 。健壮性测试( r o b u s t n e s st e s t i n g ) 又称作容错性测 试( f a u l tt o l e r a n c et e s t i n g ) ,是系统测试的一种,主要用于测试系统在出现故障时,是否能够自动 恢复或者忽略故障继续运行【5 j 。许多系统的路径非常复杂,并且错误难以触发。在这种情况下,对 系统容错行为的测试就变得非常困难。通常,健壮性测试采用的方法是软件故障插入测试( s o f t w a r e f a u l ti n s e r t i o nt e s t i n g ,s f i t ) ,该技术模拟在程序代码的特定位置出现故障并且观察系统的行为f 5 l 。 面向方面程序设计( 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 ) 7 1 是一种新的程序设计范型,旨在模 块化横切关注。它通过引入连接点( j o i np o i n t ) 、切点( p o i n t c u t ) 、通知( a d v i c e ) 、类型间声明( i n t r o d u c e ) 和方面( a s p e c t ) 等新的概念来建立一种表达和封装横切关注的机制。大量研究表明a o p 能够有效 封装横切关注,提高系统质量。 在面向对象系统中,封装,继承以及多态等特性给单元测试带来一定困难。在很多情况下,测 试代码往往散布在系统中,形成横切关注。比如,在c + + 单元测试中,测试私有函数的时候要在所 有的被测类中声明测试类为友员。鉴于a o p 可以模块化横切关注的特性,我们可利用a o p 提高测 试代码的可理解性和可维护性。利用a o p ,我们可将用于测试的代码封装于方面中,这同时提高了 产品代码和测试代码的质量。一方面,a o p 减少了产品代码的职责,使其专注于业务逻辑。这降低 了产品代码的复杂性。另一方面,a o p 通过模块化测试代码,提高了测试代码的可维护性。近年来, 越来越多的学者开始关注于基于a o p 的软件测试技术的研究,并取得了一些研究成果,使之在单元 测试、组件内建测试、多线程测试等领域均得以成功的应用【8 】,f 1 2 j 【2 叭。 综上所述,对基于a o p 的软件测试技术的研究有着极其重要的意义。一方面,它提出了一种全 新的软件测试问题的视角。将散落在面向对象代码中的测试代码作为横切关注,通过a o p 技术将其 模块化,有效地实现了测试代码和产品代码的分离。a o p 技术使用一种非入侵的方式,在不影响系 统原有代码的前提下,实现对软件系统的测试,从而有效遵循了面向对蒙编程中各功能模块低耦合 的思想。另一方面,随着软件系统复杂性的增加,高效地对其进行测试也变得更加困难。借助基于 a o p 的软件测试框架,我们可以更方便地进行基于a o p 的软件测试以及实现测试的自动化,提高 软件测试效率、降低测试实现的代价。冈此,我们可以预测,基于a o p 的软件测试技术在朱来将变 得更加高效利实用,其应用也将会更加广泛。 然而,由于目前对基于a o p 的软作测试技术的研究起步不久,因此尚存在许多有待解决的问题。 首先,对于基于a o p 的软件测试,目前的研究主要集中在单元测试上,而对作为系统测试一种的健 壮性测试则缺少有效的基t - a o p 的健壮性测试方法。其次,目前基于a o p 的软件测试技术研究, 人多是针对用a o p 技术来改进现有基于o o p 的软什测试,而对测试方面进行测试的研究很少涉及。 第三,对于基于a o p 的软件测试框架的研究还刚刚起步。尽管已有研究针对单元测试提出了基于 a o p 的软件测试框架1 8 i ,但是对于群序健壮性测试还缺少相关通用的基于a o p 的健壮性测试框架的 研究。冈此,针对以上系列问题,本文将对基于a o p 的程序健壮性测试技术和方面测试技术进行 东南大学硕:l :学位论文 研究和讨论,并对同时具备这两种技术的框架的设计进行研究。通过实例研究,演示基于a o p 的健 壮性测试框架的测试流程,指导基于a o p 的群序健壮性测试的应用与实施。 1 2 研究内容 根据国内外在基于a o p 的软件测试技术方面的研究现状,以及最新发展动态,我们拟进行用 a o p 来辅助软件测试的研究,以提高测试代码的质量、提高系统的可配制性、可扩展性等。具体而 言,本文:丁:作将分为以下几个方面: ( 1 ) 扩展的基于a o p 的健壮性测试框架 提出了扩展的基于a o p 的程序健壮性测试框架e a r t f 。现有健壮性测试领域还没有支持基于 a o p 的测试框架,且现有测试框架难以支持方面测试。本文设计一个可扩展的基于a o p 技术的软 件测试框架来支持我们的基于a o p 的健壮性测试解决方案。该框架可以进行基于a o p 的程序健壮 性测试以及方面测试。我们从具体的实际应用出发,抽取出健壮性测试中的测试方面,并考虑到一 般性,使得方面容易扩展以便用于绝大多数的健壮性测试。实例表明,该框架可以取得和传统面向 对象健壮性测试相同的测试效果,且使得测试代码易于理解和管理、降低测试的代价以及提高测试 效率。 ( 2 ) 基于a o p 的健壮性测试 提出了基于a o p 的健壮性测试方法。目前的程序健壮性测试普遍采用故障注入方式,在实际运 行过程中,产品代码可能存在多处异常情况的执行点。因而,采用这种故障注入的健壮性测试就会 导致测试代码散布于整个系统,从而造成测试代码与产品相互“缠绕”,形成横切关注。这不仅降低 了产品代码的可读性,加大了调试的难度,还使得分离测试代码变得困难。因此本文提出了基于a o p 的程序健壮性测试方法,该方法将模拟软件故障的测试代码当作横切关注,用方面对其进行封装, 并通过方面中的切点对故障注入的时机进行定义,然后,利用a o p 的编织机制将这些代码织入产品 代码。实例表明,本方法不仅提高了产品代码的可读性,还使得测试代码易于维护和重用。 ( 3 ) 方面测试 提出了使用独立的m o c k 类辅助方面测试的技术。目前已有的基于a o p 的软件测试技术的研究, 主要集中在如何利用面向方面技术的特性,解决面向对象软件测试中存在的问题,而对于测试中方 面的正确性以及完整性的研究很少涉及。本文提出使用m o c k 类的方面测试技术,来保证基于a o p 的健壮性测试中的方面的正确性以及完整性,从而在很大程度上保证了基于a o p 的健壮性测试的效 果。 1 3 论文结构 论文共七章,可分成五大部分:第一部分为第一章,是全文的概述和引言。第二部分包括第二 章,主要是关于面向方面编程技术以及该技术在软件测试中应用的相关背景知识以及研究现状的介 绍。第三部分包括第三章、第四章和第五章,该部分在第三章提出了扩展的基于a o p 的健壮性测试 框架e a r t f ,在第四章、第五章分别研究了基y - a o p 的程序健壮性测试技术以及方面测试技术。 这两项技术共同构成了e a r t f 测试框架的两个功能模块。第四部分包括第六章,主要介绍了测试框 架e a r t f 的实现。第五部分包括第七章,主要对本论文所做t 作以及所获得的成果进行总结。本文 各土要章1 7 安排如f : 第一章作为论文的引言,介绍了基于a o p 的软件测试领域的研究背景和研究意义,描述了论文 的研究内容,最后简要地介绍了论文的结构。 2 第一章绪论 第二章介绍了面向方面编程的相关概念,介绍了a o p 技术在软件测试领域应用的背景和现有的 a o p 技术在测试领域的已有应用研究,并对其中儿种典型的应用研究成果进行详细介绍。最后介绍 了国内外在这一领域的研究现状。 第三章提出了扩展的基于a o p 的程序健壮性测试框架e a r t f ,详细介绍了该框架的主要功能 模块,以及使用该框架进行测试的测试流程。 。 第四章介绍了现有健壮性测试存在的问题,分析了使用a o p 技术用于健壮性测试的合理性。提 出了基于a o p 的软件健壮性测试方法,并通过实验对该方法的使用作相应的演示。并根据实验结果 对基于a o p 的程序健壮j 眭测试方法进行评价。 第五章介绍了方面测试技术以及现有的方面测试模式。提出了使用m o c k 类来辅助方面测试的 技术,根据待测方面的特点分别设计了针对切点测试的m o c k 类和针对通知体测试的m o c k 类。最后 还设计了用于复杂方面测试的m o c k 类,该m o c k 类可以辅助对测试方面中的通知体以及切点进行测 试。 第六章介绍了扩展的基于a o p 的健壮性测试框架的设计与实现。给出了e a r t f 的详细设计, 并以开源爬虫项目w e b s p h i n x 为实验对象对框架进行验证,最后对实验结果进行分析。 第七章是对整个论文研究和实践工作的总结,综述我们在基于a o p 的软件测试研究领域获得的 成果,以及在其它相关领域所做的研究工作,并且指出我们现有工作的局限性和有待提高和改进的 方面。最后,简单阐述我们正在进行或将要进行的研究工作。 3 东南火学硕士学位论文 第二章基于a o p 的软件测试技术 利用a o p 技术进行软件测试是一个比较新的领域,它利用a o p 技术封装测试代码,来提高测 试代码的可维护性。目前a o p 技术已被应用于多个测试领域,它能够模块化横切关注的特性可以显 著降低测试成本,提高测试质量以及测试代码的可理解性。本章首先讨论了面向方面程序设计中的 基本概念、核心思想以及a o p 系统的组织原理,然后讨论了a o p 技术在软件测试领域的几点应用, 最后给出目前基于a o p 的软件测试领域的研究现状以及存在问题。 2 1 面向方面程序设计 o o p 通过封装,继承和多态能够将现实世界的真实实体及其相关行为进行抽象,形成一个从上 到下的对象结构层次,从而达到封装和重用的目的。但是当处理扩展到一些与对象无关的公共行为 的时候,o o p 就有点无能为力。以日志功能为例,图2 1 给出了o o p 系统中日志功能代码示例。 从图2 1 可知,日志功能往往会散布在整个对象层次结构中,从而造成如下两个问题: 冗余:很多相同的代码散布在整个系统的每个角落,会带来维护和修改的恶梦,比如要修改 或替换日志功能,或者增加一项新的功能将变得异常困难。 降低重用性:随着对象包括的公共行为的增加,业务处理逻辑变得混乱不清,对象的职责和 相互之间的关系也变得难以理解,可能根本无法重并j 。 p u b l i cc l a s sb u s s i n e s s a p u b l i cv o i dp r o c e s s o l o g d e b u g ( 。s t a r tp r o c e s s i n g ) ; 处理业钌逻辑 l o g d e b u g c e n dp r o c e s s i n g ) ; ) p u b l i cc l a s sb u s s i n e s s b p u b l i cv o i dp r o c e s s o l o g d e b u g c s t a r tp r o c e s s i n g ) ; 处理业务逻辑 、l o g d e b u g ( “e n dp r o c e s s i n g ) ; ) j 图2 1o o p 系统中日志功能代码示例 面向方面编程主要意图是分散关注点,也就是将通用的功能如日志记录、权限检商、事务处理 等从业务类中分离出来,将影响多个业务类的行为封装到一个独立的模块中。通过隔离通用功能和 真实的业务处理,业务类和通用功能实现各自的核心逻辑,彼此不需要互相了解,两个部分都相对 简单,职责单一,同时也减少了冗余,增加了重用性。a o p 的核心思想就是将应用程序中的业务逻 辑处理部分同对其提供支持的通用服务,即所谓的“横切关注点”进行分离,这些“横切关注点” 贯穿了程序中的多个纵向模块。下面将给出图2 1 所示日志冗余问题的a o p 解决方案,在此之前先 介绍a o p 相关的基本概念”1 : ( 1 ) 关注( c o l l c c i t i ) :一个关注可以是一个特定的问题、概念、或是戍刖程序的兴趣区间。关注 是应刚程序必须达到的一个目标,日志、安全性,事务管理、性能要求、用户管理、角色 管理、角色授权管理等等,都是系统中常见的“关注”。在一个0 0 的应用稃序中,关注可 能已经被代码模块化了,也可能还散落在整个对象模型之中。实际上,“关注”不是a o p 独有的概念,廊该是廊川程序都有的个概念,它有些类似于面向对象的u m l 图中“州例”。 4 第二章基于a o p 的软件测试技术 ( 2 ) 横切关 注( c r o s s c u t t i n gc o n c e l t l ) :如果一个关注的实现代码散落在很多个类或方法之中( 如: 日志、安全性检查) ,我们就称之为“横切关注”。如果用o o p 实现横切关注,那么必然 会造成多处重复调用相同的代码。如果我们使用a o p 实现横切关注,就可以让业务类中 不必进行任何代码调用。 ( 3 ) 方面( a s p e c t ) :一个方面是对一个横切关注的模块化,它将那些本来散落在各处的、用于 实现该横切关注的代码规整到一处。它一般包括两个模块:封装服务代码的模块和指定该 服务为哪些业务类的哪些方法服务的模块,即通知和切点。 ( 4 ) 连接点0 0 i np o i n t ) :程序执行过程中的一点。如: i 方法调用( m e t h o di n v o c a t i o n ) :对方法( 可能包括构造器) 的调用,这是最重要、最常 用的连接点。方法是一个抽象,我们可以利用方法这一层抽象,任意的修改方法内的 实现代码。代码中应该是大量存在方法连接点的,即使没有,我们也可以在应用a o p 编程时重构,正如面向对象编程技术中所说的,重构的一大手段和目标就是构造大量 的方法1 4 引。因此,我们可以在需要拦截的地方重构出一个方法,作为连接点。 i i 字段访f 口- ( f i e l da c c e s s ) :读或者写实例变量。并非所有的a o p 框架都支持对字段访问 的通知。例如a s p e c t j 支持字段拦截,而s p r i n g a o p 和j b o s s a o p 都不支持字段拦截。 字段拦截是一种潜在的危险,它违反了o o 的封装原则。o o 程序中对字段的访问,可 以用s e t g e t 属性这样的方法调用来代替。a o p 对字段的拦截,通常也可以通过方法层 面的通知来代替,从而保持对象的封装。 i i i 异常抛出( t h r o w s ) :特定的异常被抛出。实际上,异常抛出连接点,是方法调用连接点 的衍生品。能够拦截方法,那么一定能够拦截抛出的异常。 ( 5 ) 通知( a d v i c e ) :通知是在特定的连接点执行的动作。通知的例子包括:在允许执行连接点 之前,检查安全凭证。如s p r i n g 框架的一个附属开源项目a c e g i ,就是这样一个使用s p r i n g a o p 拦截方法访问的项目。在执行某个方法连接点之前开启事务,在连接点执行完毕后提 交或者同滚事务。s p r i n ga o p 框架提供了这个功能。 ( 6 ) 切入点( p o i n t c u t ) :一组连接点的总称,用于 指定某个通知应该在何时被调用。切入点常用正 则表达式或别的通配符语法来描述。有些a o p 实现技术如a s p e c t j ,还支持切入点的组合。切 入点加上通知,就是一个完整的方面,可以实现 横切关注。 ( 7 ) 引入( i n t r o d u c t i o n ) :为一个现有的类或接口 添加方法或字段。这种技术用于实现j a v a 多重 继承,或者给现有的对象模型附加新的a p i 。譬 如说,可以通过引入让一个现有的对象实现一个 接口。 p u b l i cc l a s sb u s s i n e s s a p u b l i cv o i dp r o c e s s o ,处理业务逻辑 ) p u b l i cc l a s sb u s s i n e s s 斟 p u b l i cv o i dp r o c e s s o ) 处理业务逻辑 j 图2 - 2 移除日志记录功能后的业务类 在了解了面向方面编程中的基本概念的基础之上,我们给出图2 1 所示面向对象系统的业务类 中日志代码冗余问题的a o p 解决方案,图2 2 展示了移除了日志功能之后的业务类代码。图2 3 展 示了往业务类添加日志记录功能的方面: 5 东南人学硕上学位论文 p u b l i ca s p e c tl o g a s p e c t p r i v a t es t a t i cl o gl o g = l o g f a c t o r y g e t l o g ( l o g a s p e c t c l a s s ) ; p u b l i cl o g a s p e c t ( ) l o g i n f o ( ”c r e a t el o g a s p e c ti n s t a n c e “) ; p o i n t c u ti o g m e t h o d ( t e s t b e a nb e a n ) :e x e c u t i o n ( * t e s t b e a n b u s s i n e s s * ( ) ) & & t h i s ( b e a n ) & & ! w i t h i n ( l o g a s p e c t + ) ; b e f o r e ( - r e s t b e a nb e a n ) :l o g m e t h o d ( b e a n ) l o g i n f o ( “j o i n p o i n t :”+ t h i s j o i n p o i n t s t a t l c p a r t + ”n t a s p e c t :”+ t h i s + ”n t o b j e c t :“+ b e a n ) ; ) a f t e r ( t e s t b e a nb e a n ) :l o g m e t h o d ( b e a n ) l o g i n f o ( 。j o i n p o i n t :。+ t h i s j o i n p o i n t s t a t i c p a r t + “州a s p e = :。+ t h i s + “、几t o b j e c t :”+ b e a n ) ; ) 图2 3 日志方面 图2 2 所示的业务类和图2 3 所示的封装日志记录功能的方面是相互独立组件,这些组件在不进 行交互的情况下是不能够实现在业务方法执行过程中进行日志记录的,它们必须通过协作和交互才 能实现业务需求。实际上,o o p 的业务类通过直接调用日志类的方法实现日志功能,而a o p 只是 将这种调用通过声明或配置的方法剥离出来,其处理的基本过程包括方面描述和方面编译运行。 ( 1 ) 方面描述 a o p 的核心是切入点、通知和类型间声明的概念。方面描述指定需要某公共行为( 如日志功能) 的对象的某个关注点( 可能是该对象内的一个方法) ,以及相应的处理方法,即方面描述指定切 入点和通知。有两种方式描述关注点及其行为。 动态横切:是通过切入点和连接点在一个方面中创建行为的过程。切入点相当于事件源, 通知只是当事件触发时需要执行的处理程序。实际动态横切主要只有两个任务:( 1 ) 描述 需要通片j 功能的点,( 2 ) 描述执行到这点时需要执行的代码。运行时环境就会在执行到指 定点的时候,通知事件处理程序,执行相应的代码。 静态横切:与动态横切不同的是,它不改变一个给定对象的执行行为,而是通过添加额 外的属性字段和方法改变已有对象的基本结构。 ( 2 ) 方面编译和运行 正如有不同的机制编译和执行o o p 程序,a o p 通过方面编织器采用几种不同的机制编译和执 行a o p 程序。编织发生在应用程序生命周期的阶段,会对程序的性能和可伸缩性造成影响。编织 器可以接受源码和二进制作为输入。 构建时编译时将通知的执行代码编织到切入点部分。如果o o p 编译器扩展剑a o p 编译器,方面编织就是标准编译的一部分。目前的a o p 的实现技术之一的a s p e c t ,其 编译器就是一个成熟的方面编译器。 装入时一在类装载时将通知的执行代码编织到切入点部分。 运行时一一通过拦截和动态代理机制在运行时,匹配切入点,决定调用通知执行代码的 时机。 构建时编织会增加编泽的时间和资源开销,但是运行时性能几乎不受影响。装入和运行时编织 需要在运行时做更多的j :作,不同的a o p 实现会采川不同的编织机制,具体选择要根据具体应 j 来 定。 6 第二章基于a o p 的软件测试技术 2 2a o p 技术在软件测试中的应用 利用a o p 技术进行测试是一个比较新的领域,目前已有的研究土要集中在如下四个方面:( 1 ) 利用a o p 技术对当前的单元测试进行改进和补充。( 2 ) 利用a o p 技术中的方面来开发组件的内建测 试,它是针对组件内建测试容易造成多个组件间存在冗余代码而提出的一种解决方法。r 3 ) 在多线程 测试中引入a o p 技术,协助已有的多线程测试技术找到更多的软件缺陷。( 4 ) 基于a o p 的测试框架 研究,主要是在对单元测试进行研究的基础上,发现o o p 单元测试框架存在的不足,而这些不足用 a o p 技术可以很好的解决,在此基础上产生了基于a o p 的单元测试框架。 2 2 1 单元测试 单元测试在面向对象软件开发中有着至关重要的作用,它通常采用和待测的软件系统使用相同 的编程语言来编写。现有的基于面向对象技术的单元测试由于自身的局限以及面向对象软件封装和 继承的特性,导致在对面向对象软件进行测试时存在一些难以解决的问题。有些关注不能用面向对 象的思想进行很好的封装,典型的例子有日志、安全和同步。比如即使将日志服务器实现为一个类, 但用于支持日志记录的客户代码必须出现在需要日志记录的所有类中。在这种情况下,日志记录功 能代码散落在系统的多个模块,因而与系统紧密的耦合在一起。这有悖于面向对象编程中各功能模 块低耦合的思想。我们将软件系统中同时具有散落和缠绕特性的关注称作横切关注。 面向对象编程( a o p ) 是一种新的编程惯例,它是对面向对象编程的一种扩展而不是取代。a o p 对上面的问题提供了很好的解决方案:我们用面向方面提供的方面来封装横切关注,并用方面编织 器( w e a v e r ) 将方面编织到软件的业务逻辑当中。面向方面编程使用一种非入侵的方式,在不影响系统 原有代码的基础上将一个新的功能加入到已有的系统实现当中。方面中封装了类似于方法且被称作 通知体的代码段。该代码段的内容将被编织到已有系统中相应的程序执行点,该执行点在方面中被 定义为切点,它是一系列连接点的集合。通知体的内容可以在捕获的切点代码执行之前或之后再执 行,也可以取代切点处代码的执行。 在使用面向方面编程技术测试面向对象软件系统的时候,将测试代码看作是横切关注,方面用 来封装测试代码来更方便的辅助测试。 使用a o p 技术辅助测试的思想是基于以下情形而提出的: 在某些情况下,测试代码必须拥有对实例变量进行访问的权限来初始化和评估测试用例; 测试代码需要以相似的方式注入到多个方法和类中; 在单元测试结束后,测试代码需要从源代码中移除; f l e x t e s t 是d c h l as o k e n o ua n dm a t t h i a sv o s g e n 提出的测试面向对象软件系统的基丁二a o p 的单元 测试框梨引,它包含面向对象和面向方面两个部分。面向对象部分和j u n i t 单元测试框架类似,提供 定义测试用例和用例集的类以及测试执行的功能,如图2 4 f l e x t e s t 框架的类层次结构图所示。面向方 面部分使用a o p 技术支持附加功能如图2 5 f l e x t e s t 框架的方面层次结构图所示。使用f l e x t e s t 框架 进行测试的时候,必须编写继承自t e s t c a s e 的类以及继承自t e s t a s p e c t 的测试方面。每一个t e s t c a s e 的子类都要有t e s t a s p e c t 的子方面与之对应。 7 东南大学硕上学位论文 t c s t s u p e r v i s o r , q 1 1 e s t s u i t c 。 ? r e s t c a s e ; 移 l t c n e n h t ,一 蔓互三习 医垂习医垂习 图2 4f l e x t e s t 框架的类层次结构图图2 5f l e x t e s t 框架的方面层次结构图 在面向对象软件系统中,属性和方法封装在类中。封装性是面向对象软件系统的特点之一,对 类的所有访问都必须通过接口进行。在测试中,基于封装性的要求,待测类被当作一个黑盒子,我 们无法看到它的内部状态,从而导致因缺乏准确的测试o r a c l e 而不能对待测系统( i m p l e m e n t a t i o n u n d e rt e s t ,i l l n 进行充分的测试。同时也无法对私有方法进行测试。由封装性所带来的测试问题可 以通过基于a o p 的单元测试框架f l e x t e s t 来解决。a s p e c t l 是f l e x t e s t 测试框架所使用的面向方面 语言,该语言提供的关键字p r i v i l e g e d 使得测试方面可以像访问公有数据域和方法那样对与之对应的 待测类的私有域和私有有方法进行访问,同时不破坏待测类的封装性。 使用f l e x t e s t 框架,测试人员需要定义t e s t a s p e c t 的子方面并激活。具体的过程如下: 1 对于每一个待测类,测试人员需要定义一个测试类以及一个协助测试类的测试方面。该测试 方面继承自抽象测试方面t e s t a s p e c t ,并且覆写抽象测试方面中的抽象切点i n i t m e 。图2 6 是测试方面 t e s t v e c t o r d o u b l e 4 a s p e c t 的代码片段,它用于协助测试类t e s t v e c t o r d o u b l e 4 进行测试。测试方面因 为声明为p r i v i l e g e d ,因而对与其相应的测试类以及待测类的私有域和私有方法有特殊的访问特权。 lp u b l i cp r i v i l e g e da s p e c tt e s t v e c t o r d o u b l e 4 a s p e c te ) c t e n d st e s t a s p e c t p u b l i cp o i n t c u ti n i t m e 0 :w i t h i n ( - i e s t v e c t o r d o u b l e 4 ) ; 【】 图2 6 测试方面a s p e c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025辽宁沈阳地铁集团有限公司所属公司拟聘用人员模拟试卷及答案详解(网校专用)
- 2025湖北荆州市石首市第二批校园招聘教师6人考前自测高频考点模拟试题及一套参考答案详解
- 安全培训教师基本条件课件
- 2025年威海火炬高技术产业开发区公开招聘教师(第二批)(61人)考前自测高频考点模拟试题及答案详解一套
- 2025年锂电池配套试剂项目建议书
- 广昌消防安全培训课件
- 2025江西赣南医科大学高层次人才招聘180人模拟试卷及答案详解(全优)
- 小学安全专项培训反思课件
- 2025年高通量试验反应堆及配套产品合作协议书
- Indene-d3-生命科学试剂-MCE
- 耕地占用税培训课件
- 110kV变电站及110kV输电线路运维投标技术方案
- LS 8010-2014植物油库设计规范
- FZ/T 73001-2016袜子
- 发展心肺耐力与改善身体成分 课件 【新教材同步备课精研】高中体育与健康人教版必修第一册
- 组织行为学核心主题全系列(MBA研修班学生版4日)课件
- 桥梁基础工程施工
- 始祖鸟新员工基础知识考试(NEW)试题含答案
- 渣浆泵基础知识课件
- 布赫液压样本
- 防错验证报告
评论
0/150
提交评论