The existing software development ecosystem is the product of evolutionary forces, and consequently real-world software is amenable to improvement through automated evolutionary techniques. This dissertation presents empirical evidence that software is inherently robust to small randomized program transformations, or 'mutations. Simple and general mutation operations are demonstrated that can be applied to software source code, compiled assembler code, or directly to binary executables. These mutations often generate variants of working programs that differ significantly from the original, yet remain fully functional. Applying successive mutations to the same software program uncovers large 'neutral networks' of fully functional variants of real-world software projects. These properties of 'mutational robustness' and the corresponding 'neutral networks' have been studied extensively in biology and are believed to be related to the capacity for unsupervised evolution and adaptation. As in biological systems, mutational robustness and neutral networks in software systems enable automated evolution. The dissertation presents several applications that leverage software neutral networks to automate common software development and maintenance tasks. Neutral networks are explored to generate diverse implementations of software for improving runtime security and for proactively repairing latent bugs. Next, a technique is introduced for automatically repairing bugs in the assembler and executables compiled from off-the-shelf software. As demonstration, a proprietary executable is manipulated to patch security vulnerabilities without access to source code or any aid from the software vendor. Finally, software neutral networks are leveraged to optimize complex nonfunctional runtime properties. This optimization technique is used to reduce the energy consumption of the popular PARSEC benchmark applications by 20% as compared to the best available public domain compiler optimizations. The applications presented herein apply evolutionary computation techniques to existing software using common software engineering tools. By enabling evolutionary techniques within the existing software development toolchain, this work is more likely to be of practical benefit to the developers and maintainers of real-world software systems.
software engineering, search based software engineering, software mutational robustness, mutational robustness, evolutionary computation, genetic algorithm, genetic programming, optimization, automated program repair, automated software engineering, bug repair, fitness landscape, instruction set architecture, neutral network
Level of Degree
Department of Computer Science
First Committee Member (Chair)
Second Committee Member
Third Committee Member
Schulte, Eric. "Neutral Networks of Real-World Programs and their Application to Automated Software Evolution." (2014). http://digitalrepository.unm.edu/cs_etds/49