Abstract: With the increasing uncertainty of the environment and the requirements, modern software systems are facing constant changes to respond to the changes of environment and requirements. This project intends to investigate methodological and technological support for software systems to automatically adapt to these changes. In particular, this project adopts a data-driven approach. That is, the proposed approach relies on existing data to guide a series of techniques to automatically change the target software systems. First, this project intends to explore mining of data related to software execution to obtain situational specifications, which will be used to guide automatic software changes in response to situational changes. Second, this project intends to explore mining of data related to software faults and their corresponding fixes to obtain software fix patterns, which will be used to guide automatic software fault fixing. Third, this project intends to explore mining of software data related to implementation of software requirements to obtain software implementation patterns, which will be used to guide the change of software to incorporate new requirements.