Всем привет, меня зовут Сергей Прощаев. Я Tech Lead и руководитель направления Java/Kotlin разработки в FinTech, а также преподаю на курсах в OTUS. В этой статье я хочу поговорить о том, что часто остаётся за кадром красивых диаграмм и идеальных user stories — о дефектах.

Когда мы проектируем API или разрабатываем сервис, мы обычно мыслим позитивно: как это будет работать, какой красивый ответ вернётся, как быстро пройдёт запрос. Но любой инженер со стажем вам скажет: система начинается не с успешного сценария, а с того, как она ломается. И именно здесь, в управлении дефектами, чаще всего и кроется разница между системой, которая просто «написана», и системой, которая надёжно работает в продакшене годами.

Дефект — это не баг, а часть жизненного цикла продукта

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

Часто провожу параллель с производством. Если на конвейере завода чертёжник ошибся в спецификации (ошибка), то технолог сделает не ту оснастку (дефект), и в итоге готовое изделие не подойдёт к сборочному узлу (сбой). В разработке ровно так же. И важно понимать: тестировщик не может исправить дефект. Он может только сделать его видимым. Это как подсветка фонариком в тёмной комнате: вы не убираете хлам, но наконец‑то видите, куда наступать нельзя.

Жизненный цикл дефекта: от хаоса к системе

В моей практике было много проектов, где управление дефектами сводилось к переписке в Telegram: «Серёга, упало тут, посмотри». Это работает, пока вас двое. Но когда команда из 20 человек, а спринт идёт к релизу, такой подход превращается в ад.

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

Классический жизненный цикл дефекта выглядит так:

Рис. 1. Жизненный цикл дефекта
Рис. 1. Жизненный цикл дефекта

Каждый статус здесь — это триггер для конкретных действий. Когда дефект переходит в статус «Назначен», я, как Tech Lead, уже не должен гадать, кто его чинит. Когда он в «Повторном тестировании», тестировщик точно знает, что пора проверять. Это не про контроль, это про снятие неопределённости.

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

Кто и как меняет статусы: роли в процессе

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

У нас в FinTech мы используем чёткое разделение прав при работе с трекерами (Jira, YouTrack или любым другим инструментом):

  • Новый → Открыт / Новый → Отклонен: Это право тест‑лида или ведущего разработчика. На этом этапе мы отсеиваем дубликаты, невоспроизводимые сценарии и дефекты, которые по факту не дефекты, а «так и задумано». Если пропустить сортировку, разработчики будут тратить время на исправление того, что не нужно исправлять.

  • Открыт → Назначен: Здесь уже включается планирование. Ведущий разработчик или бизнес‑аналитик определяет, кто из команды будет заниматься задачей.

  • Назначен → В работе: Мой любимый статус. Его может менять только тот, кому дефект назначен. Это сигнал для всей команды: «всё, я в теме, не трогайте».

  • В работе → Исправлен: Меняет разработчик после того, как внёс изменения. Обратите внимание: он не закрывает дефект, а только говорит «я сделал».

  • Исправлен → Повторное тестирование: Этот переход — исключительно за тестировщиками. Они проверяют, действительно ли проблема ушла. Если нет — статус возвращается в «Открыт».

Это не просто workflow. Это система, которая защищает вас от ситуации, когда разработчик «починил» одно, но случайно сломал три смежных сценария, а дефект тем временем закрыли и забыли.

Сортировка дефектов: где зарыты грабли

Есть ещё один ритуал, который я считаю обязательным, но который многие команды недооценивают — это сортировка дефектов (defect triage). Это не просто совещание, это фильтр качества.

Мы собираемся раз в 2–3 дня (или чаще, если близится релиз) всем ядром: разработчики, тестировщики, бизнес‑аналитики. И на этом совещании мы смотрим на все дефекты в статусе «Новый» и отвечаем на три вопроса:

  1. Достоверен ли дефект? Может, это проблемы тестовых данных или кривые руки тестировщика?

  2. Какова его серьёзность? Это критический простой всего сервиса или просто опечатка на кнопке?

  3. Каков его приоритет? Что важнее: чинить этот дефект или доделывать новую фичу?

И здесь начинается самое интересное. Часто вижу, как джуниоры смешивают серьёзность и приоритет. Это разные вещи.

  • Серьёзность (Severity) — это техническое влияние дефекта на систему. Критическая серьёзность (Severity 1) — это когда компонент не работает вообще. Например, не проходит оплата. Низкая (Severity 4) — орфографическая ошибка.

  • Приоритет (Priority) — это бизнес‑важность устранения. Высокий приоритет — значит, это нужно сделать прямо сейчас, потому что иначе мы не выпустим релиз или блокируем других.

