Привет, Хабр! В поисках формата для рассказа о практиках тестирования я обратилась к гуглу с запросами “с чего начинать тестирование ПО” и “как подготовиться к тестированию ПО”. И нашла статьи о том, что нужно уточнять требования, применять техники и т. д. Хм… А что, если “составляющими контроля качества ПО” и даже в своем роде глоссариями в том самом поиске и стали стандарты и производные об этапах STLS? Да, все это необходимо – но недостаточно, подумала я.

И если вы, при наличии всех процессов тестирования,

  • выводили в PROD не то, что протестировали;
  • тестируете не то, что нужно;
  • находите баги в PROD, которых точно нет в тесте;
  • вынуждены много раз тестировать одно и то же из-за процессных сбоев

– знайте, эта статья для вас.

Велосипед не едет, если у тестирования нет основы. В статье я хочу рассказать, что мы предварительно настраиваем, чтобы тесты были достоверными, эффективными и предсказуемыми.

DISCLAIMER


1. Перечисленное ниже является структурой “предподготовки”, а не готовым шаблоном. Инструменты, подходы, процессы представлены на правах примеров. По уму они должны выбираться исходя из особенностей проекта и продукта. Эти кейсы подходят большой линейке, но не всей (особенно боюсь поднять халивар на тему GIT flow). В любом случае, буду рада обсудить другие кейсы и особенности проектов в комментариях.

2. Наличие “предподготовки” позволяет обеспечить тестирование высокого уровня, но не гарантирует его. Однако при наличии базовых настроек гораздо проще отследить, где проседает тестирование, и принять меры.

3. Я намеренно опустила некоторые преднастройки, которые сильно зависят от принятого на проекте тестирования. Например, если в компании Х принято тестировать продукт серым ящиком, то очевидно, что в качестве преднастройки должен быть организован доступ к тестовым средам. Постаралась выделить самые главные, которые подходят большинству.

Коммуникации


Хорошо выстроенные коммуникации позволяют превратить формальные проверки в клиентоориентированное тестирование.

Роли в проекте


Мы выделяем 5 значимых ролей для тестировщика со следующим предназначением:

  1. Разработчик – поставляет информацию об алгоритме фичи. Это не вопрос “что тестировать”, его мы не задаем. Знание механизма дает возможность применить техники тест-дизайна на промежуточных шагах и отловить не очевидные дефекты;
  2. Аналитик/Дизайнер – поставляет информацию о бизнес-процессе пользователя и конкретных требованиях. Является последней инстанцией в спорных вопросах с разработчиком о работе продукта;
  3. Руководитель продукта/Заказчик – формирует содержание релиза. Лучше всех знает, как должны работать и выглядеть фичи, является последней инстанцией в спорных вопросах о продукте с аналитиком;
  4. Поддержка – поставляет информацию о качестве выпущенного релиза. Настоящий кладезь знаний о том, как именно используется продукт;
  5. Руководитель проекта – отвечает за графики работ, балансирует между содержанием, качеством и сроками каждой поставки. От него мы получаем информацию о первостепенных задачах и должны информировать об угрозах поставки: проблемах, блокирующих тестирование, нестабильной версии, критических дефектах. Понятно, чтобы не стать мальчиком, которого съели волки, нужно говорить о реальных рисках.

Тестировщик может хорошо проверять требования и сам продукт на соответствие нуждам конечного пользователя, когда все проектные роли найдены и с ними налажен инфообмен: о бизнес-процессах “как есть” и “как нужно”, алгоритме реализованного, условиях использования продукта и “как получилось”. Сложность поиска ролей в том, что в IT часто Должность не совпадает с Исполняемой ролью. Иногда требуется проявить настойчивость, чтобы найти все, и результаты стоят затраченных усилий.

Инфоканалы


Через инфоканалы тестировщики поддерживают общий контекст с командой и получают существенную часть информации от ролей. По умолчанию, на проектах есть следующие инфоканалы:

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

Признаки хорошо настроенных инфо каналов:

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

В обратном случае тестировщики превращаются в бук — “почему раньше не сказали!” и “ну я же говорил(а)!”

Среда тестирования


Правильно настроенные среды позволяют обеспечить достоверное тестирование и отсутствие реворков у тестировщиков.

Обычная инфраструктура в 2 тестовых среды – DEV для функционального тестирования и TEST для регрессионного тестирования, и одна боевая для работы конечного пользователя PROD. В этой конструкции есть по крайней мере 4 риска выпускать баги и генерировать реворк тестировщикам вне зависимости от содержания тестирования.



  • В DEV environment – попадают изменения ПО, законченные разработчиком. В некоторых случаях в ней можно найти не все фичи текущего релиза, но парочку из будущих. В данной среде тестировщики проверяют релиз пофично и рисков выпустить не то, еще нет. Есть реворк, если разработчики передают в тестирование незавершённые фичи много-много раз (1).
  • В TEST environment – должны быть собраны все фичи текущего релиза и ничего лишнего. Здесь тестировщики проверяют релиз целиком, прогоняют регрессионное тестирование. При неправильном устройстве процесса разработки тестировщики встречают ту же картину, что и на DEV сред – это первая угроза срыва сроков релиза, а в запущенных случаях – и качества (2). Не внесли, что планировали, добавили что-то лишнее – регресс начинается со стабилизации релиза, сопровождается серьезным реворком тестировщиков. Если же TEST среда настроена не так, как PROD, возможно столкнуться с ситуацией “баг не воспроизводится в TEST’е” (3).
  • В PROD environment — поставляется оттетсированный продукт, в нем должна быть актуальная версия продукта + все изменения, проверенные тестировщиками. Но если PROD за время тестирования обновился, а TEST нет, и процедура деплоя в PROD очень сложная и вся выполняется вручную, то конечные пользователи с большой вероятностью увидят не то, что было проверено тестировщиками (4).

