Search the Dagstuhl Website
Looking for information on the websites of the individual seminars? - Then please:
Not found what you are looking for? - Some of our services have separate websites, each with its own search option. Please check the following list:
Schloss Dagstuhl - LZI - Logo
Schloss Dagstuhl Services
Within this website:
External resources:
  • DOOR (for registering your stay at Dagstuhl)
  • DOSA (for proposing future Dagstuhl Seminars or Dagstuhl Perspectives Workshops)
Within this website:
External resources:
Within this website:
External resources:
  • the dblp Computer Science Bibliography

Dagstuhl Seminar 18052

Genetic Improvement of Software

( Jan 28 – Feb 02, 2018 )

(Click in the middle of the image to enlarge)

Please use the following short url to reference this page:





Recent work on Genetic Improvement (GI) has covered automatic bug repair and improving both functional and non-functional properties of existing software code.

Non-functional improvements have included radical speeds ups and (particularly for low resource computational motes and mobile computing) reducing energy consumption, and memory footprint.

In addition to automatic bug fixing, functional improvements have included growing and grafting in new functionality, automatic porting to new hardware (often parallel hardware such as GPU and SSE vector instructions), automatic tuning and transplanting functionality from existing often open source repositories like GitHub.

These are exciting times but as highlighted by the recent Dagstuhl Seminar on Automated Program Repair (17022), there is a risk that lessons learnt in one area will only be exploited by that area. Therefore this Dagstuhl Seminar will draw participants from all corners of GI to contribute their thoughts on experiences, tools, datasets and benchmarks, validation, theoretical analysis and the ways forward.

What will programming look like in ten years’ time? How will GI in 2018 be thought of in 2038 or in 2050?

The seminar will focus on various genetic improvement approaches and related areas where software has been reused for purpose of automated software improvement. The proposed topics of discussion include:

  • software mutational robustness
  • program repair
  • non-functional software property improvement
  • search-based approaches for software improvement
  • data mining for GI
Copyright Stephanie Forrest, William B. Langdon, Claire Le Goues, and Justyna Petke


Genetic improvement (GI) uses automated search to find improved versions of existing software. It can be used for improvement of both functional and non-functional properties of software. Much of the early success came from the field of automated program repair. However, GI has also been successfully used to optimise for efficiency, energy and memory consumption as well as automated transplantation of a piece of functionality from one program to another. These results are impressive especially given that genetic improvement only arose as a separate research area in the last few years. Thus the time was ripe to organise a seminar that would gather researchers from GI and related areas together to summarise the current achievements and identify avenues for further research.

The seminar attracted researchers from various GI-related software engineering areas, ranging from automated software repair through genetic programming and software testing to biological and evolutionary computation. The talks covered the latest research and speculations on future research both in the practical applications of genetic improvement, such as energy consumption optimisation and automated parallelisation, to initial results on much lacking GI theory. In particular, GI theory and indeed software in general were discussed in terms of search landscape analysis. Other talks covered software testing and bug repair. The participants also identified a set of benchmarks and tools for GI. These have been published at the website to allow other researchers to compare their new technologies against the state-of-the-art.

The seven breakout groups' topics ranged from re-evaluating the basic components of the GI framework, such as fitness functions and traversing the GI search space, to identifying issues related to adoption of GI in industry. One of the issues has been explanation of the automatically generated changes, which might be a roadblock in applying them in the real-world, especially safety-critical, software.

The seminar has already led to a few publications. For example, four papers accepted to the 4th International Genetic Improvement Workshop (GI-2018)1, co-located with the International Conference on Software Engineering (ICSE), were written by one or more workshop participants. Indeed most were started in Dagstuhl. Several other collaborations have been established, with plans for visits and further research on topics identified at the seminar. We look forward to results of this work initiated at Dagstuhl.


