Не вредит ли качеству вашего ПО тестирование через страх? |
26.08.2025 00:00 |
Что такое тестирование, управляемое через страх?Тестирование, управляемое через страх (FDT), — это непреднамеренный подход к тестированию программного обеспечения, возникающий в ситуациях, когда участники процессов обеспечения качества (QA-инженеры, разработчики, бизнес-аналитики и другие) выполняют свои задачи в первую очередь из страха, что дефекты могут ускользнуть и попасть в продуктив. Такое поведение может быть вызвано разными причинами: давлением со стороны бизнеса, нехваткой знаний в предметной области, жёсткими сроками и т.д. Ещё один важный аспект — это восприятие качества внутри команды и бизнеса:
Если процесс построен так, что QA-инженеры становятся единственными "хранителями качества", без полноценного участия других специалистов, это приводит к тому, что тестирование превращается в деятельность, движимую страхом — страхом быть обвинёнными в том, что баг не был обнаружен до выхода в продуктив. FDT может серьёзно навредить проекту разработки и помешать лучшим практикам тестирования. Он не только снижает способность команды стабильно поставлять ценность пользователям, но и негативно сказывается на моральном духе и удовлетворённости команды: из-за таких практик возникает дополнительная работа, которая мало что даёт. Вот примеры последствий FDT:
Чаще всего команды даже не осознают, что работают по модели FDT. Поэтому первый шаг — осознать существование такого подхода, понять его влияние и начать двигаться в сторону более здоровой модели работы. Кембриджский словарь определяет страх как «неприятную эмоцию или мысль, возникающую, когда вы напуганы или обеспокоены чем-то опасным, болезненным или плохим, что происходит или может произойти». В разработке программного обеспечения мы можем испытывать беспокойство или страх по поводу предстоящего релиза — или, что ещё хуже, действовать под влиянием страха из-за травматичного опыта, связанного с предыдущими релизами. Если страх использовать правильно, он может стать мощным топливом, которое помогает нам сохранять внимательность и сосредоточенность, подмечать потенциальные проблемы и области, требующие особого внимания. Проблемы начинаются, когда страх становится нашим единственным ориентиром, из-за чего мы начинаем игнорировать такие важные аспекты, как:
В этой статье мы рассмотрим, почему некоторые команды и компании попадают в такую ситуацию. Затем обсудим симптомы FDT, его последствия и, наконец, способы улучшения ситуации. Разберемся в причинах FDTВыявление первопричин — распространённый подход в разработке ПО, и мы точно так же можем лучше понять FDT, если определим факторы, которые к нему приводят. Как только мы разберёмся, что именно влияет на возникновение FDT, мы сможем оценить это влияние и определить, как двигаться дальше. В этом разделе мы опишем часть проблем, с которыми мы сталкивались на практике, и расскажем, как с точки зрения обеспечения качества они порождают подход, основанный на страхе. Недостаток знаний в предметной областиБольшинство специалистов, участвующих в разработке программного обеспечения (разработчики, тестировщики, бизнес-аналитики и т. д.), рано или поздно сталкиваются с необходимостью работать в незнакомых бизнес-доменах. Когда мы присоединяемся к новому проекту или компании, вполне естественно, что наши знания в предметной области будут со временем расти, и позволят нам принимать более обоснованные решения. Однако недостаток этих знаний может быстро перерасти в проблему, особенно если:
В такой ситуации новичкам становится гораздо сложнее освоиться и уверенно ориентироваться в новой области. Проблема Решение Знание предметной области — это топливо, на котором работают качественные решения. Оно позволяет членам команды понимать, как работает функциональность и как она взаимодействует с другими частями системы. Это, в свою очередь, даёт возможность:
Плохое знание архитектуры и кодовой базыДля того, чтобы спроектировать и реализовать эффективную стратегию тестирования — от старта проекта до выпуска функционала конечным пользователям — необходимо обеспечить полноценную валидацию на каждом этапе: от юнит-тестов до сквозных сценариев (end-to-end). Качество должно быть частью повседневной работы команды, а тестирование на всех уровнях пирамиды тестирования критически важно для получения ранней обратной связи по изменениям. Когда между тестировщиками и разработчиками практически нет взаимодействия, возникает недостаток прозрачности и понимания, какие именно проверки проводятся на каждом уровне. Это приводит к дублированию работы — например, функциональность, полностью покрытая на уровне юнит- и компонентных тестов, дополнительно проверяется сквозными тестами, которые дороже в поддержке и дольше выполняются. Проблема Решение Привлекать тестировщиков к работе с низкоуровневыми тестами, разработчиков — к участию в end-to-end тестировании, и объединять усилия команды в таких направлениях, как, например, нагрузочное тестирование. Плохое понимание взаимодействия между разными частями системыСэм Ньюман [1] определяет микросервисы как независимо разворачиваемые сервисы, спроектированные вокруг бизнес-домена. Каждый сервис инкапсулирует функциональность и предоставляет её другим участникам системы через сеть. Например, один сервис может отвечать за управление складом, другой — за обработку заказов, третий — за доставку. Вместе они формируют полноценную систему электронной коммерции. С ростом числа приложений, построенных на микросервисной архитектуре [2][3], жизненно важно понимать, какую роль играет каждый сервис, чтобы грамотно планировать работу. Необходимо задать себе следующие вопросы:
Если у нас нет ответов на эти вопросы, то мы оказываемся в ситуации, где любое изменение воспринимается как высокий риск. В результате мы начинаем добавлять избыточные уровни валидации, чтобы просто убедиться, что ничего критичного не сломали. Проблема Решение Использование специализированных инструментов — например:
Это позволяет отслеживать зависимости и управлять точками интеграции осознаннее и безопаснее. Недостаточная изоляция сервисовОдно из ключевых преимуществ микросервисной архитектуры — возможность проверять каждый сервис независимо от остальных. Чтобы это было возможно, необходимо:
Для этого критически важны:
Тестирование должно быть спроектировано так, чтобы максимально использовать преимущества архитектуры микросервисов. В противном случае вся архитектура не даст ожидаемой выгоды. Проблема Решение Жёсткие срокиСрочность — обычное дело в большинстве проектов по разработке ПО. Она может быть вызвана контрактными обязательствами, важными для коммерции датами (например, Рождество, Черная Пятница и т. д.), конкуренцией и другими причинами. В таких условиях время становится необсуждаемым фактором. Чтобы не жертвовать качеством, необходимо обеспечить непрерывное тестирование на протяжении всего проекта, несмотря на возможное расширение объёма работ. Сами по себе фиксированные сроки уже вызывают беспокойство у многих участников команды. С точки зрения тестирования это часто означает, что время на тест может быть урезано. Поэтому крайне важно, чтобы проверки были встроены на всех уровнях разработки как можно раньше. Если тестированию отводится второстепенная роль, риск неэффективного и хаотичного этапа проверки в самом конце возрастает многократно. Проблема Решение Автоматизация должна присутствовать на разных уровнях, а подход к непрерывному тестированию должен включать:
Давление со стороны руководстваРабота под давлением перед релизом — часть нашей профессии. Но ситуация может быстро выйти из-под контроля, особенно когда к давлению добавляются следующие факторы:
В таких условиях QA-специалисты часто воспринимаются исключительно как черные вестники, потому что именно они выявляют проблемы, тормозящие релиз. Другая распространённая проблема — восприятие тестирования как «простой» задачи, которую может выполнить кто угодно. Это приводит к:
Проблема Решение Тестирование должно проходить на всех этапах проекта, а вопросы качества обсуждаются и приоритизируются как можно раньше. Неэффективное управление тестовыми даннымиУправление тестовыми данными — это типичная задача в разработке программного обеспечения, особенно когда требуется сотрудничество между несколькими командами, отвечающими за разные сервисы. Именно наличие релевантных данных позволяет нам:
Если тестовые данные отсутствуют или нерелевантны, это приводит к тому, что дефекты остаются незамеченными. Такой подход подпитывает цикл страха, создавая ещё больше давления и задержек в последующих циклах тестирования. Проблема Решение Ограничения тестовой средыТестирование может быть эффективным и предоставить ценную обратную связь на протяжении всего цикла разработки, только если оно проводится в подходящих тестовых средах. Это касается как тестов, выполняемых на локальных машинах, так и тех, которые проводятся на различных этапах наших пайплайнов непрерывной интеграции / развертывания. Ограничения всегда будут присутствовать, например:
Подобные проблемы могут помешать расширению покрытия автоматических проверок, увеличивая потребность в ручных проверках. Более того, когда цель тестовой среды не определена чётко, команды начинают считать, что приложение можно безопасно тестировать только в полностью интегрированной среде, что приводит к неэффективным повторным тестированиям в разных средах. Проблема Решение Дублирование тестовДублирование тестов может быть как полезным, так и вредным. В некоторых случаях проверка функциональности на разных уровнях тестирования (юнит, компонент, интеграция, UI) улучшает покрытие, так как каждый уровень выявляет разные проблемы. Однако вредное дублирование увеличивает время тестирования без существенной пользы:
Проблема Решение Бесконечное тестированиеКогда процесс тестирования управляется страхом, объём тестирования зачастую превышает необходимый. Из-за отсутствия доверия к предыдущим этапам тестирования те, кто планирует следующую итерацию, склонны быть чрезмерно осторожными, что приводит к ошибкам, таким как:
Проблема Решение Чрезмерный фокус на end-to-end тестированииСогласно глоссарию ISTQB [4], end-to-end тестирование — это «вид тестирования, при котором бизнес-процессы тестируются от начала до конца в условиях, максимально приближенных к производственным». Обычно это тестирование проводится через пользовательский интерфейс в среде, максимально похожей на производственную, что имеет большую ценность и позволяет закрыть пробелы, оставшиеся от предыдущих уровней тестирования. Проблемы начинаются, когда у нас нет доверия к тестам более низких уровней или понимания того, как они работают. В результате мы начинаем предполагать, что большее покрытие end-to-end тестами означает большее доверие к приложению. По своей природе end-to-end тесты требуют много времени, независимо от того, выполняются ли они вручную или с помощью автоматизации. От управления тестовыми данными до координации развертываний и настройки сценариев — они всегда приводят к более длительным циклам обратной связи. Поэтому очень важно правильно сбалансировать, что именно должно тестироваться на этом уровне. Проблема Решение Оформление багов вместо общения внутри командыБаги и улучшения— это формальный способ, при помощи которого тестировщики (QA) сообщают о своих находках команде - обычно через инструмент управления дефектами, например, JIRA. Это полезный механизм, упрощающий общение со всеми заинтересованными, помогающий в приоритизации проблем и определении их важности/серьезности. Проблемы начинаются, когда баги начинают рассматриваться как мера «эффективности тестирования». Тестовый цикл начинается, и менеджеры обсуждают в первую очередь статистику – например, количество и серьёзность заведенных багов. В этом контексте часто возникает ситуация, когда люди чувствуют, что их находкам не уделят внимания, если они не зарегистрированы как баги, и в результате что угодно оформляется как дефект. Поощрение создания дефектов до того, как заданы вопросы и исследовано поведение, приводит к возникновению дефектов с рядом проблем:
Проблема Решение Множественные проверки / утверждения артефактов тестированияДругим индикатором тестирования, основанного на страхе, является отсутствие доверия к командам, обеспечивающим правильность сервисов и безопасность интеграции. Такие процессы, как планирование и проектирование тестов, в этом случае проходят через бюрократию, когда ничто не считается завершённым без внешних проверок/утверждений. Способность команды определить и спланировать, какие сценарии будут частью конкретного тестового цикла, часто ставится под сомнение как попытка контролировать, что тестируется и как это будет выполнено. Очевидно, это увеличивает время, которое необходимо потратить, и количество задействованных людей, снова создавая дополнительную работу, от которой очень мало толка. Проблема Решение Избыточная документацияДокументация тестирования ПО может принимать различные формы: планы тестирования, тест-кейсы, отчёты и т. д. Её цель — дать команде информацию о том, как мы подходим к качеству, что охвачено нашими тестами и какие результаты были достигнуты. Через обзор документации мы можем улучшить наш подход и предоставить более эффективную и надёжную информацию заинтересованным сторонам. В условиях культуры вины прилагается больше усилий, чтобы документировать все на свете и защититься с помощью документов. Документация начинает использоваться как инструмент, который показывает, что «процесс» был выполнен, что проверяющие утвердили план, и, следовательно, мы не виноваты в том, что дефект ускользнул. Например, может быть создан и запущен набор автоматизированных end-to-end тестов:
Проблема Решение Влияние и последствия игнорирования FDTЗамедленная обратная связьОдна из задач тестирования - это предоставление команде и заинтересованным сторонам ценной информации на разных этапах жизненного цикла разработки ПО, что позволяет принимать более обоснованные решения. Как показано в предыдущих разделах, тестирование, управляемое страхом, добавляет ненужные задачи, расширяя объём/необходимое время и замедляя циклы обратной связи. Недовольство командыТо, как мы работаем как команда и наша способность влиять на наши процессы – это важный фактор удовлетворённости команды. Тестирование, управляемое страхом, влияет на моральный дух и удовлетворённость команды несколькими способами:
QA становится узким местомКогда фокус смещается на страх пропустить дефекты, тестировщики оказываются в центральной позиции, становясь «привратниками». Все чувствуют боль от ожидания результатов тестирования, но при этом никто не хочет брать на себя ответственность за утверждение этих результатов. В сочетании с такими факторами, как отсутствие понимания приложения, низкое доверие к тестам на нижних уровнях, чрезмерный акцент на тестировании от конца до конца, избыточная документация и долгие процессы утверждения, это приводит к тому, что каждое изменение проходит через трудоемкий процесс, где риски и последствия оцениваются неэффективно. Как минимизировать влияние тестирования, управляемого страхомСтрах – это не проблема, если мы понимаем его и принимаем меры для предотвращения или минимизации его влияния. Первый шаг — это признание, что тестирование управляется страхом. Некоторые проблемы можно решить с помощью команды QA, например, избыточное тестирование и чрезмерное внимание к тестированию от конца до конца, в то время как, скажем, многослойные процессы утверждения или избыточная документация требуют усилий всей команды. Как мы упомянули в начале, бояться или переживать по поводу возможного исхода — это не проблема, если мы понимаем причины этого страха и предпринимаем шаги для его минимизации. Описание подхода:
В идеале это должно быть частью цикла непрерывного улучшения. Этот процесс не завершится за один цикл, и он не принесёт результатов, если мы не будем постоянно отслеживать и оценивать эффективность наших действий. Качество программного обеспечения должно стать частью повседневного мышления компании, от высшего руководства до младших тестировщиков и разработчиков. Каждый должен внести свой вклад, чтобы повысить уровень уверенности в нашем процессе разработки и в нашей способности поставлять ПО, которое приносит ценность нашим клиентам. ЗаключениеТестирование, управляемое страхом, — это дисфункциональный подход к тестированию, который может медленно просачиваться в работу всей команды или даже всей компании. Если наша работа будет управляться страхом дефектов, которые могут попасть на прод, или страхом стать виноватыми в баге, это не только повлияет на нашу способность выпускать релизы, но и отразится на психоэмоциональном состоянии команды и, что важнее всего, не гарантирует, что дефекты не утекут в релиз. Уход от тестирования, управляемого страхомВыполнение необходимого объёма тестирования на правильном уровне и в требуемые сроки — задача непростая. Качество должно быть ответственностью каждого, тогда команды будут лучше подготовлены; это повысит уверенность в релизе и улучшит способность предоставлять важную информацию заинтересованным сторонам вовремя. Приоритет анализа рисков, поощрение культуры обмена знаниями по предметной области и продвижение подхода раннего и непрерывного тестирования на всех уровнях — это ценные инструменты для борьбы с тестированием, управляемым через страх. Ссылки
|