Программирование • 23 мая 2024 • 5 мин чтения

Как регрессионное тестирование помогает находить ошибки в продукте

Регрессионное тестирование — способ найти ошибку, которая появилась из-за изменений в коде, базе данных или добавления новой функции в продукт. Разбираем его особенности и этапы.

Что такое регрессионное тестирование и зачем оно нужно

Рассмотрим пример веб-приложения для социальной сети, в котором пользователи могут публиковать и комментировать посты, ставить лайки. Допустим, команда разработчиков внесла изменения в систему комментариев, чтобы добавить новую функцию. Теперь одни пользователи могут отвечать на комментарии других.

Разработчики протестировали функцию и убедились, что она работает корректно. Но изменения могли повлиять на другие функции, которые уже работают. Например, лайки под постами перестали правильно учитываться: пользователь поставил лайк на пост, добавил комментарий, ему кто-то ответил, а лайк пропал. Такие ошибки называют регрессионными. Они возникают, когда:

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

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

Регрессионные ошибки критичны для пользователя: он привык к функциональности, а заменить её нечем

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

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

Методы регрессионного тестирования

Есть три основных метода регрессионного тестирования:

1. Полная регрессия. Тестировщик прогоняет тесты после каждого изменения в программе. Это может занять не день и даже не неделю, но так получится найти максимальное количество ошибок. Метод особенно полезен, когда программу меняют для новой платформы или обновляют операционную систему. Например, выпускают версию приложения для новой модели смартфона.

2. Выбор регрессионного теста. Метод позволяет ограничить регрессионное тестирование только теми частями программы, которые могут затронуть изменения. Это позволяет сосредоточиться на наиболее важных областях и сократить время тестирования. Например, в приложении банка изменили логику авторизации. Можно сосредоточиться только на тестировании этой функции, а транзакции не тестировать.

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

Виды регрессионного тестирования


Корректирующее

Используют, когда программу обновляют, но не меняют её основные функции. Например, в приложении улучшили дизайн, но не изменили способ оформления заказа. Тестировщик использует тесты, которые уже создавал для проверки функциональности приложения.

Прогрессивное
Нужно, когда изменения в программе затрагивают её основные функции. Например, в приложении решили сделать новую функцию — добавлять товары в избранное. Чтобы убедиться, что новая функция не ломает другие процессы, нужно создать новые тесты.
Повторное
Запускают заново после каждого обновления программы. Например, в приложение для обработки платежей внесли изменения, чтобы улучшить процесс оплаты. Тестировщик запускает тесты всей функциональности, чтобы убедиться — новый процесс оплаты не вызвал проблем с другими частями приложения.
Выборочное
Как и прогрессивное, используют, когда изменения в программе затрагивают её основные функции. В случае выборочного создают новые тесты и обновляют те, что есть. Этот метод позволяет выбрать только тесты, которые покрывают изменённые или новые функции программы, чтобы уменьшить время и затраты на тестирование. Например, в приложение добавили вариант оплаты через СБП: тестировщик создаёт новые тесты для проверки этой функции и запускает их вместе со старыми тестами, которые может затронуть изменение.

Преимущества регрессионного тестирования

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

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

Ускоряет вывод продукта на рынок за счёт автоматизации регрессионных тестов.

Удешевляет подготовку продукта к запуску: не придётся тратить ресурсы разработчиков на исправление ошибок после релиза.

Как проводить регрессионное тестирование

Разберём план выборочного регрессионного тестирования: часть тест-кейсов тестировщик будет переиспользовать.


Определение изменений


Помогает понять, какие части системы изменили и как это повлияло на код

Создание тестов
Тест-кейсы помогают убедиться в том, что после обновлений приложение работает так, как ожидалось. Чтобы создать набор таких кейсов, тестировщик использует существующие сценарии и тест-кейсы. Они могут быть интеграционными — для проверки взаимодействия разных частей программы, модульными — для проверки отдельных частей программы или для проверки производительности — насколько стабильно работает программа. Всё зависит от того, что планируется тестировать.
Приоритизация тестов
Помогает избежать лишних проверок и сфокусироваться на критичных ошибках. Тестировщик учитывает не только своё мнение, но и получает оценку приоритета теста от других участников команды — коллег и заказчиков. Это поможет объективно оценить степень влияния проблемы на пользователя и бизнес. Первый приоритет обычно присваивают тест-кейсам, которые напрямую влияют на прибыль компании. Затем идут те, которые косвенно влияют на прибыль. Последними — всё, что не влияет на прибыль, лояльность пользователей или репутацию.
Планирование тестов
Тестировщик формулирует пошаговый план и готовит подходящую систему для выполнения регрессионного тестирования, определяет частоту и время выполнения тестов, смотрит, какие из тестов можно автоматизировать, чтобы сэкономить ресурсы.
Тестирование
Тестировщик проводит тестирование и фиксирует результаты.
Анализ результатов
Оценка итогов, выявление ошибок и передача их разработчикам для доработки.
Повторное тестирование
Если появились новые ошибки, их исправляют и снова проводят регрессионное тестирование.

Пример регрессионного тестирования

Разберём регрессионное тестирование на примере веб-приложения, в котором можно писать короткие посты и обсуждать их с другими пользователями. Чтобы улучшить пользовательский опыт, решили добавить функцию персональных рекомендаций постов на основе предпочтений и истории действий пользователей. После создания новой функции нужно провести регрессионное тестирование, чтобы проверить, не повлияет ли эта рекомендация на работу остальных функций приложения.

Что в приложении изменится, тестировщик уже знает. Как он будет действовать дальше:

