Что такое регрессионное уравнение тесты

Регрессионное тестирование программного обеспечения. Что такое регрессионное тестирование

При создании качественного программного обеспечения необходимо не только написать строки кода, но и удостовериться, что в них нет ошибок. И если примитивные неисправности обнаруживаются в большинстве языков ещё на стадии компиляции, то более сложные необходимо искать уже при запуске приложений. Такой процесс называется тестированием. Он, в свою очередь, делится на целый ряд ветвлений, которые разнятся своим содержанием и особенностями ошибок. В рамках статьи будет рассмотрено, что такое регрессионное тестирование. Что оно собой представляет? Какие тесты здесь есть? Существует ли возможность автоматизации? Итак, что такое регрессионное тестирование? Поговорим подробнее.

Типы, виды, направления

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

Подытожив всё сказанное, можно сделать вывод, что цель регрессионного тестирования – убедиться в том, что исправлении существующих проблем не привело к новым в уже проверенных участках кода программы. Различают два основных типа тестов:

  1. Функциональные.
  2. Нефункциональные.

Они могут быть выражены в виде:

  1. Скриптов.
  2. Наборов.
  3. Комплектов для запуска.

Что же, собственно, включает в себя регрессионное тестирование программного обеспечения? Проводится работа в 3 основных направлениях. А именно регрессия:

  1. Багов.
  2. Старых проблем.
  3. Побочных эффектов.

Функциональные тесты

Они основываются на функциях, которые выполняет система. Могут проводиться на компонентном, интеграционном, системном и приемочном уровнях. Два основных аспекта, по которым проводится тестирование:

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

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

Нефункциональные тесты

Данные виды тестов направлены на проверку всех свойств, которые не относят к функциям системы. Из них можно привести такие параметры:

  1. Надежность. Проводится проверка реакции на различные не предусмотренные ситуации.
  2. Производительность. Как работает система, которая поддаётся разным нагрузкам.
  3. Удобство. Насколько удобно работать с приложением, по мнению пользователя.
  4. Масштаб. Требования к изменению высоты и ширины приложения при работе с разными мониторами.
  5. Безопасность. Насколько защищены пользовательские данные, а также информация при передаче разными каналами.
  6. Портативность. Проверяется, работает ли приложение на разных платформах, и если да – на скольких.

Какие свойства системы могут быть исследованы в данных случаях? Всего их 4.

  1. Тестирование установки. Проверяется, насколько успешно удаётся поставить программу на компьютер, настроить её, а при надобности и удалить. Качественная настройка позволяет уменьшить риск потери данных пользователя или уменьшения (ухудшения) работоспособности приложения.
  2. Тестирования комфортности использования. Проверка разработанного программного обеспечения на удобство использования и понятность конечному пользователю.
  3. Конфигурационное тестирование. Подразумевает проверку работоспособности программы при установке разных системных настроек, а также экспериментирование с внутренними настройками программы.
  4. Тестирование на отказ и восстановление. Проверка работоспособности после возникновения ошибок. Оценивается реакция защитных свойств, а также то, какие данные и в каком объеме сохраняются после внезапного прекращения работы приложения.

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

Тест-кейсы

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

  1. Тест-скрипты. Сюда относят комплекты инструкций, разработанные для проведения автоматических проверок отдельных частей программного обеспечения.
  2. Тестовые наборы. Это комбинации скриптов, которые проверяют определенные части программного обеспечения, которые объединены общим функционалом или целями.
  3. Тесты для запуска. Это комбинации различных скриптов или наборов для одновременного запуска при проверке программы.

Автоматизация регрессионных тестов

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

Регрессия багов

Под этим тестированием понимают поиск проблем, которые официально «были устранены», но есть основания полагать, что они до сих пор существуют. Особенность данного вида проверок заключается в том, что необходимо проверять все действия с определённым объектом в различных комбинациях. В первую очередь тестируют соответствие реальности сообщения об устранении проблемы по тому механизму, благодаря которому она была выявлена. Регрессионное тестирование верстки в данном случае помогает удостовериться в отсутствии нежелательных эффектов.

Регрессия старых ошибок

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

Регрессия побочного эффекта

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

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

Регрессионное тестирование на Scrum-проектах: руководство по проведению

Согласно отчету The State of Agile Report («О развитии методологии Agile»), 95% опрошенных компаний разрабатывают программное обеспечение по Agile.

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

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

В этой статье мы ответим на эти вопросы, а также расскажем о том, как проводить регрессионное тестирование на Scrum-проектах и уверенно преодолевать возникающие сложности.

Регрессионное тестирование в Scrum-среде

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

повышать общее качество и стабильность ПО благодаря снижению вероятности критических ошибок при его использовании и многократному уменьшению числа дефектов к моменту релиза;

ускорять доставку решения на рынок, уменьшая время прогона тестов за счет автоматизации;

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

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

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

Топ-5 распространенных проблем и способы их преоделения

При проведении регрессионного тестирования на Scrum-проектах важно сфокусироваться на двух аспектах.

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

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

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

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

Возрастающий объем регрессии

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

Недостаточная коммуникация между участниками проекта

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

Поддержка тестовых сценариев

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

Частые доработки функциональности

Смоделируем ситуацию: на проекте возникли непредвиденные и объемные изменения в требованиях к функциональности продукта. Еще и в конце спринта. Что делать? Да, сроки имеют значение, но важно позаботиться о качестве и оценить, сколько времени займет перезапуск тестов с учетом входной информации, чтобы расширить спринт и перенести дату релиза.

