首页> 外文OA文献 >Graph-based Specification and Verification for Aspect-Oriented Languages
【2h】

Graph-based Specification and Verification for Aspect-Oriented Languages

机译:面向方面语言的基于图的规范和验证

摘要

Aspect-oriented software development aims at improving separation of concerns at all levels in the software development life-cycle, from architecture to code implementation. In particular, aspect-oriented programming addresses separation of concerns at the implementation level, by allowing the modular expression of crosscutting concerns. In this thesis we strive to develop verication methods specifically for aspectoriented languages. For this purpose, we model the behaviour of these languages through an operational semantics. We use graph transformations to specify these semantics. Graph transformation has mathematical foundation, and provides an intuitive way to describe component-based systems, such as software systems. In addition, graph transformations have an executable nature, and can be used to generate the execution state space of programs. We use these state spaces for the verification of programs with aspects. We start by defining an improvement of specification by rule-based systems. Pure rule-based systems typically consist of a single, unstructured set of rules. The behaviour of such systems is that all rules are applicable in every state. Rules can then only be forced into a certain order of application by adding special elements to the states, which are tested for within the rules. In other words, control over rule applicability is not explicit but has to be encoded in the state, which reduces understandability and maintainability of the rule-based system as a whole. We propose so-called control automata, which can be added on top of pure rule-based systems. The resulting behaviour is defined as the product of the original state space and the control automaton. Our control automata include so-called failure transitions, representing the observation of the non-applicability of one or more rules. The result is a reactive semantics for control expressions, which is distinct from the usual input-output semantics. Control automata may introduce articial non-determinism into the behaviour, which is an undesirable effect. We introduce guarded control automata to get rid of this effect, and we define a semantics preserving transformation from ordinary control automata to guarded ones. In the next part of the thesis, we specify the run-time semantics of a number of aspect-oriented languages, namely of (1) Composition Filters, (2) Featherweight Java with assignments with an aspectual extension, and (3) a subset of multithreaded Java extended with a subset of AspectJ. We illustrate how such a graph-based semantics can aid in understanding the run-time behaviour of a language. Moreover, we show that such a semantics can be used to simulate a (partial) program and we expose the steps involved in the execution of such a program. We illustrate that this executable nature benefits the rigour of the specification method; mistakes are easily detected by simply testing the simulation. Finally, we show that the resulting labelled transition systems can be used for existing verification methods. Then, we propose two novel approaches that address complications caused by the use of aspect-oriented programming. The first approach addresses a problem that can occur in many aspect-oriented languages. Aspects that in isolation behave correctly may interact when being combined. When interaction changes an aspect's behaviour or disables an aspect, we call this interference. One particular type of interference occurs when aspects are applied to shared join points, since then the ordering of the aspects can also influence the behaviour of the composition. We present an approach to detect aspect interference at shared join points. The approach is based on simulation of all orderings of the advices that are scheduled for execution at a shared joinpoint. A confluence analysis is performed on the resulting state space to detect whether the execution order has aected the resulting states. The second approach addresses the problem of verification of dynamic properties of systems. These properties can only be verified by simulating the execution of the system: an execution semantics is required. More specifically, we deal with properties that require tracking of individual objects over time. We stress the need for automatic verification of properties (or constraints) for aspect-oriented programming because of the obliviousness properties of such languages: a developer cannot tell from looking at the base code that aspects are executed. When software evolves, existing functionality may break unintentionally. We propose to augment an existing graph-based execution semantics with special verification rules. These rules can, when needed, add information to the graphs for tracking of objects. The properties are specified as events (or interactions) related to roles. Once these roles are identified in the syntax, the program can be verified regardless of implementation details. We show that the approach can be applied to both object-oriented and aspect-oriented implementations.
机译:面向方面的软件开发旨在改善从架构到代码实现的软件开发生命周期中各个级别的关注点分离。尤其是,面向方面的编程通过允许横切关注点的模块化表达,在实现级别解决关注点分离。在本文中,我们努力开发专门针对面向方面的语言的验证方法。为此,我们通过操作语义对这些语言的行为进行建模。我们使用图变换来指定这些语义。图形转换具有数学基础,并提供了一种直观的方式来描述基于组件的系统,例如软件系统。此外,图转换具有可执行性,可用于生成程序的执行状态空间。我们使用这些状态空间对带有方面的程序进行验证。我们首先定义基于规则的系统对规范的改进。基于纯规则的系统通常由单个非结构化规则集组成。这种系统的行为是所有规则都适用于每个状态。然后,只能通过在状态中添加特殊元素(在规则中进行测试),将规则强制为应用程序的特定顺序。换句话说,对规则适用性的控制不是明确的,而是必须在状态下进行编码,这会降低整个基于规则的系统的可理解性和可维护性。我们提出了所谓的控制自动机,可以将其添加到基于纯规则的系统之上。所得的行为定义为原始状态空间与控件自动机的乘积。我们的控制自动机包括所谓的故障转移,表示观察到一个或多个规则的不适用性。结果是控件表达式的反应性语义,这与通常的输入输出语义不同。对照自动机可能会在行为中引入动脉不确定性,这是不希望的效果。我们引入了受保护的控制自动机来消除这种影响,并定义了一种语义,保留了从普通控制自动机到受保护的自动机的转换。在本文的下一部分中,我们指定了许多面向方面的语言的运行时语义,即(1)组成过滤器,(2)具有赋有方面扩展的赋值的Featherweight Java和(3)子集用AspectJ的子集扩展的多线程Java的实现。我们说明了这种基于图的语义如何帮助理解语言的运行时行为。此外,我们证明了这种语义可用于模拟(部分)程序,并且揭示了执行此类程序所涉及的步骤。我们说明了这种可执行的性质使规范方法的严格性受益。只需测试模拟即可轻松发现错误。最后,我们证明了生成的标记过渡系统可以用于现有的验证方法。然后,我们提出了两种新颖的方法来解决因使用面向方面的编程而引起的复杂性。第一种方法解决了许多面向方面的语言中可能发生的问题。孤立地正确运行的方面在组合时可能会相互作用。当交互更改某个方面的行为或禁用某个方面时,我们将其称为干扰。当将方面应用于共享的连接点时,会发生一种特殊类型的干扰,因为这之后,方面的排序也会影响合成的行为。我们提出一种方法来检测共享连接点处的方面干扰。该方法基于计划在共享连接点执行的建议的所有顺序的仿真。对结果状态空间执行合流分析,以检测执行顺序是否影响结果状态。第二种方法解决了验证系统动态特性的问题。这些属性只能通过模拟系统的执行来验证:需要执行语义。更具体地说,我们处理需要随时间跟踪单个对象的属性。由于此类语言的遗忘特性,我们强调需要自动验证面向方面的编程的属性(或约束),因为开发人员无法通过查看基本代码来判断方面是否已执行。随着软件的发展,现有功能可能会意外中断。我们建议使用特殊的验证规则来增强现有的基于图的执行语义。这些规则可以在需要时将信息添加到图形中以跟踪对象。这些属性被指定为与角色相关的事件(或交互)。一旦在语法中确定了这些角色,无论实现细节如何,都可以对程序进行验证。我们证明了该方法可以同时应用于面向对象和面向方面的实现。

著录项

  • 作者

    Staijen T.;

  • 作者单位
  • 年度 2010
  • 总页数
  • 原文格式 PDF
  • 正文语种 und
  • 中图分类

相似文献

  • 外文文献
  • 中文文献
  • 专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号