Как писать баг-репорт, который починят с первого раза

Хороший репорт экономит два часа переписки. Плохой возвращается с комментарием «не воспроизводится» и живёт неделю. Разница почти всегда в одних и тех же четырёх местах.

Зачем вообще нужен баг-репорт

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

Отсюда критерий качества: репорт хорош, если разработчик открыл его и сразу пошёл чинить, не задав ни одного вопроса.

Заголовок: по нему решают, брать ли задачу

Заголовок читают в списке из сотни строк, не открывая. Рабочая формула: [где] что происходит [при каком условии].

ПлохоХорошо
Не работает корзинаКорзина: после перезагрузки страницы остаётся только последний товар
Ошибка 500Оформление заказа: POST /api/order отдаёт 500 при пустом поле «Комментарий»
Криво отображаетсяКаталог: описание выходит за границы карточки при названии длиннее 40 символов

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

Шаги: пишите для человека, который видит продукт впервые

Главная ошибка — писать шаги для себя. «Добавить товар» понятно вам, но не тому, кто будет воспроизводить через неделю. Нужны конкретные данные.

Ожидаемый и фактический результат

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

Фактический результат — только то, что наблюдается. Не «валидация не работает на бэкенде» (это гипотеза), а «сервер вернул 500». Гипотезе место в комментарии, и она полезна, но отделяйте её от факта.

⚠️ Один репорт — один дефект

Если в задаче два дефекта, починят один, второй потеряется вместе с закрытой задачей. Это самая частая причина, по которой «мы же это чинили» превращается в «оно опять сломано».

Что приложить, чтобы не переспрашивали

Как выглядит репорт целиком

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

ПолеЗначение
ЗаголовокКорзина: после перезагрузки страницы остаётся только последний добавленный товар
ОкружениеСтенд test, сборка 2.15.0, Chrome 126 / Windows 11, пользователь test@shop.ru, роль «клиент»
ПредусловияВ корзине три разных товара, пользователь авторизован
Шаги1. Открыть /cart
2. Убедиться, что видно три позиции
3. Нажать F5
Ожидаемый результатВсе три товара на месте, счётчик в шапке показывает 3 (требование REQ-14 «Корзина сохраняется между сессиями»)
Фактический результатОстаётся один товар — последний добавленный. Счётчик при этом показывает 3, данные расходятся
ВоспроизводимостьВсегда, 5 из 5 попыток
СерьёзностьCritical — обхода нет, сценарий покупки прерывается
ВложенияВидео, HAR-файл, запрос GET /api/cart как cURL, traceId 8f1c-44a2

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

Пять проверок перед отправкой

  1. Воспроизводится повторно? Хотя бы дважды.
  2. Воспроизводится в другом браузере или в инкогнито? Это отделяет дефект от кэша и расширений.
  3. Нет ли уже такого репорта? Поиск по трекеру — тридцать секунд.
  4. Это точно расхождение с требованием, а не ваше ожидание?
  5. Актуальна ли ваша сборка? Возможно, уже починили.

Готовую структуру со всеми полями можно забрать в шаблоне баг-репорта, а как выставлять важность — в разборе Severity и Priority.

Заводить ли дефект, если он мелкий?

Да, но с честной серьёзностью. Незаведённый мелкий дефект накапливается в «мы про это знаем» и однажды всплывает как претензия от клиента. Заведённый и отложенный — это осознанное решение команды, а не забытая проблема.

Насколько подробным должен быть репорт?

Ровно настолько, чтобы воспроизвёл человек без вашего контекста. Обычно это 5–8 строк шагов. Пересказ логики продукта туда не нужен.

Что делать, если дефект плавающий?

Указать частоту («3 из 10 попыток»), приложить видео и логи, описать, при каких условиях чаще. Плавающий дефект — не повод не заводить задачу.

Можно ли писать репорт скриншотом?

Текст ошибки нужен текстом: по картинке нельзя искать в трекере и нельзя скопировать в поиск по логам. Скриншот — дополнение, а не замена.

Написать хороший репорт с первого раза не выходит почти ни у кого — это навык, который ставится повторением. В курсе для этого есть тренажёр: вы разбираете дефект, пишете текст, и он проверяется по семи критериям с показом эталона. 14 900 ₽ один раз, а сам тренажёр открыт бесплатно — попробуйте прямо сейчас в конструкторе баг-репорта.

Начать бесплатно Программа курса