← Назад к вопросам

Что такое плавающий баг?

1.0 Junior🔥 151 комментариев
#Работа с дефектами#Теория тестирования

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое плавающий баг (Flaky/Intermittent Bug)

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

Характеристики плавающего бага

  • Не воспроизводится каждый раз
  • Воспроизводится в случайный момент
  • Может зависеть от времени, нагрузки, состояния системы
  • Сложный для отладки и документирования
  • Часто приводит к недоверию тестовых результатов

Примеры плавающих багов из моего опыта

Race condition в API запросах: Приложение отправляло два параллельных запроса на сервер. Иногда первый запрос завершался быстрее, иногда второй. Когда второй завершался первым, данные отображались в неправильном порядке. Баг проявлялся в одном из десяти случаев.

Memory leak при переходе между экранами: Приложение потихоньку ело память при переходе туда-сюда между экранами. После 20-30 переходов происходил crash. Но на первый взгляд это не воспроизводилось.

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

Частые причины плавающих багов

Race conditions:

  • Два потока одновременно обращаются к одному ресурсу
  • Порядок выполнения не гарантирован
  • На многоядерных системах проявляется чаще

Недостаточная синхронизация:

  • Код не ждёт завершения асинхронной операции
  • Состояние приложения нестабильно
  • Event listener не полностью очищен

Timing зависимости:

  • Код полагается на определённое время выполнения
  • Под нагрузкой сервера таймаут срабатывает раньше
  • На медленной сети баг проявляется чаще

Утечки памяти:

  • Объекты не удаляются из памяти
  • После некоторого времени приложение становится нестабильным
  • Проявляется после нескольких циклов операций

Некорректное состояние:

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

Как я ловлю плавающие баги

Повторение сценария множество раз:

  • Выполняю один и тот же тест 50-100 раз подряд
  • Если баг проявляется в 1-2% случаев, я его поймаю

Стресс-тестирование:

  • Быстрые повторяющиеся клики на одну кнопку
  • Быстрые переходы между экранами
  • Одновременные запросы

Варьирование условий:

  • Тестирую на разных устройствах
  • На медленной сети (Network Throttling)
  • При низкой памяти
  • При высокой нагрузке на систему

Анализ логов:

  • Включаю подробное логирование
  • Смотрю логи перед crash-ем
  • Ищу аномалии по времени или последовательности операций

Использование мониторинга:

  • Instruments (для iOS)
  • Android Profiler (для Android)
  • Network Monitor (для перехвата трафика)
  • Проверка утечек памяти

Как я описываю плавающий баг в тикет

Описание: Приложение иногда крашится при быстрых переходах между экранами

Шаги для воспроизведения:
1. Открыть приложение
2. Быстро нажимать на кнопку "Далее" 10-15 раз
3. Смотреть логи

Ожидаемое поведение: Приложение должно корректно обработать быстрые навигационные события

Фактическое поведение: Приложение крашится в random момент времени при выполнении шагов выше

Частота: 1-2 раза из 10 попыток

Логи: [Прикладываю crash log из Xcode]

Окружение:
- iPhone 15 Pro, iOS 18.2
- WiFi 5GHz (стабильная сеть)
- Текущая версия приложения: 3.2.1

Инструменты для отладки плавающих багов

Для iOS:

  • Xcode Debugger с breakpoints
  • Instruments (особенно Allocations и Leaks)
  • Console.app для системных логов
  • Network Link Conditioner для медленной сети

Для Android:

  • Android Studio Debugger
  • Android Profiler (Memory, CPU)
  • LogCat для логов
  • Packet Sniffer для сетевых проблем

Для всех платформ:

  • Charles Proxy для перехвата трафика
  • Автоматизированные тесты, которые повторяют сценарий 100 раз
  • CI/CD с фиксированными seeds для воспроизводимости

Вывод

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

Что такое плавающий баг? | PrepBro