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

Ведь так?

Мы провели эксперимент и проверили это на практике. Больше полугода мы проработали без тестировщика в команде, и сейчас пора посмотреть, что из этого получилось.

QA-инженер за ловлей багов
QA-инженер за ловлей багов

Кто мы такие? Мы - команда в крупной финтех-компании, отвечаем за небольшую часть сервисов, на которых работают продукты с миллиардным оборотом. Из фронтенда у нас только админка, остальные фронты живут в других командах и вызывают наши сервисы через REST API или асинхронно. Я - не очень опытный тимлид команды.

Это лонгрид, время чтения ~15 минут, часть подробностей убрал под спойлеры, чтобы сэкономить время тем, кому захочется побыстрее добраться до комментов :)

TL;DR

Были длинные проблемные релизы, раз в 1–2 месяца, Continuous Delivery и не пахло. Было больно. Убрали тестировщика вообще, регресс заменили тестами: Unit + Integration и end‑to‑end автотестами. Теперь регресс делается быстро, код всегда готов к релизу, релизы соседних сервисов теперь независимы друг от друга, а все изменения между релизами обратно совместимы. Релизим часто, качество не просело, команда в целом довольна. Есть и неудобства, поэтому сейчас хотим себе фуллстек‑QA с упором на автотесты.

Как мы жили, от чего страдали

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

Как мы релизили

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

  • Релиз планируем заранее, составляем список задач на релиз, и по мере выполнения задач тестировщик проверяет их на тестовом стенде.

  • Когда сделали все задачи, входящие в релиз, делаем код фриз - например, в виде релизной ветки. В неё перестаёт попадать код по более новым задачам. 

  • Чтобы выкатить релиз, тестировщик делает регресс, фиксятся найденные баги.

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

Релиз у нас был каждые 1-2 месяца.

Что с этим было не так

Узнаёте ли вы проблемы своих прошлых или текущих проектов в этих мини-историях, состоящих из потока мысли разработчика?

пара зарисовок из нашей жизни тогда

История 1:

Релиз застревает в тестировании, в итоге дата релиза сдвигается на неделю-две

После релиза вы находите баг на проде

И надо снова делать релиз

И опять надо нести его в тестирование

А тут ещё из другого сервиса срочно просят докинуть фичу в API, там делов на 2 часа

И опять на регресс

История 2:

Сделал задачу, залил код

Взял в работу следующую

Через 3 дня приходит тестировщик - в задаче баг

Пофиксил баг

Через день приходит тестировщик с другим багом

Пофиксил и его

Через день снова приходит

Смотришь постановку – ничего не понятно 

Идёшь разбираться - выясняется, что это и не баг вовсе, или баг, но не в той задаче

И через 2 недели снова приходит – завтра релиз, делали регресс, нашли на препроде баг...

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

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

Релизиться часто не хочется - много накладных расходов. Поэтому заказчик задачи частенько ждёт несколько недель релиза, вместо того, чтобы пользоваться фичой, которая уже готова.

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

Часто релизы задерживаются. Сначала определяют дату релиза, но по мере её приближения релиз несколько раз сдвигается - на день, потом ещё на 2, потом ещё…

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

Котик страдает от такого бедлама
Котик страдает от такого бедлама

Релизы задач, затрагивающих несколько сервисов сразу

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

Если перед релизом такой задачи во время регресса в одном (или не одном) из сервисов нашли баг, то блокируются релизы всех этих сервисов.

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

А давайте как в гугле

Говорят, в гугле топовые котики
Говорят, в гугле топовые котики

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

Получается, если у вас нет тестировщика, то вы не обязательно отсталая компания с ужасным качеством и плохими процессами. Может быть наоборот - вы передовая компания с самыми современными подходами :)

Мы подумали: “А чем мы хуже гугла?” И решили тоже так попробовать.

Мы сделали так:

  1. Тестировщик

Отдали тестировщика в другую команду

  1. Регресс

Взяли план регресса, который делал тестировщик, и реализовали end-to-end автотесты на большинство кейсов. То есть регресс из ручного стал автоматическим.

  1. Тесты

Дописали интеграционных тестов, чтобы в рамках каждого сервиса была надёжно покрыта вся основная функциональность. В этом нам помогли testcontainers.

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

  1. Релизы

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

  1. Пайплайны

