Skip to content

Research tool for build system aware multi-language regression test selection

License

Notifications You must be signed in to change notification settings

tum-i4/multirts

Repository files navigation

MultiRTS: Build System Aware Multi-language Regression Test Selection

CI

MultiRTS is a research tool for regression test selection. It is build system aware in the sense that it accounts for changes to build system changes (e.g., POMs) and computes the minimum set of Maven modules to build for testing. It supports multi-language software in the sense that it accounts for non-Java changes to external files (e.g., XML, SQL) or to native libraries (i.e., DLLs) and can use that information to select Java tests that operate across language boundaries. Therefore, MultiRTS relies on test traces generated by JTeC.

Note: Although conceptually similar, this is not the original implementation from the ICSE-SEIP'22 paper, which relied on DTrace for tracing system calls to files and had a Python CLI to steer the test/module selection process.

Structure

├── multirts-core             <- The MultiRTS core package contains code for test and module selection.
├── multirts-maven-extension  <- MultiRTS Maven extension for selective Maven reactor build.
├── multirts-maven-plugin     <- MultiRTS Maven plugin for steering the test and module selection.
└── multirts-sample-project   <- Sample project to demonstrate usage of MultiRTS.

Setup

To build MultiRTS simply run:

$ mvn clean install 

This will build the code for all MultiRTS projects, run all tests, and install the JARs to your local Maven repository.

Note: In order to successfully build MultiRTS, you'll need to have the appropriate JTeC version in your local Maven repository.

Usage

MultiRTS is built to be used with Maven Surefire and Failsafe. Therefore, the simplest way to use MultiRTS in a Maven project is through the Maven extension and plugin:

<build>
    <plugins>
        <!-- The extension hooks into Maven lifecycle to build only selected modules. -->
        <plugin>
            <groupId>edu.tum.sse</groupId>
            <artifactId>multirts-maven-extension</artifactId>
            <version>0.0.2-SNAPSHOT</version>
            <extensions>true</extensions>
        </plugin>
        <!-- The plugin provides goals for module and test selection. -->
        <plugin>
            <groupId>edu.tum.sse</groupId>
            <artifactId>multirts-maven-plugin</artifactId>
            <version>0.0.2-SNAPSHOT</version>
        </plugin>
    </plugins>
</build>

A sample project that demonstrates how to use MultiRTS can be found in the multirts-sample-project directory.

Acknowledgments & Contributors

MultiRTS has been developed by Daniel Elsner, whose research has been supported by IVU Traffic Technologies. As part of the BMBF-funded SOFIE and Q-Soft projects, Raphael Noemmer (CQSE) has further contributed significantly to JTeC and other projects that lead to MultiRTS.