Once in a while, a very good idea comes along. When explained, we might wonder why we didn't think of it before. For instance, many software programming tasks involve making trade-off judgments between conflicting needs. Should my code be robust or fast? Should it be rock-solid or is the need to ship to market more pressing? Should the focus be on short- term expediency or respectful of long-term architectural needs? To balance the trade-offs, it's typical for programmers to iterate over many possible solutions and evaluate them, incrementally moving through a number of possibilities until a satisfactory solution is found. With the recognition that what's happening here is a manual search though a space of possibilities, the very good idea is that this search activity can be emulated in software. The purpose of this is not to totally automate programming, replacing the human programmer. Rather, by emulating the search process, the programmer is supported by being shown solutions that they might never have considered because of the sheer quantity of possibilities to explore. In the past five years, there's been an explosion in the number of search-based approaches put forward to support the programmer, and they show great promise. In fact, it turns out that computational search-based approaches have been successfully applied to not only searching source code solutions, but also automatic refactoring, automatic test case generation and even automatic bug-fixing.
This case study starts with an explanation of how search-based approaches work generally, and goes on to provide an insight into some of the fascinating and novel applications of automated search-based software engineering (SBSE) available to the programmer. Finally, the case study offers some signposts for 'quick-win' computational search-based techniques for programmers to exploit and hence develop and improve their programming skills.