Программное обеспечение создаётся людьми, а люди склонны к ошибкам. Поэтому ошибки в коде неизбежны, и одна из ключевых задач тестирования - их поиск и устранение. Такие ошибки называют багами.
Определение бага
Баг (англ. bug) - это ошибка, дефект или непредвиденное поведение программы, из-за которого она работает не так, как ожидалось. Это может быть сбой, неправильный результат или даже критическая уязвимость.
Простыми словами, баг - это несоответствие реального поведения программы её требованиям или ожиданиям пользователей.
Примеры багов:
- Кнопка «Добавить в корзину» на сайте не работает.
- Калькулятор вместо 2 + 2 = 4 выдаёт 5.
- Приложение вылетает при попытке открыть файл.
- Пароль отображается в открытом виде, а не скрывается символами ****.
- Оплата проходит дважды при одном нажатии.
Почему возникают баги?
Причины появления багов могут быть разными, но основные из них:
- Человеческий фактор - разработчики, тестировщики и аналитики могут ошибаться.
- Недостатки проектирования - если изначально система спроектирована неправильно, ошибки неминуемы.
- Сложность кода - чем сложнее система, тем выше вероятность, что в ней появятся ошибки.
- Неучтённые сценарии - тестировщики и разработчики могут не предусмотреть все возможные случаи использования программы.
- Проблемы с интеграцией - взаимодействие разных частей системы или внешних сервисов может работать некорректно.
- Ошибки в данных - если программа получает неправильные входные данные, это может привести к сбоям.
- Ограничения времени и ресурсов - иногда баги пропускают из-за спешки при разработке.
Классификация багов
Баги можно разделить на несколько категорий в зависимости от их природы и влияния на систему.
По степени критичности:
- Блокирующий (blocker) - делает невозможным дальнейшую работу с программой (например, приложение не запускается).
- Критический (critical) - вызывает серьёзные сбои или потерю данных (например, оплата проходит, но деньги не зачисляются).
- Высокий (high) - влияет на основные функции приложения, но не делает его полностью неработоспособным (например, поиск на сайте не выдаёт результаты).
- Средний (medium) - вызывает неудобства, но не мешает работать (например, кнопка расположена некорректно).
- Низкий (low) - косметические дефекты, не влияющие на функциональность (например, опечатка в тексте).
По типу ошибки:
- Функциональные - программа не выполняет то, что должна.
- UI-баги - ошибки в интерфейсе (неправильный шрифт, съехавшие кнопки и т. д.).
- Логические - ошибки в алгоритмах (например, скидка на товар рассчитывается неверно).
- Производительность - программа работает слишком медленно или не выдерживает нагрузку.
- Безопасность - уязвимости, которые могут привести к утечке данных или взлому.
- Локализация - ошибки перевода или отображения текста.
Баг или фича?
Иногда пользователи считают что-то багом, хотя на самом деле это запланированное поведение программы. Например, если в мессенджере нельзя удалить отправленное сообщение, это не обязательно ошибка - возможно, так задумано разработчиками.
Поэтому перед тем как записывать проблему как баг, тестировщик должен проверить требования и убедиться, что поведение программы действительно неверное.
Жизненный цикл бага
Каждый найденный баг проходит через несколько этапов:
- Обнаружение - тестировщик находит ошибку.
- Формирование отчёта - записывает баг в систему (например Jira).
- Анализ - разработчик изучает причину ошибки.
- Исправление - баг устраняется в коде.
- Повторное тестирование - тестировщик проверяет, действительно ли баг исправлен.
- Закрытие - если ошибка больше не воспроизводится, баг помечается как закрытый.
Баги неизбежны, но их можно минимизировать с помощью грамотного тестирования. Важно не только находить ошибки, но и анализировать их причины, чтобы предотвращать их появление в будущем.