Increasingly, software is expected to dynamically adapt its behavior in response to changing conditions in the computation infrastructure as well as the surrounding physical environment. Two important problems in dynamic adaptation of software are (1) how to prevent failure of the software during adaptation, and (2) how to reduce disruptions in the functionalities provisioned by the software. This research will devise a novel technique for dealing with these problems by automatically determining when is the best time for making changes to a running software system. The principles emerging from this research will provide the foundation for a new method of engineering dynamically adaptive software. The results of the research will be incorporated into education, such that tomorrow's software engineers are better equipped to tackle the challenges of constructing adaptive software. The approach will be realized via a suite of open source tools to pave the way for transitioning the research results to the industry.
All prior techniques targeted at this research problem have assumed the availability of detailed software component dependency models. This research will develop a novel technique that solves this problem in settings where such models are either not available, difficult to build, or outdated due to the evolution of the software. The hypothesis guiding this research is that by monitoring a software system?s execution history (e.g., message exchanges, method invocations) for a sufficiently long period of time, it is possible to mine an accurate model of interactions and dependencies among the system's components. The research will demonstrate how models inferred in this way can be used to (1) ensure changes in the running software do not create inconsistencies that could jeopardize the system?s functionality, (2) control the level of disruption incurred in system?s operations due to adaptation, and (3) automatically adjust the models to changing dependencies among the potentially evolving software components.