Например — был у нас кейс: дефект с «неправильным отображением логотипа на странице успешной оплаты». Серьёзность — низкая (на работу системы не влияет). Но приоритет — срочный, потому что логотип — это часть брендинга, и заказчик готов был перенести релиз, если мы не поправим. Если бы мы руководствовались только серьёзностью, мы бы отложили это в долгий ящик. А так — подняли в очереди.

Как мы измеряем критичность: шкала на примере авиабилетов

Чтобы внести ясность, мы всегда фиксируем уровни серьёзности в документации. Это избавляет от споров «а это критично или нет?». Вот шкала, которую я использую в своих командах (и она очень похожа на ту, что описана во многих статьях в сети на эту тему):

  • Уровень 1 (Критический): Компонент не работает, альтернативы нет. Тестирование не может быть продолжено. В нашем API это, например, не работает метод создания заказа. Без него весь сценарий мертв.

  • Уровень 2 (Высокий): Компонент не работает, но есть обходной путь (workaround). Например, оплата через MasterCard падает, но Visa работает. Тестирование может идти, но ограниченно.

  • Уровень 3 (Средний): Функциональность ограничена, но критического влияния нет. Например, после оплаты не приходит PDF‑билет на почту, но билет есть в личном кабинете.

  • Уровень 4 (Низкий): Влияния на систему нет. Опечатки, артефакты вёрстки, незначительные несоответствия макетам.

Метаданные дефекта: почему «не воспроизводится» — это приговор

Самая частая фраза, которая выводит из себя разработчиков: «У меня не воспроизводится». И самая частая ошибка тестировщиков — не приложить достаточно данных, чтобы дефект можно было воспроизвести с первого раза.

В своём проекте мы сделали набор полей (метаданных) обязательными для заполнения. Это не для галочки, а чтобы исключить вопрос «а что делать?». Вот минимальный набор, который я требую:

  • ID дефекта: Уникальный номер. Без него в переписке бардак.

  • Среда: Dev, Stage, Prod? С разными конфигами поведение может кардинально отличаться.

  • Серьёзность и Приоритет: О чём мы говорили выше.

  • Шаги по воспроизведению: Это не «нажать кнопку», а «Шаг 1: отправить POST запрос на /api/v1/order с телом {...}. Шаг 2:...». Чем детальнее, тем быстрее починка.

  • Ожидаемый результат vs Фактический результат: Золотое правило. Если эти два поля путаются, дефект будет возвращаться на доработку.

  • Подтверждение: Скриншот, curl запрос, лог ошибки, дамп тела ответа. Всё, что помогает разработчику не гадать, а сразу видеть проблему.

Помню случай, когда один тестировщик просто написал: «При регистрации ошибка». Разработчик потратил полдня, пытаясь воспроизвести ситуацию, но у него всё работало. Оказалось, что ошибка возникала только при регистрации с email, содержащим символ «+». Если бы этот кейс был описан сразу, мы бы сэкономили 4 человеко‑часа. Это деньги проекта, выброшенные на ветер.

Практики, которые работают: как мы делаем в FinTech (и не только)

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

  1. Автоматизация метрик. Мы не просто фиксируем дефекты, мы считаем их. Среднее время жизни дефекта (Mean Time to Resolution), количество дефектов, найденных на stage vs на prod, — это наши KPI. Если количество дефектов на prod растёт, мы останавливаем релизы и разбираемся, почему упало качество на этапе тестирования.

  2. SLA на исправление. У нас есть соглашение об уровне обслуживания (SLA). Дефект с приоритетом «Срочный» (Priority 1) должен быть исправлен за 1 рабочий день. Это дисциплинирует и не даёт откладывать критичные вещи в долгий ящик.

  3. Тестирование как часть дизайна. Когда мы проектируем API, я прошу аналитика или разработчика сразу прописывать не только happy path, но и все возможные негативные сценарии: что вернём, если передан невалидный токен? Что если тело запроса превышает лимит? Это не прихоть тестировщика, это часть архитектуры. Если у вас нет ответа на вопрос «как система ведёт себя, когда внешний сервис недоступен», значит, у вас есть скрытый дефект в требованиях.

Вместо заключения: дефекты — это окно в реальность

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

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

У нас вы найдёте не один курс, а целую экосистему обучения тестированию — на любой уровень подготовки. ➡ [Перейти в каталог]

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

Дальше — широкий выбор автоматизации: Java QA Engineer (Basic и Professional), JavaScript QA Engineer, автоматизация на Kotlin, Python и даже Go. Для тех, кто хочет копать глубже — курс по нагрузочному тестированию, где разбираются сценарии, которые валят системы в продакшене.

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

До 19 апреля на апрельские курсы действует тающая скидка −10% — удобная точка входа, чтобы начать развиваться в нужном направлении, пока условия позволяют сделать это чуть проще.