В эпоху вселенского внедрения agile-методологий и Devops уже никто не сомневается в том, что регрессия должна быть автоматизирована. Особенно, если в компании идет речь о Continuous Delivery. Все кинулись хантить разработчиков автотестов, от чего рынок становится перегретым.


В этой статье я расскажу о том, что на самом деле разработчик автотестов — не такая уж и важная роль в команде. Они не нужны, особенно если вы внедряете у себя scrum. И все эти agile-ы и devops-ы можно внедрять и без этих людей. Так что если кто-нибудь вам скажет, что у них в команде все тестируют руками — потому что у них по каким-либо причинам нет разработчика автотестов — не верьте им. Они тестируют руками, потому что по-другому им лень. Или не умеют.


Проблема отдельной команды разработчиков автотестов


В Альфа-Банке я занималась развитием автоматизации тестирования. И за два с лишним года мы смогли полностью отказаться от такой позиции, как разработчик автотестов. Сразу оговорюсь, речь идет о подразделениях, где делаются электронные продукты. А не про весь банк.
Когда я только пришла, структура организации и процесс сильно напоминал вот эту, типичную для многих картину:


Есть некий:


  • отдел/команда разработки;
  • отдел/команда тестирования;
  • отдел/команда аналитиков;

Все они одновременно работают над разными продуктами/проектами. Мне повезло чуть больше, и на тот момент об автоматизации тестирования уже начали задумываться. Поэтому также присутствовала и команда автоматизации тестирования.


И для управления этими функциональными колодцами, как правило, нужен Руководитель проектов. При этом наш процесс тестирования выглядел следующим образом:
Процесс тестирования


  1. Команде тестировщиков на вход поступал некий артефакт от команды разработки. Ребята проводили функциональное тестирование. Запускали при этом автоматическую регрессию, если она была разработана для этого продукта. И большую часть кейсов тестировали вручную.
  2. Затем этот артефакт деплоился на прод. Туда, куда уже ходят клиенты.
  3. И только после этого заводились задачи в jira для команды автотестеров (здесь и далее я так буду называть разработчиков автотестов).
  4. Реализация поставленных задач происходила с задержкой от 1 до 4х итераций.

И как правило, автоматизация тестирования достигалась за счет совместного труда тестировщика и разработчика автотестов. Где один/одни придумывает тест-кейсы и тестирует приложение руками, а вторые – эти самые тест-кейсы автоматизирует. И их взаимодействие координируют РП и еще армия менеджеров. Всякие там Test manager и Test lead-ы.


Я не буду рассказывать, “что не так с функциональными колодцами”. С ними все не так. Хотя бы потому, что каждый отдел производит «артефакты-загадки», являющиеся частью будущей фичи/продукта. А тимлидам и PM-ам всегда нужно держать руку на пульсе в этом процессе. Передавать артефакт-загадку другому отделу, следить, чтобы отделы коммуницировали друг с другом и т.д.


Поэтому отдельно останавливаться на этом не будем.


Перейдем сразу к более распространенной схеме рабочего процесса. Когда есть продуктовые команды и отдельная сервисная команда разработчиков автотестов. На тот момент у нас уже часть команд работала по канбану — а часть по скраму. Несмотря на это, проблемы остались те же. Теперь у нас были команды, внутри которых были все роли, необходимые для разработки продукта/проекта. А разработчик автотестов все так же находится в отдельной команде автоматизаторов. При этом данный подход был для нас вынужденной необходимостью, потому что:


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

Несмотря на то, что наш процесс тестирования изменился и стал выглядеть следующим образом:
Рабочий процесс тестирования в скрам-команде


  1. Тестировщику в команде приходит артефакт, являющийся маленькой частью user story.
  2. Он осуществляет приемочное тестирование и запускает автоматическую регрессию.
  3. Если регрессия не полностью автоматизирована, то часть регрессии тестирует вручную.
  4. Затем артефакт деплоится на прод. А тестировщик передает задачу автотестерам на автоматизацию.

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


Давайте подытожим, какие вопросы у нас остались открытыми при наличии отдельной команды автотестеров.