И конечно же наш SRE-инженер собрал нам CI/CD пайплайны, которые воплотили всё это в жизнь. Автотесты стали запускаться после каждой сделанной задачи и проверять, что всё работает. Релизы мы стали выпускать на основе тега в гите в любое время дня и ночи, и разрешили делать это всем в команде.

  1. Страховочка

Мы представляли, что заменить на автомат хочется главным образом регресс.

Но тестировщик делает не только регресс!

Иногда потестировать что-то руками – это лучшее решение:

  • одноразовые вещи;

  • задачи с очень большими изменениями, например новые продукты;

  • фичи с UI;

  • фичи на несколько систем, включая сторонние.

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

Ну вы ребята крейзи

Одумайся, котик!
Одумайся, котик!

У вас, наверное, сразу возникли возражения и вопросы, примерно такие:

  • Писать тесты - это не задача разработчика! Разработчик должен код писать, а сидеть и проверять, как он работает, порочит честь и славу мундира!

  • Разработчик же всё равно не протестирует сам свой код нормально, проверит только happy path, и всё равно будет куча багов!

  • А кто будет баги заводить? Тоже разработчики? За зарплату 300к/наносек сидеть и формочки заполнять?

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

  • Да у вас каждую неделю релизы будут валить прод! Инцидентов не разгребёте!

  • Короче код в итоге будет писаться еще дольше, а работать будет некачественно!

У нас у самих возникали все эти мысли. Нам как раз было интересно проверить, оправданы ли эти опасения на самом деле, или это всё шаблоны и обычный страх неизвестного. 

В противовес у нас были и положительные гипотезы:

  • может быть разработчики станут больше уделять внимания качеству, раз за ними – только релиз;

  • станет больше тестовое покрытие, и это повысит общую устойчивость кода к изменениям;

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

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

  • и просто, это офигенно!

В каждом из нас живёт учёный
В каждом из нас живёт учёный

В общем, мы были готовы к разному эффекту. 

Мы договорились об изменениях и попробовали. Что у нас получилось на самом деле? 

Результаты

Мнение команды

Давайте сначала послушаем, как это пережили в команде и какие у ребят впечатления.

Я задал команде 4 вопроса:

  1. Как оно вам, понравилось ли без тестировщика (чисто на уровне восприятия и эмоций)?

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

  3. Как вам кажется, поменялось ли качество продукта, стало ли оно лучше/хуже?

  4. Хотели бы жить так и дальше и рекомендовать другим?

И получил вот такие ответы:

развёрнутые ответы для любопытных

Разработчик:

  1. По ощущению процесс стал проще и стал сжигать меньше ресурсов.

  2. Кажется, что разработчики стали ответственней относиться к реализации задач, стали продумываться негативные сценарии - что делать, если твой код что-то поломает после релиза.

  3. Отсутствие тестировщика никак не понизило качество продукта, зато увеличило скорость прохождения pipeline, что позитивно сказывается на разработке.

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

Ещё разработчик:

  1. Прикольно было попробовать, раньше не думал, что такое может быть ок.

  2. На первых порах ручное тестирование поразмазалось по команде, сейчас как будто такого стало меньше. Иногда параноить начинает, что заливаешь опасный функционал.

  3. Тут трудно. Как-то странно мало багов выскакивает по ощущениям. Надеюсь, что это действительно так.

  4. Хотел бы работающую (!) систему с призывным тестировщиком.

Свеже-нанятый разработчик:

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

  2. Пока не могу сказать, единственно, что заметил, это большие временные затраты по проверке написанного/измененного кода.

  3. Увеличилось время прохождения пайплайна.

  4. Мне все равно не хватает ручного тестировщика на некоторые кейсы.

Ещё свеже-нанятый разработчик:

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

  2. Тяжело сказать только придя, но в сравнении с предыдущим опытом явно большее погружение в требования к коду, что должно при написании его обогащать качеством. Обычно идет условная конфронтация между qa и разработкой. Тут больше чувствуешь ответственности за продукт.

  3. Пока не могу ничего сказать.

  4. Ручная тестировка всё равно кажется необходима, но для исключительных кейсов.

Аналитик:

  1. По тривиальным задачам, регрессу и т.п. - жить стало приятнее.
    По сложным задачам с множеством кейсов хотелось бы, чтобы кто-то проверил не только, соответствует ли реализация требованиям, но и насколько полны требования (но этого не было и при наличии тестировщика).

  2. Процесс доставки явно ускорился.

  3. Судя по отсутствию негатива и метрикам - хуже точно не стало.

  4. Я плюсану за то, что хочется иметь "своего" погруженного тестировщика с творческим мышлением для нестандартных кейсов. Возможно, на парт-тайм.

