Изначально парадокс пестицида – это любопытный сельскохозяйственный термин. Он означает, что при длительном применении одного и того же средства на сельскохозяйственных культурах у вредителей вырабатывается устойчивость к нему, и пестицид перестает действовать.
В 1990 году Борис Бейзер в своей книге Software Testing Techniques, Second Edition ввел термин “парадокс пестицида” в контексте тестирования программного обеспечения. Он писал: “Любой метод, который вы используете для предотвращения или поиска ошибок, оставляет после себя часть скрытых проблем, против которых этот метод бессилен”.
Эта цитата подразумевает, что когда один и тот же набор тестов выполняется в течение некоторого времени, он может не обнаружить новых дефектов, появившихся в результате исправления ошибок или изменения функционала, и в конечном итоге станет неэффективным. В этой статье мы рассмотрим причины парадокса пестицида в тестировании и способы борьбы с ним.
Друзья, поддержите нас вступлением в наш телеграм канал QaRocks. Там много туториалов, задач по автоматизации и книг по QA.
Содержание:
Почему возникает парадокс пестицида?
Парадокс пестицида может возникнуть по следующим причинам:
Развивающееся приложение
Развивающееся приложение постоянно улучшается, однако исправление старых ошибок и создание нового функционала приводят к появлению новых дефектов. Если тесты не обновляются и не соответствуют изменениям, вновь появившиеся дефекты будут просачиваться в приложение.
Устаревшие тесты и данные
Избегайте стагнации тестов и развивайте их вместе с приложением. Набор тестов необходимо обновлять каждый раз, когда в приложении появляется новый функционал или исправляются ошибки. Следите за их актуальностью, добавляйте новые релевантные тестовые случаи, тестовые данные и обновляйте существующие тесты с учетом изменений в приложении.
Недостаточное покрытие тестами
Ограничение тестового покрытия отдельными областями приложения приведет к тестированию только их функционала. Остальные важные функции останутся не протестированными, и дефекты могут попасть в финальную версию продукта.
Парадокс пестицида в автоматизации тестирования
Теперь давайте посмотрим как обстоят дела с парадоксом пестицида в автоматизации тестирования. Причины парадокса пестицида в автоматизации тестирования могут быть следующие:
Неподдерживаемые тесты
Автоматизация тестирования является непрерывным процессом, и тестовые скрипты нуждаются в регулярной поддержке. Заблуждение, что автоматизированные тесты вечны, может привести к парадоксу пестицида, когда казалось бы все в порядке! Поэтому во избежание пропущенных дефектов тестировщики должны включать проверку новых функций и изменений в автоматизированные тесты.
Отсутствие управления тестовыми данными
Тестовые данные так же важны, как и тест-кейсы. Однако тестовым данным обычно уделяется меньше всего внимания, что приводит к ложным негативным или позитивным результатам. Например, когда одни и те же тестовые данные, которые повторяются и не изменяются в течение длительного времени, используются для тестирования, тесты стабильно проходят успешно, но это может быть ложно-позитивный результат.
Регрессионные тесты
Лучший вариант использования автоматизации тестирования – это регрессионные тесты. Они запускаются каждый спринт, чтобы поднять тревогу, если что-то пошло не так. А что, если они не дают никаких предупреждений и создают впечатление, что все под контролем? Это обычное явление при регрессионном тестировании, если тесты не обновляются, чтобы соответствовать изменениям в приложении, и в каждом спринте запускаются одни и те же устаревшие регрессионные тесты.
Подробнее об эффективных регрессионных тестах читайте здесь.
Ограничения тестовой среды
Сценарии, в которых тестовая среда не может полностью повторить продакшен, могут привести к успешному прохождению тестов и ложно-позитивным результатам. Такие ситуации могут быть актуальны в том случае, если продакшен постепенно вырос из простого в сложный. Теперь, когда трудно полностью воспроизвести сетевое окружение, базу данных, аппаратные и программные компоненты, тесты успешно проходят в более простой тестовой среде. Однако в реальной среде их бы ждал провал.
Нехватка ресурсов и времени
Методологии Agile и DevOps по сравнению с водопадной методологией отличаются более быстрыми и компактными циклами тестирования. Создание и поддержка автоматизированных тест-кейсов в коротких спринтах может оказаться сложной задачей из-за нехватки времени и ресурсов. Это часто приводит к уменьшению набора тестов для автоматизации или выполнению их без учета последних изменений в приложении. Тестовое покрытие страдает в обоих случаях. Парадокс пестицида может возникнуть из-за того, что существующий набор тестов не смог обнаружить ошибки и продемонстрировал ложную стабильность.
Недостижимость 100% автоматизации тестирования