Проблемы выделенной команды автотестеров


  1. Отсутствует быстрая ценность от автотестов. Как правило, они разрабатывались с задержкой в 1 и более спринт. Потому что была очередь на эти самые автотесты. И ценность от них команда получала только в виде автоматизированной регрессии. И очень часто бывало что к тому моменту, когда автоматизируют фичу — команда ее уже переделает. И автотесты быстро становятся неактуальными.
  2. Cтоимость продукта вырастала. Это следствие 1го пункта. За счет того, что ручное тестирование уменьшалось со значительной задержкой, команде приходилось тратить деньги на автоматизацию тестирования с надежной на их отложенную ценность. Не говоря уже о том, что наличие прокси-менеджмента увеличивало петлю обратной связи, а это тоже увеличивало стоимость продукта.
  3. Отсутствовала прозрачность в процессе тестирования. Никто в командах не знал, чем автотестеры занимаются. Не понимал их загруженность и по какому принципу они распределяли приоритеты.
  4. Автотестеры — "купленные" люди (аутсорс). А в этом случае SM или PO считали, что это «приходящие» люди. И они не должны быть частью команды. Да и сами ребята не особо то и стремились становиться частью команды, ведь где гарантия, что их работодатель "не перекинет" их в очередной раз на другой проект?
  5. Бизнес не понимал, почему он должен платить в надежде на долгосрочный эффект.

И теперь внимание — что делать РП/SM, у которого PO не заложил деньги на автоматизацию? Или продукт уже месяца 3 разрабатывается, а разработчика автотестов под их продукт все никак найти не могут? Или в команде автотестеров нехватка людей, кто-то ушел в отпуск/заболел? Забыть про автоматизацию и да здравствует ручная регрессия по 2 недели? Или ждать, когда появится нужное количество людей? И при этом нести финансовые потери от несвоевременного запуска продукта, или же наоборот, от того, что продукт выпустили в «забагованном» состоянии?


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

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


Как тестировщики сотрудничают с автотестерами


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

Как разработчики "сотрудничают" с автотестерами


  • Разработчики по идее также являются заказчиками команды автоматизации тестирования. Но на практике, редко когда они действительно отправляли свои запросы к ним.

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


  • Дублирование инструментов/фреймворков автоматизации из-за отсутствия коммуникации с разработчиками.
  • Часто решаются одни и те же проблемы разными инструментами. Например, для тестирования необходимо вытаскивать логи из Elasticsearch. У разработчиков уже, к примеру, есть своя написанная библиотека для этой задачи, но вместо того, чтобы переиспользовать и развивать существующий инструмент, автотестеры как правило пишут свое, либо найдут новый инструмент для этого.
  • Автотестеры используют инструменты, которые по каким-то причинам разработчики могут потом отказаться поддерживать или развивать. Например, у нас разработчики использовали maven в качестве сборщика проектов. И когда встала задача интеграции автоматизации тестирования в процесс разработки — пришлось отказаться от старого фреймворка совсем. Так как перевести его на gradle оказалось сложнее, чем написать новый. А использовать maven разработчики не могли, так как вся инфраструктура и окружение у нас уже были “заточены” под gradle.

Как менеджмент "сотрудничает" с автотестерами


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


  • Что мы получаем от автоматизации тестирования?
  • Сколько она стоит продукту?
  • Учитывая стоимость, достаточно ли мы выигрываем от автоматизации тестирования?
  • Что плохого может произойти, если будет приостановлено финансирование автоматизации?
  • Какова стоимость технической поддержки написанных автотестов?

В итоге, вот основные фейлы автоматизации тестирования, когда ее делают выделенные автотестеры:


  1. Непрозрачность количества автоматизированного тестового покрытия
  2. Разрабатываем то, что не используется при тестировании продукта. Например, написали или автоматизировали тест-кейсы, которые не включили в запуск регрессионного сьюита. Соответственно, такие автотесты не приносят ценности.
  3. Не анализируем результаты тестирования: разработали --> запустили --> не проанализировали результаты. А потом спустя время команда обнаруживает "развалившиеся" автотесты из-за того, что тестовые данные сильно устарели. Это в лучше случае.
  4. Нестабильные тест-кейсы: постоянно тратим много денег на стабилизацию тест-кейсов. Это проблема отсутствия погружения в контекст приложения, которое пытаемся автоматически тестировать.

Поиск решения проблемы


Попытка #1: На команду выделен 1 тестировщик и 1 автотестер


Первое, что пришло мне в голову — это попытаться обеспечить каждую команды разработчиком автотестов. Ключевое слово — попытаться. За целый год я прособеседовала более 200 кандидатов, и только трое из них оказались в нашей команде. И тем не менее, мы все равно решили попытаться и по крайней мере пропилотировать процесс, когда разработчик автотестов внутри команды. Наш процесс тестирования снова претерпел изменения:
Процесс тестирования с автотестером внутри команды


  1. Теперь, когда артефакт приходил на тестирование, тестировщик делал приемку.
  2. Затем тесты на этот артефакт сразу же автоматизируются.
  3. Таким образом вся наша регрессия — автоматизирована.
  4. И артефакт деплоится на прод с уже реализованными автотестами.