В среднем получается:

  • Как минимум опыт для команды был прикольным.

  • Процесс поставки кода стал проще и прозрачней, код стал попадать на прод быстрее.

  • Качество субъективно не просело.

  • Есть небольшой стресс от отсутствия “анти-баг стены”, разработчики чувствуют больше ответственности, но в целом это скорее позитив.

  • В целом потребность в тестировщике значительно снизилась, но частично осталась, в основном не для регресса, а для нестандартных тестов.

Мнение лида (моё)

Мы не увидели просадки в качестве. Метрики показывают, что количество багов на проде осталось таким же, а число багов, найденных на тестовых средах, неожиданно сократилось в 2 раза. Скорее всего багов тестирования стало меньше, потому что разработчики стали, во-первых, находить большую часть багов во время разработки задачи, а во-вторых, потому что разработчики не всегда заводят баги, когда замечают проблему самостоятельно на тестовом стенде до релиза в прод.

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

Что касается скорости разработки, то она понизилась, по моим оценкам процентов на 20. Это если мерять по времени нахождения тикета в статусах “разработка” и “ревью”. Но здесь надо учитывать ещё и другие затраты времени, которые раньше случались уже после окончания разработки: тестировщик теперь не приходит к разработчикам с вопросами и багами дни и недели спустя после того, как задача залита в мастер. Цикл обратной связи теперь короче за счёт хорошего покрытия тестами, плюс разработчик хорошо покрывает ими и свою текущую задачу, что сразу подсвечивает большинство проблем и позволяет их исправить ещё до того, как код уйдёт дальше.

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

Котики делают технологичное
Котики делают технологичное

Но не все эффекты, которые мы пронаблюдали, были классными. Хотелось бы скорректировать нашу работу по итогу - оставить всё, что нам понравилось, и постараться убрать то, что мешает. Обсудили и пришли примерно к таким вещам:

Что оставляем:

  • Процесс поставки на прод стал гораздо понятней, он более объективен и формализован, меньше зависит от бас-фактора или личности кого-то из команды.

  • Повысилась скорость доставки кода на прод и частота релизов. Хочется, чтоб так было и дальше.

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

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

Что хотим поменять:

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

  • Автоматические тесты хочется развивать, повышать культуру, улучшать подходы. Хочется, чтобы кто-то в команде целенаправленно этим занимался и обменивался опытом с другими командами.

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

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

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

Кстати, насчёт найма

Кандидат у меня на собеседовании
Кандидат у меня на собеседовании

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

Так вот, я оказался в интересной ситуации. На собесах кандидаты спрашивают: “Расскажите про состав команды, про процессы”. А я отвечаю: “Кстати да, мы живём без тестировщика, но это не плохо, это мы сами от него отказались, и вообще это не баг а фича, и мы не отсталые, а наоборот такие прогрессивные”. 

Мне самому казалось, что потенциальных разработчиков будет отпугивать отсутствие тестировщика, а идея, что можно жить и без него, ассоциируется скорее с отсталыми конторами, где говнокод, авралы, нет кофе-машины в офисе и всё остальное :)

Мне казалось, что слишком мало разработчиков на текущий момент пробовали жить так, как живём мы, и я сомневался, воспримут ли они это с позитивом. 

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

  1. Когда узнавали на собеседовании, что в команде нет тестировщика, то как это влияло на привлекательность позиции?

  2. Как ощущается теперь спустя месяц работы?

Ответы были такие:

развёрнутые ответы разработчиков-новичков

Разработчик:

  1. Тут скорее не про команду без тестировщика (таких много), а вот команд, пишущих устойчивые тесты это да.) Это дополнительный опыт, и крутой по своей природе. Скорее захотелось поучаствовать в таком проекте.

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

Ещё разработчик:

  1. "ВАУ, я хочу это увидеть!!!" Привлекательность сильно повысилась, появилось желание это опробовать.

  2. Ещё не могу привыкнуть к долгим пайплайнам.

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

Тут конечно стоит учитывать ошибку выжившего - те, кто “не купил” идею, что работать как мы - это круто, наверное просто не пошёл на наши позиции.

Итоги