Стопроцентная автоматизация – это миф, и при использовании традиционных средств автоматизации тестирования она неосуществима.
Сложные сценарии не могут быть автоматизированы.
Кроме того, всегда существуют виды тестирования, которые можно выполнить только вручную: исследовательское тестирование, тестирование удобства использования, ad-hoc тестирование и т. д. Если полагаться только на автоматизированные тесты, игнорируя другие виды тестирования, тесты могут успешно пройти и дать ложное ощущение, что продукт полностью проверен.
В отсутствие тест-кейсов, опирающихся на человеческий интеллект, все будет казаться прекрасным и работающим, однако на самом деле реальные пользователи могут столкнуться с проблемами после выпуска продукта.
Лучшие методы предотвращения парадокса пестицида
Существует несколько практик, которые помогут вам избежать парадокса пестицида и поддерживать автоматизированные тесты в хорошем состоянии. Хотя этот список не является исчерпывающим, он охватывает основные области.
Регулярная поддержка тестов
Сопровождение – это следующий важный шаг после автоматизации тестов. Неактуальные и устаревшие тест-кейсы принесут больше вреда, чем пользы. Регулярная поддержка автоматизированных тестов в идеале должна включать три действия:
- Обновление существующих тест-кейсов с учетом улучшений и исправлений в существующем функционале и выпуска нового.
- Добавление новых тест-кейсов в соответствии с изменениями в приложении.
- Удаление тест-кейсов, которые устарели в связи с изменениями в приложении.
Независимая оценка
При добавлении новых или обновлении существующих тест-кейсов полезно провести независимую оценку и обсудить новые/существующие функции приложения с членами команды. Независимая оценка помогает получить различные точки зрения и улучшить процесс создания тест-кейсов.
Расширение тестового покрытия
Мы никогда не сможем добиться 100-процентного тестового покрытия с помощью традиционных средств автоматизации. Но мы должны стремиться к максимальному покрытию при автоматизации тестирования. Обсуждение новых функций с заинтересованными сторонами поможет расширить покрытие продукта тестами. Не полагайтесь только на существующие тест-кейсы.
Расширение тестового покрытия также связано с актуальностью тестовых данных. Поддерживайте тестовые данные разнообразными, обновленными и полными, чтобы покрыть все реальные сценарии.
О том, как расширить тестовое покрытие, читайте здесь.
Проверка наборов тестов
Тестовые скрипты тоже порой содержат ошибки, и они могут отвлечь внимание от разработки приложения на разработку автоматизированных тест-кейсов. Более того, они могут давать ложно-позитивный результат и отрицательно влиять на качество программного обеспечения.
Иногда автор тест-кейса не может найти ни одной ошибки в своем коде из-за предвзятости и близорукости. Чтобы обнаружить потенциальные проблемы необходимо проверять набор тестов и другими членами команды. Ретроспективный анализ для выявления закономерностей и повторяющихся проблем поможет улучшить эти тесты.
Приоритезация тестов
Определение приоритетов при создании тест-кейсов – один из эффективных способов борьбы с парадоксом пестицида. Оцените и определите приоритетность кейсов на основе бизнес-риска, критичности, доли рынка, влияния и т. д. Сначала напишите кейсы для хорошего покрытия высокоприоритетных тестов, а затем постепенно переходите к менее приоритетным.
Ad-hoc тестирование и тестирование взаимодействия с пользователем
Хотя мы говорим об автоматизации тестирования, чтобы обойти парадокс пестицида человеческий взгляд на детали просто необходим. Мы не можем отрицать важность и эффективность исследовательского или ad-hoc тестирования, которое не следует никаким определенным правилам. Такое случайное тестирование помогает обнаружить множество дефектов, которые автоматизированные тесты могут не выявить.
Agile и DevOps тестирование
Интегрируйте автоматизированные тесты в конвейер CI/CD, чтобы получать быструю и раннюю обратную связь. Убедитесь, что тесты запускаются всякий раз, когда в код вносятся изменения. Такая ранняя обратная связь позволяет разработчикам вносить изменения в код на ранних стадиях и значительно снижает стоимость вывода продукта на рынок.
Эффективный анализ дефектов
Анализ ошибок помогает добраться до первопричины проблемы. Благодаря ему можно определить проблемную область и предотвратить возможное повторение подобных ситуаций. Анализ дефектов включает в себя следующие шаги:
- Воспроизведение дефекта: используйте автоматизированные тесты для стабильного повторения дефекта.
- Сбор необходимой информации: соберите для анализа информацию, такую как среда, тестовые данные, шаги по воспроизведению, логи, сообщения об ошибках и т. д.
- Анализ первопричины: проанализируйте дефект с заинтересованными участниками и выясните причину: проблемы в конфигурации, окружении, коде, данных и т. д.
- Отладка кода: вся эта информация облегчает исправление дефекта разработчиками.
- Повторное тестирование после исправления дефекта: запустите тесты повторно, чтобы убедиться, что дефект устранен.
- Ретроспективный анализ: проведите ретроспективный анализ дефекта, чтобы определить возможные улучшения процесса и обсудить полученные уроки и превентивные меры на будущее.
Заключение
Первый шаг к устранению парадокса пестицида – избавиться от позиции всезнайки. В приложении много слоев, и изучить его полностью очень сложно. Ни один набор автоматизированных тестов не является окончательным и полным, и всегда есть пространство для улучшения.
Стремитесь к максимальному покрытию и пишите различные ad-hoc тесты, чтобы обнаружить дефекты, которые в противном случае могут остаться незамеченными. Ключевым моментом является постоянный мониторинг и обновление тестов, чтобы они оставались актуальными, эффективными и ценными с точки зрения ROI.
Перевод статьи «The Pesticide Paradox: Sustaining the Effectiveness of Testing Methods».
Пингбэк: 5 ключевых принципов тестирования