没有合适的资源?快使用搜索试试~ 我知道了~
可在www.sciencedirect.com上在线ScienceDirect电气系统与信息技术杂志5(2018)562面向方面的程序:问题和前景SK. Riazur Rahemana,Mr. Hima Bindu Maringantib, Amiya Kumar Rathc博士学位印度奥里萨邦奥里萨邦大学计算机科学与信息技术学者,邮编:757003b系&主任,教授北奥里萨邦大学计算机应用系,地址:印度奥里萨邦巴里帕达,邮编:757003c系教授印度奥里萨邦Burla 768018 VSSUT计算机科学工程学院接收日期:2017年2月2日;接受日期:2017年在线提供2018年摘要面向方面编程(AOP)帮助程序员分离横切关注点。所有的编程方法都支持关注点的拆分和封装在面向对象编程(OOP)中,横切方面分布在对象之间。在面向对象程序设计中,横切问题分散在不同的对象中,难以实现。在AOP中,横切关注点使用一个称为方面的实体来本文讨论了现有的各种AOP切片技术此外,我们还讨论了一种新的方法来计算AOP的动态切片采用面向方面的系统依赖图(AOSDG)表示AOP。这种新方法的复杂性与某些现行方法相当或有所改进。© 2018 电 子 研 究 所 ( ERI ) 。 Elsevier B. V. 制 作 和 托 管 这 是 CC BY-NC-ND 许 可 证 下 的 开 放 获 取 文 章(http://creativecommons.org/licenses/by-nc-nd/4.0/)。关键词:方面; AOP;切片;横切; AOSDG1. 介绍程序切片是Weiser在1979年提出的一种分解过程(Tip,1995;Weiser,1984;Horwitz例如,1990;Sahu和Mohapatra,2009;Raheman等人,2013;Raheman等人,2011年)。切片是从程序语句中提取的,这些语句干扰了在某个点计算的值,该点称为切片条件。切片条件由的动态切片为:{1,2,14,15,16,5,6,8,5,6,8,5,6,7,17,18}。切片在图中标记为粗体节点。3.第三章。568Sk.R. Raheman等人/电气系统与信息技术杂志5(2018)562图三. DADG的执行轨迹的程序中给出的图。1.一、在并行面向方面程序的情况下,Ray等人(2013)也提出了一种计算动态切片的方法。该方法采用并发面向方面系统依赖图(CASDG)表示AOP. 该方法的核心是在运行时对CASDG中的执行节点进行标记和取消标记Sahu和Mohapatra(2007)提出了一种用于AOP动态切片的节点标记方法。他们使用扩展的面向方面系统依赖图(EASDG)来表示AOP。该方法的核心是在运行时适当地标记和取消标记EASDG中的执行节点。3.2. 动机Zhao(Zhao,2002;ZhaoandRinard,2003)建议将ASDG作为AOP的中间表示在这个ASDG中,关于处理切入点的想法没有适当地给出Zhao和Rinard(2003)提出了一种方法Sk.R. Raheman等人/电气系统与信息技术杂志5(2018)562569∈见图4。图中给出的程序的非方面代码的CFG。1.一、为AOP创建SDG。这种方法为正确处理概念切入点提供了一种有效的方法。缺点是本SDG中未正确处理编织程序。Mohapatra等人(2008)提出了一种有效的AOP动态切片方法。建议的工作集中在跟踪文件上。这种方法的缺点是,它存储了执行过程中语句的每一次发生如果一个循环完成N次迭代,那么它将生成N个节点,因此它是一个繁琐的工作。Mund和Mall(2002)提出了一种有效的算法来捕获过程调用产生的依赖该算法的缺点是作者只使用控件依赖来处理语句之间的依赖此外,该算法是专门为结构化程序设计的。Sahu和Mohapatra(2007)提出了一种高效的节点标记动态切片(NMDS)算法。在这种方法中,作者不使用跟踪文件,并且在运行时不会创建额外的节点。本文提出用面向方面的系统依赖图(AOSDG)来表示AOP.此外,我们还提出了一种计算AOP动态切片的方法。这个AOSDG表示AOP的所有特性。AOSDG的创建分为两个阶段:为非方面和方面代码创建SDG,4. 基本概念本文介绍了面向方面编程的一些基本概念和术语,并给出了面向方面编程的中间程序表示.定义1(非方面代码的控制流程图)CFG是一个流图G =(N,E,Start,Stop)。N表示节点的数量,E表示边的数量如果存在从节点P到节点Q的控制流,则(P,Q)E。开始和停止节点分别没有任何祖先和后代(Danicic等人,2011;Horwitz等人,1990;Mund等人,2003;MundandMall,2006)。图4表示图4中给出的AOP的非方面代码的CFG。1.一、570Sk.R. Raheman等人/电气系统与信息技术杂志5(2018)562∈图五.图中给出的程序的方面代码的CFG。1.一、定义2(方面代码的控制流程图)方面代码的CFG是流图G =(V,E,Point-cut,Advice)。V表示AOP中语句的数量如果存在从节点P到节点Q的控制流,则(P,Q)E。切入点和建议表示程序P中的切入点和建议(Raheman等人,2014;Liang等人,2006年)。图5表示图5中给出的AOP的方面代码的CFG。1.一、定义3(C节点)C节点保持不同编织点之间的逻辑连接性(Xu等人,2005; Ray等人, 2012年)。它并不表示程序中的任何特定语句。C节点捕获非方面和方面代码之间的依赖关系。由于它没有映射到程序的任何特定语句,我们将C节点称为虚拟节点或逻辑节点。定义4(面向方面的系统依赖图(AOSDG)的AOP的AOSDG是通过连接非方面代码和方面代码的CFG得到的逻辑C节点揭示了非方面和方面代码在适当的连接点上的链接。AOP的AOSDG包含数据依赖、编织弧、控制依赖、控制流、参数输入或参数输出边缘(Horwitzet al.,1990;Liang和Harrold,1998; Zhao和Rinard,2003; Raheman等人,2014; Liang等人, 2006年)。 图 6代表图中给出的AOP的AOSDG。1.一、定义5(控制依赖性)控制依赖表示语句执行的条件(Danicic等人,2011; Tip,1995; Mund等人,2003; Mund和Mall,2006;Raheman等人,2014; Ishio等人,2003年b)。 假设G是一个AOSDG,M是一个测试节点。节点N是依赖于节点M的控制,如果:1. 存在从M到N的有向路径S2. N柱支配每个X!= M在S中。3. M不是后支配的N。Sk.R. Raheman等人/电气系统与信息技术杂志5(2018)5625711开始a1-inf1-in5f5-in6151622-14141718A2-87f2-inf6-in2192033-191910222311132612254244-2428f7-in27端a3-ina4-inf3-inf4-in切入点:建议:C节控制流程:数据流:编织弧:参数输入/输出:见图6。AOSDG的程序在图。1.一、定义6(数据依赖性)语句之间的数据流给出了数据依赖性(Tip,1995; Mund等人,2003; Raheman等人,2014;Ishio等人,2003年b)。节点P是依赖于节点Q的数据,如果:1. Q是Def(var)节点2. P是Use(var)节点3. 存在从P到Q的有向路径S,并且在S中没有var的定义7(Def(var))如果N是描述变量x的定义语句,则AOSDG中的节点N是Def(x)节点(Mund和Mall,2002,2006;Mohapatra等人,2004;Ray等人, 2012年)。定义8(使用(var))如果语句N使用变量x的值,则AOSDG中的节点N是Use(x)节点(Mund和Mall,2002,2006;Ray等人,2012年)。572Sk.R. Raheman等人/电气系统与信息技术杂志5(2018)562----关于我们--- ---定义9(DefVarSet(u))设P是一个程序,U是程序P的AOSDG中的一个节点DefVarSet(U)={x:x是程序P中的变量,并且U是Def(x)节点}(Mund和Mall,2002,2006;Ray等人,2012年)。定义10(VVar Set(u))设P是一个程序,U是程序P的AOSDG中的一个节点* VarSet(U)={x:x是程序P中的变量,U是Use(x)节点}(Mund和Mall,2002,2006;Ray等人,2012年)。定义11(主动控制切片)在AOP中,N是AOSDG中的测试节点。Var Set(s)= var 1,. . . ,var k.初始化ActiveControlSlice = 0。在程序P的实际运行中,ActiveControlSlice(s)= s U ActiveDataSlice(var1)U。. . U ActiveDataSlice(var k)U ActiveControlSlice(t),其中t是AOSDG中N的刚执行的后继节点(Mund and Mall,2006)。定义12(活动数据切片(var))在AOP中,P是变量,Q是AOSDG中的测试节点。初始时,ActiveDataSlice(P)= 0。使用- VarSet(U)= var 1,. . . 瓦尔河在AOP执行结束时,ActiveDataSlice(var)= U U ActiveDataSlice(var1)联合. . U ActiveDataSlice(var k)U ActiveControlSlice(t),其中t是AOSDG中Q的刚执行的后继节点(MundandMall,2006)。定义13(DyanSlice(s,var))假设在AOP中,P是AOSDG中的测试节点,Q是DefVarSet(n)U VarSet(s)中的变量。初始时,DyanSlice(P,Q)= 0。在AOP的执行结束时,动态切片,DyanSlice(P,Q)= ActiveDataSlice(P)UActiveCallSlice U ActiveControlSlice(t),其中t是AOSDG中N的最近执行的后继节点(MundandMall,2006)。定义14(方面调用切片)初始时,A_callSlice = A。在实现期间,U_active表示活动呼叫节点。A_Active CallSlice = U_active U_ActiveCallSlice U_Active BeforeAdvice U_ActiveControlSlice(t),其中t是AOSDG中U_active的最近执行的后继节点(Mund和Mall,2002;Ray等人,2012年)。定义15(调用切片堆栈)设G是AOP的AOSDG在实现期间,计算呼叫节点并将其推送到CallSliceS- tack(Mund和Mall,2006)。i. 使用ApplyCallSlice来计算适当的运行时信息,以确认N的实现ii. pop CallSliceStack的第一个元素,并通知AblockCallSlice作为更新堆栈的最顶层元素定义16(方面返回切片)设P是一个AOP,G是程序P的AOSDG。设N为返回节点,并且n_VarSet(n)= var1,. . . ,vark.在RETURN节点N的实现过程中,ANORTH ReturnSlice = N U ANORTH CallSlice U ANORTH AfterAdvice UActiveDataSlice(var 1)U。. . U ActiveDataSlice(vark)U ActiveControlSlice(t),其中t是G中N的刚执行的后继节点。Sk.R. Raheman等人/电气系统与信息技术杂志5(2018)562573∈i. 使用ApplyReturnSlice计算相关的运行时信息,确认N的实现ii. 更新ANORTH CallSlice = ANORTH。5. 该算法较小的切片更适合应用。因此,每种算法的目标都是计算出尺寸非常小的切片阶段1:构造静态图AOSDGa. 启动和停止将是两个特殊的节点。b. 为每个语句创建一个节点X。c. 对于程序P中的每个节点X和Y,如果控制流从节点X到节点Y,则添加edge(X,Y)。d. 对于程序P中的每个节点X,为var的每个定义u添加数据依赖边(u,X)e. 对于每个测试节点u和u范围内的节点X,添加控制依赖边(u,X)。阶段2:初始化a. 对于每个测试节点u,Set(ActiveControlSlice(u))=0b. Set(DyanSlice(u,var))=对于每个变量var DefVarSet(u)和var VarSet(u)都是0c. SetActiveDataSlice(var)= 0.d. 设置CallSliceStack = NULL。e. 设置A/C CallSlice = A/C。f. 设置ActiveControlSlice = 0。g. Set ActiveDataSlice(obj,var)=0,如果var是对象的相应类的数据成员阶段3:运行时更新使用某些输入值执行程序P,并根据条件重复步骤a、b和c,直到程序终止a设Q是一个过程,u是对Q的调用节点,在实现每个调用节点之前做以下操作:i. 更新CallSliceStack和AblogCallSlice。ii. 更新测试节点u的ActiveControlSlice。iii. 更新ActiveDataSlice。iv. Set ActiveDataSlice(Formal(u,var))= ActiveDataSlice(Var)U主动调用Slice。b在实现每个返回节点u之前更新ANORTH ReturnSlice。对P的每个节点u都这样做。i 更新ActiveDataSlice(Var)。ii 执行ActiveDataSlice(Actual(u,var))= ActiveDataSlice(var)。1. UpdateActiveDataSlice(var)= A/A返回Slice,其中u是已定义的变量。2. 如果var在过程Q中声明为automatic,则执行ActiveDataSlice =03. 更新测试节点的ActiveControlSlice。4. 为每个数据变量更新ActiveDataSlice。5. 更新CallSliceStack和AblogCallSlice。6. 设置A/D ReturnSlice = A/D。7. 更新DyanSlice(u,var),对于所有的变量∈DefVarSet(u)U <$VarSet(u)。d出口574Sk.R. Raheman等人/电气系统与信息技术杂志5(2018)562- -----关于我们- -------- -- -{}- -----关于我们- ---- -5.1. 分析结果让使用所提出的算法,得到的动态切片如下:{1,2,5,6,7,8,14,15、16、17、18}。节点在图中也被标记为粗体。 六、在执行节点2调用调用切片= 2 U 14,15,16 U 1= 1,2,14,15,16CallSliceStack = 1,2,14,15,16ActiveDataSlice = 2执行节点5ActiveDataSlice(var)={ 5} U ActiveDataSlice(var)U ActiveControlSlice(t)={ 5} U{ 2} U{ 2}={ 2,5}执行节点6ActiveDataSlice(var)= 6 U ActiveDataSlice(var)U ActiveControlSlice(t)= 6 U 2,5 U5乐队= 2,5,6ActiveControlSlice = 1,2,5,6平均调用切片= 14,15,16DynamicSlice(6,var)= ActiveDataSlice(var)U ActiveControlSlice(t)U AidingCallSlice U ActiveReturnSlice[2019- 05 - 25][2019 - 05 - 05][2019 - 05 - 05][2019- 05 - 05][2019 - 05 - 15]执行节点7ActiveReturnSlice ={ 7} U DynamicSlice U主动调用Slice[2019 - 05 - 17][2019 - 05 - 17][2019 - 05 - 17][2019- 05 - 05][2019 - 05 - 25]【2019 - 05 - 25 00:01:00】在执行节点8自动调用切片={ 8} U{ 14,15,16} U{ 6}[2019 - 06 - 15]执行节点8自动调用切片={ 8} U{ 14,15,16} U{ 6}[2019 - 06 - 15]CallSliceStack ={ 1,2,5,6,7,8}ActiveDataSlice ={ 8} U ActiveDataSlice(var)U ActiveControlSlice(t)={ 8} U{ 2,5,6} U{ 6}={ 2,5,6,8}ActiveReturnSlice ={ 8} U DynamicSlice U主动调用Slice[2019 - 04 - 18][2019 - 04 - 18][2019 - 04 - 18][2019 - 04 - 19][2019 - 05 - 25]【2019 - 05 - 25 00:01:00】执行节点2ActiveDataSlice(var)= 2 U ActiveDataSlice(var)U ActiveControlSlice(t)= 2 U 2,5,8 U8= 2,5,8ActiveControlSlice = 1,2,5,6,7,8自动调用切片= 14,15,16,17,18DynamicSlice(2,var)= ActiveDataSlice(var)U ActiveControlSlice(t)U AidingCallSlice U ActiveReturnSlice[2019 - 05 - 15][2019 - 05][2019 - 05 - 25]【2019 - 05 - 25 00:01:00】5.2. 空间复杂度假设P是一个有S个语句的AOP所以AOSDG将由S个节点组成,与P中的语句相匹配。该算法还使用了数据结构,如ANOSTCallSlice和ANOSTReturnSlice。这些数据结构需要O(S2)空间.因此,该算法的空间复杂度为O(S2),其中S是P中的语句数Sk.R. Raheman等人/电气系统与信息技术杂志5(2018)5625755.3. 时间复杂度假设P是一个有S个语句的AOPP中的每个语句将由AOSDG中的单个节点表示所以AOSDG中有S个节点计算动态切片所需的时间与P中语句的数量成线性关系,因此,该算法的时间复杂度为O(S)。5.4. 与现有工作的已经提出并实现了各种算法用于AOP的切片。由于我们正在计算AOP的动态切片,因此在第一次编译程序时,织入过程已经完成为了表示链接,我们使用C节点的概念不同的方法被用来解决这些问题。还没有开发出这样的算法来捕获由不同方法引起的依赖性。我们使用 了逻辑节点或虚拟 节点的概念,称为 C-Node和基本的 数据结构,如ANOWCallSlice ,ANOWReturnSlice,CallSliceStack,找到了一个有效的动态切片算法的AOPs,可以捕获所有的依赖引起的不同方面。6. 结论由于面向方面的程序设计中存在很多问题,本文提出的算法试图通过使用面向方面的系统依赖图(Aspect-Oriented System Dependence Graph,AOSDG)作为面向方面程序设计的中间表示来解决其中的一个问题,如动态地对面向方面的程序设计进行切片AOSDG使用虚拟节点来连接方面和非方面代码。该算法利用AOP中的基本数据结构,如A/O CallSlice、A/O ReturnSlice、CallSliceStack来寻找AOP的动态切片。引用Agrawal,H.,霍根,J.R.,1990年 动态程序切片。1990年ACM SIGPLAN程序设计语言设计与实现会议录,SIGPLAN,注意事项,分析和验证卷。25,246-256。Danicic,Sebastian等人,2011年。控制依赖统一理论及其在任意程序结构中的应用。 Theor. Comput. Sci.412,6809-6842。面向方面编程,Gustav Evertsson,2002年。Horwitz,S.,例如,1990年使用依赖图的过程间切片。 ACM Trans. 进展 浪 系统 12(January(1)),26-60.Ishio,Takashi等人,2003年a。面向方面的高效软件开发程序切片工具。第六届国际软件工程解决方案原理研讨会论文集(IWPSE'03),3。面向对象程序设计在程序片计算中的应用。技术报告,提交给ICSE 2003。Ishio,Kusumoto
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 京瓷TASKalfa系列维修手册:安全与操作指南
- 小波变换在视频压缩中的应用
- Microsoft OfficeXP详解:WordXP、ExcelXP和PowerPointXP
- 雀巢在线媒介投放策划:门户网站与广告效果分析
- 用友NC-V56供应链功能升级详解(84页)
- 计算机病毒与防御策略探索
- 企业网NAT技术实践:2022年部署互联网出口策略
- 软件测试面试必备:概念、原则与常见问题解析
- 2022年Windows IIS服务器内外网配置详解与Serv-U FTP服务器安装
- 中国联通:企业级ICT转型与创新实践
- C#图形图像编程深入解析:GDI+与多媒体应用
- Xilinx AXI Interconnect v2.1用户指南
- DIY编程电缆全攻略:接口类型与自制指南
- 电脑维护与硬盘数据恢复指南
- 计算机网络技术专业剖析:人才培养与改革
- 量化多因子指数增强策略:微观视角的实证分析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功