Пройти курс на Stepik
Главная/Материалы

Баг-репорт, который не закроют с пометкой «не воспроизводится»

Вы передали ошибку разработчику, а через два дня задача вернулась со статусом «не воспроизводится». Чаще всего дело не в разработчике — ему просто не хватило того, что вы видели, а он нет.

Почему задачи возвращаются

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

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

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

Время: поле, на котором чаще всего экономят

Формулировка «утром пользователь пожаловался на ошибку» бесполезна. По ней разработчику придётся просматривать логи за полсуток, а если сервис нагруженный — за эти полсуток там миллионы строк.

Правильно писать так: «первые ошибки зафиксированы в 09:32 МСК, последняя — в 10:15 МСК». Даже если точность приблизительная, интервал в сорок минут отличается от интервала в двенадцать часов принципиально.

Три момента, которые стоит держать в голове.

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

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

Отметьте, продолжается ли проблема сейчас. Это меняет приоритет: активная ошибка требует одной реакции, прекратившаяся — другой, и разработчик должен понимать, идёт ли он тушить пожар или разбирать последствия.

Окружение

Строка «не работает раздел» не говорит ничего. Нужны операционная система и её версия, браузер и его версия либо версия мобильного приложения, тип устройства — десктоп или телефон.

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

Шаги воспроизведения

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

Обязательно разделите «что ожидалось» и «что получилось». Это звучит как формальность из учебника, но именно здесь чаще всего выясняется, что пользователь и разработчик по-разному понимают, как система вообще должна работать, — и никакого бага нет.

Логи и запрос

Раздел, который отличает баг-репорт от L2 от простой пересылки жалобы.

Приложите ссылку на выборку в системе логов — уже с наложенными фильтрами по времени и сервису, а не просто ссылку на Kibana. Если ошибок много, укажите их количество и динамику: «за час 340 ошибок, пик в 09:40». Разработчик по этой строке сразу поймёт масштаб.

Если ошибка в API, вложите готовый curl, который можно скопировать и выполнить. Не описание запроса словами, а именно исполняемую команду — с методом, адресом, заголовками и телом. Токены, разумеется, замените на заглушки. Такой curl снимает с разработчика полчаса работы по восстановлению запроса и резко повышает шанс, что задачу возьмут сегодня, а не в следующем спринте.

Сюда же: идентификаторы. user_id, номер заказа, trace_id или request_id, если в системе сквозная трассировка. Один идентификатор запроса нередко заменяет половину описания.

Код ответа тоже пишите явно — по нему часто сразу видно, где остановился запрос. Что означают самые частые из них, разобрано в статье про ошибки 401, 403 и 404.

Пример

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

Время: первая ошибка 09:32 МСК 21.09.2026, последняя 10:15 МСК. На момент заведения задачи ошибка не повторяется.

Окружение: прод, Chrome 141 / Windows 11, десктоп, домашняя сеть. Воспроизводится также в Safari на iOS.

Пользователи: user_id 884213, 884477, 885901 (всего 12 обращений).

Шаги:

Войти под user_id 884213 Открыть /cart/, нажать «Оформить» Выбрать оплату картой, ввести данные тестовой карты 4111... Нажать «Оплатить»

Ожидалось: переход на страницу успешной оплаты. Получилось: страница ошибки «Платёж отклонён», в этот момент приходит СМС о списании.

Запрос: <curl, если ошибку можно воспроизвести отправкой запроса> Логи: <ссылка на выборку с фильтром по сервису и интервалу> За период 340 ошибок.

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

Если воспроизвести не удалось

Это нормальная ситуация, и она не повод не заводить задачу — повод оформить её иначе.

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

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

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

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

Все материалы
Пройти курс на Stepik