Как локализовать баг?

«Как локализовать баг?» — вопрос из категории Основы тестирования, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

  1. Воспроизведение: Первым делом я пытаюсь стабильно воспроизвести баг. Для этого проверяю его на разных окружениях (версии ОС, браузеры, устройства) и с разными входными данными.
  2. Анализ логов: Изучаю все доступные логи: консоль браузера (F12), серверные логи (например, в Kibana), логи фреймворка и результаты прогона автотестов. Ищу ошибки (ERROR), предупреждения (WARN) и неожиданные значения.
  3. Изоляция проблемы: Сужаю область поиска. Определяю, относится ли проблема к фронтенду или бэкенду, к конкретному модулю, API-методу или функции. Для этого могу временно отключать части функционала или использовать прокси (например, Charles/Fiddler) для модификации запросов.
  4. Использование инструментов отладки:
    • Для веб: использую Chrome DevTools (точки останова, просмотр стека вызовов, мониторинг сетевых запросов).
    • Для бэкенда: подключаю отладчик IDE (например, в IntelliJ IDEA или VS Code) к запущенному сервису.
    • Добавляю стратегическое логирование в подозрительные участки кода.

Пример локализации на фронтенде:

// В коде, где падает ошибка, добавляю логирование ключевых переменных
console.log('[DEBUG] User ID:', userId);
console.log('[DEBUG] API Response:', JSON.stringify(apiResponse));
// Или ставлю точку останова
debugger;
const processedData = rawData.map(item => item.price); // Ошибка, если item = undefined
  1. Создание минимального теста: Как только проблема понятна, я пишу минимальный тестовый сценарий (юнит- или интеграционный тест), который её воспроизводит. Это не только подтверждает локализацию, но и служит тестом на регрессию после фикса.