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

Какие находил баги на проекте

2.0 Middle🔥 181 комментариев
#Работа с дефектами

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

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

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

Наиболее интересные и поучительные баги в моей практике

За более чем 10 лет работы в QA я сталкивался с самыми разными типами дефектов — от тривиальных опечаток до критических системных сбоев, которые могли бы парализовать работу всего продукта. Я разделю свой ответ на категории, чтобы было понятнее.

1. Баги в бизнес-логике и расчетах

Самые опасные баги — те, что искажают суть продукта. В одном из финтех-проектов (система для микрокредитования) я обнаружил критическую ошибку в алгоритме расчета полной стоимости кредита (ПСК).

  • Суть проблемы: При определенной комбинации суммы, срока и типа клиента (например, повторная заявка) формула расчета ежемесячного платежа использовала неверный коэффициент. На первый взгляд разница была незначительной — на 10-50 рублей в месяц. Однако за год и на тысячах клиентов это выливалось в многомиллионные убытки для компании.
  • Как нашел: Я создал комплексный data-driven тест в Postman/Newman, который прогонял расчеты для сотен комбинаций входных данных (сумма, срок, тариф) и сравнивал результаты с эталонными формулами в Excel, подготовленными аналитиком.
    // Пример тестовых данных в формате JSON для Newman
    [
        {
            "test_case": "Повторный заем, сумма 30000, срок 12 мес.",
            "amount": 30000,
            "term": 12,
            "client_type": "repeat",
            "expected_monthly_payment": 2917.65
        },
        // ... множество других комбинаций
    ]
    
  • Вывод: Тестирование финансовых расчетов требует абсолютной точности и перекрестной проверки (cross-checking) с независимым источником истины (например, таблицами аналитика).

2. Баги, связанные с состоянием системы и временем

Очень коварный класс дефектов. В мобильном приложении для онлайн-кинотеатра был баг, который мы окрестили "полночный сброс".

  • Суть проблемы: Пользователь, начавший просмотр фильма в 23:55, к 00:05 (после полуночи) оказывался на экране выбора серии, а его прогресс просмотра сбрасывался. Проблема была в том, что клиентское приложение и бэкенд по-разному определяли "день" для хранения прогресса. Клиент использовал локальное время устройства, а сервер — UTC.
  • Как нашел: Это был классический баг граничных значений, но связанный со временем. Мы написали UI-автотест на Selenium/Appium, который симулировал просмотр, изменял системное время устройства/компьютера и проверял состояние.
    # Псевдокод автотеста на Python с использованием Appium
    def test_midnight_progress_reset():
        set_device_time("23:55")  # Устанавливаем время на устройстве
        app.play_movie("Interstellar")
        wait(10, minutes)  # Симуляция просмотра
        set_device_time("00:05")  # "Перемещаемся" за полночь
        app.refresh()
        assert app.get_playback_progress() == "00:10:00", "Прогресс не должен сбрасываться!"
    
  • Вывод: Все, что связано с датами, временем и часовыми поясами, нужно тестировать с особой тщательностью. Необходимо проверять смену календарных суток, месяцев, лет, а также работу приложения при смене часового пояса на устройстве.

3. Баги безопасности и конфиденциальности данных

Это те дефекты, обнаружение которых приносит наибольшее профессиональное удовлетворение. В корпоративной SaaS-платформе я нашел уязвимость, приводящую к межсайтовой подделке запроса (CSRF) в критическом месте.

  • Суть проблемы: Эндпоинт для смены email-адреса пользователя (привязанного к оплате!) не проверял CSRF-токен. Злоумышленник мог заставить авторизованного пользователя перейти по специально сформированной ссылке и изменить свой email на чужой, потеряв тем самым доступ к аккаунту.
  • Как нашел: Во время ручного исследовательского тестирования (Exploratory Testing) я решил проверить, как веб-приложение обрабатывает важные операции. Используя инструменты разработчика в браузере (Chrome DevTools), я скопировал POST-запрос на смену email, вставил его в скрипт и убедился, что он выполняется без сессии или с сессией, но без дополнительных заголовков.
    // Пример простейшего PoC (Proof of Concept) для демонстрации CSRF
    // HTML-страница, которую может разместить злоумышленник
    // <body onload="document.forms[0].submit()">
    //   <form action="https://target-app.com/change-email" method="POST">
    //     <input type="hidden" name="new_email" value="hacker@evil.com" />
    //   </form>
    // </body>
    
  • Вывод: Тестирование безопасности — неотъемлемая часть работы ответственного QA. Даже без глубоких знаний в пентесте нужно проверять базовые вещи: что важные операции (POST, PUT, DELETE) защищены, а данные (особенно персональные — PII) не "светятся" в ответах сервера или логах.

4. Баги, вызванные интеграцией и окружением

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

  • Суть проблемы: После развертывания нового микросервиса "Уведомления" заказы стали иногда "зависать" в статусе "В обработке". Оказалось, что новый сервис при высокой нагрузке отвечал с таймаутом (HTTP 504). Сервис "Заказы", обрабатывая этот ответ как фатальную ошибку, откатывал транзакцию в БД, но при этом не логировал причину отката и не менял статус заказа в основной системе.
  • Как нашел: Помогло аналитическое исследование логов. Мы сопоставили временные метки "зависших" заказов с логами всех связанных сервисов (Elasticsearch/Kibana) и обнаружили корреляцию с таймаутами нового сервиса.
  • Вывод: Необходимо тестировать не только "happy path", но и сценарии, когда внешние системы или зависимости отвечают с ошибками, медленно или не отвечают вовсе. Код должен быть устойчив к таким сбоям (resilient), а система — предоставлять достаточно информации для диагностики.

Итог: Каждый серьезный баг — это не просто строчка в баг-трекере. Это история, которая учит:

  • Глубоко вникать в бизнес-логику.
  • Мыслить как пользователь и как злоумышленник одновременно.
  • Понимать архитектуру приложения.
  • Использовать комбинацию методик (ручное, автоматизированное, нагрузочное тестирование) и инструментов (от DevTools до специализированных фреймворков).
  • И главное — задавать вопросы "А что, если...?" и "Почему это работает именно так?". Именно этот inquisitive mindset и отличает хорошего тестировщика.
Какие находил баги на проекте | PrepBro