Тестовые контуры


Тестовый контур – программная среда для проведения предварительных испытаний продукта, т. е. тестирования. Дефекты из-за различия в средах встречаются у конечных пользователей не каждый релиз, зато при их появлении команда потратит немало усилий на локализацию, а возможно даже выпустит несколько хотфиксов “вслепую”.

Мы следим за идентичностью следующих характеристик:

  • конфигурация интеграций и служебных приложений;
  • дистрибутивы ОС, языка разработки, служебных приложений;
  • одно-/ многонодность;
  • протокол передачи данных;
  • авторизация между всеми приложениями.

Правильно настроенная среда для тестирования исключает риск №3, описанный выше.


Модель ветвления: правила обновления и поставки изменений исходного кода

Как было показано, неорганизованная поставка изменений в среды, генерирует реворк в тестировании и непредсказуемые дефекты в PROD. В качестве базовой модели мы используем GIT Flow, адаптированную под реалии проекта. Это исключает риски №1, 2, 4.

Инструменты управления


Любые инструменты управления процессами помогают контролировать и влиять на ход работ без “чайка-менеджмента” и избыточных коммуникаций. В тестировании мы используем оба – систему управления задачами и дефектами (Jira, TFS, RedMine, etc.) и систему управления тестами (Zephyr Scale, TestRail, QASE, TestLink, etc.).

Цель подготовительных работ:

  • встроить workflow тестирования в общий производственный процесс в системе управления задачами;
  • настроить workflow тест-дизайна и исполнения тестов в системе управления тестами.

WORKFLOW в системе управления задачами


Ниже пример простейшего workflow для выполнения работ по “тестированию изменений” (красный цвет) и “регрессионному тестированию” (серый цвет) в системе управления задачами.



В примере представлено всего 2 типа работ с участием 2 ролей. В тестировании выделяется следующий минимум:

  • тестирование изменений
  • регрессионное тестирование
  • заведение и ретест дефектов

В зависимости от проекта и продукта реестр работ может быть увеличен. Добавлены другие регулярные работы:

  • анализ требований;
  • модульное тестирование;
  • системное тестирование;
  • установочное тестирование;
  • дымовое тестирование PROD.

Или совсем индивидуальные для проекта, например обработка результатов UAT (Beta- тестирования).

В результате настройки workflow тестировщик в любой момент времени понимает объемы активных и надвигающихся работ, а также их приоритеты. Видит общую картину и может своевременно подготовить вопросы в случае отклонения факта от плана.

WORKFLOW в системе управления тестами


Ниже пример простейшего workflow написания и выполнения тестов в рамках тестирования изменений (красный цвет), организованные в виде тест-кейсов, в команде без выделенного тест-менеджера.



В примере 2 этапа типовой работы “тестирования изменений”, декомпозированные на шаги написания и выполнения тестов. Помимо представленных шагов выделяются:

  • ревью тест-кейса тест-менеджером;
  • уточнение тест-кейса;
  • создание и актуализация прогона;
  • выполнение прогона;
  • генерация отчета о тестировании.

В результате настройки workflow тестировщик в любой момент времени может сказать, что протестировано и сколько осталось, и какие актуальные проблемы есть на данный момент.

Заключение


Превалирующая доля настроек находится на стороне команды, которая возможно не понимает или не хочет понимать, для чего они нужны. Я видела, как команды проходили 5 стадий принятия при внедрении development workflow. Хотя, казалось бы, уже много лет известно, как утвержденная модель ветвления повышает качество совместной разработки.

Внедрение таких изменений можно поделить на этапы:

  • Инициация: найти и убедить главных за коммуникации, тестовые среды, инструменты управления на проекте;
  • Разработка: описать изменения, по возможности без сложных терминов и с красочными картинками. Выложить материалы в общий доступ, дальше они будут вспомогательными.
  • Внедрение: обеспечить руководителей и, при необходимости, проектную команду консультациями.
  • Контроль: дать команде время на формирование привычки. Около месяца контролировать и восстанавливать договоренности в случае отклонений.

Так, у нас в ICL Services на большом количестве проектов, чтобы не преодолевать сопротивление и не растягивать “преднастройку” на каждом из них, перечисленные мною практики выведены на уровень стандартов направления – “Best practices”. Это набор регламентов со ссылками и примерами, приоритизированные по важности. Практики с приоритетом Strongly обязывают руководителей проектов внедрять их сразу, на старте проекта. Все практики, описанные в данной статье относятся именно к этому типу.

Мое мнение – даже если проекту много лет, на нем давно есть тестирование, но хромают — коммуникации, тестовые среды или инструменты управления, не стоит это терпеть. Это хороший повод перетрясти договоренности, потому что потери от плохих условий тестирования измеряются в деньгах, времени, скорости выгорания специалистов и накапливаются каждый день.