Genetic improvement (GI) uses automated search to find improved versions of existing software [6, 8]. It uses optimisation, machine learning techniques, particularly search based software engineering techniques such as genetic programming [2, 1, 9]. to improve existing software. The improved program need not behave identically to the original. For example, automatic bug fixing improves program code by reducing or eliminating buggy behaviour, whilst automatic transplantation adds new functionality derived from elsewhere. In other cases the improved software should behave identically to the old version but is better because, for example: it runs faster, it uses less memory, it uses less energy or it runs on a different type of computer.

GI differs from, for example, formal program translation, in that it primarily verifies the behaviour of the new mutant version by running both the new and the old software on test inputs and comparing their output and performance in order to see if the new software can still do what is wanted of the original program and is now better. Using less constrained search allows not only functional improvements but also each search step is typically far cheaper, allowing GI to scale to substantial programs. Genetic improvement can be used to create large numbers of versions of programs, each tailored to be better for a particular use or for a particular computer, or indeed (e.g. to defeat the authors of computer viruses) simply to be different. Other cases where software need to be changed include porting to new environments (e.g. parallel computing [3] mobile devices) or for code obfuscation to prevent reverse engineering [7].

Genetic improvement can by used with multi-objective optimisation to consider improving software along multiple dimensions or to consider trade-offs between several objectives, such as asking GI to evolve programs which trade speed against the quality of answers they give. Of course, it may be possible to find programs which are both faster and give better answers. Mostly Genetic Improvement makes typically small changes or edits (also known as mutations) to the program’s source code, but sometimes the mutations are made to assembly code, byte code or binary machine code.

GI arose as a separate field of research only in the last few years. Even though it’s origins could be traced back to the work by Ryan & Walsh [18] in 1995, it is the work by Arcuri [10] and White [20] that led to the development and wider uptake of the GI techniques. The novelty lay in applying heuristics to search for code mutations that improved existing software. Both Arcuri and White applied genetic programming (GP), with Arcuri using also hill-climbing and random search on a small set of problems. Rather than trying to evolve a program from scratch, as in traditional GP, Arcuri and White took the approach of seeding [5] the initial population with copies of the original program. Next, instead of focusing on evolving a program fulfilling a particular task, as has been done before, Arcuri and White used GP to improve their programs either to fix existing bugs or to improve the non-functional properties of software, in particular, its efficiency and energy consumption. Both Arcuri and White, however, applied their, now known as, GI techniques, to relatively small benchmarks having little resemblance to large scale real-world problems.

