Software evolution plays an ever-increasing role in software development. Programmers rarely build software from scratch but often spend more time in modifying existing software to provide new features to customers and fix defects in existing software. Evolving software systems are often a time-consuming and error-prone process. This chapter overviews key concepts and principles in the area of software evolution and presents the fundamentals of state-of-the art methods, tools, and techniques for evolving software. The chapter first classifies the types of software changes into four types: perfective changes to expand the existing requirements of a system, corrective changes for resolving defects, adaptive changes to accommodate any modifications to the environments, and finally preventive changes to improve the maintainability of software. For each type of changes, the chapter overviews software evolution techniques from the perspective of three kinds of activities: (1) applying changes, (2) inspecting changes, and (3) validating changes. The chapter concludeswith the discussion of open problems and research challenges for the future.
Kim, M., Meng, N., & Zhang, T. (2019). Software evolution. In Handbook of Software Engineering (pp. 223–284). Springer International Publishing. https://doi.org/10.1007/978-3-030-00262-6_6