Next: , Previous: , Up: Top   [Contents][Index]


1 Introduction

The Software Evolution library enables the programmatic modification and evaluation of extant software.

A common interface abstracts over multiple types of software objects (see Software Objects) including abstract syntax trees parsed from source code, LLVM IR, compiled assembler, and linked ELF binaries. Mutation and evaluation methods (see Software Methods) are implemented on top of this interface supporting automation of common software engineering tasks. Support is included for Search Based Software Engineering (SBSE) techniques (see Search Functions).

1.1 SEL Applications

SEL has a broad range of applications for software improvement and understanding. The following are some current and past projects utilizing SEL.

1.2 Many different kinds of software can be manipulated

The Software Evolution Library Index defines software objects using the Common Lisp Object System (CLOS), to provide a uniform interface to many kinds of software artifact, shown in the table below.

Additionally, the flexible design of SEL makes it possible to add new software object kinds. See section Software Objects for information about creating new software objects.

Source Code using Tree-Sittermature
C/C++ using Clangmature
Common LISPmature
compiled assembler (ASM)mature
linked ELF binariesmature
LLVM IRexperimental
CILexperimental
Forthexperimental
Coqexperimental

1.3 Other features

SEL provides support for exploring many different aspects of both evolutionary search and automated software manipulation.

Tailored features for Clang C and C++ objects

1.4 Getting started

First, install SEL and its dependencies.

Once SEL is installed, try out some of the example code.

For more detailed usage information consult the API documentation.

1.5 Citing

Please cite this manual when publishing results that you have obtained with the SOFTWARE EVOLUTION library.

@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/}
}

Next: , Previous: , Up: Top   [Contents][Index]