Reasoning about Behavioral Conflicts between Aspects
Aspects have been successfully promoted as a means to improve the modularization of software in the presence of crosscutting concerns. The so-called aspect interference problem is considered to be one of the remaining challenges of aspect-oriented software development: aspects may interfere with the behavior of the base code or other aspects. Especially interference between aspects is difficult to prevent, as this may be caused solely by the composition of aspects that behave correctly in isolation. A typical situation where this may occur is when multiple advices are applied at the same, or shared, join point. In this paper we explain the problem of behavioral conflicts between aspects at shared join points, illustrated by a real-world example. We present an approach for the detection of behavioral conflicts that is based on a novel abstraction model for representing the behavior of advice. This model allows the expression of both primitive and complex behavior in a simple manner that is suitable for automated conflict detection. The approach employs a set of conflict detection rules which can be used to detect both generic conflicts as well as domain- or application specific conflicts. This approach is general for AOP languages, and its application to both Compose* and AspectJ is illustrated in this paper. The application to Compose* demonstrates how the use of a declarative advice language can be exploited for fully automated conflict detection, without the need to annotate the aspect behavior. The approach has been implemented and tested within the Compose* and CAPE environments.