requirements. This problem is often tackled as a multiple-criteria decision-making problem and, generally involves presenting the decision maker with a set of good compromises between cost and user satisfaction as well as the requirements risk. Debugging and maintenance Identifying a software bug (or a code smell) and then debugging (or refactoring) the software is largely a manual and labor-intensive endeavor, though the process is tool-supported. One objective of SBSE is to automatically identify and fix bugs (for example via mutation testing). Genetic programming, a biologically-inspired technique that involves evolving programs through the use of crossover and mutation, has been used to search for repairs to programs by altering a few lines of source code. The GenProg Evolutionary Program Repair software repaired 55 out of 105 bugs for approximately $8 each in one test. Coevolution adopts a "predator and prey" metaphor in which a suite of programs and a suite of unit tests evolve together and influence each other. Testing Search-based software engineering has been applied to software testing, including automatic generation of test cases (test data), test case minimization and test case prioritization. Regression testing has also received some attention. Optimizing software The use of SBSE in program optimization, or modifying a piece of software to make it more efficient in terms of speed and resource use, has been the object of successful research. In one instance, a 50,000 line program was genetically improved, resulting in a program 70 times faster on average. A recent work by Basios et al. shows that by optimising the data structure, Google Guava found 9% improvement on execution time, 13% improvement on memory consumption and 4% improvement on CPU usage separately. Project management A number of decisions that are normally made by a project manager can be done automatically, for example, project scheduling. Tools Tools available for SBSE include OpenPAT, EvoSuite, and Coverage, a code coverage measurement tool for Python. Methods and techniques A number of methods and techniques are available, including: Profiling via instrumentation in order to monitor certain parts of a program as it is executed. Obtaining an abstract syntax tree associated with the program, which can be automatically examined to gain insights into its structure. Applications of program slicing relevant to SBSE include software maintenance, optimization and program analysis. Code coverage allows measuring how much of the code is executed with a given set of input data. Static program analysis Industry