Self-adaptive software is a class of software systems that is able to autonomously adapt to a variety of dynamic deployment conditions with a minimum of human intervention. Especially useful in situations where direct human oversight would be untimely, self-adaptive systems are able to respond to such conditions as varying deployment platform resources, changing deployment conditions, and even dynamically changing high-level requirements and system goals. The defining characteristic of these systems is a high degree of agility.
Constructing such software systems, however, is a challenging endeavor compounded by certain common practices:
- Self-adaptive capabilities are often embedded into source code and hidden from the system architect during deployment.
- Self-adaptive behavior is encoded as static, pre-planned responses envisioned and predicted by developers during design.
- A variety of low-level techniques such as operating system scheduling, plug-in mechanisms, or Dynamic Remote Procedure (RPC) calls can be used to implement self-adaptive capabilities.
These practices result in limited adaptation behavior visibility, reduced confidence in the self-adaptive process, and a limitation of system capabilities to those foreseen during design. The challenge, then, is to create techniques for the development of self-adaptive software that ensure a high level of visibility at an appropriate level of abstraction, and to allow for the dynamic inclusion and modification of adaptive behavior during system runtime.
The KBAAM project addresses these challenges by attacking the problem through the combination of explicit, deployable software architectural models, dynamically modifiable architectural adaptation policies, and expert system techniques.