Найти дефект — половина работы; вторая половина — описать его так, чтобы его исправили
Баг-репорт читают несколько человек, и каждому нужно своё: руководителю — насколько это плохо и когда чинить, разработчику — как увидеть дефект у себя, тестировщику через месяц — как проверить исправление. Хороший баг-репорт отвечает всем без устных пояснений. Плохой возвращается с комментарием «не воспроизводится» — и дефект уходит к пользователям.
Одно правило важнее остальных: один баг-репорт — один дефект. Если в одном описаны три проблемы, исправят две, а третья потеряется вместе с закрытым баг-репортом.
| Поле | Что писать |
|---|---|
| Заголовок | Что сломано — где — при каком условии. По заголовку дефект находят поиском и отличают от похожих |
| Версия и окружение | Версия программы, адрес стенда, ОС, браузер с версией, размер экрана — если важен |
| Серьёзность и приоритет | Насколько плохо и как срочно (п. 03) |
| Требование | Номер нарушенного требования. Нет требования — на что опирается ожидание |
| Предусловия | Состояние до шагов: кто вошёл, какие данные есть |
| Шаги | Пронумерованные действия с конкретными данными — минимальный набор, после которого виден дефект |
| Фактический результат | Что произошло: текст сообщения, значения, что видно на экране |
| Ожидаемый результат | Что должно было произойти по требованию |
| Дополнительно | Как часто воспроизводится; при каких условиях не воспроизводится; вложения |
Шаблон для копирования в трекер — bug-report.md. Пример заполненного баг-репорта о вымышленном магазине:
Корзина: купон ОСЕНЬ10 не уменьшает сумму при количестве больше 1
Версия и окружение: «Магазин» 2.3, test.example.ru; Windows 11, Chrome 141
Серьёзность: серьёзная Приоритет: высокий Требование: 5.3
Предусловия: пользователь test01 вошёл; в корзине «Чайник» за 2000 ₽
Шаги:
1. В поле «Количество» ввести 2
2. В поле «Купон» ввести ОСЕНЬ10, нажать «Применить»
Фактический результат: сумма 4000 ₽, сообщение «Купон применён»
Ожидаемый результат: сумма 3600 ₽ (скидка 10%)
Дополнительно: воспроизводится всегда (5 из 5); при количестве 1 сумма верная — 1800 ₽
Строка «при количестве 1 сумма верная» сэкономит разработчику час: он сразу ищет ошибку в умножении на количество, а не в купонах вообще.
Серьёзность (severity) — насколько дефект мешает пользоваться программой. Её ставит тестировщик по фактам. Приоритет (priority) — как срочно исправлять. Его предлагает тестировщик, а решает руководитель продукта: он знает сроки, планы и важность клиентов.
| Серьёзность | Когда | Пример |
|---|---|---|
| Критическая | Основная функция не работает, теряются данные или деньги, нарушена безопасность, нет обходного пути | Оплата списывает деньги, заказ не создаётся; виден чужой заказ |
| Серьёзная | Важная функция работает неправильно, обходной путь неудобен | Купон не работает при количестве больше 1 |
| Средняя | Второстепенная функция или есть простой обходной путь | Фильтр по цене сбрасывается при сортировке |
| Незначительная | Не мешает работе: опечатка, выравнивание, цвет | «Оформит заказ» вместо «Оформить заказ» |
Обычно серьёзность и приоритет совпадают, но не всегда:
Перед тем как писать баг-репорт, дефект воспроизводят ещё раз — с чистыми данными и строго по записанным шагам. Для «Задачника» это значит: py tasker.py --reset, вход, шаги.
Затем шаги сокращают. Отказ часто находят в длинной цепочке действий, но для дефекта важны два-три из них. Убирайте шаги по одному и проверяйте, остаётся ли дефект:
| Было (как нашли) | Стало (минимум) |
|---|---|
| 1. Войти. 2. Открыть каталог. 3. Найти «чайник». 4. Положить в корзину. 5. Вернуться в каталог. 6. Положить ещё один. 7. Открыть корзину. 8. Ввести купон | 1. В корзине «Чайник», количество 2. 2. Ввести купон ОСЕНЬ10 |
Что ещё выяснить перед отправкой:
Вложение подтверждает текст и экономит время, но не заменяет шаги: снимок показывает итог, а не путь к нему.
| Что | Windows | Linux |
|---|---|---|
| Снимок области экрана | Win+Shift+S («Ножницы»), снимок — в буфере обмена, вставляется в трекер Ctrl+V | PrtSc — окно снимка GNOME: область, окно или экран |
| Запись экрана | «Ножницы» → значок видеокамеры (режим записи) → «Создать» → выделить область → начать запись | PrtSc → переключатель «запись» (GNOME) |
| Снимок всей страницы | В браузере: F12 → Ctrl+Shift+P → «Capture full size screenshot» | |
| Сетевые запросы, ошибки страницы | F12 → вкладки Console и Network, сохранение HAR — раздел 08 | |
| Журнал сервера | Строки журнала за время воспроизведения — раздел 10 | |
На снимке выделяйте главное (рамкой в «Ножницах») и убирайте лишнее: личные данные, пароли, чужие вкладки. Запись экрана нужна, когда важна последовательность — дефект появляется во время перехода или анимации. Держите её короткой: 10–30 секунд.
У баг-репорта есть статусы, как у заказа в разделе 06. В разных трекерах они называются по-разному, суть одна:
[Новый] ──► [В работе] ──► [Исправлен] ──► повторная проверка ──► [Закрыт]
│ ▲ │ не исправлен
│ └───────────────┘ (переоткрыт)
└──► [Отклонён]: не дефект, дубликат, не воспроизводится
Закрывает баг-репорт тот, кто его открыл, — после проверки, а не по словам разработчика «я поправил».
В курсе баг-трекер — раздел «Проблемы» репозитория на GitFlic: бесплатно, без отдельной программы, и той же учётной записью вы потом будете вести свой проект. Создайте репозиторий tasker-bugs (можно закрытый — тогда добавьте преподавателя участником) и в нём ведите баг-репорты «Задачника».
Что есть в проблеме GitFlic и как это используем:
| В GitFlic | Используем для |
|---|---|
| Название, описание (Markdown) | Заголовок и текст по шаблону bug-report.md |
| Статус: Новая, В работе, Завершена, Отменена | Жизненный цикл: Завершена = исправлен и проверен; Отменена = отклонён (причина — в комментарии) |
| Лейблы: по умолчанию «фича», «ошибка», «срочный фикс», «релиз»; свои — в настройках проекта | «ошибка» на каждом баг-репорте; добавьте лейблы серьёзности: «критическая», «серьёзная», «средняя», «незначительная» |
| Ответственный | Кто исправляет (в учебном трекере — вы сами) |
| Прикреплённые файлы (до 30 МБ на файл) | Снимки, запись экрана, журнал, HAR |
| Комментарии | Повторная проверка: «Проверено на 1.1 — исправлено» или «не исправлено, шаги…» |
Отдельного поля приоритета в GitFlic нет — пишите его в описании строкой «Приоритет:». В рабочих трекерах (YouTrack, Jira, Kaiten, Redmine) серьёзность и приоритет — отдельные поля, а набор статусов шире, но заполняется баг-репорт так же.
| Плохо | Почему | Лучше |
|---|---|---|
| «Купоны не работают» | Не сказано где и когда; на самом деле работают при количестве 1 | «Корзина: купон ОСЕНЬ10 не уменьшает сумму при количестве больше 1» |
| «Всё сломалось после обновления» | Нет шагов и результата | Шаги, версия до и после |
| Фактический результат «ошибка» | Какая? Где? | Точный текст сообщения, снимок |
| Ожидаемый результат «должно работать нормально» | Не с чем сравнить | Конкретное значение по требованию |
| «Программист опять не проверил» | Оценка человека вместо описания программы | Только факты о программе |
| Три дефекта в одном баг-репорте | Исправят часть, закроют целиком | Три баг-репорта со ссылками друг на друга |
| Серьёзность «критическая» у опечатки | Обесценивает критические дефекты | По таблице п. 03 |