Увеличение тестового покрытия
Сценарии, при которых может быть полезна эта функциональность
- Вы работаете с legacy кодом, планируете брать его на поддержку, хотите зафиксировать текущее поведение кода, чтобы затем его не сломать
- Вы рефакторите сложный код и хотите гарантировать, что ничего не сломаете
- У вас в компании есть quality gate на покрытие кода тестами, например, 80%
Как воспользоваться
- Около метода или класса нажмите на иконку
Explyt
и выберитеExplyt: Analyze and Increase Test Coverage
- Плагин найдёт тесты для данного класса и запустит их с инструментацией для измерения покрытия
- Внимание. Прогон найденных тестов может занять некоторое время. Оно может быть чуть выше обычного прогона тех же тестов из-за инструментации кода.
- Плагин отобразит покрытие по строчкам и по веткам в существующих тестах.
- Если нажать на
View covered lines
, вы увидите покрытые инструкции в коде. - Красным и зелёным цветом подсвечены, соответственно, непокрытые и покрытые строчки в коде
- Если у строчки нет цвета, значит её покрытие не имеет смысла (например, это объявление поля)
- Если нажать на
- Нажмите
Increase Test Coverage
- Плагин начнёт генерацию дополнительных тестов
- В процессе генерации плагин будет: добавлять новые тесты, запускать их с инструментацией и исправлять ошибки
- Плагин отобразит результат повышения покрытия по строчкам и по веткам
- Если покрытие недостаточно большое, можно продолжить процесс, вернувшись к шагу 3.
Чем это отличается от простых скриптов с ИИ, вроде Qodo-Cover?
Ключевое отличие заключается в использовании у нас формальных методов.
Интуитивно, тесты и тестовые данные генерируются при помощи формальных методов, а ИИ используется в конце для доработки полученных тестов (под стиль проекта).
Разработчик | Другие инструменты | Explyt | |
---|---|---|---|
Метод генерации | Человеческие усилия | Чистый ИИ | Формальные методы + ИИ |
Может ли нагенерировать тесты с нуля? | Да | Да | Да |
Может ли "прорваться" через код, когда покрытие уже достаточно высоко? | Нет (не будет, слишком затратно по времени) | Нет | Да |
Есть ли гарантия повышения покрытия? | Скорее нет | Нет: тесты генерируются случайно | Да: тесты генерируются так, чтобы гарантировано прийти в непокрытые строчки |
Затраты времени | Очень большие | Большие | Средние |
Затраты денег | Нет | Да, много на прогоны ИИ | Да, немного в конце на рефакторинг от ИИ |