1. Подготовит тестовое окружение — среду, в которой выполняется тестирование. Оно включает оборудование, программное обеспечение, тестовые данные. Например, профили пользователей с различными предпочтениями и историей действий. Специальные инструменты для регрессионного тестирования уже содержат готовые тестовые окружения и совместимы с разными браузерами и операционными системами. Примеры популярных инструментов — Selenium, TestComplete, Telerik Test Studio.

2. Определит тестовые кейсы — список сценариев, которые проверят новую функцию рекомендации и её взаимодействие с уже существующими функциями приложения. Документ тест-кейса описывает входные данные, действия и ожидаемые результаты, которые используют для тестирования конкретной функции приложения. Разберём несколько примеров.


Корректное отображение рекомендаций на основе интересов пользователя


Предусловия:
● Пользователь зарегистрирован и вошёл в систему.
● У пользователя есть история взаимодействий (лайки, комментарии, просмотры).
Шаги:
1. Перейти на главную страницу приложения.
2. Проверить блок «Рекомендации» на главной странице.
Ожидаемый результат:
Рекомендации отображаются на основе интересов пользователя и его прошлой активности (лайки, комментарии, просмотры).

Убедиться, что добавление функции персональных рекомендаций не мешает пользователям публиковать сообщения

Предусловия:
● Пользователь зарегистрирован в приложении.
● Функция персональных рекомендаций включена и активна.
● У пользователя есть доступ к функции публикации сообщений.
● Пользователь зарегистрирован в приложении.
● Пользователь вошёл в систему.
● Функция персональных рекомендаций активна.
Шаги:
1. Войти в приложение под учётной записью пользователя.
2. Перейти к разделу для создания нового поста.
3. Написать текст нового поста, например: «Тестовое сообщение для проверки публикации».
4. Нажать кнопку «Опубликовать».
5. Перейти к разделу с персональными рекомендациями.
6. Проверить отображение рекомендаций.
7. Вернуться на главную страницу или в ленту новостей.
8. Найти опубликованный пост в ленте новостей.
Ожидаемый результат:
● Сообщение успешно публикуется и отображается в ленте новостей.
● Функция персональных рекомендаций работает корректно, рекомендации отображаются без сбоев.
● На главной странице или в ленте новостей опубликованный пост виден и доступен для взаимодействия.

Убедиться, что добавление функции персональных рекомендаций не нарушает работу комментариев и взаимодействий с постами — лайки, репосты

Предусловия:
● Пользователь зарегистрирован в приложении.
● Пользователь вошёл в систему.
● Функция персональных рекомендаций активна.
Шаги:
1. Войти в приложение под учётной записью пользователя.
2. Перейти к разделу для просмотра постов.
3. Выбрать любой пост для взаимодействия.
4. Оставить комментарий к выбранному посту. Написать текст комментария, например: «Отличный пост!». Нажать кнопку «Отправить».
5. Лайкнуть выбранный пост. Нажать кнопку «Лайк».
6. Поделиться выбранным постом. Нажать кнопку «Поделиться». Выбрать способ и подтвердить действие.
7. Перейти к разделу с персональными рекомендациями.
8. Проверить отображение рекомендаций и убедиться, что они работают корректно.
9. Вернуться на страницу с постом, к которому был добавлен комментарий, убедиться, что комментарий, лайк и репост отобразились корректно.
Ожидаемый результат:
● Комментарий успешно добавляется к посту и отображается корректно.
● Лайк успешно фиксируется и отображается на посту.
● Репост успешно выполнен и отображается в соответствующем разделе.
● Функция персональных рекомендаций работает корректно и отображает рекомендации без сбоев.
● На странице с постом видны все взаимодействия (комментарий, лайк, репост).

3. Выполнит тесты. Тестировщик запускает тесты согласно тестовым сценариям. Часть из них он может автоматизировать, чтобы сократить время на выполнение рутинных задач и повысить точность тестирования.

4. Проанализирует результаты и зафиксирует ошибки. Опишет проблемы, шаги для воспроизведения и ожидаемый результат. Разберём несколько примеров ошибок.


Некорректные рекомендации


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

Нарушение работы других функций
При обновлении ленты с постами новые посты за сегодня и вчера не отображаются.
Замедление работы приложения
При расчёте персонализированных рекомендаций нагрузка на сервер увеличивается в 1,5 раза, и приложение работает медленнее.
Проблемы с интерфейсом
Рекомендации перекрывают другие элементы страницы или неправильно масштабируются на разных устройствах.

5. Создаст отчёт. Тестировщик подготовит отчёт о результатах тестирования, включая информацию о проведённых тестах, найденных ошибках и рекомендациях по исправлению. Отчёт передаст разработчикам, чтобы они могли исправить ошибки.

Совет эксперта

Василий Беляков
Изучите функциональность приложения до тестирования — это поможет лучше понять, какие тесты провести, чтобы обеспечить корректную работу программы после изменений. Определите, какие тестовые случаи особенно важны для проверки после изменений. Обычно они связаны с функциями, чаще используются или критичны для работы приложения. Используйте автоматизацию для повторяемых тестовых задач, чтобы уменьшить рутинную работу и сократить время. Это поможет сосредоточиться на более сложных аспектах тестирования.
Статью подготовили:
Василий Беляков
Яндекс Практикум
Наставник курса «Инженер по тестированию»
Яндекс Практикум
Редактор
Полина Овчинникова
Яндекс Практикум
Иллюстратор

Дайджест блога: ежемесячная подборка лучших статей от редакции

Поделиться
Идеи новогодних подарков от нейросети + промокоды на курсы Практикума и акции от партнеров
Thu Jul 18 2024 09:50:16 GMT+0300 (Moscow Standard Time)