Разделы портала

Онлайн-тренинги

.
Приручаем невоспроизводимые баги: ищем возможности в хаосе
15.01.2025 00:00

Автор: Рауль Парваль (Rahul Parwal)
Оригинал статьи
Перевод: Ольга Алифанова

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

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

В этой статье я расскажу о различных способах пробиться через барьеры и распространенные отговорки, мешающие исправить невоспроизводимые баги. Мы обсудим теорию и практику дебага этих неуловимых проблем – инструменты, техники и разумную долю настойчивости.

Почему эти баги так значимы?

Невоспроизводимые баги преследуют как тестировщиков, так и разработчиков. Это такие загадочные существа, на исследование, дебаг и воспроизведение которых никто не хочет тратить время.

Большинство разработчиков не хочет исправлять такие баги по трём основным причинам:

1. Они не могут воспроизвести падение («На моей машине все работает»).

2. Они требуют чрезмерного анализа («У нас и так мало времени»).

3. Для них не существует полезной эвристики (набора надежных принципов или указаний, вроде чеклиста), помогающей выявить первопричину проблемы.

Продолжайте чтение, чтобы устранить эти причины!

Но значимы ли эти баги?

Считайте их верхушкой айсберга.

Невоспроизводимые баги – это сигнал о глубинных проблемах. Если разобраться с ними, мы можем предотвратить более серьезные затруднения.

Проблемы, залегающие за невоспроизводимыми багами, могут быть:

  • Скрытыми. Об этих проблемах тестировщик не думает, корпя над невоспроизводимым багом.
  • Зависимостями операционных систем. Это обновления ОС, патчи, настройки регистра, настройки системы по умолчанию и т. п. – их часто игнорируют при дебаге подобных проблем.
  • Несоответствиями сторонних библиотек. Приложения часто полагаются на ряд сторонних библиотек. Несоответствие версий может спровоцировать странные поведения, что приводит к невоспроизводимым багам.
  • Настройками пользователя. Это настройки, специфичные для каждого отдельного пользователя. Разные вариации настроек могут приводить к неожиданному поведению.
  • Неизвестными проблемами или неожиданными последствиями. Проблемы, возникающие вне области концентрации тестировщика на приложении.

 

Дебаг невоспроизводимых багов: создание надежной эвристики

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

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

Основы изучения неуловимых багов

1. Сообщайте о невоспроизводимых падениях, но делайте это особенно тщательно. Даже если вы не можете воспроизвести баг, сообщите о нем. Тщательный отчет – первый шаг к решению. Вот как сообщить о невоспроизводимом баге:

  • Пометьте его, как невоспроизводимый. Явно отметьте баг, как невоспроизводимый, чтобы избежать путаницы.
  • Точно опишите падение. Дайте подробный отчет о том, что произошло. Прикрепите скриншоты, запись экрана, логи консоли, вызовы API – что угодно, что может помочь.
  • Совет мастера: всегда записывайте свои действия, проводя исследовательское или сценарное тестирование. Это позволит дополнить отчет о таких багах релевантными доказательствами.
  • Опишите значимые переменные. Отметьте все конкретные условия, которые могут иметь отношение к проблеме. Это включает такие факторы, как платформа, браузер, версия ОС, версия сторонней библиотеки, оборудование и периферия (если это применимо). Прикрепите информацию о сообщениях об ошибках, кодах ошибок, изменениях экранов, других сообщениях, и любых относящихся к делу факторах.
  • Опишите попытки воспроизведения. Объясните, как вы пытались воспроизвести проблему. Это даст разработчикам понять, что вы уже попробовали, и позволит лучше спланировать свою работу.
  • Сохраните состояние приложения и шаги, которые к нему привели. Документируйте шаги, предпринятые вами – они могут быть критично важны.
  • Поищите зависимости от настроек. Подумайте, не вызвана ли проблема различными системными конфигурациями. Неожиданная версия операционной системы, Java runtime или браузера может сильно повлиять на ситуацию.

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

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

  • Сколько людей может столкнуться с таким сценарием?
  • Насколько серьезно такое падение?
  • Сообщали ли пользователи о похожих проблемах ранее?
  • Встречались ли похожие проблемы в схожих продуктах нашей компании?

Советы из личного опыта

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

  • Записывайте все на свете. Документируйте все касающиеся проблемы мелочи. Не додумывайте, что важно, а что нет.
  • Отметьте состояние системы перед тестированием. Запишите, в каком состоянии находилась система, прежде чем приступить к тестам – включая настройки по умолчанию и предварительные условия.
  • Проверьте, не заведены ли похожие баги в вашем трекере. Ищите паттерны или похожие падения. Никогда не знаешь, не завел ли кто такую задачу ранее. Это поможет вам укрепить свою позицию.
  • Сохраните состояние тест-машины. Сохраните конфигурацию вашего тест-окружения. Если вы используете виртуальную машину или контейнер, немедленно создайте дубль образа.
  • Варьируйте время взаимодействий. Поэкспериментируйте со временем, чтобы выявить скрытые баги. Время, как правило, самый игнорируемый фактор в тестировании. Варьируйте скорость своего путешествия по приложению.
  • Присвойте багам код резолюции. Даже если вам придется закрыть ряд невоспроизводимых багов, присвойте им особый код резолюции или тег, чтобы легко сослаться на них, если вы снова с ними столкнетесь.

Пусть тестируемость и наблюдаемость работают на все сто

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

Вот иллюстрация различных факторов системы до и после теста:

 

Извлекайте пользу из тестируемости и наблюдаемости вашей системы, чтобы сконцентрироваться на:

1. Предусловиях и постусловиях. Задокументируйте происходящее до и после события.

2. Состоянии программы и релевантных данных. Сохраните состояние системы, включая критически важные для проблемы данные.

3. Состоянии системы. Запишите общее состояние системы – оно может быть связано с проблемой.

4. Необходимом вводе. Задокументируйте, что вы вносили в систему, и что ожидали получить.

5. Конфигурации и системных ресурсах. Проанализируйте железо и ПО окружения.

6. Связанные процессы, клиенты и серверы. Проверьте взаимодействия с внешними источниками, ресурсами и процессами.

Полезные инструменты

Попробуйте воспользоваться инструментами из списка ниже, охотясь на баги:

  • Bird Eat Bugs: Отлавливайте баги и отчитывайтесь о них в режиме реального времени.
  • Support Details: Собирайте информацию о системе для помощи с устранением проблем.
  • Wink: Создавайте скриншоты экрана, чтобы зафиксировать неожиданное поведение.
  • Yattie: Помощник в исследовательском тестировании. Узнать про него больше можно в этой статье.
  • Rapid Reporter: Инструмент, предназначенный для эффективной отчетности о багах.
  • Greenshot: Быстрый захват скриншотов.
  • Win + R > dxdiag: Удобный инструмент командной строки для получения детальной информации о Windows-системе.
  • BareTail - Free tail for Windows: Инструмент мониторинга логов в режиме реального времени.
  • Wireshark · Go Deep: Инструмент для отслеживания сетевого трафика.
  • Licecap: Сохраняйте запись экрана для отлова мелких изменений.
  • Sysinternals - Sysinternals | Microsoft Learn: Коллекция мощных микроутилит.
  • Dev Tools (F11 в браузере): Для веб-приложений посмотрите, что происходит в инструментах разработчика.
  • Диспетчер задач: Отслеживание использования системных ресурсов.

Заключение

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

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

Ниже – резюме пунктов, что делать с невоспроизводимыми багами:

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