junior
Что такое Code Coverage?
Code Coverage (покрытие кода) – метрика, показывающая, какой процент кода выполняется при запуске тестов. Стандартный инструмент в Java-экосистеме – JaCoCo.
Типы покрытия
| Тип | Что измеряет | Пример |
|---|---|---|
| Line coverage | % строк, выполненных тестами | 80 из 100 строк = 80% |
| Branch coverage | % ветвлений (if/else, switch) | Протестирована ли каждая ветка if? |
| Method coverage | % методов, вызванных тестами | Все ли публичные методы вызваны? |
| Instruction coverage | % байткод-инструкций | Наиболее точная метрика |
JaCoCo – настройка в Maven
Конфигурация JaCoCo в pom.xml
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.12</version>
<executions>
<execution>
<goals><goal>prepare-agent</goal></goals>
</execution>
<execution>
<id>report</id>
<phase>test</phase>
<goals><goal>report</goal></goals>
</execution>
<execution>
<id>check</id>
<goals><goal>check</goal></goals>
<configuration>
<rules>
<rule>
<limits>
<limit>
<counter>LINE</counter>
<value>COVEREDRATIO</value>
<minimum>0.80</minimum>
</limit>
</limits>
</rule>
</rules>
</configuration>
</execution>
</executions>
</plugin>
Разумные пороги покрытия
| Метрика | Минимум | Комментарий |
|---|---|---|
| Line coverage | 80% | Разумный минимум для большинства проектов |
| Branch coverage | 70% | Важнее line coverage – показывает edge cases |
| 100% | Не цель | Геттеры, DTO, конфигурация не нуждаются в тестах |
Mutation Testing – следующий уровень
Code coverage показывает, что код выполняется, но не показывает, что тесты действительно ловят ошибки. Mutation testing (PIT) вносит мутации в код (меняет > на <, удаляет строки) и проверяет, падают ли тесты. Если тест не замечает мутацию – он бесполезен.
Ключевые принципы
- 80% line coverage – разумный минимум для большинства проектов
- 100% – не цель: геттеры, конфигурация, DTO не нуждаются в тестах
- Branch coverage важнее line coverage – показывает, протестированы ли edge cases
- JaCoCo интегрируется с SonarQube для визуализации и трендов
Частые ошибки
- Гонка за 100% – тестирование
toString()и конструкторов ради метрики бессмысленно - Coverage без assertions – тест вызывает метод, но не проверяет результат; coverage растёт, качество – нет
- Exclusion вместо исправления – исключение пакетов из отчёта вместо написания тестов
Как используется в 2026
- JaCoCo + SonarQube – стандартная связка в CI/CD pipeline
- Quality Gate: “coverage не должен падать” (delta check) важнее абсолютной цифры
- Mutation testing (PIT) – более продвинутая альтернатива: проверяет, ловят ли тесты реальные мутации в коде
На собеседовании: интервьюер хочет услышать не только “JaCoCo измеряет покрытие”, но и понимание, что высокий coverage не гарантирует качество тестов (coverage без assertions). Частая ошибка – назвать 100% как цель или не знать про branch coverage.