Unification of Static and Dynamic AOP for Evolution in Embedded Software Systems

This paper discusses how evolution in software systems can be supported by a unified application of both static as well as dynamic aspect-oriented technology. The support for evolution is required statically, where the applications could be taken offline

  • PDF / 321,212 Bytes
  • 19 Pages / 430 x 660 pts Page_size
  • 107 Downloads / 172 Views

DOWNLOAD

REPORT


Abstract. This paper discusses how evolution in software systems can be supported by a unified application of both static as well as dynamic aspect-oriented technology. The support for evolution is required statically, where the applications could be taken offline and adapted, and dynamically where going offline is not an available option. While this is straightforward in the static case by taking the system offline and statically weaving the aspects, runtime evolution requires an additional dynamic aspect weaving infrastructure. Our current implementation of the family-based dynamic aspect weaving infrastructure supports most of the features known from the static aspect weaving domain, offers a tailored dynamic aspect weaving support, and is able to target a wide range of applications including embedded systems with very small memory footprint. The availability of a single language both for static and dynamic aspects means that the decision whether an aspect is static or dynamic is postponed to the later stages of the deployment of aspects into the sytem, and is decided according to the requirements and available resources. As a case study, we will present our experiences with the static and runtime evolution of the embedded operating system eCos.

1 Introduction Software evolution is the process of keeping the software up-to-date and bug-free by continuous enhancement, corrections, extensions and customizations as per the emerging requirements. This process involves either adapting the core functional behavior, or the insertion of new non-functional behavior. Lehman defined software evolution as the collection of programming activities intended to generate a new version from an older and operational version [9]. Currently, it is estimated that four out of seven software engineers work on repair and enhancement of existing software [26]. Software evolution can be classified into static and runtime evolution. Static evolution corresponds to compile time changes, and involves modification of the code by taking the system offline, reconfiguring, rapairing, and then recompiling as per the new requirements. Runtime evolution means that the system is upgraded and maintained dynamically at runtime, and is vital for long running systems. Traditionally, runtime evolution is handled with approaches like redundant systems, larger memories, increasing processing power, and feature-rich software. Such approaches noticeably bloat applications, reduce reusability, and increase complexity, costs, and further hinder the evolution of the system. M. Lumpe and W. Vanderperren (Eds.): SC 2007, LNCS 4829, pp. 216–234, 2007. c Springer-Verlag Berlin Heidelberg 2007 

Unification of Static and Dynamic AOP

217

The evolution could be a continuous change, which happens with the maturity of the technology and involves an incremental adoption approach, or it may be radical and forces a system-wide change. When evolution requires changes to multiple modules, it is difficult to localize resulting in crosscutting. This crosscutting limits the