БЛОК 6. Работа с багами — 20. Bug report
🧭 Введение: зачем QA нужен сильный bug report
Баг-репорт — это рабочий документ, по которому команда понимает:
что сломано, как повторить и что ожидалось.
Если репорт слабый, даже важный дефект может "зависнуть" в переписке.
Для junior QA это ключевой навык:
не просто найти проблему, а передать ее так, чтобы разработчик начал фикс без лишних уточнений.
💡 Совет:
Представь, что тебя нет онлайн: bug report должен работать и без созвона с QA.
✅ Вывод:
Хороший bug report ускоряет исправление и снижает шум в команде.
⚠️ Проблема -> решение
Проблема:
баг найден, но описан расплывчато ("иногда падает", "не работает").
В результате тикет возвращается в QA со статусом
need more info.Решение:
использовать стандартную структуру bug report и прикладывать минимальный доказательный пакет.
🟢 Если совсем просто:
Сильный баг-репорт = четкий контекст + шаги + expected/actual + доказательства.
🎯 Как понять, что этап прошел успешно:
Разработчик может воспроизвести дефект только по тексту тикета.
🛠️ Чем помогает и как работает
Bug report нужен, чтобы превратить дефект в понятную задачу для исправления.
Он связывает QA, разработку, аналитику и релизный процесс.
Как это работает:
- Шаг 1: фиксируем контекст (environment, build, роль, данные).
- Шаг 2: описываем шаги воспроизведения.
- Шаг 3: разделяем expected и actual.
- Шаг 4: добавляем severity и вложения.
- Шаг 5: передаем тикет и отвечаем на уточнения команды.
✅ Вывод:
Bug report — это не "формальность", а основной канал передачи дефекта в работу.
📚 Ключевые термины (простыми словами)
- Bug report — структурированное описание дефекта.
- Title — короткое и точное название проблемы.
- Environment — где найден баг (окружение, версия, устройство, браузер).
- Steps to reproduce — действия, которые приводят к дефекту.
- Expected result — что должно было произойти.
- Actual result — что произошло фактически.
- Attachments — скриншоты, видео, логи, network-ответы.
- Severity — тяжесть дефекта.
- Priority — срочность исправления.
🔎 Откуда QA берёт Expected result
Ожидаемое поведение не придумывается тестировщиком.
Оно всегда должно опираться на источник.
🟢 Если совсем просто:
Expected — это не мнение QA, а согласованное поведение системы.
Основные источники expected:
- требования (requirements);
- acceptance criteria;
- UX/UI макеты;
- API-контракты;
- бизнес-правила;
- договоренности команды.
Пример:
Requirement:Поле phone обязательно. Expected:Форма не отправляется, пока phone пустой. Actual:Форма отправляется.✅ Вывод:
Expected всегда должен ссылаться на источник поведения системы.
1. Структура bug report: базовый шаблон junior QA
Без структуры баг-репорты становятся "чатиком с проблемой".
Структура нужна, чтобы все тикеты читались одинаково.
🟢 Если совсем просто:
Один шаблон для всех багов дает стабильное качество.
🎯 Как понять, что этап прошел успешно:
Любой тикет в команде имеет одинаковый каркас, и его быстро читать.
Назначение:
Сделать баг-репорты понятными и предсказуемыми.
Простыми словами:
Чем стандартнее форма, тем меньше потерь информации.
Для новичка:
Не начинай с длинного текста. Сначала заполни обязательные блоки.
Пример шаблона:
TitleEnvironmentPreconditionsSteps to reproduceExpected resultActual resultSeverityAttachments✅ Вывод:
Шаблон защищает от пропуска критичных полей.
2. Что происходит после создания bug report
Bug report — это начало процесса, а не конец.
После создания тикет проходит через рабочий цикл команды.
🟢 Если совсем просто:
Bug report запускает цепочку: найден -> описан -> исправлен -> проверен.
Lifecycle:
- QA создает баг.
- Triage определяет priority и владельца.
- Разработчик анализирует дефект.
- Баг исправляется.
- QA выполняет retest.
- Тикет закрывается.
✅ Вывод:
Сильный баг-репорт ускоряет каждый этап жизненного цикла дефекта.
3. Как писать сильный Title
Title — первое, что видит команда.
Плохой заголовок делает дефект неясным уже на входе.
🟢 Если совсем просто:
Title должен отвечать на вопрос "что именно сломано и где".
🎯 Как понять, что этап прошел успешно:
По title без открытия тикета понятна суть дефекта.
Назначение:
Сделать triage и поиск багов быстрыми.
Простыми словами:
Title — это "суть дефекта в одной строке".
Для новичка:
Избегай названий типа "Critical bug", "Не работает", "Ошибка в системе".
Формула сильного Title:
[Где] + Что сломалось + При каком условииПримеры:
[Login] 500 after 6th failed attempt[Checkout] Duplicate charge after timeout + retry[Profile] Save succeeds with empty required phone
🟢 Если совсем просто:
Title отвечает на 3 вопроса:
- где проблема;
- что сломано;
- при каком действии.
✅ Вывод:
Точный title экономит время всей команды на этапе triage.
4. Steps to reproduce: правило рабочих шагов
Шаги — центральная часть bug report.
Если шаги слабые, тикет почти всегда возвращают.
🟢 Если совсем просто:
Один шаг = одно действие, без двусмысленных слов.
🎯 Как понять, что этап прошел успешно:
Разработчик повторяет дефект по шагам с первого раза.
Назначение:
Передать воспроизводимый путь к дефекту.
Простыми словами:
Пиши так, как будто проверяющий впервые видит эту фичу.
Для новичка:
Перед отправкой шагов удали фразы "иногда", "примерно", "как обычно".
Mini-правило хороших шагов:
- точные;
- короткие;
- последовательные;
- без предположений.
🟢 Простое правило:
Если шаг нельзя выполнить буквально, значит он написан плохо.
✅ Вывод:
Хорошие шаги — главный показатель качества bug report.
5. Expected vs Actual: не смешивать в одну строку
Это самая частая ошибка junior QA.
Когда expected и actual смешаны, трудно понять, что именно нарушено.
🟢 Если совсем просто:
Expected и actual всегда пишем отдельными блоками.
🎯 Как понять, что этап прошел успешно:
Из тикета сразу видно "что должно быть" и "что произошло на самом деле".
Назначение:
Сделать дефект проверяемым до и после фикса.
Простыми словами:
Эта пара — основа любой проверки исправления.
Для новичка:
Если не можешь сформулировать expected, вернись к AC/контракту.
✅ Вывод:
Разделенные expected/actual убирают двусмысленность и ускоряют ретест.
6. Severity и Priority в bug report
Эти поля часто путают.
В репорте они нужны, чтобы команда правильно расставила акценты.
🟢 Если совсем просто:
Severity = насколько тяжёл дефект, Priority = насколько срочно чинить.
🎯 Как понять, что этап прошел успешно:
Оценка в тикете аргументирована влиянием на пользователя и бизнес.
Назначение:
Помочь triage принимать решения быстрее.
Простыми словами:
Не все критичные баги чинят первыми, и не все срочные — самые тяжелые.
Для новичка:
Если сомневаешься в приоритете, предложи вариант и добавь короткое обоснование.
✅ Вывод:
Правильные severity/priority повышают качество релизных решений.
7. Вложения: когда и что прикладывать
Скриншоты и видео не "для красоты".
Они сокращают путь от "не понял" до "вижу проблему".
🟢 Если совсем просто:
Чем сложнее баг, тем важнее артефакты.
🎯 Как понять, что этап прошел успешно:
По вложениям можно подтвердить баг и начать диагностику.
Назначение:
Дать разработке и DevOps доказательства дефекта.
Простыми словами:
Текст + артефакты всегда сильнее, чем только текст.
Для новичка:
Для интеграционных багов добавляй минимум: response, время инцидента, correlation id.
✅ Вывод:
Качественные вложения ускоряют путь от бага до фикса.
8. Правило автономного bug report
Хороший bug report должен работать без участия QA.
Это ключевой критерий качества документа.
🟢 Простое правило:
Если разработчик не может воспроизвести баг без созвона с QA,
описание бага нужно доработать.
🎯 Признак сильного bug report:
- понятен контекст;
- понятны шаги;
- есть expected/actual;
- есть окружение;
- есть доказательства.
Разработчик открывает тикет -> повторяет баг -> начинает фикс.
✅ Вывод:
Автономность репорта — основной стандарт качества в команде.
9. Где может находиться причина бага
Баг не всегда означает ошибку разработчика в коде.
Причина дефекта может быть в разных слоях системы.
🟢 Если совсем просто:
QA проверяет не только код, а весь контекст продукта.
Источник дефекта может быть:
- код;
- требования;
- бизнес-логика;
- конфигурация;
- интеграция;
- данные;
- инфраструктура;
- UX-решение.
Пример:
Requirement:Пользователь может оплатить заказ несколько раз. Код работает корректно,но бизнес-логика ошибочна.✅ Вывод:
Даже при "правильном коде" дефект может быть реальным и критичным.
10. Хороший и слабый bug report: быстрый контраст
Контраст помогает junior быстрее уловить разницу в качестве.
🟢 Если совсем просто:
Слабый репорт создает вопросы, сильный — запускает фикс.
🎯 Как понять, что этап прошел успешно:
Тикет после создания не требует длинной переписки.
Сравнение:
| Слабый репорт | Сильный репорт |
|---|---|
| "Платеж не работает" | "[Checkout] Duplicate charge after timeout + retry" |
| Нет preconditions | Есть environment + build + role + status |
| Нет repro rate | Указано 3/10 и условия |
| Нет вложений | Есть видео + response + время |
✅ Вывод:
Качество bug report прямо влияет на скорость исправления дефекта.
📌 Must-know факты
- Bug report — основной артефакт передачи дефекта в работу.
- Без структуры тикет почти всегда будет шумным.
- Title, steps, expected/actual — три критичных блока.
- Вложения особенно важны для flaky и интеграционных багов.
- Качественный репорт должен быть воспроизводим без участия QA в звонке.
❗ Частые мифы
❌ Миф: Главное — написать побольше текста.
✅ Как правильно: Важно писать структурно и по фактам, а не длинно.
📎 Почему это важно: Перегруженный текст мешает, а не помогает фиксу.
❌ Миф: Скриншот всегда достаточен.
✅ Как правильно: Для многих багов нужны шаги, контекст и технические артефакты.
📎 Почему это важно: Без данных баг может остаться "не воспроизводится".
❌ Миф: Severity и priority — одно и то же.
✅ Как правильно: Severity про тяжесть, priority про срочность.
📎 Почему это важно: Неправильная оценка ломает triage и релизные планы.
❌ Миф: Если баг очевиден QA, подробности не нужны.
✅ Как правильно: Репорт должен быть понятен любому члену команды без устных пояснений.
📎 Почему это важно: Это сокращает время от обнаружения до фикса.
💬 Часто спрашивают на собеседованиях
❓ Вопрос: Что обязательно должно быть в bug report?
✅ Ответ: Минимум: title, environment, preconditions, steps, expected/actual, severity и вложения.
❓ Вопрос: Как понять, что bug report качественный?
✅ Ответ: Если разработчик может воспроизвести дефект и начать фикс без созвона с QA.
❓ Вопрос: Почему title так важен?
✅ Ответ: По нему команда triage быстро понимает суть дефекта и его область.
❓ Вопрос: Когда нужны дополнительные артефакты кроме скрина?
✅ Ответ: При flaky, интеграционных, сетевых и backend-ошибках, где нужен технический контекст.
❓ Вопрос: В чем разница между expected и actual?
✅ Ответ: Expected — правильное поведение по требованиям, actual — фактический результат, который наблюдал QA.
🚨 Типичные ошибки
Ошибка 1: Общий title
Было:
"Ошибка в оплате".
Стало:
"[Checkout] Duplicate charge after timeout + retry".
Объяснение:
Конкретный title ускоряет triage и поиск дублей.
Ошибка 2: Шаги без preconditions
Было:
Есть действия, но не указан контекст.
Стало:
Перед шагами добавлены окружение, build, роль и состояние данных.
Объяснение:
Preconditions влияют на повторяемость не меньше самих шагов.
Ошибка 3: Смешаны expected и actual
Было:
"Должно было не создать заказ, но создало и ошибка".
Стало:
Expected и actual вынесены в отдельные строки.
Объяснение:
Так проще валидировать фиксы на ретесте.
Ошибка 4: Нет repro rate у flaky-бага
Было:
"Иногда падает".
Стало:
"Repro rate: 2/10 при Fast 3G + retry < 3 sec".
Объяснение:
Частота и условия помогают приоритизировать и диагностировать.
Ошибка 5: Нет доказательств
Было:
Только текст описания.
Стало:
Добавлены видео, response и время инцидента.
Объяснение:
Артефакты значительно ускоряют разбор дефекта.
🔁 Почему bug report возвращают QA
Самые частые причины:
- нет шагов воспроизведения;
- нет environment;
- нет preconditions;
- нет expected result;
- шаги слишком общие;
- нет доказательств;
- баг не воспроизводится.
🟢 Если совсем просто:
Если разработчик задает больше двух вопросов,
bug report, скорее всего, слабый.
✅ Best Practices
- Всегда используй единый шаблон bug report.
- Пиши title по формуле: где + что сломалось + при каком условии.
- Делай шаги короткими и детерминированными.
- Разделяй expected и actual в разные блоки.
- Для нестабильных багов обязательно добавляй repro rate.
- Прикладывай технические артефакты для сложных дефектов.
- Проверяй репорт правилом "можно воспроизвести без QA".
🎯 Найти баг мало — нужно доказать его
Для QA важна не только внимательность, но и доказательность.
Сильный QA делает три вещи:
- замечает проблему;
- подтверждает ее воспроизводимость;
- передает дефект в виде понятного bug report.
🟢 Если совсем просто:
Найти баг — половина работы.
Доказать баг — вторая половина.
🏁 Заключение
Bug report — это точка, где качество работы QA становится видимым для всей команды.
Сильный репорт не просто сообщает о проблеме, а дает путь к воспроизведению и исправлению.
Если ты оформляешь дефекты структурно и доказательно, команда чинит быстрее, а релизы становятся стабильнее.