В жизненном цикле разработки ПО тестированию часто не придают должного значения, особенно в сравнении с другими этапами разработки, такими как, например, UI/UX-дизайн. Однако нельзя отрицать тот факт, что тестирование играет важную роль в преодолении сложных технических проблем и удовлетворении ожиданий пользователей.
В данной статье мы подробно рассмотрим регрессионное тестирование (regression testing) и обсудим следующие вопросы:
- Что такое регрессионное тестирование программного обеспечения?
- Важность регрессионного тестирования
- Основные трудности регрессионного тестирования
- Как выполняется регрессионное тестирование?
- Лучшие практики регрессионного тестирования
- Как правильно выбрать инструменты для регрессионного тестирования?
Подпишитесь на наш ТЕЛЕГРАМ КАНАЛ ПО АВТОМАТИЗАЦИИ ТЕСТИРОВАНИЯ
Что такое регрессионное тестирование?
Регрессионное тестирование помогает QA-командам убедиться, что обновления, изменения кода или другие задачи оптимизации не оказывают негативного влияния на работу существующего приложения. В двух словах, конечная цель этой методики – выявить любые регрессии в уже протестированной среде.
Для примера рассмотрим приложение, позволяющее пользователям добавлять, сохранять и удалять данные. Разработчики хотят интегрировать уникальную функцию, позволяющую редактировать и обновлять данные. В этом случае команда QA должна убедиться, что после добавления новой функции уже имеющиеся модули приложения продолжат работать так, как задумано. Также нужно проверить, что в процессе реализации изменений в программу не были внесены новые баги.
Регрессионное тестирование проводится в следующих случаях:
- Добавление нового свойства или функциональности в программное обеспечение
- Обновление существующей функции с учетом новых требований
- Изменение конфигурации приложения
- Улучшение возможностей пользовательского интерфейса
- Возникновение проблем с производительностью и исправление багов
- Деятельность по оптимизации исходного кода
- Изменения в производственной среде
- Исправление кодовой базы с целью устранения дефектов
Для решения этих специфических задач необходимо иметь краткое представление об основных видах регрессионного тестирования.
Виды регрессионного тестирования
Регрессионное тестирование отдельных модулей
Вид тестирования, при котором код проверяется изолированно, а акцент делается на одиночный модуль. Это помогает устранить все возникающие зависимости при выполнении тестирования. Как правило, это тестирование проводится в часы с низким трафиком.
Корректирующее регрессионное тестирование
Это тестирование выполняется когда, над программным обеспечением проводятся некоторые корректирующие действия, а в существующую кодовую базу продукта не вносится значимых изменений. В данном случае тестировщикам не нужно планировать и создавать новые тест-кейсы, поскольку они могут повторно использовать уже существующие.
Выборочное регрессионное тестирование
Это регрессионное тестирование, которое анализирует влияние новой части кода на уже существующее приложение. При этом команда QA использует на практике уже существующие тест-кейсы для определенных взаимосвязанных модулей. В целом это позволяет сэкономить время и силы на разработку новых тест-кейсов с нуля.
Прогрессивное регрессионное тестирование
Это тестирование предполагает модификацию технического задания. В большинстве случаев при этом к системе программного обеспечения добавляются новые модули, что, в свою очередь, требует написания новых тест-кейсов.
Частичное регрессионное тестирование
Этот вид регрессионного тестирования выполняется в тех случаях, когда к существующим строкам кода добавляются новые. Это позволяет устранить потенциальные регрессии и сохранить работоспособность приложения в прежнем виде.
Полное регрессионное тестирование
Полное регрессионное тестирование помогает устранить потенциальные проблемы при каждом изменении основного кода. Проверяются все функциональные возможности программного обеспечения. Этот тест помогает тестировщикам устранить большую часть дефектов, тем самым обеспечивая выпуск качественного продукта.
Почему регрессионное тестирование важно?
Правильный план регрессионного тестирования может удовлетворить самые разные требования к разработке программного обеспечения. Он позволяет тестировщикам и специалистам по контролю качества проанализировать потенциальные проблемы, которые могли возникнуть при внедрении нового кода в существующую программу или приложение.
Помимо этого, регрессионное тестирование:
- Оценивает функциональность нового кода. Регрессионное тестирование используется для оценки приложения до внедрения нового кода, а затем проводится повторное тестирование этого же приложения, чтобы убедиться, что оно функционирует так, как ожидалось, даже после добавления нового фрагмента кода.
- Позволяет удостовериться, что добавленный код не влияет на уже существующий. Тестировщики могут использовать регрессионное тестирование при каждом обновлении программы или приложения, чтобы отследить видимость нового кода и убедиться в том, что он не оказывает негативного влияния на существующие функциональности программы.
- Мониторит негативные последствия внедрения обновлений ПО. Регрессионное тестирование проверяет наличие всевозможных дефектов и ошибок после внедрения обновлений. Например, тестировщик мобильных игр может провести регрессионный тест, чтобы оценить, не привело ли внедрение нового кода к неожиданным уязвимостям или сбоям, и провести мероприятия по их устранению.
- Дает возможность повторного тестирования. Регрессионное тестирование позволяет проводить дополнительные тесты для оценки качества, чтобы убедиться в адекватности, жизнеспособности и полезности изменений, внесенных в код приложения. Повторное тестирование каждого тест-кейса позволяет тестировщикам проанализировать, как новые изменения влияют на работу программы после обновления или изменения программного обеспечения.
Основные трудности регрессионного тестирования
Если вы планируете провести регрессионное тестирование, то должны понимать, с какими трудностями оно сопряжено. Независимо от размера проекта, для достижения желаемых результатов с помощью таких тестов необходимо затратить значительное количество времени и усилий. Особенно когда речь идет о регрессионном тестировании в Agile, когда команде QA приходится решать сложные проблемы, связанные с регулярными модификациями и настройками.
Например, рассмотрим Agile-среду, которая быстро адаптируется к изменениям и стремится выпускать актуальные обновления для приложения каждую неделю. Самой большой проблемой при устранении регрессий в такой среде является выбор тест-кейсов, поскольку ваши команды не смогут обеспечить необходимую гибкость при тестировании каждого отдельного тест-кейса, написанного для приложения.
С другой стороны, при каждом новом обновлении тестировщикам приходится многократно перепроверять несколько функций, рассматривая новые тестовые сценарии. В конечном итоге это сказывается на сроках реализации проекта и затягивает процесс разработки. Кроме того, при частых изменениях объем ручных тестов может превысить допустимый уровень.
Действительно, ручные тесты необходимы на ранних этапах разработки. Но с течением времени поддержание высокого уровня тестового покрытия становится все более сложным и трудоемким процессом. И здесь на помощь может прийти автоматизация.
Автоматизация регрессионного тестирования позволяет легко справиться со всеми перечисленными проблемами. Это идеальный выбор для предприятий, которые хотят выпускать первоклассные продукты с минимальными затратами на обеспечение качества.
Будь то небольшое приложение или крупный корпоративный продукт, автоматизация набора регрессионных тестов поможет решить множество проблем и внедрить ожидаемые обновления в установленные сроки и в рамках бюджета. Она может взять на себя выполнение длительных повторяющихся операций, таких как подготовка больших объемов критически важных для бизнеса данных, и помочь сосредоточиться на исследовательском тестировании.
Теперь давайте рассмотрим процесс тестирования более подробно.
Как проводить регрессионное тестирование?
Понимание того, как проводить регрессионное тестирование, — единственный способ создать отказоустойчивую стратегию развития продукта. Ниже перечислены основные этапы, которые могут значительно упростить процесс тестирования.
Шаг 1. Создание набора регрессионных тестов
Первым шагом является создание эффективного набора регрессионных тестов. Такой набор состоит из серии тест-кейсов, позволяющих убедиться в том, что после систематических обновлений или модификаций приложение работает так, как ожидалось. Его можно легко создать с помощью существующих тест-кейсов: интеграционных тестов, модульных тестов, тестов производительности и т.д., которые разрабатываются с первого дня.
В набор регрессионных тестов можно включить все сценарии тестирования, которые ранее позволяли убедиться в том, что приложение работает так, как задумано.
Шаг 2. Выбор регрессионных тестов
На следующем этапе следует выбрать необходимые тесты из набора. При этом не обязательно тестировать весь набор, лучше сосредоточиться на конкретных модулях и выделить те, которые обусловлены изменениями в исходном коде. Это поможет тестировщикам разделить тест-кейсы на устаревшие и повторно используемые. В то время как многократно используемые тест-кейсы будут актуальны для последующих циклов регрессии, рассматривать устаревшие тест-кейсы не обязательно.
К числу тест-кейсов, которые стоит рассматривать, относятся:
- Области программы, подверженные ошибкам, которые, вероятно, будут наиболее уязвимы при изменении системы.
- Тесты, проверяющие основные возможности и функции продукта.
- Сложные случаи, такие как тестирование графического интерфейса.
Шаг 3. Определение сроков выполнения тест-кейсов
На этом этапе необходимо оценить, сколько времени займет выполнение выбранного набора тест-кейсов. Также следует определить частоту запуска тестов. Некоторые ключевые факторы, которые могут помочь установить время выполнения, включают планирование регрессионного тестирования, создание тестовых данных и ревизию тест-кейсов.
Шаг 4. Определение тест-кейсов, которые могут быть автоматизированы
После определения времени выполнения необходимо выбрать тест-кейсы, которые могут быть успешно автоматизированы. По результатам исследовательского тестирования необходимо разделить тест-кейсы на две группы: ручные и автоматизированные. Ручными тестами можно проверять, например, сложную последовательность событий, а автоматизированные тесты помогут повторно использовать одни и те же сценарии по мере необходимости.
Шаг 5. Определение приоритетов тест-кейсов
Тест-кейс может иметь высокий, средний или низкий приоритет. Необходимо выявить наиболее значимые тест-кейсы и назначить им соответствующий приоритет для эффективного управления сессиями. Эта оценка должна быть подкреплена вовлеченностью пользователей и общей производительностью программного обеспечения.
Вот идеальный способ установить уровень приоритета для тест-кейсов:
- Высокий. Все sanity тесты, затрагивающие ключевые функциональные возможности приложения.
- Средний. Функции, которые не являются неотъемлемой частью ключевых функциональностей.
- Низкий. Менее важные функциональности.
Шаг 6. Выполнение тест-кейсов
Заключительный этап — это выполнение выбранных тест-кейсов по очереди. В зависимости от требований конкретного проекта можно либо автоматизировать весь процесс, либо использовать ручной метод.
Лучшие практики регрессионного тестирования
Best practices регрессионного тестирования помогут вам построить безошибочную стратегию регрессии.
Регулярно обновляйте набор регрессионных тестов
Набор регрессионных тестов – это выборка тест-кейсов, выполняемых при обновлении программного обеспечения. Необходимо постоянно обновлять этот набор, чтобы идти в ногу с постоянно меняющимися ожиданиями пользователей и технологическим прогрессом. Для этого важно тщательно изучать нефункциональные и функциональные требования и верно расставлять приоритеты тест-кейсов.
Анализируйте, какие сценарии использования наиболее популярны
Очень важно понимать целевую аудиторию и то, как она взаимодействует с продуктом. Это поможет вовремя внедрять новые функциональные возможности и поддерживать адекватный уровнь производительности, сопровождая процесс необходимыми видами регрессионных тестов.
Выполняйте полный набор регрессий только в случае необходимости
Не нужно запускать весь набор регрессионных тестов для каждой сборки. Когда речь идет о небольшом релизе, можно запустить дымовой тест (smoke test) для всего приложения и провести отдельное регрессионное тестирование для измененного модуля.
Повторяйте выполненные тест-кейсы
Тесты, которые выявили ошибки и сбои в прошлом, следует обязательно включить в регрессионный набор. Но не стоит забывать о том, что даже успешно пройденные тест-кейсы могут выявить дефекты в последующих релизах. Поэтому их тоже нужно включать в процесс регрессионного тестирования.
Опирайтесь на тестирование, управляемое данными
Выработайте привычку полагаться на наборы данных, чтобы повысить эффективность среды регрессионного тестирования. Это поможет создавать сценарии с меньшим количеством кода, избегать дублирования, хранить информацию в базе данных, которой легко управлять, и т.д.
Внимательно следите за изменениями
Как ни парадоксально, но изменения — это единственная константа в процессе разработки программного обеспечения. Разработчики и специалисты по контролю качества должны обязательно сотрудничать друг с другом, чтобы быть в курсе последних обновленний и изменений.
Используйте диверсифицированный набор инструментов автоматизации
Необходимо использовать современные инструменты и технологии, которые позволят увеличить тестовое покрытие, предоставят широкие возможности тестирования и помогут максимально эффективно использовать язык программирования, выбранный для проекта.
Как правильно выбрать инструменты для регрессионного тестирования?
На рынке представлены различные инструменты, включая TestComplete, IBM Rational Functional Tester, Selenium, Appium, REST Assured и т.д., которые можно использовать для успешной автоматизации регрессионного тестирования или удовлетворения многочисленных требований к ручному тестированию.
Чтобы найти подходящий вариант для своего проекта, можно воспользоваться приведенным ниже контрольным списком.
Разработка тестов
Инструмент должен позволять быстро создавать и редактировать тесты для поддержки растущего числа случаев регрессионного тестирования с добавлением новых функций или выпуском совершенно новой версии.
Автоматизированные регрессионные тесты
Выбранный инструмент должен обладать возможностью планирования и проведения автоматизированного регрессионного тестирования после каждой сборки.
Подробные отчеты и обратная связь
Важно знать статус релиза, чтобы определить наиболее подходящее время для запуска продукта. Поэтому необходимо выбрать инструмент, который предоставляет подробные отчеты и статистику, а также быструю обратную связь для четкой оценки активных задач и потенциальных сбоев.
Параллельное выполнение
Инструмент должен поддерживать среду, поддерживающую параллельное тестирование и требующую минимального времени на его выполнение.
Идентификация тестов, затронутых изменениями
Необходимо выбрать инструмент, который быстро и легко определяет тесты, затронутые изменениями. Это позволит сэкономить много времени на отладку и сопровождение, которое команда тестирования и QA тратит на определение затронутых тестов после каждой модификации.
Простота сопровождения
Планирование и выполнение работ по сопровождению приложения занимает у тестировщика большое количество времени. Поэтому необходимо выбрать инструмент, который будет прост в использовании и сопровождении.
Заключение
Независимо от того, имеется ли у вас уже работающее приложение или новый продукт, готовящийся к запуску, хорошо структурированный план регрессионного тестирования поможет вам достичь желаемых целей по обеспечению качества программного обеспечения. Это предотвратит превышение бюджета вашего проекта и исключит непредвиденные ошибки, влияющие на общую производительность продукта.
Перевод статьи «A Complete Guide to Regression Testing».