Перейти к основному содержимому

Увеличение тестового покрытия

Сценарии, при которых может быть полезна эта функциональность

  • Вы работаете с legacy кодом, планируете брать его на поддержку, хотите зафиксировать текущее поведение кода, чтобы затем его не сломать
  • Вы рефакторите сложный код и хотите гарантировать, что ничего не сломаете
  • У вас в компании есть quality gate на покрытие кода тестами, например, 80%

Как воспользоваться

  1. Около метода или класса нажмите на иконку Explyt и выберите Explyt: Analyze and Increase Test Coverage
  2. Плагин найдёт тесты для данного класса и запустит их с инструментацией для измерения покрытия
    • Внимание. Прогон найденных тестов может занять некоторое время. Оно может быть чуть выше обычного прогона тех же тестов из-за инструментации кода.
  3. Плагин отобразит покрытие по строчкам и по веткам в существующих тестах.
    • Если нажать на View covered lines, вы увидите покрытые инструкции в коде.
    • Красным и зелёным цветом подсвечены, соответственно, непокрытые и покрытые строчки в коде
    • Если у строчки нет цвета, значит её покрытие не имеет смысла (например, это объявление поля)
  4. Нажмите Increase Test Coverage
    • Плагин начнёт генерацию дополнительных тестов
    • В процессе генерации плагин будет: добавлять новые тесты, запускать их с инструментацией и исправлять ошибки
  5. Плагин отобразит результат повышения покрытия по строчкам и по веткам
  6. Если покрытие недостаточно большое, можно продолжить процесс, вернувшись к шагу 3.

Чем это отличается от простых скриптов с ИИ, вроде Qodo-Cover?

Ключевое отличие заключается в использовании у нас формальных методов.

Интуитивно, тесты и тестовые данные генерируются при помощи формальных методов, а ИИ используется в конце для доработки полученных тестов (под стиль проекта).

РазработчикДругие инструментыExplyt
Метод генерацииЧеловеческие усилияЧистый ИИФормальные методы + ИИ
Может ли нагенерировать тесты с нуля?ДаДаДа
Может ли "прорваться" через код, когда покрытие уже достаточно высоко?Нет (не будет, слишком затратно по времени)НетДа
Есть ли гарантия повышения покрытия?Скорее нетНет: тесты генерируются случайноДа: тесты генерируются так, чтобы гарантировано прийти в непокрытые строчки
Затраты времениОчень большиеБольшиеСредние
Затраты денегНетДа, много на прогоны ИИДа, немного в конце на рефакторинг от ИИ