- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
面向方面程序设计的缺陷分析书
劳阳辉1,2施霖2
l昆明理工大学信息工程与自动化学院,云南省昆明市65005l
2云南省计算机技术应用重点实验室,云南省昆明市650051
摘 要:面向方面程序设计(Aspect—oriented
程序设计、面向过程程序设计不同的特性以及AoP特有的缺陷类型。本文对面向方面程序设计的缺陷
进行了详细分析和归纳,以便进一步研究面向方面程序的测试。
关键词:面向方面程序设计缺陷织入
——L
口
在处理复杂问题时,传统的软件开发把横切关注点(crosscuttingconcem)的实现放在核心关注点(core
序设计和面向过程程序设计的补充,实现了从核心关注点中分离横切关注点并且模块化横切关注点。织入
器(weaVer)把对横切关注点编程的方面代码和对核心关注点编程的原始代码(or磷nalsource)编织在一起,形
成最终的代码,大幅度提高了软件的模块化程度,很好地解决了代码的散乱和杂糅问题,使程序易于理解、
易于扩展。由于方面的实现依赖于原始代码,随原始代码执行时上下文的改变而改变,并且有些切入点是
在程序运行时确定,织入过程是在程序运行时执行,导致数据流和控制流的结构、程序的依赖性以及程序
的静态类间结构不明确,而且暴露由这些特点引发的缺陷是很困难的。面向方面程序设计和其它程序设计
语言一样,本身不能保证程序员不犯错误,也不提供正确性验证,因此带来了一些不同于传统软件开发的
缺陷,对面向方面程序设计以及测试提出了挑战。虽然测试AOP的方法层出不穷,但是仍缺乏成熟的测试
方法。目前的测试方法主要有三种思路:一、在传统测试方法的基础上进行AOP测试…;二、利用AOP能
被织入代码中,并获得连接点上下文的特点测试AOPl21;三、测试方面代码被织入原始代码后的织入后代
码pJ。其中第一种思路的研究占主要的地位。为了提高软件测试的效率和质量,实现在程序中有针对性地
找一些缺陷,根据其产生的根源,把AoP中可能的缺陷大致分为三类:在原始代码中的缺陷、在方面代码
中的缺陷、在编织器中的缺陷。
本文用Aspecu来说明AoP的缺陷。下面分别介绍这些AOP缺陷。
2在原始代码中的缺陷
原始代码是指面向方面程序设计中用面向过程或面向对象语言编写的代码。出现在原始代码中的缺陷
和传统软件开发中的缺陷相同。面向过程语言是结构化的语言,出现的缺陷是我们熟悉的,如变量名和函
数名在定义时不符合命名规则;在函数调用时,参数传递的类型不匹配等。面向对象语言不同于面向过程
语言,具有封装、继承和多态等机制,产生一些面向过程语言编程不具有的缺陷。如状态定义异常(state
definition
anomaly)、类型使用不一致(inconsistemtypeuse)、由状态变量隐藏引起的状态定义不一致等。
‘作者简介:劳阳辉(1978一),女,硕士研究生,研究方向为软件工程;施霖,副教授、研究生导师
3在方面代码中的缺陷
方面代码被织入到原始代码中,改变原始代码中对象的行为和静态类型层次结构,因此方面代码的缺
陷将会对原始代码的执行产生很大影响。由于方面的本质是横切,AOP中分为动态横切和静态横切,因此
根据缺陷根源,从横切的角度分类方面代码中的缺陷为:与动态横切相关的缺陷——“连接点位置描述中
的缺陷”和“连接点执行代码中的缺陷”,与静态横切相关的缺陷——“类型间声明中的缺陷”。
3.1连接点位置描述中的缺陷
这类缺陷是描述织入方面代码的连接点时产生的。它匹配了错误的连接点,使正确的advice代码在错
误的程序执行点处被执行。下面具体叙述这类主要的缺陷。
(1)错误的原始切入点(primitiVe
错误是由选用错误的切入点类型产生的,如下面claSsA.java和ClassB.java代码:
ClaSsA.jaVa:
claSs
public ClaSsA{
publicintj;
Voidtest(){……}
public
staticVoid
原创力文档


文档评论(0)