Section: Overall Objectives
Software, whatever its objectives, has become a key element in all sectors of the economic activity. It must cope more and more with the variability of computing platforms and must be usable in various environments, in accordance with the unavoidable evolution of communication and information technologies. Software must now be developed to be adapted and reconfigured automatically on heterogeneous platforms that base themselves on different network and system paradigms, such as volatile or reliable connection, ambient or distributed reference, or energy-constrained or not. Depending on the application domains, software interacts with its execution context— i.e. , the end-users, their local environment, and the execution platform, which involve adaptation. Therefore, a system will not be built in only one step but has to be seen as a composition and evolution of existing systems or sub-systems. These systems are defined by software engineering paradigms, such as components, services or aspects. Moreover, these adaptations can be performed at design, compile or run time. Consequently, the entire life-cycle, from design to deployment and execution of software, has to be considered not only when the execution context changes, but also when functionalities are added or withdrawn in accordance with user needs. Thus, software life-cycle has to be defined to support the expression of adaptation at each of its levels. Consequently, there is a strong requirement to consider adaptation as a first-class problem in the development and execution of software.
As such, an adaptive system is a software-intensive system (see software-intensive systems report  ) that can adjust and respond to changes in its environment, evolving requirements, removal of obsolete technologies or introduction of new technologies, and new knowledge  . It will have multiple applications considering technical changes, such as heterogeneous complex and large systems, embedded software systems for wireless networks, and in application domains, such as transport, home, communication, health, education, and service-oriented business applications based on Web Services.
Supporting the entire life-cycle of adaptive systems raises several challenges, from elaborating methods and tools for system design to the definition of middleware infrastructures to support the target system on heterogeneous and dynamic platforms. In current software engineering, paradigms, such as Component-Based Software Engineering (CBSE) and Aspect-Oriented Software Development (AOSD), allow the expression of software adaptation by composition or by weaving. Moreover, various abstractions for modeling structural and behavioral adaptation of applications in response to changes in the existing environment have been studied recently from resource-aware programming to adaptive software architecture. The ADAM challenges will be to study the entire life-cycle of adaptive multi-paradigm systems for multi-scale environments.
Life-cycle of Adaptive Systems
The first challenge will be to master the adaptation of distributed middleware and applications in accordance with the evolution of runtime constraints, while following this evolution from the design to the run time. Although occurring at different levels, adaptation must be managed consistently across the whole life-cycle of a system. In particular, in a MDE context, if a model at some level of the software life-cycle changes, then this change may have an impact on other models at the same level that are related to it, as well as on related models in earlier and later phases of the life-cycle. To reach this challenge, techniques and formalisms are needed to assess the impact of such changes, to synchronize models within and between different phases, to co-evolve models and implementations and to adapt the implementation at run time. Because of the mobility and the high dynamicity in adaptive systems, these tools and approaches should be more effective.
The second challenge will be to develop and process applications written with different software paradigms at the same time and to allow their co-existence. Developing adaptable applications requires the use of good practices on software engineering. However, in such context, applications are often composed of multiple sub-systems and services written in different languages and supported by systems using several paradigms. Implementation-level solutions, like AOP  , patterns  , generative programming  , or reflective approaches  ,  are already employed and co-exist in nowadays software. However, in order to better support adaptation, application must be specified and developed with different paradigms, such as CBSE, AOSD, or services and to be deployed on different runtime platforms, such as J2EE, JBI, Fractal , SCA or on new technological platforms, such as FAC  and AOKell  . For reaching this challenge, we will consider heterogeneity on paradigms, their unification on generic models that can be projected on specific platforms or their co-existence through interconnection of platforms.
On Supporting Multi-scale Environment
Finally, our research context considers multi-scale networks and runtime environment properties in the design and the execution of middleware and applications. We do not claim to propose advances in the fields of the ambient computing core or the grid core, but we take into account their definition and their properties as interesting adaptive systems on which we will test our multi-paradigm approaches and our life-cycle steps. They are for us experimentation fields. Environments, such as sensor networks, wireless networks for embedded systems, the Internet, or environments for grid computing do not have the same properties in terms of data and computation capacities. Considering data, sensor or mobile networks will manipulate small amounts of data, but with a large distribution and some inconsistencies. Internet networks and grid computing, on the other hand, will operate on large quantities of data, which is mostly homogeneous, consistent, and centralized. Computation capacity must also be considered. PDAs, phones or sensors have small capacities in terms of battery, memory, or computation units, consequently the application and its run-time platform design will be designed and distributed according to these capacities.