Как мы тестируем наши тесты? Как я узнаю, что мои низкоуровневые тесты хорошо обновляются в быстро меняющейся гибкой среде? В чем проблема с покрытием кода? Как я узнаю, что тесты, которые я унаследовал, конкретны? Одним из решений, позволяющих справиться со всем этим, является Мутационное тестирование.

Тестирование мутаций?

Мутационное тестирование — это процесс анализа того, убивает ли тест мутантов, внедренных в фрагмент кода. Если тест не пройден при введении мутантов, мы говорим, что мутанты убиты, иначе они все еще живы. Чем больше мутантов убивает тест, тем лучше. Короче говоря, мутационное тестирование позволяет нам проверять точность и эффективность написанных тестов на предмет будущих изменений или возможных ошибок в нашем коде. Судя по всему, если ваши тесты найдут мутантов, то наверняка обнаружат и настоящие баги. Результаты мутационного тестирования можно использовать для измерения эффективности тестовых случаев.

Что такое мутанты?

Мутантные операторы — это небольшие изменения, сделанные в программе (например: изменение › на ›= ), чтобы сделать код немного отличным от исходного. Каждое преобразование приводит к созданию новой программы, называемой мутантом. Процесс создания мутанта из исходной программы называется мутагенезом.

// original Code

if (i < 10) {
        return "fizz";
        }

// mutant version
        if (i > 10) {
        return "fizz";
        }

Изменение с ‹ на › является мутантным оператором. Мутантные операторы могут быть чем угодно, например заменой › на = или › на != и т. д., или даже именами методов, которые вызываются в коде.

Покрытие кода отстой?

Покрытие кода можно определить как процент выполненных строк кода. К сожалению, выполняемые строки кода не являются проверенным кодом. Получение ошибки в рабочей среде — самая дорогая вещь в процессе разработки программного обеспечения, и по этой причине нижний уровень тестовых случаев должен быть конкретным. Проверка кода через равные промежутки времени — это хорошо, но это не решит проблемы. Проблема хорошо, так как у обзоров кода есть несколько недостатков: обратная связь приходит очень медленно, непоследовательно, а трудозатраты высоки. Таким образом, мутационное тестирование позволяет эффективно тестировать тесты нижнего уровня. Выжившие мутанты открывают нам область кода, которая требует повышенного внимания и должна быть найдена как можно скорее.

Почему важно тестирование мутаций?

  • Дает команде высокую уверенность в тестовых примерах и эффективно тестирует ваши тесты.
  • Улучшить покрытие кода
  • Усиливает использование механизмов TDD в большей степени
  • Он может выделить избыточный код

Тестирование мутаций для Java

Чтобы начать работу с мутационным тестированием для java, настоятельно рекомендуется использовать PIT. Вы можете прочитать больше об этом здесь".

Ссылки

Несколько хороших статей, которые я наткнулся на тестирование мутаций:

https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/46584.pdf



Что вы думаете о мутационном тестировании? Напиши мне :)