Все разборы

Теория и баги

Как ответить на вопрос «Опишите жизненный цикл бага» на собеседовании QA

Жизненный цикл бага на собеседовании QA: основные статусы, альтернативные резолюции, перепроверка исправления и когда переоткрывать баг, а когда заводить новый.

Зачем это спрашивают

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

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

Как построить сильный ответ

Основной путь

Назовите статусы по порядку и скажите, кто переводит баг в каждый из них:

Статус Что происходит Кто действует
Новый (New) баг заведён и ждёт разбора тестировщик
Назначен / Открыт (Assigned, Open) баг принят, определён исполнитель тимлид или менеджер
В работе (In Progress) разработчик исправляет разработчик
Исправлен (Fixed, Resolved) исправление сделано и выложено на тестовый стенд разработчик
На перепроверке (Ready for Test, In Testing) тестировщик проверяет исправление тестировщик
Закрыт (Closed, Verified) исправление подтверждено тестировщик
Переоткрыт (Reopened) исправление не помогло, баг вернулся в работу тестировщик

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

Альтернативные резолюции

Не каждый баг исправляют. На разборе его могут закрыть с другой резолюцией:

  • Дубликат (Duplicate) — такой баг уже заведён; закрывают со ссылкой на оригинал.
  • Не баг (Not a Bug, Works as Designed) — система работает по требованиям, ожидание было неверным.
  • Не воспроизводится (Cannot Reproduce) — разработчик не смог повторить проблему. Что делать в этом случае, разобрано в отдельной статье про невоспроизводимые баги.
  • Не будем исправлять (Won't Fix) — исправление дороже, чем вред от дефекта, или функция скоро уйдёт.
  • Отложен (Deferred) — исправят в одном из следующих релизов.

Что делает тестировщик на перепроверке

Это часть, которая показывает практический опыт:

  1. Проверяет, что исправление на стенде.
  2. Повторяет шаги из баг-репорта — проблема ушла.
  3. Проверяет соседние сценарии: исправление не должно было сломать связанную функциональность.
  4. Если всё хорошо — закрывает. Если исходная проблема осталась — переоткрывает с комментарием, что именно проверено и на какой сборке.

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

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

Пример ответа

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

Частые ошибки

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

Пример на MarketCove

Представим гипотетическую ситуацию в учебном магазине https://shop.tomiddle.com. Сотрудник в админке переводит заказ из статуса PENDING в следующий, но покупатель в истории заказов профиля продолжает видеть PENDING.

  1. Вы заводите баг: шаги, ожидаемый и фактический результат, ответ /api/shop/orders из вкладки Network в DevTools. Статус — «новый».
  2. Тимлид назначает разработчика, тот исправляет отображение статуса и переводит баг в «исправлен», указав номер сборки.
  3. Вы проверяете, что сборка на стенде, повторяете сценарий — новый статус виден в профиле. Затем проверяете соседние сценарии: несколько смен статуса подряд, ответ GET /api/orders/{id}, заказ из нескольких товаров. Это и есть перепроверка плюс точечный регресс.
  4. Допустим, статус теперь обновляется, но в истории заказов в профиле стала отображаться неверная дата. Это другая проблема: исходный баг закрываете, новый заводите со ссылкой на первый.

Серьёзность каждого бага оценивается отдельно — как это делать, разобрано в статье про severity и priority.

Задание для практики

Нарисуйте на листе жизненный цикл бага так, как вы его понимаете: статусы, стрелки переходов и подписи, кто выполняет каждый переход. Добавьте ветки альтернативных резолюций. Затем пройдите по схеме три сценария: баг исправлен с первого раза; исправление не помогло; после исправления появилась новая проблема. Проговорите каждый вслух. Потренируйтесь оформлять баги в тренажёре баг-репортов.

Что спросят следом

  • Кто закрывает баг: разработчик или тестировщик?
    Обычно разработчик переводит баг в статус исправленного, а закрывает его тестировщик после успешной перепроверки. Так соблюдается принцип, что исправление подтверждает не тот, кто его сделал. В некоторых командах закрыть баг с резолюцией дубликат или не баг может и тимлид на разборе.
  • Что делать, если разработчик закрыл баг как не баг, а вы не согласны?
    Сначала перечитайте требования и уточните ожидаемое поведение у аналитика или владельца продукта. Если требования на вашей стороне, верните баг со ссылкой на них и понятным объяснением последствий. Спор лучше решать через источник истины, а не через переписку в комментариях.
  • Чем статус отличается от резолюции?
    Статус показывает, на каком этапе находится баг: новый, в работе, на перепроверке, закрыт. Резолюция объясняет, чем закончилась работа: исправлен, дубликат, не воспроизводится, не будем исправлять. Во многих трекерах резолюция заполняется в момент перевода в финальный статус.
  1. Q-01
    Чем severity отличается от priority?
  2. Q-02
    Из чего состоит баг-репорт?
  3. Q-03
    Разработчик говорит, что баг не воспроизводится. Ваши действия?
  4. Q-04
    Чем смоук отличается от регресса, санити и перепроверки?

Отрепетировать ответ с куратором

В сопровождении — весь банк вопросов, мок-собеседование и разбор каждого настоящего собеседования, пока не придёт оффер. Гарантий трудоустройства не даём — готовим к тому, что спросят.