Казалось бы, все идеально. Но спустя пару спринтов обнаружилось следующее:


  • Продукт/проект не генерировал соответствующую нагрузку на автотестера. Это несмотря на большое количество встреч, которые присутствовали у команды. И на которые в среднем в недельном спринте тратилось около 10 часов.
  • При этом автотестер отказывается заниматься функциональным тестированием, если попытаться оставить его одного в команде.
  • Но и тестировщик не настолько компетентен, чтобы писать автотесты самостоятельно.
  • Когда же предложили писать сервисы для приложения разработчику автотестов — он отказался, так как его навыков не хватало. И как ни странно, не все автотестеры заинтересованы в развитии себя как разработчика.

Попытка #2: Разработчик автотестов является частью 2-3 команд


Тогда я подумала, что если автотестер занят примерно на 50 %, то, может, попытаться "шарить" его на 2 команды? И вот что у нас получилось:


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


И при этом отказаться от этих встреч он также не мог, так как терял контекст разрабатываемого приложения, и автоматизация становилась менее эффективной.


Попытка #3 или Успешная попытка: Научить тестировщиков писать автотесты


Тогда пришла в голову гипотеза, что если мы обучим тестировщиков самостоятельно разрабатывать автотесты — то пофиксим все наши боли. Итак, с чем мы начали?


  1. Для начала мы выстроили правильную пирамиду тестирования. Согласно ей, наша тестовая стратегия заключалась в том, чтобы тесты были на разных слоях приложения. И между каждыми слоями должны быть интеграционные тесты. И руками тестироваться должны только приемочные тесты. При этом сразу после приемки — они автоматизируются. То есть в следующую итерацию тестировщик снова тестирует ТОЛЬКО изменение.
    Пирамида тестирования
  2. “Размазали” процесс автоматизации тестирования по команде. Так как тесты были разные, то и разрабатывали их разные члены команды. Тесты на api разрабатывались разработчиком api. Фронт-разработчик покрывал свои UI-компоненты тестами. Тестировщик должен быть запроектировать тестовую модель и реализовать интеграционные тесты, которые исполнялись со стороны браузера (selenium тесты).
  3. Использовали простые инструменты для автоматизации тестирования. Мы решили не усложнять себе жизнь и выбрали наиболее простую обертку над selenium-ом. На текущий момент — это selenide, если ваши автотесты пишутся на java.
  4. Создали инструмент для написания автотестов непрограммистами. Об этом бибиотеке (Akita BDD) уже была написана статья в нашем блоге https://habrahabr.ru/company/alfa/blog/350238/. И благодаря тому, что мы используем BDD, смогли вовлечь аналитиков в написание автотестов. Кстати, библиотека в open source: https://github.com/alfa-laboratory/akita и https://github.com/alfa-laboratory/akita-testing-template
  5. Научили тестировщиков чуть-чуть программировать. Среднее время обучения занимало от 2 недель до 2 месяцев.

Благодаря тому, что мы "размазали" автоматизацию тестирования по команде, тестировщик успевал заниматься как ручным тестированием, так и автоматизацией. Некоторые тестировщики благодаря этой кроссфункциональности внутри команды настолько прокачались, что даже стали иногда помогать команде с разработкой микросервисов.


Когда команда сама участвует в разработке автотестов — они сами отвечают за тестовое покрытие и понимают, какое количество тестов уже написано, и какое необходимо еще дописать, чтоб уменьшить время на ручную регрессию. Не происходит дублирования автоматизации одних и тех же сценариев. Так как разработчики о них в курсе, и при написании своих e2e-тестов и юнит-тестов смогут предупредить тестировщика, об отсутствии необходимости автоматизировать определенные сценарии.


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


При этом само ядро библиотеки поддерживается самими тестировщиками. Только более заинтересованными в этом. Которым стало интересно писать код и они контрибьютят akita-bdd. Как правило все новые фишки и шаги появляются из других команд, которые что-то попробовали внутри себя и решили поделиться, делая пулл-реквест в библиотеку. Все общение происходит в коммьюнити внутри банковского слака, где ребята и выясняют потребность в том или ином шаге, и после это шарят его.


А не пострадает ли качество тестов


