Chapter 17
Engineering Aspect-Oriented
Systems
GORDON S. BLAIR, LYNNE BLAIR, AWAIS RASHID,
ANA MOREIRA, JOĆO ARAŚJO, AND RUZANNA CHITCHYAN
Aspect-oriented software development (AOSD) techniques aim at providing means
for the systematic identification, modularization, and composition of crosscutting
concerns throughout the software lifecycle. A number of aspect-oriented programming
approaches are available, such as AspectJ [5], composition filters [8], adaptive
programming [58], and Hyper/J [61]. The concepts are also being applied at the earlier
stages of software development. At the requirements engineering stage, [7, 34,
70, 76] provide means for handling aspectual requirements. Similarly, a number of
aspect-oriented specification [2, 28, 29, 74, 82] and design [7, 21, 36, 77, 79]
approaches have been proposed. With a range of techniques available to a software
engineer at each stage, the task of engineering an aspect-oriented system poses significant
challenges. At each development stage, the software engineer needs to
employ the most suitable aspect-oriented technique for the application being developed.
The choice of technique can be dictated by a number of factors including
system requirements, organizational practices, constraints imposed by the tools or
development environments, and the nature of the crosscutting concern. The last
implies that multiple techniques may be employed at each stage in conjunction with
each other. This hybrid view of separation of concerns has previously been advocated
by multi-paradigm approaches [14, 23] and more recently for aspect-oriented programming
techniques [66].
As AOSD techniques mature, there is a need for guidelines supporting the development
of well-engineered aspect-oriented systems. It is the aim of this chapter to
provide such guidelines for key phases of the software lifecycle. The guidelines
are aimed at describing the distinguishing characteristics of AOSD approaches at
each stage and their suitability for the application or concern being modularized.
By making these guidelines available, we aim to support the software engineer in
choosing the optimal technique or set of techniques at each stage. Note that aspectization
should not be a forced phenomenon. Conventional separation of concerns
techniques (e.g., object-oriented approaches) should be used if crosscutting concerns
can be cleanly modeled without having to encapsulate them in a separate unit. For
instance, a crosscutting concern could be embodied in the choice of specific system
architecture rather than an individual unit [70]. However, when this clean separation
of a crosscutting concern is not possible, aspect-oriented techniques should be used.
The structure of the chapter mirrors the typical software lifecycle, considering
AOSD at each stage. In particular, Section 17.1 considers aspects and requirements
engineering, with Section 17.2 addressing aspect-oriented specification. Design and
implementation issues are then addressed in Sections 17.3 and 17.4, respectively.
Section 17.5 addresses the important issue of software evolution and aspects, highlighting
the issue of dynamic aspects. Section 17.6 then examines the potential
problem of aspect interactions, and Section 17.7 presents some concluding remarks.