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

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

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

  1. Заголовок, описывающий ощущение
  2. Нет шагов воспроизведения
  3. Нет ожидаемого поведения
  4. Несколько ошибок в одной задаче
  5. Эмоция вместо влияния
  6. Не проверять дубликаты
  7. Пропущенное окружение
  8. Описывать увиденное вместо того, чтобы показать
  9. Пропускать консоль и вкладку сети
  10. “У меня работает”, и ничего не приложено

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

Что можете написать только вы

1. Заголовок, описывающий ощущение

“Оформление заказа сломано.” “Вход не работает.” “Что-то не так с картинками.”

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

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

Слабо
Картинки сломаны
Лучше
Изображения товаров не загружаются в мобильном Chrome, если страница открыта из поиска

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

2. Нет шагов воспроизведения

Без шагов разработчик не отлаживает, а угадывает, что вы делали. Каждая неверная догадка заканчивается на cannot reproduce, задача возвращается к вам, и отсчёт начинается заново.

Шаги должны начинаться с состояния, до которого дойдёт любой.

Слабо
Зайди в мою корзину и попробуй оплатить
Лучше
1. Войти как покупатель с пустой корзиной. 2. Добавить любые два товара. 3. Применить код SAVE10. 4. Нажать "Перейти к оплате".

Четыре строки, и читатель стоит там, где стояли вы. Отдайте свои шаги коллеге, который ошибку не видел. Если он вернётся с вопросом, этот вопрос и есть ваш пропущенный шаг.

3. Нет ожидаемого поведения

“Итог неверный” предполагает, что читатель знает, как выглядит верный. Часто он не знает, а иногда то, о чём вы сообщаете, оказывается правилом, о котором вы не знали.

Пишите обе половины.

Слабо
Скидка неправильная
Лучше
Ожидалось: итог показывает 45,00 после скидки 10 %. Фактически: итог показывает 50,00, строки со скидкой нет.

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

4. Несколько ошибок в одной задаче

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

Один дефект на задачу. Если у них общая причина, скажите об этом и свяжите их.

5. Эмоция вместо влияния

“Этим невозможно пользоваться.” “Как это вообще выпустили?” “Третий раз за неделю.”

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

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

Слабо
Это катастрофа, почините срочно
Лучше
Блокирует оплату всем покупателям в Safari, обходного пути нет, началось после вторничного релиза

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

6. Не проверять дубликаты

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

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

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

Что браузер уже знает

Следующие четыре другого рода. Никто не опускает версию браузера ради экономии сил. Её опускают потому, что записать её значит уйти со страницы, отыскать строку версии и вбить её в форму, а к этому моменту вкладка уже закрыта.

7. Пропущенное окружение

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

Запишите браузер и его версию, операционную систему, устройство и размер окна, если вёрстка хоть как-то замешана. Latest Chrome не версия. В день, когда это читают, оно значит не то, что в день, когда это писали.

8. Описывать увиденное вместо того, чтобы показать

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

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

9. Пропускать консоль и вкладку сети

Это первое, что просит разработчик, и последнее, что попадает в большинство отчётов. Красная ошибка в консоли обычно называет сбойный файл и строку. Неудавшийся запрос во вкладке сети обычно называет код ответа и адрес. Любое из двух может превратить день перебора коммитов в двухминутную правку.

Откройте инструменты разработчика, прежде чем закрыть вкладку. Скопируйте текст ошибки, а не сфотографируйте его, чтобы по нему можно было искать. Если запрос упал, отметьте его статус и путь.

10. “У меня работает”, и ничего не приложено

Фраза заканчивает разговор, ничего не решив, и работает в обе стороны. От разработчика она значит, что отчёту не хватило деталей для воспроизведения. От того, кто сообщил об ошибке, ответ на исправление в виде “у меня всё ещё сломано” и ничего больше значит ровно то же самое наоборот.

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

Что действительно решает половину этого

Вернитесь ко второй группе. Ошибки 7, 8, 9 и 10 это одна проблема в четырёх шляпах: контекст существовал в момент бага, и никто его не записал.

Именно эту часть стоит автоматизировать, и ради неё мы сделали Session Replay.

Session Replay

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

Установить расширение

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

Чек-лист

Прежде чем нажать “Отправить”:

  • Заголовок называет, что не сработало, где и при каком условии
  • Шаги начинаются с состояния, до которого дойдёт любой
  • Ожидаемое и фактическое поведение записаны оба
  • Один дефект в этой задаче, и только один
  • Влияние изложено как факт, и его хватает, чтобы приоритет выставил кто-то другой
  • Я поискал существующий отчёт среди открытых и закрытых задач
  • Браузер, версия, операционная система и устройство записаны
  • Приложен скриншот или запись, показывающие окно целиком
  • Ошибки консоли и упавшие запросы вставлены текстом
  • Доказательства ко всему, что я утверждаю, включая “оно всё ещё происходит”