An Optimization of STARTS
STARTS is a maven plugin for regression test selection, which enables the developers to only run tests that are impacted by the changes since the last build. It does the selection by maintaining a dependency graph of all source and test classes.
This repository implements an optimization of STARTS by running the execution phase (run affected tests) and the graph computation phase (find dependencies) concurrently (see figure below). Ideally, this could improve the time by 7.5% according to this paper. In practice, it improves the time by 5%.
Below is the original readme of STARTS with a new usage of the optimized version added to Major Functionality section.
STARTS (STAtic Regression Test Selection) Overview
STARTS is a tool for static class-level regression test selection tool for Maven-based Java programs.
- Java 1.8
- Maven 3.2.5 and above
- Maven Surefire 2.14 and above
- Operating System: Linux or OSX
Integrating STARTS Plugin from Maven Central
Change the pom.xml to add the configuration for the STARTS plugin:
<build> <plugins> <plugin> <groupId>edu.illinois</groupId> <artifactId>starts-maven-plugin</artifactId> <version>1.3</version> </plugin> </plugins> </build>
Building STARTS from source
git clone https://github.com/TestingResearchIllinois/starts
Using the STARTS Maven Plugin
- To see all the goals that STARTS provides, run
- To see the details for any of the goals, run
mvn starts:help -Ddetail=true -Dgoal=<goal>; replace
<goal>with the goal of interest.
- To see the types that changed since the last time STARTS was run:
- To see the types that may be impacted by changes since the last
time STARTS was run:
- To see the tests that are affected by the most recent changes:
- To perform RTS using STARTS (i.e., select tests and run the
- To perform optimized RTS:
mvn starts:starts -DwriteNonAffected=true -DofflineMode=true
- To remove all artifacts that STARTS stores between versions
(i.e. in the
NOTE: By default, commands (1) - (3) will not update the
checksums of files in the latest version, while the command in (4)
will update the checksums of the files. Each command has a
update**Checksums option that can be used to change the default
behavior. For example, to update the checksums while checking the
mvn starts:diff -DupdateDiffChecksums=true.