Возможно, некоторые из вас задаются вопросом, а что если команда не справится с созданием нового тестового фреймворка? Или автотесты будут низкого качества? Ведь у них нет уникальной экспертизы разработчика автотестов? Так вот, я придерживаюсь мнения, что автотестеры — не единороги. И идеальным кандидатом для написания этого самого фреймворка будет именно член команды, которая нуждается в автоматизации.


Я расскажу вам историю, которая приключилась со мной. Когда я только пришла в Альфа-Банк, там уже был свой фреймворк для автоматизации тестирования. Он разрабатывался выделенной командой разработчиков автотестов, про которую я уже говорила. Разрабатывался на протяжении 2-3 лет. Это был монструозный франкенштейн, научиться пользоваться которым даже бывалому разработчику было сложно. Соответственно, любые попытки научить тестировщика автоматизировать тесты с его помощью заканчивались провалом. А также попытки затащить этот инструмент в команды.


Тогда мы решили пропилотивать разработку нового инструмента. Но разрабатывать его должна именно команда, а не человек/команда в отрыве от производства. По итогам одного проекта у нас появился прототип этого инструмента, который мы затащили еще в парочку новых команд. И по итогам реализации их продуктов у нас появился обросший прототип с большим количеством наработок, которые команды создавали сами и сами решали возникающие проблемы с похожим контекстом. Мы проанализировали то, что они сделали, и, выбрав лучшее — сделали библиотеку.


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


Сейчас эта библиотека используется более чем в 20-ти командах. И она сама развивается — тестировщики из команд постоянно контрибьютят и дополняют при необходимости новыми шагами.


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

Возможно, вы спросите, а причем тут отказ от разработчиков автотестов, когда ты нам рассказывала сейчас про командную работу над автотестами. Дело в том, что ситуация с наличием разработчика автотестов и разработчиками внутри команды напоминают ситуацию, когда слишком много «поваров на кухне». То есть приводит к тому, что члены команды наступают друг на друга (или на код друг друга). И в итоге мы получаем картинку, когда разработчики приложения перестают писать код автотестов, а значит, перестают знать контекст проблемы написания автотестов и то, как они могли бы их решить или не допустить при написании своей части кода.


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


Рассмотрим на конкретном примере: когда наш фронт-разработчик начал пробовать писать автотесты, и познал боль написания xpath-запросов до различных ui-компонент на странице — то предложил в момент верстки страницы создавать уникальные css class name для удобного поиска элемента на странице. Таким образом мы смогли стабилизировать тесты и ускорить их написание за счет упрощения поиска этих элементов. А у фронт-разработчика просто появилось новое правило в работе — которое не осложняло его рабочий процесс ни на йоту


Ну и когда мы объединяем все в кросс-функциональную команду — мы включаем в нее все эти зависимости и не нуждаемся в какой-либо координации. Уровень управления становится намного меньше.


Выводы


  • Наличие выделенной команды автотестеров — это не agile.
  • Наличие выделенных разработчиков автотестов — это дорого для продукта/команды
  • Поиск/хантинг таких людей дорог и долог. И это тормозит развитие продукта
  • Разработка автотестов значительно отстает от разработки продукта. В итоге мы получаем не максимальное велью от автоматизации тестирования.

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


  • Тестировщик тоже инженер. И покуда команда к нему не начнет относиться как к инженеру, у того не возникнет мотивации развиваться или учиться программировать.
  • Команда тоже отвечает за качество. Не тестировщик, на которого в случае чего повесят всю ответственность за качество продукта. А вся команда. Включая заказчика (PO).
  • Автотесты тоже часть продукта. Покуда вы будете думать, что автотесты — это продукт для другого продукта, так и будут закрываться спринты без написанных автотестов. А автотесты будут вашим техдолгом, который как правило не закрывается. Важно понимать, что автотесты — это то, что гарантирует качество вашего продукта.

Ну и, наконец, команда сама должна захотеть писать автотесты и сама решить, кто что будет делать. Без принуждения "сверху".


