Abstract:Along with the transition of application scenario and the increase of its own complexity, software needs the capability of actively adapting itself to the changes in its environment, which means that it needs to adjust its behavior in response to those changes. The realization of software self-adaptation is closely related to many academic fields such as software monitoring, context-aware computing, decision and control theory, software evolution and maintenance, and etc. It is a great challenge to construct this kind of software systematically in software engineering practice. From the perspective of the construction and implementation of self-adaptive software, this paper reviews the existing research and practices based on the "sensing-decision-execution" basic self-adaptation cycle. This study presents the concept of software self-adaptation and a taxonomy of the characteristics of sensing, decision and execution activities, summary those most focused enabling techniques for constructing adaptive software, analyze a set of typical research projects, and then describe the future research trend in the field of constructing adaptive software.