Локализация и генерализация дефекта

Прошлый урок научил оформлять баг-репорт с готовыми шагами воспроизведения. Но откуда берутся именно МИНИМАЛЬНЫЕ шаги — те, что реально нужны, без лишнего? И почему стоит проверить, не проявляется ли тот же баг ещё где-то рядом, прежде чем передавать его разработчику? Это отдельная работа, которая идёт после того, как баг найден, но до того, как репорт закрыт: локализация и генерализация.

Чему научишься за этот урок:
— сужать сценарий воспроизведения бага до минимальных шагов (локализация);
— проверять, не проявляется ли тот же баг в других похожих местах (генерализация);
— применять оба метода на практике на длинном сценарии.

Локализация: убрать всё лишнее

Локализация — сужение дефекта до минимального набора действий, которые его вызывают. Например: баг воспроизвёлся после 10 действий на полигоне, но локализация показала, что вызывают его только 3 конкретных шага из десяти — остальные не влияют на результат и просто попали в протокол по пути, пока тестировщик искал баг.

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

  Длинный сценарий (10 шагов)  --локализация-->  Минимальные шаги (3 шага)
  [все действия по порядку,                       [только шаги, которые
   как их выполнял тестировщик]                    реально влияют на баг]

Генерализация: баг может быть шире, чем кажется

Генерализация — проверка, не шире ли дефект, чем показалось сначала. Тот же баг может проявляться в других похожих местах продукта: если промокод не работает при оплате картой, стоит проверить — не ломается ли он и при рассрочке; и не тот же ли это баг у ДРУГОГО типа скидки, не только у промокода.

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

  Один найденный баг            --генерализация-->  Похожие места рядом
  (промокод не работает                              (работает ли рассрочка?
   при оплате картой)                                 работает ли скидка
                                                        по другой программе?)

Локализация и генерализация — два независимых шага в разные стороны: сначала сужаем репродукцию до минимума, потом расширяем проверку на похожие места. Один не заменяет другой.

Практика: длинный сценарий на полигоне

На полигоне записан длинный сценарий воспроизведения бага: 1) Открыть сайт. 2) Залогиниться под своим аккаунтом. 3) Открыть каталог курсов. 4) Выбрать курс «Python для начинающих». 5) Нажать «Записаться». 6) Перейти к оплате. 7) Открыть историю прошлых заказов — просто проверить, что она есть. 8) Вернуться к оплате. 9) Ввести промокод AUTUMN20. 10) Выбрать способ оплаты «Картой». 11) Нажать «Оплатить» — скидка не применилась, сумма к оплате осталась прежней.

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

Контрольный вопрос. Локализация дефекта — это:

АОпределение геолокации пользователя, у которого проявился баг
БСужение бага до минимального набора действий, которые его вызывают
ВПеревод текста баг-репорта на другой язык

Подсказка: Речь про то, какие именно шаги ИЗ УЖЕ НАЙДЕННОГО сценария на самом деле нужны для воспроизведения.

Проверить ответ →

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

Контрольный вопрос. Генерализация дефекта — это:

АПроверка, не шире ли дефект, чем показалось сначала
БОбобщение бага для отчёта менеджеру одной фразой
ВПоиск точной причины бага в коде программы

Подсказка: Речь про то, встречается ли тот же самый механизм поломки ещё где-то рядом.

Проверить ответ →

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

Контрольный вопрос. Каким способом обычно сужают сценарий при локализации?

АУбирают шаги по одному и проверяют воспроизведение
БПереписывают сценарий с нуля

Подсказка: Метод локализации работает от уже существующего сценария, а не с чистого листа.

Проверить ответ →

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

Контрольный вопрос. Какие из следующих действий относятся к генерализации (выбери все подходящие)?

Выберите все верные варианты.

АПроверить, работает ли скидка через промокод при оплате в рассрочку, а не только картой
БУбрать шаг «залогиниться» из сценария и проверить, воспроизводится ли баг ещё
ВПроверить, есть ли такая же проблема у скидки по реферальной программе
ГСократить сценарий воспроизведения до 3 шагов

