Skip to content

Commit 9695236

Browse files
Update readme
1 parent 1962a72 commit 9695236

1 file changed

Lines changed: 20 additions & 21 deletions

File tree

README.md

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ A Maven plugin that tracks which production classes each test touches at the byt
1010

1111
Large Maven projects waste minutes (or hours) re-running thousands of tests when only a handful of source files changed. This plugin fixes that:
1212

13-
- **Bytecode-level precision** -- instruments every method entry via a Java agent, so it catches dependencies that static analysis misses (reflection, polymorphism, lambdas).
14-
- **Git-aware** -- diffs your working tree against the last commit, last tag, or last full run to find changed files.
15-
- **Zero test changes** -- works with JUnit 4, JUnit 5, and TestNG out of the box. No annotations, no base classes, no test rewrites.
16-
- **Safe by default** -- when in doubt, runs everything. Missing coverage data? Full run. Git error? Full run. The plugin never silently skips tests.
17-
- **Multi-module ready** -- supports reactors with shared coverage maps and concurrent-safe writes under `mvn -T`.
13+
- **Bytecode-level precision**: instruments every method entry via a Java agent, so it catches dependencies that static analysis misses (reflection, polymorphism, lambdas).
14+
- **Git-aware**: diffs your working tree against the last commit, last tag, or last full run to find changed files.
15+
- **Zero test changes**: works with JUnit 4, JUnit 5, and TestNG out of the box. No annotations, no base classes, no test rewrites.
16+
- **Safe by default**: when in doubt, runs everything. Missing coverage data? Full run. Git error? Full run. The plugin never silently skips tests.
17+
- **Multi-module ready**: supports reactors with shared coverage maps and concurrent-safe writes under `mvn -T`.
1818

1919
## Quick start
2020

@@ -61,9 +61,9 @@ mvn verify
6161
└──────────────────────┘ └─────────────────────┘ └───────────────────┘
6262
```
6363

64-
1. **Collect** -- attaches a Java agent to Surefire's forked JVM. The agent instruments every method entry in your production and test classes using ASM bytecode rewriting.
65-
2. **Select** -- uses JGit to detect changed `.java` files, resolves them to compiled classes (including inner classes), looks up the coverage map to find which tests touch those classes, and sets Surefire's `test` filter.
66-
3. **Report** -- merges the per-module coverage dump into the shared coverage map (JSON) and writes a human-readable summary.
64+
1. **Collect**: attaches a Java agent to Surefire's forked JVM. The agent instruments every method entry in your production and test classes using ASM bytecode rewriting.
65+
2. **Select**: uses JGit to detect changed `.java` files, resolves them to compiled classes (including inner classes), looks up the coverage map to find which tests touch those classes, and sets Surefire's `test` filter.
66+
3. **Report**: merges the per-module coverage dump into the shared coverage map (JSON) and writes a human-readable summary.
6767

6868
## Configuration
6969

@@ -111,9 +111,9 @@ Choose the right baseline for your workflow:
111111
The plugin works out of the box with multi-module Maven projects, including parallel builds (`mvn -T`):
112112

113113
- **Shared coverage map** at the reactor root (`target/.test-impact/coverage.json`)
114-
- **Per-module dumps** -- each module's Surefire JVM writes its own binary dump
115-
- **Concurrency-safe merges** -- `report` uses a JVM monitor + OS-level `FileLock` for safe concurrent writes
116-
- **Dependency-aware filtering** -- `select` uses `MavenSession.getProjectDependencyGraph()` to only consider changes in upstream modules
114+
- **Per-module dumps**: each module's Surefire JVM writes its own binary dump
115+
- **Concurrency-safe merges**: `report` uses a JVM monitor + OS-level `FileLock` for safe concurrent writes
116+
- **Dependency-aware filtering**: `select` uses `MavenSession.getProjectDependencyGraph()` to only consider changes in upstream modules
117117

118118
## Safety guarantees
119119

@@ -126,7 +126,7 @@ The plugin is designed to **never silently skip tests**. It falls back to a full
126126
- The change set is empty (ambiguous state)
127127
- No tests intersect with the changed classes
128128

129-
This means you can adopt the plugin incrementally with confidence -- the worst case is running all tests, same as without the plugin.
129+
This means you can adopt the plugin incrementally with confidence. The worst case is running all tests, same as without the plugin.
130130

131131
## Supported test frameworks
132132

@@ -138,7 +138,7 @@ The agent detects test methods by annotation:
138138
| **JUnit 4** | `@Test` |
139139
| **TestNG** | `@Test` |
140140

141-
No configuration needed -- all three are detected automatically.
141+
No configuration needed: all three are detected automatically.
142142

143143
## Goals reference
144144

@@ -170,16 +170,16 @@ mvn clean verify
170170
```
171171

172172
This produces two artifacts:
173-
- `maven-test-impact-plugin-1.0.0-SNAPSHOT.jar` -- the Maven plugin
174-
- `maven-test-impact-plugin-1.0.0-SNAPSHOT-agent.jar` -- the shaded agent JAR (ASM relocated) used as `-javaagent` in the forked Surefire JVM
173+
- `maven-test-impact-plugin-1.0.0-SNAPSHOT.jar`: the Maven plugin
174+
- `maven-test-impact-plugin-1.0.0-SNAPSHOT-agent.jar`: the shaded agent JAR (ASM relocated) used as `-javaagent` in the forked Surefire JVM
175175

176176
## Contributing
177177

178178
Contributions are welcome! Here's how to get started:
179179

180180
1. **Fork** the repository and create a feature branch from `main`
181181
2. **Build & test** locally with `mvn clean verify`
182-
3. **Keep changes focused** -- one feature or fix per pull request
182+
3. **Keep changes focused**: one feature or fix per pull request
183183
4. **Add tests** for new functionality
184184
5. **Open a pull request** against `main` with a clear description of what and why
185185

@@ -198,11 +198,10 @@ src/main/java/io/github/testimpact/
198198

199199
### Areas where help is appreciated
200200

201-
- **Integration test selection** -- Failsafe support with endpoint-flow modeling
202-
- **IDE integration** -- IntelliJ / VS Code plugins for in-editor feedback
203-
- **Gradle port** -- adapt the agent and selection logic for Gradle builds
204-
- **Performance benchmarks** -- real-world numbers on large open source projects
205-
- **Documentation** -- usage guides, blog posts, example projects
201+
- **Integration test selection**: Failsafe support with endpoint-flow modeling
202+
- **Gradle port**: adapt the agent and selection logic for Gradle builds
203+
- **Performance benchmarks**: real-world numbers on large open source projects
204+
- **Documentation**: usage guides, example projects
206205

207206
## License
208207

0 commit comments

Comments
 (0)