Мутационное тестирование — техника, которая поможет оценить качество тестового покрытия.
Принцип её работы прост: для покрытого тестами кода нужно сгенерировать «мутантов» 👾
Мутант — это небольшое изменение кода, которое намеренно вносит в программу ошибку: например, меняет > на >= или удаляет оператор. После того, как в исходном коде созданы такие ошибки-мутанты, мы заново прогоняем тесты.
Если тесты не замечают изменений и не падают, это повод присмотреться к ним получше: возможно в тест-дизайне проекта есть проблемы.
Мутационное тестирование сейчас набирает популярность, но использовать его повсеместно мешают несколько проблем:
▪️Низкая скорость тестирования для больших проектов.
▪️«Бесконечные мутанты» — циклы, которые при определенных мутациях становятся бесконечными. Впрочем, существующие инструменты более-менее успешно справляются с этой проблемой.
▪️«Идентичные мутанты»: иногда мутация не нарушает заложенной логики и тесты её не «ловят». Но это единичные случаи.
Как в Badoo и Bumble обходят эти проблемы и используют мутационное тестирование, мы рассказывали в
статье на Хабре.
«Мутационное тестирование поможет сделать ваши юнит-тесты лучше, а отслеживание code coverage — осмысленнее. Для PHP уже есть инструмент, так что если у вас небольшой проект без заморочек, то прямо сегодня берите и пробуйте!» — советует Владимир Янц, Lead PHP developer Badoo.