Подсказка: Генерализация ищет похожие МЕСТА с тем же механизмом, а не сокращает уже найденный сценарий.

Проверить ответ →

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

Контрольный вопрос. Зачем локализовать баг перед тем, как передать его разработчику?

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

Подсказка: Подумай, кто и зачем будет повторять эти шаги дальше по цепочке.

Проверить ответ →

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

Контрольный вопрос. Каким способом проверяют генерализацию?

АНамеренно пробуют похожие сценарии рядом с найденным багом
БЖдут, пока баг проявится сам ещё где-то

Подсказка: Генерализация — это активная проверка, а не пассивное ожидание.

Проверить ответ →

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

Контрольный вопрос. Что из перечисленного лучше всего описывает связь локализации и генерализации?

АЭто два независимых шага: сначала сузить репродукцию, потом проверить похожие места
БЭто одно и то же действие под разными названиями
ВГенерализация всегда должна идти раньше локализации

Подсказка: Оба метода решают разные задачи и идут в разные стороны — сужение и расширение.

Проверить ответ →

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

Задание. Сценарий воспроизведения бага: 1) Залогиниться. 2) Открыть профиль и проверить баланс бонусов. 3) Перейти в каталог и выбрать курс. 4) На странице оплаты ввести промокод SPRING15 и выбрать оплату картой. 5) Нажать «Оплатить» — скидка не применилась. Какой из этих пяти шагов (назови номер) явно не влияет на воспроизведение бага с промокодом? Ответь одним числом.

Подсказка: Проверь, влияет ли шаг на промокод или на оплату — если нет, для локализации он лишний.

✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.

Проверить ответ →

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

Задание. В этом уроке был пример: если промокод не работает при оплате картой, в первую очередь стоит проверить один конкретный ДРУГОЙ способ оплаты — он назван в тексте урока рядом с этим примером. Какой это способ оплаты? Ответь одним словом.

Подсказка: Перечитай абзац про генерализацию — там прямо назван способ оплаты рядом с примером про промокод и карту.

✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.

Проверить ответ →

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

Задание. Возьми длинный сценарий из раздела «Практика» выше (11 шагов с промокодом AUTUMN20). Сократи его до минимальных шагов, которые действительно нужны для воспроизведения бага (локализация), и предложи 2 похожих сценария рядом с этим багом для проверки генерализации (например, другой способ оплаты или другой тип скидки).

Критерий приёмки: минимальный сценарий короче исходных 11 шагов и не включает шаг «открыть историю прошлых заказов»; предложены ровно 2 похожих сценария, каждый меняет одну переменную (способ оплаты ИЛИ тип скидки), а не повторяет исходный баг дословно.

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

✅ Готово, если: ответ раскрывает то, что просит критерий приёмки в задании выше.

Онлайн-проверка ответа появится позже

Задание. Тестировщик нашёл баг: скидка по промокоду не применяется при оплате картой. Он предположил, что раз новый баг тоже «про деньги», стоит заодно проверить другой: цена курса без всякой скидки иногда отображается неверно на странице каталога. Но применение скидки и отображение базовой цены без скидки технически устроены в системе совсем по-разному. Как одним словом урок называет то, что должно быть похожим у старого и нового бага, чтобы генерализация была применена корректно?

Подсказка: Термин уже встречался в разделе «Генерализация» этого урока — про то, что должно повторяться в новом месте, а не про тему «деньги» или «цена».

✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.

Проверить ответ →

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

Что дальше

Баг локализован и проверен на генерализацию — теперь у команды на руках чёткий репорт. Но кто решает, что чинить в первую очередь, если багов много? Для этого используют две независимые оценки, которые часто путают: severity и priority. О них и о том, какой путь проходит баг от находки до закрытия, — следующий урок.

Назад  ·  ↑ В начало урока  ·  ⌂ В начало курса  ·  Вперёд →

Школа Виктора Комлева