Развитие, Основанное На Мутациях

Статья написана на основе поста в телеграм-канале Крестовое соединение .

Прежде чем говорить об этом подходе, я сначала в двух словах объясню, что такое мутационное тестирование в целом.

Для тех, кто не знает.



Мутационное тестирование

Когда вы пишете тесты, TDD или нет, даже с формальным 100% покрытием, вы никогда не будете уверены, что всё в коде действительно протестировано.

Например, вы можете просто ошибиться при вызове Assert в самом тесте.

   

assertEquals($a, $a);

И даже если при тестировании нам удалось достичь какого-то if, то не факт, что все условия в этом if были проверены правильно.

Чтобы убедиться, что тесты действительно тестируются, есть такой способ: сами вносите ошибки в код и смотрите, не приводит ли это к провалу тестов.

Если тесты по-прежнему зеленые с явной ошибкой, значит, не все протестировано.

Например, замените плюс на минус или добавьте к условию «нет» и посмотрите, отреагируют ли тесты.

Этот подход называется «мутационное тестирование».

Обычно это делается в очень важных областях программирования, где ошибки обычно недопустимы.

Например, программное обеспечение марсохода или медицинское программное обеспечение.

Конечно, при строительстве марсохода все это делается автоматически: специальный инструмент искажает вашу программу и проверяет, не прошли ли испытания.

Проблема такого подхода в том, что его довольно утомительно настраивать, много нюансов, как описать, что нужно мутировать, что нет. И все это потребляет дикое количество ресурсов: парсинг кода в AST, мутацию и обратное преобразование.



Развитие, основанное на мутациях

Теперь некоторые авторы предложить подход к разработке, основанный на мутациях.

Это похоже на TDD, но наоборот.

  1. сначала добавьте новый код в проект
  2. временно внести ошибку
  3. напишите тест, который ловит эту ошибку (или исправьте старые тесты)
  4. перейти к следующей строке (или к следующей части условия if).

    Конечно, и здесь можно случайно упустить кусочек логики, но в целом MDD(?) гораздо упрямее, чем 100% покрытие или TDD.

Для меня такой подход кажется интересным, потому что вам не нужно ничего настраивать в CI, не просить выделить дополнительные ресурсы для обработки конвейеров, а просто писать более полный код, даже если в вашей команде есть тимлид или никто команда обычно интересуется MDD. Конечно, это не бесплатно , и безжалостно пожирает ресурсы программиста.

ИМХО, тестирование, основанное на мутациях, может и должно использоваться только там, где есть ответственная логика.

Работа с деньгами, медицинским ПО и т. д. Понятно, что вам не придется тратить ресурсы, как ручные, так и автоматические, на конечную точку, отображающую текущую погоду или прочую ерунду.

В целом, многие проекты содержат 95% стандартного шаблона и лишь немного важной бизнес-логики.

При желании эту важную логику можно довести до состояния, близкого к идеальному.

Конечно, мы обсудим развитие, основанное на мутациях, в одном из следующих выпусков.

«Продажа цинка» , не забудьте подписаться на подкаст Теги: #программирование #мутационное тестирование #Разработка, основанная на мутациях

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.