Суммируя наш опыт, вам стоит пробовать перейти на автоматический регресс, если:

  • У вас мало UI, или вы хорошо умеете его тестировать автоматически.

  • Вы хотите иметь быструю доставку изменений на прод, часто релизить (continuous deployment) или хотя бы всегда иметь код, готовый к релизу (continuous delivery).

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

  • У вас прямо сейчас уже неплохое покрытие тестами. Если это не так, лучше сначала его нарастить.

  • У вас нет кучи легаси. Но тут см. пункт выше - возможно, если вы покроете ваше легаси тестами, оно перестанет быть таковым ;).

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

Котики поехали дальше
Котики поехали дальше

P. S. Многие вещи я упомянул в статье только вскользь, иначе она была бы ещё в 3 раза больше. Если интересно о чём-то узнать подробнее, спрашивайте в коментах. Отвечу на что смогу, или сделаю мини-статью, если тема большая. Мне интересно делиться опытом и сравнивать его с вашим, так можно узнать много интересного.

P. P. S. Привет всем из команды и компании, кому история из статьи уже знакома :) Я специально не стал указывать, о какой компании речь, ибо пишу не чтобы попиарить компанию, а просто от себя, чтобы поделиться практикой и обсудить впечатления от такого подхода. Велкам в комменты!

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


  1. imjustwatching
    00.00.0000 00:00
    +3

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


    1. freeExec
      00.00.0000 00:00
      +2

      Расскажите это Microsoft. У вас пропали файлы, не печатает принтер или перестала запускаться ОС, ни чего, скоро мы это починим.


    1. Captain_Jack Автор
      00.00.0000 00:00
      +2

      Тут такая штука. Не ошибается тот, кто ничего не делает. Если пробовать что-то менять, то всегда есть риск допустить ошибки, что-то ухудшить или даже сломать.

      Можно жить по принципу "работает - не трогай", но в долгосрок это превращает команду и проект в болото и легаси, если не реагировать на постоянные изменения внешней среды. Из такого болота потом сложно вылезти, и конкурентность сильно падает, изменения становятся долгими и дорогими.

      Некоторые крупные компании следуют принципу "move fast and break things". Да, это несёт риски, и клиентам конечно не нравится, когда качество страдает, но и альтернатива в виде проигрыша конкурентам и закрытия бизнеса не радует. Как всегда, где-то посередине стоит искать баланс, подходящий для вашей команды.


  1. rsashka
    00.00.0000 00:00

    Котики классные! Рисовали нейросетью?


    1. Captain_Jack Автор
      00.00.0000 00:00
      +2

      Да, очень тянулись руки поиграть с сетями, взял DALLE-2 :)


      1. rsashka
        00.00.0000 00:00

        Ага, мне тоже понравилось!


  1. Hledacek
    00.00.0000 00:00
    +5

    Из моего опыта подобного перехода, только мы не отказались от тестировщиков, а сразу начали их учить писать автотесты:

    1. Писать тесты это навык, много разработчиков умеют писать только unit tests, если им сразу дать разрабатывать интеграционные и end-to-end получаем только позитивные кейсы и без corner cases.

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

    3. Lead Time сократилось, но дело не только в автотестировании, была еще постройка CD и уход от SCRUM. CI был у продукта с самого начала.

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


  1. hardim
    00.00.0000 00:00
    +1

    Работа команды разработки без тестировщика может вызывать проблемы в процессе разработки программного обеспечения. Без тестировщика, возможно, не будет достаточного контроля качества продукта, что может привести к ошибкам и сбоям, которые могут повредить удовлетворение клиентов и имидж компании. Все равно что запускать сервис 24 на 7 без дежурной смены.

    Можно так конечно:

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

    -использование автоматических тестов и инструментов для управления кодом, таких как Git, может помочь уменьшить риски, связанные с отсутствием тестировщика.

    На практике это полная Жжжж.


  1. funca
    00.00.0000 00:00
    +4

    QA это не столько тесты гонять, сколько про стратегию обеспечения качества (если у вас не так, то это просто был неправильный QA). Тут часто цитируют Сунь-Цзы:

    Стратегия без тактики - это самый медленный путь к победе. Тактика без стратегии - это просто суета перед поражением

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

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


    1. Captain_Jack Автор
      00.00.0000 00:00
      +2

      Согласен про стратегию, тоже считаю это большой ценностью. Ищу сейчас QA, который так же будет смотреть на свою работу.


  1. R3B3LL10N
    00.00.0000 00:00
    +4

    Разрабы часто не понимают что такое QA. Хуже всего когда QA не понимает что такое QA...

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

    В целом, вы по факту и сделали работу отдела QA. Наладили процесс как нужно. Всё что осталось - взять таки человека с сеткой на подстраховку, чтобы ловить то что не отловят автотесты и сами разрабы.


  1. MasterMentor
    00.00.0000 00:00

    Никогда такого не было, и вот опять...

    Мы сделали самое простое решение. Просто закрыли отдел тестирования...

    (с) QIWI Ведущий платёжный сервис нового поколения в России

    https://habr.com/ru/company/qiwi/blog/717370/


  1. MasterMentor
    00.00.0000 00:00

    Только какое отношение изложенное имеет к тематическому разделу "ненормальное программирование", если в изложенном нет ни строчки кода, ни техник программирования, сложно понять...


    1. Mike-M
      00.00.0000 00:00

      Ну как же, это очевидно — на разработчиков возложили обязанности тестировщиков.


  1. klvov
    00.00.0000 00:00
    +2

    мое скромное имхо сбоку: тестировщик, который умеет писать автотесты - это не тестировщик, а программист. но программист обычно хочет писать новые полезные фичи, а не покрывать тестами легаси, поэтому тут и возникает такое внутреннее противоречие


  1. Mike-M
    00.00.0000 00:00
    +2

    Из фронтенда у нас только админка

    Именно это вам и позволило отказаться от тестировщика. И то лишь поначалу.


    сейчас хотим себе фуллстек‑QA с упором на автотесты

    В вашем случае это, вероятно, прокатит.
    Но вообще говоря, fullstack-QA — это примерно такой же миф, как многозадачность, работа только в офисе, или только с 09:00.
    Именно поэтому и существуют раздельные вакансии QA Automation & QA Manual.
    Вспоминаем Генри Форда: "Каждый должен заниматься своим делом и достигать в нем высокого мастерства".


    Говорят, в гугле большинство команд работают без тестировщиков.

    Поправлю: в Google они просто иначе называются — Software Developer Engineer in Test. По сути, тот же тестировщик-автоматизатор.


    Сервисы проверяются автоматическими тестами, а если баг проскакивает на прод, то его просто исправляют и дописывают тесты.

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


    Дописали интеграционных тестов, чтобы в рамках каждого сервиса была надёжно покрыта вся основная функциональность.

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


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

    Это очень серьезная, стратегическая ошибка! Практика тестирования как раз на том и построена, что человеку проще замечать ошибки других, чем свои собственные. Иначе, например, в издательствах не существовало бы должности корректора.
    Кроме того, "самотестирование" требует высокой ответственности. Вы уверены, что в команде всем разработчикам не всё равно, что там попадет в production? Уверены, что так будет всегда?


    снижение накладных расходов и рост скорости поставки уже дадут ценность

    Угу, за счет снижения качества, если не сейчас, то в перспективе. Руководство, как я понял, не против эксплуатации пользователей в роли подопытных кроликов бесплатных тестировщиков? Ах да, у вас же внутренний сервис… Но ведь речь о "крупной финтех-компании, отвечаем за небольшую часть сервисов, на которых работают продукты с миллиардным оборотом"!
    И осталось неясным, за счет чего удалось увеличить скорость поставки, если разработчики стали тратить время на тесты.


    Разумеется, разработчикам понравилась идея отказа от тестировщика.
    Во-первых, большинство предпочитает разрабатывать новые фичи и совершенствовать hard skills, а не баги фиксить.
    Во-вторых, не надо переключать контекст с той самой разработки на те самые баги.
    Красота! )


    негативные сценарии — что делать, если твой код что-то поломает после релиза.

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


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

    Это как?


    Качество субъективно не просело.
    Тем не менее, качество работы прода нас устроило.

    А что сказали те, кто пользуются вашим продуктом?


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

    Я даже не знаю, как такое комментировать...


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

    Нагрузка возросла. А зарплата прибавилась? )


    или хотя бы всегда иметь код, готовый к релизу (continuous delivery).

    Это не continuous delivery, это continuous integration.


    Суммируя наш опыт, вам стоит пробовать перейти на автоматический регресс, если:

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


    То же про опрос. Причем здесь "Был ли у вас подобный опыт замены ручного тестирования автотестами", если ожидаемый вопрос "Был ли у вас подобный опыт отказа от тестировщика?".
     
     
    Подводя итог, главное — чтобы от тестировщиков не отказались корпорации типа Боинга. Самолеты и так довольно часто падают.


    Но за статью спасибо. Отличный пример того, как делать не надо.
    Хорошо, что в конечном итоге вы решили оставить тестировщика. Другими словами, с чего начали, к тому и вернулись )


    1. Captain_Jack Автор
      00.00.0000 00:00

      Привет, спасибо за такой объёмный комментарий!

      Приходилось работать с QA fullstack и знаком с опытом многих коллег, у кого они есть в команде. Можете раскрыть, в чём их мифичность?

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

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

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

      Это не continuous delivery, это continuous integration.

      Имел в виду всё-таки continuous delivery (подробнее раз, подробнее два), хотя там пожалуй легко было понять не так. Идея в том, что классно иметь релиз сервиса по клику в любое время дня и ночи, или полностью автоматический релиз на каждый коммит.

      Вы уверены, что в команде всем разработчикам не всё равно, что там попадет в production? Уверены, что так будет всегда?

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

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

      Поэтому ваш опыт должен показать, можно без него обойтись, или нет

      Да, пожалуй. Наш показал, что мы обойтись можем, но в долгосрок хорошо бы иметь хотя бы небольшой ресурс своего fullstack QA, хотя бы 0.25 ставки. И для команды, и для проекта это будет оптимально в долгосрок.

      Хорошо, что в конечном итоге вы решили оставить тестировщика. Другими словами, с чего начали, к тому и вернулись

      Наша жизнь без QA помогла нам лучше, конкретнее понять нашу потребность и получить много нового опыта. Мы теперь уже не те, что раньше. По-другому смотрим на обеспечение качества, участвуя всей командой. Больше понимаем в этом самом качестве после такой продолжительной фокусировки на нём. Лучше понимаем, зачем нам QA, чего мы ждём от человека в этой роли.

      Так что на мой взгляд мы сделали несколько шагов вперёд, и очень классно, что теперь это часть нашего опыта.


      1. Mike-M
        00.00.0000 00:00

        Спасибо за развернутые ответы!


        Можете раскрыть, в чём их мифичность?

        Вроде бы уже объяснил, но попробую другими словами.
        Будущее за узкой специализацией. Потому что в наше время чуть ли не ежедневного появления новых технологий, фреймворков и инструментов по-другому нельзя: "только мы не успели освоить одно, как тут же не успели освоить другое" )
        Вы бы согласились на операцию по удалению аппендицита, если бы её проводил хирург-стоматолог? Вот и я нет.
        Впрочем повторю, в ваших условиях fullstack может и подойти. Продолжая аналогию, будет достаточно врача общей практики )


        классно иметь релиз сервиса по клику в любое время

        Да, это CD. Но вы говорите "всегда иметь код, готовый к релизу". Это CI.


        Я пожалуй сгорю от стыда, в первую очередь перед собой.

        Речь не о вашей персональной ответственности, а о рисках для бизнеса. Пока вы будете сгорать от стыда, пользователи будут страдать от багов, просочившихся на прод.


        Так что на мой взгляд мы сделали несколько шагов вперёд, и очень классно, что теперь это часть нашего опыта.

        Бесспорно, любой опыт полезен, даже негативный.
        Но перед катом статьи вы четко обозначаете ее тему: "Больше полугода мы проработали без тестировщика в команде, и сейчас пора посмотреть, что из этого получилось". В результате вы пришли к выводу, что тестировщик вам всё же необходим. То есть с точки зрения штатной единицы и ФОТ ничего не поменялось. Я об этом.


        В любом случае, хорошо что решили поделиться своим опытом и написать статью.
        К слову, статья безупречна с точки зрения правописания (ну, почти) — приятно читать.


  1. iBljad
    00.00.0000 00:00
    +1

    Кажется, статью правильнее было бы назвать "Полгода с нормальными процессами и CI/CD", может, при таком подходе и с тестировщиком было бы не хуже :)


  1. dmitryklerik
    00.00.0000 00:00

    Добавлю что от автотестов есть ещё один плюс. Они заставляют разработчиков отвечать за результат задачи, а не спихивать проверку на тестеров. Одно это значительно уменьшает кол-во багов.


  1. mighty-tester
    00.00.0000 00:00

    >>> Из фронтенда у нас только админка

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


  1. AlexW0lf
    00.00.0000 00:00

    Мне кажется в названии неоднозначность. По факту вы заменили ручного тестировщика на автоматизатора, а так как тестировщика автоматизатора у вас не было, то создали виртуального из девелоперов. Часто следующий шаг - гибридные роли: dev/auto, auto/dev. Так балансировать легче и риски меньше.