Ложноположительные результаты тестов

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

Тестируем регрессию на Scrum-проекте: о чем важно помнить

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

Что еще нужно учитывать? Предлагаем рассмотреть 5 шагов, от которых напрямую зависит результативность регрессионного тестирования.

1. Подготовить план тестирования

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

2. Создать доску регрессии

Все задачи, над которыми работают QA-инженеры Scrum-команды, располагаются на доске в порядке сверху вниз по приоритетности в зависимости от возможных рисков, важности для клиента и ряда других факторов. Переставляя элементы на доске, команда всегда будет понимать актуальность задач и сможет планировать свое время так, чтобы укладываться в сроки.

3. Анализировать отчеты о дефектах

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

4. Добавить исследовательское тестирование

С его помощью инженеры по тестированию по-новому взглянут на проект, расширят тестовое покрытие и обнаружат дефекты, которые могли бы оказать сильное влияние на конечного пользователя разрабатываемого продукта.

5. Настроить модель коммуникации на проекте

Например, непрерывное взаимодействие специалистов по тестированию с владельцами продуктов способствует своевременному отслеживанию изменений в требованиях. В то время как коммуникация QA-инженеров с разработчиками ― получению информации о внесенных в ходе итерации изменениях.

Заключение

Регрессионное тестирование позволяет минимизировать риски сбоев в работе программного продукта после внесения изменений.

В ходе регрессионного тестирования на Scrum-проектах команды сталкиваются с рядом сложностей, которые можно решить благодаря:

обеспечению непрерывной коммуникации между участниками проекта;

поддержке документации в актуальном состоянии;

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

валидации автоматизированных тест-кейсов.

Чтобы эффективно организовать процесс тестирования, важно:

создать план выполнения регрессии;

использовать доску регрессии;

тщательнее работать над ошибками;

не забывать о преимуществах исследовательского тестирования;

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

Подобный подход поможет гарантировать качество и стабильность ПО, несмотря на непрерывные доработки, и обеспечить слаженную работу Scrum-команд.

Что такое регрессионное тестирование?

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

Что это такое?

Для начала разберём 2 понятия:

Перепроверка (Retest, Defect Validation) — Процесс перепроверки упавших (failed) тестов, связанных с исправленным багом.

Регрессионное тестирование (Regression testing) — Тестирование уже протестированной программы,
проводящееся после модификации для уверенности в том, что процесс модификации не внес
или не активизировал ошибки в областях, не подвергавшихся изменениям. Проводится после
изменений в коде программного продукта или его окружении.

В чём разница?

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

Retest проверяет ранее упавшие тесты со статусом Failed .

Regression testing проверят ранее пройденные успешно тесты со статусом Passed c целью удостовериться, что изменения не поломали ранее рабочий функционал.

А зачем это делать регрессионное тестирование?

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

Нашу систему можно представить как сказку о репке.

И вот мы захотели убрать из истории собачку Жучку, чтобы сэкономить количество текста в сказке.

Как фикс, мы убрали её в моменте, где внучка позвала Жучку.

И вот оказалось, что дальше наша история ломается:

  • Жучка должна позвать кошку
  • Во всех следующих моментах в сказке написано, что Жучка тянет за внучку, а кошка за Жучку.

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

Какие изменения могут повлечь за собой регрессию?

Изменения в коде:

  • Новый функционал
  • Исправление дефекта
  • Рефакторинг кода
  • Обновление версий библиотек

Изменения в окружении:

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

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

Таким образом регрессионные тесты являются одним из первых кандидатов на автоматизацию.

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

Время — это одно из главных наших ограничений.

Поэтому в зависимости от времени мы делаем либо полную регрессию (Complete regression), либо частичную (Partial Regression).
С полной регрессией, думаю, вопросов быть не должно. Мы просто выполняем все тесты, которые у нас есть.
А вот с частичной регрессией всё куда интереснее.

Как выбрать достаточное количество тест-кейсов из общего числа? Не будем же мы брать наугад?

Это, наверное, один из самых важных вопросов в тестировании.
Попробуем на него ответить.

Для выбора тестов мы будем опираться на 2 фактора:

  • Сила влияния и важность для приложения (Impact)
    1. Часто используемый функционал
    2. Нечасто используемый функционал
  • Вероятность возникновения дефекта (Likelihood)
    1. Места, где были изменения
    2. Места, которые связаны с местами, где были изменения
    3. Сложные места
    4. Другие места

Исходя из наличия времени, берём по одному пункту из каждого фактора в порядке значимости и выбираем тесты, которые им соответствуют.

Например, мы «кровь из носа» должны зарелизиться к определённой дате и у нас очень мало времени на регрессионное тестирование.

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

Если времени чуть больше, то берём ещё и часть нечасто используемого функционала и совмещаем с тестами из пункта 2 в Likelihood.

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

Подытожим:

Retest — перепроверяет упавшие тесты после исправления дефектов.

Regression testing — проверяет ранее положительно пройденные тесты после любых изменений в коде, либо окружении приложения.

Retest & Regression testing нужно делать как можно чаще. Желательно на каждой сборке либо в каждой итерации.


источники:

http://habr.com/ru/post/563918/

http://crashtest.by/regression-testing/