The SOFTWARE-EVOLUTION-LIBRARY enables the programmatic modification and evaluation of software.
A common interface abstracts over multiple types of software objects including source code abstract syntax trees (primarily using tree-sitter), compiled assembler code, and binary software objects. Software transformation, analysis, and evaluation techniques are implemented on top of this interface supporting automation of common software engineering tasks.
See the manual, available at https://grammatech.github.io/sel.
SEL has been used to support many projects including:
- The Mnemosyne automated software development assistant. https://grammatech.gitlab.io/Mnemosyne/docs/
- A GitHub application for automated merge conflict resolution. https://mergeresolver.github.io
- Automated Customized Bug-Benchmark Generation Source Code Analysis and Manipulation (SCAM) 2019 (distinguished paper)
- Evolving Exact Decompilation Workshop on Binary Analysis Research (BAR) 2018
- MuSynth: Program Synthesis via Code Reuse and Code Manipulation International Symposium on Search Based Software Engineering 2017
- Repairing COTS router firmware without access to source code or test suites Workshop on Genetic Improvement 2015 (best paper)
- Post-compiler Software Optimization for Reducing Energy Architectural Support for Programming Languages and Operating Systems (ASPLOS) 2014
- Automated Repair of Binary and Assembly Programs for Cooperating Embedded Devices Architectural Support for Programming Languages and Operating Systems (ASPLOS) 2013
- Software Mutational Robustness Genetic Programming and Evolvable Machines 2013
To cite SEL please use the following reference:
@manual{sel2018manual,
title = {Software Evolution Library},
author = {Eric Schulte and Contributors},
organization = {GrammaTech},
address = {eschulte@grammatech.com},
month = 1,
year = 2018,
note = {https://grammatech.github.io/sel/}
}