论文部分内容阅读
面向方面的编程(Aspect-Oriented Program,AOP)是一种编程范式,它允许对应用于某种宿主语言的关注点的分离,并且提供一种可以描述那些横切其他组件的关注点的描述机制。这些横切关注点可以是异常处理、同步、性能优化以及资源共享,而这些关注点很难在已有的程序设计技术中表达清晰。面向方面的技术能够控制代码纠缠,使关注点的表示更加清晰,从而使程序更易于开发、维护和进化。AspecJ是一种通用的面向方面编程语言,是一种基于Java语言的面向方面的无缝扩展。AspectJ中增加了新的概念,诸如连接点(join point)、通知(advice)、方面(aspect)等。AspectJ程序通常可以分成两个部分:基代码以及方面代码。基代码包括类、接口以及Java语言的其他一些结构。方面代码包括一些方面。方面是一个横切关注点实现的模块化的单位。每一个方面封装能够横切其它类或方面的机能。方面依据一些包含在其中的说明和它所横切的类结合到一起。指向分析(points-to)是一种基本的程序分析技术,其基本思想是计算出程序中的引用变量有可能指向的对象创建点的集合。作为一种基本技术,指针分析在编译器优化以及软件工程等方面有着广泛的应用。尽管目前有许多指向分析算法用于分析面向过程语言和面向对象语言,如对C和Java语言的分析,但是迄今为止还没有针对面向方面语言的指向分析算法。本文基于Andersen风格的Java语言指向分析技术,提出了一种针对AspectJ语言的流非敏感(flow-insensitive)、上下文非敏(context-insensitive)、的指向分析方法。其主要是能够使指向分析的算法跨越类与方面的界限,从而能够处理面向方面的特性。为了检验所提出的指向分析技术的有效性,我们实现了一个基于ajc编译器的AspectJ程序指向分析工具,并应用九个广泛使用的AspectJ基准程序对该工具进行了试验评估。试验的结果显示,与已有的基于字节码的Java语言指向分析技术相比,我们的方法能够在比较小的时间和空间代价下能够显著地提高分析的精度。本论文的贡献主要有三点:(1)我们定义了一个通用的针对AspectJ语言的指向分析语义,该语义扩展了Rountev等人提出的针对Java的Andersen风格的指向分析。(2)基于AspectJ的ajc编译器,我们实现了AspectJ语言指向分析工具AJPTAT。(3)我们应用九个广泛使用的AspectJ基准程序对所实现的指向分析工具进行了实验评估并且得到了预期的结果。