Another flaw in the human character is that everybody wants to build and nobody wants to do maintenance.
—Kurt Vonnegut, Jr.
In 1965, Mark Halpern introduced the concept of software evolution to describe the growth characteristics of software . Later, the term “evolution” in the context of application software was widely used. The concept further attracted the attentions of researchers after Belady and Lehman published a set of principles determining evolution of software systems [2, 3]. The principles were very general in nature. In his landmark article entitled “The Maintenance ‘Iceberg’,” R. G. Canning compared software maintenance to an “iceberg” to emphasize the fact that software developers and maintenance personnel face a large number of problems . A few years later, in 1976, Swanson introduced the term “maintenance” by grouping the maintenance activities into three basic categories: corrective, adaptive, and perfective . In the early 1970s, IBM called them “maintenance engineers” or “maintainers” who had been making intentional modifications to running code that they had not developed themselves. The main reason for using nondevelopment personnel in maintenance work was to free up the software development engineers or programmers from support activities . In this book, we will use maintainer, maintenance engineer, developer, and programmer interchangeably.
Bennett and Rajlich  researched ...