The document discusses automatic software evolution techniques. It describes approaches like refactoring, automatic patch generation, runtime recovery and performance improvement. The most popular current approach is "generate and validate" which evolves a program with validation. Challenges include search space explosion as techniques are limited in the variants they can generate, and developing effective search methods to find valid patches. The document proposes mining existing software changes to learn common templates to guide the search for valid patches.