Раздел 07 — Дефекты и баг-репорты

Найти дефект — половина работы; вторая половина — описать его так, чтобы его исправили

Прогресс курса Раздел 7 из 12

Что вы освоите в этом разделе

6 академических часов: 2 теории, 4 практики. На практике вы оформите в трекере дефекты, найденные прогоном тест-кейсов разделов 04–06. Нужна учётная запись GitFlic — та же, что в курсе «Основы Git».
01

Зачем баг-репорт

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

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

02

Поля баг-репорта

ПолеЧто писать
ЗаголовокЧто сломано — где — при каком условии. По заголовку дефект находят поиском и отличают от похожих
Версия и окружениеВерсия программы, адрес стенда, ОС, браузер с версией, размер экрана — если важен
Серьёзность и приоритетНасколько плохо и как срочно (п. 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 сумма верная» сэкономит разработчику час: он сразу ищет ошибку в умножении на количество, а не в купонах вообще.

03

Серьёзность и приоритет

Серьёзность (severity) — насколько дефект мешает пользоваться программой. Её ставит тестировщик по фактам. Приоритет (priority) — как срочно исправлять. Его предлагает тестировщик, а решает руководитель продукта: он знает сроки, планы и важность клиентов.

СерьёзностьКогдаПример
КритическаяОсновная функция не работает, теряются данные или деньги, нарушена безопасность, нет обходного путиОплата списывает деньги, заказ не создаётся; виден чужой заказ
СерьёзнаяВажная функция работает неправильно, обходной путь неудобенКупон не работает при количестве больше 1
СредняяВторостепенная функция или есть простой обходной путьФильтр по цене сбрасывается при сортировке
НезначительнаяНе мешает работе: опечатка, выравнивание, цвет«Оформит заказ» вместо «Оформить заказ»

Обычно серьёзность и приоритет совпадают, но не всегда:

04

Воспроизведение и минимизация

Перед тем как писать баг-репорт, дефект воспроизводят ещё раз — с чистыми данными и строго по записанным шагам. Для «Задачника» это значит: py tasker.py --reset, вход, шаги.

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

Было (как нашли)Стало (минимум)
1. Войти. 2. Открыть каталог. 3. Найти «чайник». 4. Положить в корзину. 5. Вернуться в каталог. 6. Положить ещё один. 7. Открыть корзину. 8. Ввести купон1. В корзине «Чайник», количество 2. 2. Ввести купон ОСЕНЬ10

Что ещё выяснить перед отправкой:

05

Снимки, запись экрана, журналы

Вложение подтверждает текст и экономит время, но не заменяет шаги: снимок показывает итог, а не путь к нему.

ЧтоWindowsLinux
Снимок области экранаWin+Shift+S («Ножницы»), снимок — в буфере обмена, вставляется в трекер Ctrl+VPrtSc — окно снимка GNOME: область, окно или экран
Запись экрана«Ножницы» → значок видеокамеры (режим записи) → «Создать» → выделить область → начать записьPrtSc → переключатель «запись» (GNOME)
Снимок всей страницыВ браузере: F12 → Ctrl+Shift+P → «Capture full size screenshot»
Сетевые запросы, ошибки страницыF12 → вкладки Console и Network, сохранение HAR — раздел 08
Журнал сервераСтроки журнала за время воспроизведения — раздел 10

На снимке выделяйте главное (рамкой в «Ножницах») и убирайте лишнее: личные данные, пароли, чужие вкладки. Запись экрана нужна, когда важна последовательность — дефект появляется во время перехода или анимации. Держите её короткой: 10–30 секунд.

06

Жизненный цикл дефекта

У баг-репорта есть статусы, как у заказа в разделе 06. В разных трекерах они называются по-разному, суть одна:

  [Новый] ──► [В работе] ──► [Исправлен] ──► повторная проверка ──► [Закрыт]
     │                             ▲               │ не исправлен
     │                             └───────────────┘ (переоткрыт)
     └──► [Отклонён]: не дефект, дубликат, не воспроизводится

Закрывает баг-репорт тот, кто его открыл, — после проверки, а не по словам разработчика «я поправил».

07

Баг-трекер на GitFlic

В курсе баг-трекер — раздел «Проблемы» репозитория на GitFlic: бесплатно, без отдельной программы, и той же учётной записью вы потом будете вести свой проект. Создайте репозиторий tasker-bugs (можно закрытый — тогда добавьте преподавателя участником) и в нём ведите баг-репорты «Задачника».

Что есть в проблеме GitFlic и как это используем:

В GitFlicИспользуем для
Название, описание (Markdown)Заголовок и текст по шаблону bug-report.md
Статус: Новая, В работе, Завершена, ОтмененаЖизненный цикл: Завершена = исправлен и проверен; Отменена = отклонён (причина — в комментарии)
Лейблы: по умолчанию «фича», «ошибка», «срочный фикс», «релиз»; свои — в настройках проекта«ошибка» на каждом баг-репорте; добавьте лейблы серьёзности: «критическая», «серьёзная», «средняя», «незначительная»
ОтветственныйКто исправляет (в учебном трекере — вы сами)
Прикреплённые файлы (до 30 МБ на файл)Снимки, запись экрана, журнал, HAR
КомментарииПовторная проверка: «Проверено на 1.1 — исправлено» или «не исправлено, шаги…»

Отдельного поля приоритета в GitFlic нет — пишите его в описании строкой «Приоритет:». В рабочих трекерах (YouTrack, Jira, Kaiten, Redmine) серьёзность и приоритет — отдельные поля, а набор статусов шире, но заполняется баг-репорт так же.

08

Типичные ошибки баг-репортов

ПлохоПочемуЛучше
«Купоны не работают»Не сказано где и когда; на самом деле работают при количестве 1«Корзина: купон ОСЕНЬ10 не уменьшает сумму при количестве больше 1»
«Всё сломалось после обновления»Нет шагов и результатаШаги, версия до и после
Фактический результат «ошибка»Какая? Где?Точный текст сообщения, снимок
Ожидаемый результат «должно работать нормально»Не с чем сравнитьКонкретное значение по требованию
«Программист опять не проверил»Оценка человека вместо описания программыТолько факты о программе
Три дефекта в одном баг-репортеИсправят часть, закроют целикомТри баг-репорта со ссылками друг на друга
Серьёзность «критическая» у опечаткиОбесценивает критические дефектыПо таблице п. 03

Ключевые выводы раздела

Запомните главное

  • Один баг-репорт — один дефект; заголовок: что — где — при каком условии
  • Шаги минимальные и с конкретными данными, фактический и ожидаемый результат — точные
  • Серьёзность — насколько плохо (ставит тестировщик), приоритет — как срочно (решает руководитель)
  • Перед отправкой: воспроизвести на чистых данных, найти границы, поискать дубликаты
  • Вложение подтверждает текст, но не заменяет шаги
  • Баг-репорт закрывает тестировщик после повторной проверки
Практические задания — на учебном портале. Задания, критерии оценивания, сдача работ и оценки преподавателя — в курсе на portal.nevabit.ru. Учётную запись выдаёт преподаватель.
Раздел 06: Таблицы решений, состояния, попарное Все разделы Раздел 08: Тестирование веб-интерфейса