As software engineers have developed new techniques to address the complexity associated with the construction of modern-day software systems, an equally pressing need has risen for mechanisms that automate and simplify the management of those systems after they are deployed, i.e., during runtime. This has called for the development of (self-)adaptive software systems, which are capable of modifying their behavior at runtime to achieve certain functional or quality of service objectives. The proposed research aims to develop an alternative approach to engineering adaptive software that uses a data mining approach to automatically derive models expressing probabilistic dependencies among the components of a system. These types of models are then used to ensure changes in the running software do not create inconsistencies that jeopardize the system?s functionality. The hypothesis guiding this research is that by monitoring a software system?s execution history (e.g., message exchange, method invocation) for a sufficiently long period of time, it is possible to infer a relatively accurate model of interactions and dependencies among the system?s components. The proposed approach will be realized via a suite of integrated tools. The research will be evaluated in both controlled laboratory setting, as well as several real-world applications that are representative of the kinds of systems that could benefit from this research.
Modern software systems are expected to dynamically adapt their behavior in response to changing conditions in the computation infrastructure as well as the surrounding physical environment. Society as a whole is increasingly dependent on such software. 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 project devised 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 provided the foundation for a new method of engineering dynamically adaptive software. The results of the research were incorporated into a graduate level course to help transition the technology to the next generation of software professionals. In addition, the approach was realized via a suite of open source tools to pave the way for transitioning the research results to the industry, as well as helping the scientific community to build on the outcome of this research effort. The project a developed a new approach of engineering adaptive software that is drastically different from all prior known solutions, which assumed the availability of detailed software component dependency models. The research resulted in a novel technique that solves the dynamic software adaptation 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 was 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 confirmed that it is indeed possible to infer very accurate models this way, and moreover 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.