The bug fixing approach was taken up by Forrest, Le Goues and Weimer et al. [12, 15, 19] and adapted for large software systems. One of the insights that allowed for this adoption was an observation that full program variants need not be evolved, yet only a sequence of edits, which are then applied to the original program. Validity of the resultant modified software was then evaluated on a set of test cases, assumed to capture desired program behaviour, as in previous work. This strand of research led to the development of first GP-based automated software repair tool called GenProg [15]. Success of this automated bug fixing work led to several best paper awards and two ‘Humie’ awards (international prizes for human-competitive results produced by genetic and evolutionary computation and inspired work on other automated software repair tools, including Angelix [16], which uses a form of constraint solving to synthesise bug fixes.

Research on improvement of non-functional software properties has yet to garner the attention and software development effort as the work on automated bug fixing. Langdon et al. [3, 13, 14] published several articles on efficiency improvement and parallelisation using GI. They were able to improve efficiency of large pieces of state-of-the-art software Moreover, the genetically improved version of a bioinformatics software called BarraCUDA is the first instance of a genetically improved piece of software adapted into development [14, 4].

Petke et al. [17] set themselves a challenge of improving efficiency of a highly-optimised piece of software that has been improved by expert human developers over a period of several years. In particular, a famous Boolean satisfiability (SAT) solver was chosen, called MiniSAT. It implements the core technologies of SAT solving and inspired a MiniSAT-hack track at the annual international SAT solver competitions, where anyone can submit their own version of MiniSAT. Petke et al. showed that further efficiency improvements can be made by using this source of genetic material for the GP process and specializing the solver for a particular downstream application. This work showed the initial potential of what is now called automated software transplantation and was awarded a Silver ‘Humie’. Further work on automated software transplantation won an ACM SIGSOFT distinguished paper award and a Gold ‘Humie’ at this year’s Genetic and Evolutionary Computation Conference (GECCO-2017) [11].

Aims of the Seminar

The seminar brought together researchers in this new field of software engineering to investigate what is achievable with current technology and the current impediments to progress (if indeed there are any) of what can be achieved within the field in the future and how GI can affect the software development process.

With the growing popularity of the field, multiple awards and fast progress GI research in the field, it is the right time to gather top the academics in GI and related fields to push the boundaries of what genetic improvement can achieve even further.

This seminar brought researchers working in genetic improvement and related areas, such as automated program repair, software testing and genetic programming, together. It summarized achievements in automated software optimisation. We will use this summary as a basis to investigate how optimisation approaches from the different fields represented at the seminar can be combined to produce a robust industry-ready set of techniques for software improvement.


  1. Wolfgang Banzhaf, Peter Nordin, Robert E. Keller, and Frank D. Francone. Genetic Programming – An Introduction; On the Automatic Evolution of Computer Programs and its Applications. Morgan Kaufmann, San Francisco, CA, USA, January 1998.
  2. John R. Koza. Genetic Programming: On the Programming of Computers by Means of Natural Selection. MIT Press, Cambridge, MA, USA, 1992.
  3. W. B. Langdon and M. Harman. Evolving a CUDA kernel from an nVidia template. In Pilar Sobrevilla, editor, 2010 IEEE World Congress on Computational Intelligence, pages 2376–2383, Barcelona, 18–23 July 2010. IEEE.
  4. W. B. Langdon and Brian Yee Hong Lam. Genetically improved BarraCUDA. BioData Mining, 20(28), 2 August 2017.
  5. W. B. Langdon and J. P. Nordin. Seeding GP populations. In Riccardo Poli, Wolfgang Banzhaf, William B. Langdon, Julian F. Miller, Peter Nordin, and Terence C. Fogarty, editors, Genetic Programming, Proceedings of EuroGP’2000, volume 1802 of LNCS, pages 304–315, Edinburgh, 15–16 April 2000. Springer-Verlag.
  6. William B. Langdon. Genetically improved software. In Amir H. Gandomi, Amir H. Alavi, and Conor Ryan, editors, Handbook of Genetic Programming Applications, chapter 8, pages 181–220. Springer, 2015.
  7. Justyna Petke. Genetic improvement for code obfuscation. In Justyna Petke, David R. White, and Westley Weimer, editors, Genetic Improvement 2016 Workshop, pages 1135– 1136, Denver, July 20–24 2016. ACM.
  8. Justyna Petke, Saemundur O. Haraldsson, Mark Harman, William B. Langdon, David R. White, and John R. Woodward. Genetic improvement of software: a comprehensive survey. IEEE Transactions on Evolutionary Computation. In press.
  9. Riccardo Poli, William B. Langdon, and Nicholas Freitag McPhee. A field guide to genetic programming. Published via and freely available at, 2008. (With contributions by J. R. Koza).
  10. Andrea Arcuri. Automatic software generation and improvement through search based techniques. PhD. Univ. of Birmingham, 2009.
  11. Earl T. Barr, Mark Harman, Yue Jia, Alexandru Marginean, and Justyna Petke. Automated software transplantation. In ISSTA, pages 257–269, 2015.
  12. Stephanie Forrest, ThanhVu Nguyen, Westley Weimer, and Claire Le Goues. A genetic programming approach to automated software repair. In GECCO, pages 947–954, 2009.
  13. William B. Langdon and Mark Harman. Optimizing existing software with genetic programming. IEEE Transactions on Evolutionary Computation, 19(1):118–135, 2015.
  14. William B. Langdon, Brian Yee Hong Lam, Justyna Petke, and Mark Harman. Improving CUDA DNA analysis software with genetic programming. In GECCO, pages 1063–1070, 2015.
  15. Claire Le Goues, Michael Dewey-Vogt, Stephanie Forrest, and Westley Weimer. A systematic study of automated program repair: Fixing 55 out of 105 bugs for $8 each. In ICSE, pages 3–13, 2012.
  16. Sergey Mechtaev, Jooyong Yi, and Abhik Roychoudhury. Angelix: scalable multiline program patch synthesis via symbolic analysis. In ICSE, pages 691–701, 2016.
  17. Justyna Petke, Mark Harman, William B. Langdon, and Westley Weimer. Using genetic improvement and code transplants to specialise a C++ program to a problem class. In EuroGP, pages 137–149, 2014.
  18. Paul Walsh and Conor Ryan. Automatic conversion of programs from serial to parallel using genetic programming - the Paragen system. In ParCo, pages 415–422, 1995.
  19. Westley Weimer, ThanhVu Nguyen, Claire Le Goues, and Stephanie Forrest. Automatically finding patches using genetic programming. In ICSE, pages 364–374, 2009.
  20. David R. White. Genetic programming for low-resource systems. PhD. Univ. of York, 2009.
Copyright Stephanie Forrest, William B. Langdon, Claire Le Goues, and Justyna Petke

  • Brad Alexander (University of Adelaide, AU) [dblp]
  • Wolfgang Banzhaf (Michigan State University, US) [dblp]
  • Benoit Baudry (KTH Royal Institute of Technology - Stockholm, SE) [dblp]
  • Bobby R. Bruce (University College London, GB) [dblp]
  • Celso G. Camilo-Junior (Federal University of Goiás, BR) [dblp]
  • Myra B. Cohen (University of Nebraska - Lincoln, US) [dblp]
  • Benjamin Danglot (INRIA Lille, FR) [dblp]
  • Stephanie Forrest (Arizona State University - Tempe, US) [dblp]
  • Nicolas Harrand (KTH Royal Institute of Technology - Stockholm, SE) [dblp]
  • Colin G. Johnson (University of Kent - Canterbury, GB) [dblp]
  • Krzysztof Krawiec (Poznan University of Technology, PL) [dblp]
  • William B. Langdon (University College London, GB) [dblp]
  • Claire Le Goues (Carnegie Mellon University - Pittsburgh, US) [dblp]
  • Alexandru Marginean (University College London, GB) [dblp]
  • Michael Pradel (TU Darmstadt, DE) [dblp]
  • Joseph Renzullo (Arizona State University - Tempe, US) [dblp]
  • Eric Schulte (GrammaTech Inc. - Ithaca, US) [dblp]
  • Lukas Sekanina (Brno University of Technology, CZ) [dblp]
  • Marija Selakovic (TU Darmstadt, DE) [dblp]
  • Shin Hwei Tan (National University of Singapore, SG) [dblp]
  • Christopher Timperley (Carnegie Mellon University - Pittsburgh, US) [dblp]
  • Leonardo Trujillo (Instituto Tecnológico de Tijuana, MX) [dblp]
  • Emamurho Ugherughe (SAP SE - Berlin, DE) [dblp]
  • Sergi Valverde (UPF - Barcelona, ES) [dblp]
  • Zdenek Vasicek (Brno University of Technology, CZ) [dblp]
  • Markus Wagner (University of Adelaide, AU) [dblp]
  • John R. Woodward (Queen Mary University of London, GB) [dblp]
  • Shin Yoo (KAIST - Daejeon, KR) [dblp]

  • soft computing / evolutionary algorithms
  • software engineering

  • genetic improvement
  • search-based software engineering
  • software optimisation
  • evolutionary improvement
  • automated software improvement
  • automated program repair
  • evolutionary computation
  • genetic programming