p.s. Если вам интересен мой опыт, то приглашаю в свой блог (http://travieso.me). Там опубликованы все мои выступления, статьи, лекции и заметки.

Комментарии (29)


  1. sshmakov
    29.03.2018 15:49

    Ну и, наконец, команда сама должна захотеть… (вставить нужное) и сама решить, кто что будет делать. Без принуждения «сверху».

    Золотые слова. Все автоматизации, технологии, методологии, методики и практики не работают без желания команды.


  1. alatushkin
    29.03.2018 23:16
    -1

    Кмк Рейты писателя скриптов пользовательских сценариев ниже рейта разработчика. Давая эту работу более дорогому специалисту вы только увеличите бюджет.
    То что у вас "не получилось" с выделенной командой тестеров говорит скорее о слабости менеджмента, чем об ошибочности подхода. Особенно, когда у вас много проектов — сам боженька велел матричную структуру с отдельным ульем тестеров в котором будет накапливаться, прости Господи, экспертиза.
    А когда менеджмент слаб — никакой божественный agile, к сожалению, проблем не решит. Как только эффект новизны пройдет нерешённые проблемы в коммуникации и доверии сделают своё дело.


    1. Travieso Автор
      29.03.2018 23:41
      +1

      Рейты писателя скриптов пользовательских сценариев ниже рейта разработчика. Давая эту работу более дорогому специалисту вы только увеличите бюджет.

      Для тестировщика нет разницы писать тесты в системе тест-менеджмента, типа HP ALM, куда они раньше тест-кейсы заводили; либо же эти тест-кейсы сразу как автотесты записывать. Библиотека реализована таким образом, что при ее регулярном использовании ты запоминаешь все ее шаги на память (их чуть больше 60), и собираешь тест-кейсы как в конструкторе. Как показал опыт, разработчик внутри команды привлекается редко, лишь тогда, когда тестировщик сталкивается с чем-то непонятным/незнакомым. Типа: реализовать шаги для тестирования интеграции с thrift-сервисом. Как правило, таких временных затрат за месяц набегает не больше 8 часов. Если сравнивать стоимость разработчика автотестов — и стоимость тестировщика, то в этом случае продукт получает экономию размером в еще один оклад тестировщика.


      А когда менеджмент слаб — никакой божественный agile, к сожалению, проблем не решит.

      Согласно скрам-гайду — команда, которая делает продукт, должна работать вместе. А не отдельными функциональными группами. Потому что, когда человек не является частью команды ответственной за продукт — качество его работы для этого продукта и эффективность будет сильно страдать.


      Как только эффект новизны пройдет нерешённые проблемы в коммуникации и доверии сделают своё дело.

      Эффекта новизны давно уже нет, так как пилотировали подход мы в 2016 году. А в 2017 процесс приобрел массовый характер. Из того, что я наблюдаю — у тестировщиков сформировалось свое коммьюнити, где они друг другу помогают в решении нестандартных проблем. К примеру, если кому-то нужен какой-то определенный шаг для автотеста, закидывается просьба в чат в slack, где либо находится владелец такого шага, либо коллега, готовый поделиться своим опытом.


    1. Regis
      30.03.2018 01:55

      Соглашусь — какое-то уж слишком сильное обобщение. И слишком желтый заголовок. «У нас не получилось — значит оно не работает». Так можно сказать сказать про любой подход, любую технологию, любой процесс. А как просто пример разных возможных проблем с их разбором — статья вполне хороша.


      1. Skerrigan
        30.03.2018 09:47

        Соглашусь — какое-то уж слишком сильное обобщение

        Именно — это заявляю я, QA-Java-dev. Сценарии, автоматизация, сверка с документацией — все я. Один. Пошел шестой год этого марафона.

        *на текущем этапе контрольной сверки автоматика выявила ошибки в самых не очевидных местах:
        — не рабочие кнопки в «глубине» продукта
        — поломавшийся скролл страницы
        — порядочное кол-во написанного JS с ошибками (в том числе и синтаксически)
        — проблемы в различном функционале (не корректная пагинация в таблицах, проблемы с ревизями и т.д.)


  1. lxsmkv
    30.03.2018 06:42

    У нас более 25-и человек в четырёх командах, которые занимаются соответственно четырьмя функциональными компонентами приложения. Наша фирма один из подрядчиков. Заказчик требует от всех подрядчиков написания UI-автоматизации. Я один пишу автотесты на все четыре функциональные компоненты. Где-то тестов выходит больше где-то меньше. Никто мою работу не координирует, никто не говорит мне, что нужно автоматизировать. Несмотря на то, что я выполняю желание заказчика, я это делаю для себя, чтобы упростить работу по обнаружению проблем. А проблем хватает, поскольку приложение оргомное, собирается из компонент — всегда где-то что-то сломано. И часто не у нас, а во феймворке или в точке перехода от одной компоненты к другой.
    Кроме меня у нас еще есть полтора ручных тестировщика. Как-то раз я снял статистику по доле заведенных репортов на человека в команде. (Все-таки контроль качества я считаю обязанностью каждого участника команды, а не только выделенных людей.) И я с автоматизацией лидирую по этому показателю. И пока это так, автоматизация (со всей ее болью) себя оправдывает. Сравнительный обьем заведенных багрепортов — вот единственно вменяемая метрика эффективности и целесообразности автоматизации в проекте.

    Какой вывод можно из этого сделать? Если премировать первое второе и третье место по обьему заведенных репортов — то тестировщики сами начнут автоматизировать. У нас не так, все на моем энтузиазме, но это как вариант. Только считать надо правильно, за вычетом дупликатов, отклоненных репортов и прочего мусора. «Чистые» баг-репорты это которые привели к изменению в коде приложения. Все остальное не считается. А то накидают там :)


    1. sshmakov
      30.03.2018 08:54

      Если премировать первое второе и третье место по обьему заведенных репортов — то тестировщики сами начнут автоматизировать.

      Нет, проходили. Если премировать, то не автоматизация появляется, а придирки.


      1. lxsmkv
        30.03.2018 10:09

        Да, я подозреваю что так это не работает. Я вообще не люблю такие прямые материальные вознаграждения, они очень совковые и как правило, по своей природе, дают нежелательный побочный эффект. Другой вариант:
        Пусть эти придирки оформлены в виде багрепорта, они приходят тимлиду, он их отклоняет. Отклоненный багрепорт говорит о его некачественности. Как правило такое получается у людей малознакомых с продуктом, например у новичков в проекте. Со временем тестировщик начинает чувствовать что стоит репортить а что нет. Пусть отклоненные багрепорты экспоненциально тянут «личную статистику» если хотите «карму» вниз.
        Как я Вас понимаю, у Вас и к отклонению багрепортов придираются. Тут нужно ввести правило, что решения тимлида не обсуждаются. Тестировщик не правда в последней инстанции. Он может иметь свое мнение, пусть даже верное, но решает всегда техлид/тимлид. Со временем тестировщики научатся находить именно то, что действительно интересует разработчиков и продактовнера.


        1. sshmakov
          30.03.2018 10:33

          Отклоненный багрепорт говорит только о том, что тимлид его решил отклонить. Это мало что говорит о качестве багрепорта.


          1. lxsmkv
            30.03.2018 11:20

            Багрепорт ведь отклоняют с указанием причины.
            Это говорит о том, что человек не смог получить достаточно информации, чтобы не заводить этот репорт. Или тимлид может завернуть вполне обоснованный и критичный для продукта баг, просто потому, что дедлайны горят? Тогда становится очевидна совсем другая проблема.
            Мои дупликаты получались тогда, когдамне было «некогда» (читай: лень) копаться в багтрекере. Отклоненные репорты получались тогда, когда я недостаточно тщательно читал спецификацию или поленился лишний раз спросить лида если спецификация остуствовала или была недостаточно ясна.


  1. izzmajjra
    30.03.2018 07:10

    В целом утверждение, что разработчик автотестов не нужен скорее ложное, если под таким человеком мы подразумеваем кого-то, кто занимается разработкой фреймворка.
    Автоматизированные проверки на «человеческом языке» это прям тренд современной автоматизации)
    Проблема в том, что разработанный фреймворк гарантированно слишком сложен для понимания тестировщиком, который за 2 недели познал прелести программирования.
    Да, он сможет написать проверку, более прокаченный — сможет прописать страницы и локаторы. Но вот доработать фреймворк (например, захотелось нам в одном тесте в БД залезть или сообщение в MQ кинуть) сможет только специальный человек. 2 недель обучения с нуля для этого не хватит.
    Т.е. на мой взгляд, полностью Ваша проблема не решена.
    Решали аналогичную задачу на маленькой команде(3 проекта). В итоге получился такой работающий механизм:
    Один человек, автоматизатор с опытом занимается:
    1. Запуском автоматизации на проекте
    2. Обучением тестировщиков азам работы с фреймворком в части создания сценариев
    3. Развитием фреймворка, реализацией новых фич в нем по запросам от команд.
    Тестировщики на проектах занимаются:
    1. Написанием непосредственно автоматизированных проверок
    2. Следят за покрытием автоматизированных проверок и анализируют результаты прогона тестов.


    1. VolCh
      30.03.2018 09:33

      А основные разработчики не могут писать модули для тестового фреймворка?


      1. izzmajjra
        30.03.2018 11:01

        Технически могут, наверное. На момент внедрения не рассматривали такой подход:
        1. Считали, что нужен человек, который будет как-то управлять развитием фреймворка
        2. Разработка была загружена, дополнительные задачи сказались бы на основных
        3. Разработка в двух командах из трех шла на технологиях сильно отличных от используемых в автоматизации (продукты на платформе SAS).


        1. Travieso Автор
          30.03.2018 12:16

          Я постаралась акцентировать внимание в конце статьи как раз на том, что заниматься разработкой тестового фреймворка тоже должна команда. А не выделенные люди.
          И у нас, если тестировщик сталкивается со сложной задачей, где его навыков не хватает — реализацией занимается бекенд-разработчик из команды. Чаще всего они работают с тестировщиком в паре, за счет чего также происходит и передача навыков и та самая "прокачка" тестировщика.
          По поводу обучения:
          Когда мы только пилотировали этот процесс — разработчики автотестов как раз и занимались обучением тестировщиков. Затем мы провели эксперимент и обучение провел java-разработчик, и оно никоим образом в своем качестве не пострадало.
          Сейчас у нас обучение проводят уже сами "прокачавшиеся" тестировщики.


          А зачем вы сделали фреймворк с технологиями, которые сильно отличались от того, с чем работали ваши разработчики? Наверное, потому что эти разработчики не участвовали в разработке этого фреймворка? Я понимаю, что на SAS, наверное автотесты писать бы не стали, но наверняка у ваших коллег опыт был/есть не только с этой платформой?


          1. izzmajjra
            30.03.2018 12:24

            Один SAPовец, один сишник, остальные разработчики БД, в основном Oracle, такой бэкграунд.
            Я не знаю как можно с помощью этого автоматизировать тестирование. Только м.б. извращенные варианты какие-то.
            У вас свой подход, ни в коем случае не оспариваю правильность. Для себя вижу риск в неконтролируемом развитии фреймворка при таком подходе.


            1. Travieso Автор
              30.03.2018 12:47

              А как вы решаете проблему с тем, что к автоматизатору может случиться большой поток запросов от тестировщиков?
              Приоритеты, очередь? Как это может повлиять на регрессию? Что случается в ситуации, когда автотесты сломались и регрессия из-за этого застопорилась?


              1. izzmajjra
                30.03.2018 13:18

                Риск понятен, который Вы обозначили, как и любой риск с ним можно работать. Например планировать работы.
                Если автотесты сломались, их чинят. В зависимости от причин слома — автоматизатор или тестировщик.


  1. Wolonter
    30.03.2018 08:04

    Анастасия, статья мне понравилась, идея тоже.
    Забавно, что и у меня есть доклад «Автотестеры не нужны» в нем я описал очень похожие шаги. И, кажется, сделал еще один, следующий.

    В команде, в которой я работаю, тесты всех уровней — от юнитов до тяжелых UI тестов пишут все: бекендеры, фронтендеры, тестировщики, аналитики. Только дизайнер-проектировщик не пишет. Но раньше писала.

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


    1. Travieso Автор
      30.03.2018 14:55

      Не, на codeFest не получается попасть. А можно ссылку на ваш доклад?


      По поводу того, что тесты пишут все: тут как команда договорится. Как правило во всех командах аналитики как минимум могут собрать тест-кейсы из готовых шагов, но при этом новые шаги разрабатывать вообще не умеют. Чаще всего, чтоб требования не писать в отдельной доке — описывают уже тестами.
      Java-разработчики не любят "программировать на русском языке". Просто это и программированием сложно назвать =).
      Но когда команда нуждается в помощи из-за загруженности тестировщика, то проблем не возникало и писали тесты на ура.
      Пару раз даже запускали команды без обучения тестировщика и вообще без тестировщика, так как того еще не смогли найти. И в команде автотесты писали сами разработчики. Реже всего привлекаются для этой задачи front-разработчики. Ибо js. И больше времени коммьюнити потом тратит, чтоб им объяснить и научить.


  1. Leopotam
    30.03.2018 09:37

    Почему тестировщик не «тестер», а «автотестер» не автотестировщик? Вы уж определитесь и называйте их одинаково — или тестерами или тестировщиками.


  1. nodonutsforyou
    30.03.2018 11:50

    Продукт/проект не генерировал соответствующую нагрузку на автотестера.

    Это на самом не проблема. При любой организации труда всегда окажется недогруженнное звено. Со стороны продакт менеджера непревычно что человек не занят ничем полезным, но это нормально. Всегда можно найти второстепенные полезные задачи.


    1. Travieso Автор
      30.03.2018 12:02

      Для нас это было проблемой, потому что стоимость разработчика автотестов не маленькая. И естественно PO заинтересован по-максимуму использовать потраченные средства.
      Если бы разработчик автотестов начал бы это свободное время тратить каким-либо другим образом на пользу команде/продукту, то наверное, его незанятость не так сильно бы бросалась в глаза.
      И если недозагруженность сильная и регулярная — это повод задуматься.


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


  1. Ant-VAV
    30.03.2018 11:58

    Статья прям хороша.

    Но есть несколько вопросов:
    1) Как вы убеждали разработку начать активно писать тесты? Или они и раньше это делали?
    2) Качество тестов разработчиков как-нибудь проверяется?
    3) Тестирование ковыряется с Селениумом и, прости господи, BDD. Как они определяют отсутствие дублирования проверок, которые можно автоматизировать на более нижних слоях пирамиды?
    4) Если я правильно понял, то разработка один раз причесала фрейморк. А дальше она как-нибудь вообще взаимодействует с UI тестами?


  1. Travieso Автор
    30.03.2018 12:02

    Для нас это было проблемой, потому что стоимость разработчика автотестов не маленькая. И естественно PO заинтересован по-максимуму использовать потраченные средства.
    Если бы разработчик автотестов начал бы это свободное время тратить каким-либо другим образом на пользу команде/продукту, то наверное, его незанятость не так сильно бы бросалась в глаза.
    И если недозагруженность сильная и регулярная — это повод задуматься.


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


    1. lxsmkv
      30.03.2018 12:15

      Как может быть автоматизатор недогружен? Все сценарии автоматизированы для всех целевых платформ, все тесты зеленые, на все багрепорты написаны, все багфиксы верифицированны? Или какой спектр задач у автоматизатора? Вообще у меня люди которые «не видят работы» мысленно попадают в отдельную категорию. Читал недавно Valve's New Employee Handbook, так там человек сам должен подбирать себе и проект и занятие по душе в нем. Т.е. там таких, которым нечем заняться, нет в принципе.


      1. Travieso Автор
        30.03.2018 12:40

        Один из примеров — старт нового продукта. Как правило, это SPA-приложение, который практически не зависим от других подобных продуктов. Пересекаться они могут только, когда происходит изменение общебанковских сервисов, которые могут затронуть много систем, но это прям исключение из правил. И такие сервисы как правило покрывают тестами, чтоб сберечь обратную совместимость.


        Поэтому, первые user story могут выглядеть вообще в стиле "Отобразить кнопку для такой-то категории клиентов". При условии, что все тесты на api пишутся на уровне unit — и e2e-тестов самими разработчиками, со стороны UI нужно выполнить тесты на поведение и интеграцию UI с API. И их опять же оказывается не так много, потому что все возможные логические и алгоритмические проверки для UI-компонент тоже зашиты в модульные тесты на UI, и пишутся фронт-разработчиком.


        Багрепорты у нас заводятся тестировщиком, как тикеты в jira. А чаще всего не заводятся — а сразу же правятся разработчиком после приемочного тестирования. Только если баг не критичный, то заводится. Но вопрос приоритетности/критичности принимается совместно командой.


  1. Legionivo
    31.03.2018 23:01

    Заголовок жёлтый. У вас не получилось — автоматизаторы не нужны нигде!


  1. choo-joykin
    31.03.2018 23:02

    ох уж эти agile словечки и подходы. Мне просто интересно — вот был у вас выделенный автоматизатор с навыками разработки и навыками тестирования, есть куча тестеров без навыков разработки, но с навыками (я надеюсь не только white box) тестирования. И вы в какой-то момент решили — «А давайте нагрузим тестеров еще и сверху работой, а автоматизатора уволим?». И вот вы берете и сообщаете — или вы учите java/scala/python/groovy/php (прости господи ) и мы вешаем на вас еще больше ответственности и нагрузки под видом — «мы же команда, мы же агиле!», а еще вы станете сильным специалистом full stack qa или мы вас увольняем. Так было? BDD вам понятно кто писал фреймворк и кто поддержку (скорее всего оказывает), так вот следующий вопрос — а кто отвечает за архитектуру/качество кода? Нагруженная команда разработки?
    И как тут уже сказали — то, что у вас не получилось нормально подружить всех и вся (прикрываясь красивыми терминами из scrum/agile) — не нужно говорить об этом всем что ТАК надо делать всем. Спасибо


  1. qwez
    31.03.2018 23:02
    +1

    Я бы больше сказал: вам не нужны тестеры и автотестеры. Берите QA-специалистов. Да, они могут стоить как разработчики, но зато они сами прекрасно знают как обеспечить качество на проекте (даже если для этого потребуется заставить программистов заниматься ручным тестированием). Умение автоматизировать для них всего-лишь инструмент.