Регрессионные ошибки это когда

Регрессионное тестирование – это тесты, которые направлены на поиск дефектов в тех участках приложения, которые уже протестированы. Мы в Qualitica делаем это не для того, чтобы окончательно убедиться в отсутствии багов, а для поиска и исправления регрессионных ошибок.

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

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

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

Регрессионное тестирование включает в себя несколько видов тестов:

  • верификационные тесты

Их проводят для проверки и исправления обнаруженного дефекта.

  • тестирование верификации версии

Этот тест содержит принципы smoke-тестирования и тестирования сборки: в рамках тестирования верификации версии мы проверяем работоспособность основного функционала программы в каждой новой сборке.

  • регрессионные тесты

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

  • тесты исправленных багов в старом релизе

Их проводят, когда у вас на руках уже есть новый релиз, но нужно проверить, не “ожили” ли дефекты, которые исправляли еще в старом релизе.

Важно: регрессионное тестирование – это не то же самое, что и повторное. Повторное тестирование – это проверка исправлений, внесенных в конкретный модуль или элемент. В этом главное отличие, ведь регрессионное тестирование направлено на поиск дефектов в целом продукте, где влияние исправления на другой компонент системы является основным направлением.

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

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

Факты – регрессионное тестирование:

  1. Проводится в каждом новом релизе
  2. Начинается с верификации версии (тестирование сборки и smoke-тестирование)
  3. Содержит проверку исправленных дефектов
  4. В основном не покрывает все приложение, а лишь те участки, на которые влияют изменения в релизе
  5. Проводится в трех основных направлениях: тестирование багов, старых проблем и побочных эффектов

На последнем пункте я остановлюсь и расскажу, что это за направления и в чем специфика каждого.

Три ключевых направления в регрессионном тестировании

Регресс – это тестирование трех основных направлений: дефектов, старых проблем и побочных эффектов.

  • Регрессия дефектов

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

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

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

  • Регрессия побочных эффектов

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

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

К преимуществам регрессионного тестирования можно отнести:

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

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

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

Однако это почти всегда необходимые расходы: согласно отчёту World Quality Report 2018, в среднем 26% всего IT-бюджета компаний идет на тестирование. При этом 40–70% этих затрат приходится на регрессионное тестирование. Если перевести проценты в реальные деньги, можно понять, почему регрессионное тестирование стоит каждого рубля, заслуживает внимания и требует продуманной стратегии.

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

И у меня для вас хорошие новости – в Qualitica уже сейчас работает команда из 50 профессиональных тестировщиков, которые готовы провести вам регрессионное тестирование по всем стандартам качества. Пишите на hello@qualitica.ru, расскажите о вашем продукте, подключайте нашу команду и выпускайте качественные релизы без дефектов.

From Wikipedia, the free encyclopedia

The regression (or regressive) fallacy is an informal fallacy. It assumes that something has returned to normal because of corrective actions taken while it was abnormal. This fails to account for natural fluctuations. It is frequently a special kind of the post hoc fallacy.

Explanation[edit]

Things like golf scores and chronic back pain fluctuate naturally and usually regress toward the mean. The logical flaw is to make predictions that expect exceptional results to continue as if they were average (see Representativeness heuristic). People are most likely to take action when variance is at its peak. Then after results become more normal they believe that their action was the cause of the change when in fact it was not causal.

This use of the word «regression» was coined by Sir Francis Galton in a study from 1885 called «Regression Toward Mediocrity in Hereditary Stature». He showed that the height of children from very short or very tall parents would move toward the average. In fact, in any situation where two variables are less than perfectly correlated, an exceptional score on one variable may not be matched by an equally exceptional score on the other variable. The imperfect correlation between parents and children (height is not entirely heritable) means that the distribution of heights of their children will be centered somewhere between the average of the parents and the average of the population as whole. Thus, any single child can be more extreme than the parents, but the odds are against it.

Examples[edit]

When his pain got worse, he went to a doctor, after which the pain subsided a little. Therefore, he benefited from the doctor’s treatment.

The pain subsiding a little after it has gotten worse is more easily explained by regression toward the mean. Assuming the pain relief was caused by the doctor is fallacious.

The student did exceptionally poorly last semester, so I punished him. He did much better this semester. Clearly, punishment is effective in improving students’ grades.

Often exceptional performances are followed by more normal performances, so the change in performance might better be explained by regression toward the mean. Incidentally, some experiments have shown that people may develop a systematic bias for punishment and against reward because of reasoning analogous to this example of the regression fallacy.[1]

The frequency of accidents on a road fell after a speed camera was installed. Therefore, the speed camera has improved road safety.

Speed cameras are often installed after a road incurs an exceptionally high number of accidents, and this value usually falls (regression to mean) immediately afterward. Many speed camera proponents attribute this fall in accidents to the speed camera, without observing the overall trend.

Some authors use the Sports Illustrated cover jinx as an example of a regression effect: extremely good performances are likely to be followed by less extreme ones, and athletes are chosen to appear on the cover of Sports Illustrated only after extreme performances. Attributing this to a «jinx» rather than regression, as some athletes reportedly believe, is an example of committing the regression fallacy.[2]

Misapplication[edit]

On the other hand, dismissing valid explanations can lead to a worse situation. For example:

After the Western Allies invaded Normandy, creating a second major front, German control of Europe waned. Clearly, the combination of the Western Allies and the USSR drove the Germans back.

Fallacious evaluation: «Given that the counterattacks against Germany occurred only after they had conquered the greatest amount of territory under their control, regression toward the mean can explain the retreat of German forces from occupied territories as a purely random fluctuation that would have happened without any intervention on the part of the USSR or the Western Allies.» However, this was not the case. The reason is that political power and occupation of territories is not primarily determined by random events, making the concept of regression toward the mean inapplicable (on the large scale).

In essence, misapplication of regression toward the mean can reduce all events to a just-so story, without cause or effect. (Such misapplication takes as a premise that all events are random, as they must be for the concept of regression toward the mean to be validly applied.)

Notes[edit]

  1. ^ Schaffner, 1985; Gilovich, 1991 pp. 27–28
  2. ^ Gilovich, 1991 pp. 26–27; Plous, 1993 p. 118

References[edit]

  • Friedman, Milton (1992). «Do Old Fallacies Ever Die?». Journal of Economic Literature. 30 (4): 2129–2132. JSTOR 2727976.
  • Gilovich, Thomas (1991). How we know what isn’t so: The fallibility of human reason in everyday life. New York: The Free Press. ISBN 0029117054.
  • Plous, Scott (1993). The Psychology of Judgment and Decision making. New York: McGraw-Hill. ISBN 0070504776.
  • Quah, Danny (1993). «Galton’s Fallacy and Tests of the Convergence Hypothesis». The Scandinavian Journal of Economics. 95 (4): 427–433. doi:10.2307/3440905. hdl:1721.1/63653. JSTOR 3440905.
  • Schaffner, P.E. (1985). «Specious learning about reward and punishment». Journal of Personality and Social Psychology. 48 (6): 1377–86. doi:10.1037/0022-3514.48.6.1377.

External links[edit]

  • Fallacy files: Regression fallacy

From Wikipedia, the free encyclopedia

The regression (or regressive) fallacy is an informal fallacy. It assumes that something has returned to normal because of corrective actions taken while it was abnormal. This fails to account for natural fluctuations. It is frequently a special kind of the post hoc fallacy.

Explanation[edit]

Things like golf scores and chronic back pain fluctuate naturally and usually regress toward the mean. The logical flaw is to make predictions that expect exceptional results to continue as if they were average (see Representativeness heuristic). People are most likely to take action when variance is at its peak. Then after results become more normal they believe that their action was the cause of the change when in fact it was not causal.

This use of the word «regression» was coined by Sir Francis Galton in a study from 1885 called «Regression Toward Mediocrity in Hereditary Stature». He showed that the height of children from very short or very tall parents would move toward the average. In fact, in any situation where two variables are less than perfectly correlated, an exceptional score on one variable may not be matched by an equally exceptional score on the other variable. The imperfect correlation between parents and children (height is not entirely heritable) means that the distribution of heights of their children will be centered somewhere between the average of the parents and the average of the population as whole. Thus, any single child can be more extreme than the parents, but the odds are against it.

Examples[edit]

When his pain got worse, he went to a doctor, after which the pain subsided a little. Therefore, he benefited from the doctor’s treatment.

The pain subsiding a little after it has gotten worse is more easily explained by regression toward the mean. Assuming the pain relief was caused by the doctor is fallacious.

The student did exceptionally poorly last semester, so I punished him. He did much better this semester. Clearly, punishment is effective in improving students’ grades.

Often exceptional performances are followed by more normal performances, so the change in performance might better be explained by regression toward the mean. Incidentally, some experiments have shown that people may develop a systematic bias for punishment and against reward because of reasoning analogous to this example of the regression fallacy.[1]

The frequency of accidents on a road fell after a speed camera was installed. Therefore, the speed camera has improved road safety.

Speed cameras are often installed after a road incurs an exceptionally high number of accidents, and this value usually falls (regression to mean) immediately afterward. Many speed camera proponents attribute this fall in accidents to the speed camera, without observing the overall trend.

Some authors use the Sports Illustrated cover jinx as an example of a regression effect: extremely good performances are likely to be followed by less extreme ones, and athletes are chosen to appear on the cover of Sports Illustrated only after extreme performances. Attributing this to a «jinx» rather than regression, as some athletes reportedly believe, is an example of committing the regression fallacy.[2]

Misapplication[edit]

On the other hand, dismissing valid explanations can lead to a worse situation. For example:

After the Western Allies invaded Normandy, creating a second major front, German control of Europe waned. Clearly, the combination of the Western Allies and the USSR drove the Germans back.

Fallacious evaluation: «Given that the counterattacks against Germany occurred only after they had conquered the greatest amount of territory under their control, regression toward the mean can explain the retreat of German forces from occupied territories as a purely random fluctuation that would have happened without any intervention on the part of the USSR or the Western Allies.» However, this was not the case. The reason is that political power and occupation of territories is not primarily determined by random events, making the concept of regression toward the mean inapplicable (on the large scale).

In essence, misapplication of regression toward the mean can reduce all events to a just-so story, without cause or effect. (Such misapplication takes as a premise that all events are random, as they must be for the concept of regression toward the mean to be validly applied.)

Notes[edit]

  1. ^ Schaffner, 1985; Gilovich, 1991 pp. 27–28
  2. ^ Gilovich, 1991 pp. 26–27; Plous, 1993 p. 118

References[edit]

  • Friedman, Milton (1992). «Do Old Fallacies Ever Die?». Journal of Economic Literature. 30 (4): 2129–2132. JSTOR 2727976.
  • Gilovich, Thomas (1991). How we know what isn’t so: The fallibility of human reason in everyday life. New York: The Free Press. ISBN 0029117054.
  • Plous, Scott (1993). The Psychology of Judgment and Decision making. New York: McGraw-Hill. ISBN 0070504776.
  • Quah, Danny (1993). «Galton’s Fallacy and Tests of the Convergence Hypothesis». The Scandinavian Journal of Economics. 95 (4): 427–433. doi:10.2307/3440905. hdl:1721.1/63653. JSTOR 3440905.
  • Schaffner, P.E. (1985). «Specious learning about reward and punishment». Journal of Personality and Social Psychology. 48 (6): 1377–86. doi:10.1037/0022-3514.48.6.1377.

External links[edit]

  • Fallacy files: Regression fallacy

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 21:22, 25 мая 2017.

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

Regression-testing.jpg

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

Понятие «Регрессионное тестирование», в зависимости от контекста использования может иметь разный смысл. Основные типы: регрессия багов, регрессия старых багов, регрессия побочного эффекта. Регрессия багов (англ. Bug regression) — попытка доказать, что исправленная ошибка на самом деле не была исправлена. Регрессия старых багов (англ. Old bugs regression) — попытка доказать, что недавнее изменение кода или данных сломало исправление старых ошибок, то есть старые баги стали снова воспроизводиться. Регрессия побочного эффекта (англ. Side effect regression) — попытка доказать, что недавнее изменение кода или данных сломало другие части разрабатываемого приложения.

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

Регрессионное программирование — часть экстремального программирования. В этой методологии проектная документация заменяется на расширяемое, повторяемое и автоматизированное тестирование всего программного пакета на каждой стадии процесса разработки программного обеспечения. Также регрессионное тестирование может быть использовано для проверки качества программы[Источник 1][Источник 2].

Содержание

  • 1 Типы, виды и направления регрессионного тестирования
    • 1.1 Автоматизация регрессионных тестов
    • 1.2 Регрессия багов
    • 1.3 Регрессия старых ошибок
  • 2 Задачи регрессионного тестирования
  • 3 Преимущества и недостатки регрессивного тестирования
    • 3.1 Преимущества
    • 3.2 Недостатки
  • 4 Источники

Типы, виды и направления регрессионного тестирования

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

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

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

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

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

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

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

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

Задачи регрессионного тестирования

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

  • Проверка и утверждение исправления ошибки;
  • Тестирование последствия исправлений, так как внесенные исправления могут привнести ошибку в код который исправно работал;
  • Гарантировать функциональную преемственность и совместимость новой версии (релиза, патча) с предыдущими;
  • Уменьшение стоимости и сокращение времени выполнения тестов[Источник 4].

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

Преимущества

  • Сокращение количества дефектов в системе к моменту релиза;
  • Исключение деградации качества системы при росте функциональности;
  • Уменьшение вероятности критических ошибок при эксплуатации.

Недостатки

Регрессионное тестирование может ввести много ненужных накладных расходов, поскольку это требует много ручного труда.

Источники

  1. Регрессионное тестирование или Regression Testing // протестинг.ru URL: http://www.protesting.ru/testing/types/regression.html (дата обращения 25.05.2017)
  2. Регрессионное тестирование программного обеспечения. Что такое регрессионное тестирование // FB.ru URL: http://fb.ru/article/224734/regressionnoe-testirovanie-programmnogo-obespecheniya-chto-takoe-regressionnoe-testirovanie

  3. Регрессионное тестирование программного обеспечения// getbug URL: http://getbug.ru/regressionnoe-testirovanie-programmnogo-obespecheniya/ (дата обращения 25.05.2017)
  4. Тестирование. Фундаментальная теория // Хабрхабр URL:https://habrahabr.ru/post/279535/(дата обращения 25.05.2017)

Регрессионные виды тестирования (Regression testing)

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

Регресс — это противоположность прогресса. Любое ПО по мере прогресса в функционале неизбежно усложняется, увеличиваются взаимосвязи в функциях и т.п., и чтобы убедиться в том, что в существующей системе не начинается регресс, полезно иногда проводить ее полное тестирование. И уж тем более логично перетестировать всё, что можно, если в систему были внесены какие-то существенные изменения. Но этого недостаточно. По-сути, проблема намного серьезнее — мы каждый раз не знаем, что принесет с собой новая функциональность в системе. Нам каждый раз надо предположить/узнать/протестировать новые взаимодействия в системе, а не тестировать только новые функции в изоляции от остальных. Старый функционал с новым если начинают пересекаться — надо заново расчехлять аналитику, выявлять новые ситуации, которые могут возникнуть, писать новые тест-кейсы, которые затрагивают уже не столько функциональные, сколько интеграционные аспекты. Поэтому выяснение «не наступил ли регресс» (внимание, не путать с «не наступила ли регрессия») — постоянная задача, которую также необходимо решать в контексте maintenance testing.

Регрессионное тестирование (Regression Testing) — собирательное название для всех видов тестирования программного обеспечения связанных с изменениями, направленных на обнаружение ошибок в уже протестированных участках исходного кода, на проверку того, что новая функциональность не зааффектила (affect) старую. Такие ошибки — когда после внесения изменений в программу перестаёт работать то, что должно было продолжать работать, — называют регрессионными ошибками (regression bugs). Регрессионные тесты должны быть частью релизного цикла (Release Cycle) и учитываться при тестовой оценке (test estimation).

При корректировках программы необходимо гарантировать сохранение качества. Для этого используется регрессионное тестирование — дорогостоящая, но необходимая деятельность в рамках maintenance testing, направленная на перепроверку корректности измененной программы. В соответствии со стандартным определением, регрессионное тестирование — это выборочное тестирование, позволяющее убедиться, что изменения не вызвали нежелательных побочных эффектов, или что измененная система по-прежнему соответствует требованиям. Регрессионное тестирование обычно проводится перед релизом новой версии приложения. Это происходит следующим образом: в течение какого-то времени делаются какие-то фичи и другие задачи, они тестируются по отдельности и сливаются в общую ветку (мастер/девелоп — чаще всего эта ветка называется в зависимости от процессов в проекте). Дальше, когда время подходит к релизу от ветки девелопа создается ветка релиза, из которой собирается релиз-кандидат и на нем уже проводят регресс.

Главной задачей maintenance testing является реализация систематического процесса обработки изменений в коде. После каждой модификации программы необходимо удостовериться, что на функциональность программы не оказал влияния модифицированный код. Если такое влияние обнаружено, говорят о регрессионном дефекте. Для регрессионного тестирования функциональных возможностей, изменение которых не планировалось, используются ранее разработанные тесты. Одна из целей регрессионного тестирования состоит в том, чтобы, в соответствии с используемым критерием покрытия кода (например, критерием покрытия потока операторов или потока данных), гарантировать тот же уровень покрытия, что и при полном повторном тестировании программы. Для этого необходимо запускать тесты, относящиеся к измененным областям кода или функциональным возможностям.

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

Можно заключить, что регрессионное тестирование выполняется чтобы минимизировать регрессионные риски. То есть, риски того, что при очередном изменении продукт перестанет выполнять свои функции. С регрессионным тестированием плотно связана другая активность — импакт анализ (Impact Analysis, анализ влияния изменений). Итоговая область регрессии называется Regression Scope / Scope of Regression.

Классификация регрессионного тестирования:

  • Проверить всё (Retest All): Как следует из названия, все тест-кейсы в наборе тестов повторно выполняются, чтобы гарантировать отсутствие ошибок, возникших из-за изменения кода. Это дорогостоящий метод, поскольку он требует больше времени и ресурсов по сравнению с другими методами;
  • Минимизация набора тестов (test suite minimization) стремится уменьшить размер тестового набора за счет устранения избыточных тестовых примеров из тестового набора;
  • Задача выбора теста (test case selection) связана с проблемой выбора подмножества тестов, которые будут использоваться для проверки измененных частей программного обеспечения. Для этого требуется выбрать подмножество тестов из предыдущей версии, которые могут обнаруживать неисправности, основываясь на различных стратегиях. Большинство задокументированных методов регрессионного тестирования сосредоточены именно на этой технике. Обычная стратегия состоит в том, чтобы сосредоточить внимание на отождествления модифицированных частей SUT (system under test) и для выбора тестовых случаев, имеющих отношение к ним. Например, техника полного повторного тестирования (retest-all) — один из наивных типов выбора регрессионного теста путем повторного выполнения всех видов тестов от предыдущей версии на новой. Она часто используется в промышленности из-за её простого и быстрого внедрения. Тем не менее, её способность обнаружения неисправностей ограничена. Таким образом, значительный объём работ связан с разработкой эффективных и масштабируемых селективных методов;
  • Задача определения приоритетов теста (test case prioritization). Ее цели заключаются в выполнении заказанных тестов на основе какого-либо критерия. Например, на основе истории, базы или требований, которые, как ожидается, приведут к более раннему выявлению неисправностей или помогут максимизировать некоторые другие полезные свойства;
  • Гибридный: Гибридный метод представляет собой комбинацию выборочного и приоритезации. Вместо того, чтобы выбирать весь набор тестов, выберите только те тест-кейсы, которые повторно выполняются в зависимости от их приоритета;

Типы регрессии по Канеру:

  • Регрессия багов (Bug regression) — попытка доказать, что исправленная ошибка на самом деле не исправлена;
  • Регрессия старых багов (Old bugs regression) — попытка доказать, что недавнее изменение кода или данных сломало исправление старых ошибок, т.е. старые баги стали снова воспроизводиться;
  • Регрессия побочного эффекта (Side effect regression) — попытка доказать, что недавнее изменение кода или данных сломало другие части разрабатываемого приложения;

Регрессия в Agile:

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

  • Регрессия уровня спринта (Sprint Level Regression): выполняется в основном для новых функций или улучшений, внесенных в последний спринт. Тест-кейсы из набора тестов выбираются в соответствии с новыми добавленными функциями или сделанными улучшениями;
  • Сквозная регрессия (End to End Regression): включает в себя все тест-кейсы, которые должны быть повторно выполнены для сквозного тестирования всего продукта, охватывая все основные функции;

Смоук тестирование (Smoke testing)

Тест «на дым» (smoke test): Выборка из общего числа запланированных тестовых сценариев, покрывающая основную функциональность компонента или системы. Проводится с целью удостовериться, что базовые функции программы в целом работают корректно, без углубления в детали. Ежедневная сборка и тест «на дым» являются передовыми практическими методами. См. входной тест, тест верификации сборки. (ISTQB)

Тест верификации сборки (build verification test): Набор автоматических тестов, валидирующих целостность каждой новой сборки и верифицирующих ее ключевую/базовую функциональность, стабильность и тестируемость. Данный вид тестирования используется там, где присутствует высокая частота сборок (например, проекты с использованием гибких методологий разработки) и выполняется для каждой новой сборки перед передачей ее в тестирования. См. также регрессионное тестирование, тест «на дым». (ISTQB)

Smoke testing, BVT — Build Verification Testing, BAT — Builds Acceptance Testing, Breath Testing, Shakeout/Shakedown Testing, Intake test, а также в русскоязычных вариантах дымовое, на дым, дымное, тестирование сборки и т.п. — это подмножество регрессионного тестирования, короткий цикл тестов, выполняемый для каждой новой сборки для подтверждения того, что ПО после внесенных изменений стартует и выполняет основные функции без критических и блокирующих дефектов. В случае отсутствия блокеров Smoke testing объявляется пройденным, и команда QA может начинать дальнейшее тестирование полного цикла, в противном случае, сборка объявляется дефектной, что делает дальнейшее тестирование пустой тратой времени и ресурсов. В таком случае сборка возвращается на доработку и исправление. Smoke testing обычно используется для Integration, Acceptance and System Testing.

Если мы говорим про сайт интернет-магазина, то сценарий может быть следующим:

  • Сайт открывается
  • Можно выбрать случайный товар и добавить его в корзину
  • Можно оформить и оплатить заказ

Если мы говорим про мобильное приложение, например, messenger, то:

  • Приложение устанавливается и запускается
  • Можно авторизоваться
  • Можно написать сообщение случайном контакту

Небольшая шпаргалка по степени важности:

  • smoke — самое важное. Тест-кейсы играют очень важную роль на этом уровне тестирования, поэтому предел метрик (metric limit) часто соответствует 100% или примерно 100%;
  • critical path — повседневное. Тесты критического пути запускаются для проверки функциональности, используемой типичными пользователями в их повседневной деятельности. Есть много пользователей, которые обычно используют определенную часть функциональности приложения, которую необходимо проверить, как только smoke этап будет успешно завершен. Здесь лимит метрик немного ниже, чем у smoke, и соответствует 70-80-90% в зависимости от цели проекта;
  • extended — все. Выполняется для изучения всей функциональности, указанной в требованиях. Проверяется даже функциональность с низким приоритетом. При этом в этом тестировании нужно понимать, какой функционал наиболее ценный, а какой менее важный. При условии, что у вас достаточно времени или других ресурсов, тесты на этом уровне можно использовать для требований с низким приоритетом;

Примечание. В русском языке термин ошибочно переводят как проверка дыма, корректнее уж говорить “на дым”. История термина: Первое свое применение этот термин получил у печников, которые, собрав печь, закрывали все заглушки, затапливали ее и смотрели, чтобы дым шел только из положенных мест. Повторное «рождение» термина произошло в радиоэлектронике. Первое включение нового радиоэлектронного устройства, пришедшего из производства, совершается на очень короткое время (меньше секунды). Затем инженер руками ощупывает все микросхемы на предмет перегрева. Сильно нагревшаяся за эту секунду микросхема может свидетельствовать о грубой ошибке в схеме. Если первое включение не выявило перегрева, то прибор включается снова на большее время. Проверка повторяется. И так далее несколько раз. Выражение «smoke-test» используется инженерами в шуточном смысле, так как появления дыма, а значит и порчи частей устройства, стараются избежать.

Санити тестирование (Sanity testing)

Тест работоспособности (sanity test): См. тест «на дым». (ISTQB)

Другие источники:

Sanity testing также является подмножеством регрессионного тестирования и выполняется до или вместо полной регрессии, но после smoke. Эти два подвида похожи, но в целом Sanity используется на более стабильных билдах для определения работоспособности определенной части приложения после внесения изменений.

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

Подтверждающее, повторное тестирование (confirmation testing, re-testing)

Подтверждающее тестирование (confirmation testing): Тестирование, при котором выполняются тестовые сценарии, которые были не пройдены при последнем запуске, с целью подтвердить успешность исправлений. (ISTQB)

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

Тестирование N+1 (N+1 testing)

Вариант регрессионного тестирования представлен как N+1. В этом методе тестирование выполняется в несколько циклов, в которых ошибки, обнаруженные в тестовом цикле «N», устраняются и повторно тестируются в тестовом цикле N + 1. Цикл повторяется, пока не будет найдено ни одной ошибки.

Разница между повторным и регрессионным тестированием:

  • Регрессионное тестирование проводится для подтверждения того, что недавнее изменение программы или кода не оказало неблагоприятного воздействия на существующие функции. Повторное тестирование проводится для подтверждения того, что тест-кейсы, которые не прошли, проходят после устранения дефектов;
  • Цель регрессионного тестирования подтвердить, что новые изменения кода не должны иметь побочных эффектов для существующих функций. Повторное тестирование проводится на основе исправлений дефектов.;
  • Проверка дефектов не является частью регрессионного тестирования. Проверка дефекта является частью повторного тестирования;
  • В зависимости от проекта и наличия ресурсов, регрессионное тестирование может проводиться параллельно с повторным тестированием. Приоритет повторного тестирования выше, чем регрессионное тестирование, поэтому оно проводится перед регрессионным тестированием;
  • Регрессионное тестирование называется общим (generic) тестированием. Повторное тестирование — это плановое (planned) тестирование;
  • Регрессионное тестирование проводится для пройденных Test case. Повторное тестирование проводится только для неудачных тестов;
  • Регрессионное тестирование проверяет наличие неожиданных побочных эффектов. Повторное тестирование гарантирует, что первоначальная ошибка была исправлена;
  • Test case для регрессионного тестирования могут быть получены из функциональной спецификации, user tutorials and manuals, а также defect reports в отношении исправленных проблем. Test case для повторного тестирования не могут быть получены до начала тестирования;

Может ли быть ситуация, когда регрессия проводится не после изменений в коде?

Да, в ситуациях с внешними факторами: изменения в БД, версии ОС и т.п.

Источники:

  • Maintenance, Regression testing and Re-testing
  • Регрессионное тестирование
  • Тестировщики нужны — пост “Регресс для самых маленьких”
  • QA Outsourcing: Smoke Testing, Critical Path Testing, Extended Testing
  • What Is Regression Testing? Definition, Tools, Method, And Example
  • В чём разница Smoke, Sanity, Regression, Re-test и как их различать?
  • Difference Between Retesting and Regression Testing
  • Top 150 Software Testing Interview Questions and Answers for Freshers and Experienced

Дополнительный материал:

  • ГОСТ Р 56920-2016/ISO/IEC/IEEE 29119-1:2013 “D.6 Подпроцесс регрессионного тестирования”, “D.7 Подпроцесс повторного тестирования”
  • Лекция 11: Регрессионное тестирование: цели и задачи, условия применения, классификация тестов и методов отбора
  • Black Box Software Testing PART 11 — REGRESSION TESTING by Cem Kaner + 2005 year version
  • Епифанов Н. А. — Методы реализации регрессионного тестирования по расширенным тестовым наборам
  • Anti-Regression Approaches: Impact Analysis and Regression Testing Compared and Combined — Part I: Introduction and Impact Analysis
  • Anti-Regression Approaches — Part II: Regression Prevention and Detection Using Static Techniques
  • Как сохранить нервы тестировщика или ускорить регресс с 8 до 2 часов
  • Регрессионное тестирование или Regression Testing
  • QA Outsourcing: Smoke Testing, Critical Path Testing, Extended Testing
  • Антирегрессионное тестирование — минимизируйте затраты
  • Способы сокращения регрессионного тестирования
  • Курс Тестирование ПО. Занятие 26. Регрессионное тестирование (Regression Testing)
  • История о бесконечном регрессионном тестировании

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

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

Определение

Регрессионное тестирование – проверка программного обеспечения для подтверждения того, что недавние корректировки софта или кода не сказались негативно на функциональности приложения.

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

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

Когда требуется

При регрессионном тестировании могут быть обнаружены баги, мешающие нормальной работе софта. Они носят называние регрессионных ошибок.

Рассматриваемое тестирование потребуется в следующих ситуациях:

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

Также регрессионная проверка нужна, когда нет выстроенного процесса разработки утилиты:

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

Если тестер плохо представляет себе архитектуру контента, а также его внутренние взаимосвязи, в регрессионном тестировании тоже возникает потребность.

Преимущества метода

Regression Testing обладает определенными преимуществами:

  1. Качественная отладка утилиты к моменту релиза. В процессе реализации проверки происходит значительное сокращение дефектов и багов в системе.
  2. Исключение ухудшения качества контента при внедрении новых возможностей и функций.
  3. Значительное снижение критических ошибок при использовании утилиты.

Исправление ошибки или обнаруженной неполадки – важный процесс перед выпуском софта. Особенно это касается игровых приложений. Тестинг позволяет убедиться в том, что система функционирует «так, как задумано изначально».

Недостатки

Регрессионное тестирование – хороший способ проверки утилиты. Но оно имеет ряд недостатков:

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

А еще данный прием требует большого количества ручного труда. Кроме автоматизированного ПО работу тестеров никто не отменял.

О задачах

У регресс-тестирования ключевая задача – это проверка того, что исправление ошибки не отразилось негативно на всем остальном программном коде. Функциональные возможности контента должны быть сохранены.

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

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

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

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

Типы и виды

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

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

Одной из классификаций является разделение по функциональности. Проверка может быть:

  • функциональной;
  • нефункциональной.

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

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

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

Нефункциональные тесты – отвечают за проверку свойств, не относящихся к функциям приложения. Примеры:

  • удобство;
  • масштабы;
  • портативность;
  • производительность;
  • безопасность и надежность.

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

Автоматизация

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

К ключевым задачам, работающим автоматически, можно отнести:

  • запуск;
  • обработка информации;
  • инициализация;
  • анализ;
  • выдача результатов.

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

Баги

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

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

Старые ошибки

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

Как провести

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

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

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

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

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

Алгоритм организации

Регрессионное тестирование нужно грамотно организовать, чтобы в будущем не возникло никаких проблем. Алгоритм действий кратко можно представить так:

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

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

Как лучше разобраться в теме

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

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

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

P. S. Большой выбор курсов по тестированию есть и в Otus. Среди них широко представлено и направление автоматизации. Есть варианты как для продвинутых, так и для начинающих пользователей.


Когда мы подгоняем регрессионную модель к набору данных, нас часто интересует, насколько хорошо регрессионная модель «подходит» к набору данных. Две метрики, обычно используемые для измерения согласия, включают R -квадрат (R2) и стандартную ошибку регрессии , часто обозначаемую как S.

В этом руководстве объясняется, как интерпретировать стандартную ошибку регрессии (S), а также почему она может предоставить более полезную информацию, чем R 2 .

Стандартная ошибка по сравнению с R-квадратом в регрессии

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

Пример интерпретации стандартной ошибки регрессии

Если мы подгоним простую модель линейной регрессии к этому набору данных в Excel, мы получим следующий результат:

Вывод регрессии в Excel

R-квадрат — это доля дисперсии переменной отклика, которая может быть объяснена предикторной переменной. При этом 65,76% дисперсии экзаменационных баллов можно объяснить количеством часов, потраченных на учебу.

Стандартная ошибка регрессии — это среднее расстояние, на которое наблюдаемые значения отклоняются от линии регрессии. В этом случае наблюдаемые значения отклоняются от линии регрессии в среднем на 4,89 единицы.

Если мы нанесем фактические точки данных вместе с линией регрессии, мы сможем увидеть это более четко:

Обратите внимание, что некоторые наблюдения попадают очень близко к линии регрессии, в то время как другие не так близки. Но в среднем наблюдаемые значения отклоняются от линии регрессии на 4,19 единицы .

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

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

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

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

Если мы подгоним простую модель линейной регрессии к этому набору данных в Excel, мы получим следующий результат:

Вывод регрессии из простой линейной модели в Excel

Обратите внимание, что R-квадрат 65,76% точно такой же, как и в предыдущем примере.

Однако стандартная ошибка регрессии составляет 2,095 , что ровно вдвое меньше стандартной ошибки регрессии в предыдущем примере.

Если мы нанесем фактические точки данных вместе с линией регрессии, мы сможем увидеть это более четко:

Диаграмма рассеяния для простой линейной регрессии

Обратите внимание на то, что наблюдения располагаются гораздо плотнее вокруг линии регрессии. В среднем наблюдаемые значения отклоняются от линии регрессии на 2,095 единицы .

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

Преимущества использования стандартной ошибки

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

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

Наша первая модель имеет R-квадрат 65,76%, но это ничего не говорит нам о том, насколько точным будет наш интервал прогнозирования. К счастью, мы также знаем, что у первой модели показатель S равен 4,19. Это означает, что 95-процентный интервал прогнозирования будет иметь ширину примерно 2*4,19 = +/- 8,38 единиц, что слишком велико для нашего интервала прогнозирования.

Наша вторая модель также имеет R-квадрат 65,76%, но опять же это ничего не говорит нам о том, насколько точным будет наш интервал прогнозирования. Однако мы знаем, что вторая модель имеет S 2,095. Это означает, что 95-процентный интервал прогнозирования будет иметь ширину примерно 2*2,095= +/- 4,19 единиц, что меньше 6 и, следовательно, будет достаточно точным для использования для создания интервалов прогнозирования.

Дальнейшее чтение

Введение в простую линейную регрессию
Что такое хорошее значение R-квадрата?

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

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

Для начала разберём 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 нужно делать как можно чаще. Желательно на каждой сборке либо в каждой итерации.

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

 

Регрессионное тестирование

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

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

 

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

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

  • исправления багов;
  • умышленное изменение кода: добавление, изменение, удаление функций;
  • внесение изменений в конфигурацию рабочего окружения: обновили PHP, Java, Linux, Windows, MySQL и т. д.;
  • переезд на другие серверы;
  • и др.

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

 

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

В качестве преимуществ можно отметить:

  • улучшение конечного качества программного продукта;
  • наличие регрессионных ошибок демонстрирует истинное качество программирования и архитектуры проекта: чем больше ошибок, тем хуже качество кода.

В качестве недостатков можно отметить:

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

 

Заключение

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

Антирегрессионное тестирование – минимизируйте затраты

Время на прочтение
5 мин

Количество просмотров 16K

Регрессионное тестирование играет важнейшую роль в разработке продукта и считается непростой задачей. С этим трудно не согласиться, когда вы тестируете то, что уже было протестировано, а потом тестируете это снова. Термин «регрессия» ассоциируется у членов команды с большими усилиями. Мы знаем, насколько головоломным и вместе с тем незаменимым может быть регрессионное тестирование для процесса релиза и спрашиваем «Приведет ли невыполненное регрессионное тестирование к неудовлетворительному результату?» и «Нужно ли проводить регрессионное тестирование, если программа без ошибок – это недостижимая цель?» Что ж, ответом будет «Да! Регрессионное тестирование нужно проводить регулярно».

Что подразумевается под регрессионным тестированием?

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

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

Антирегрессионное тестирование

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

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

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

Почему с регрессионными дефектами трудно иметь дело?

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

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

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

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

Тонкости исправления регрессионных дефектов

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

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

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

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

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

Сравнение регрессионного тестирования и повторного тестирования

Очень тонкая линия разделяет регрессионное тестирование и повторное тестирование.

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

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

Когда применяется регрессионное тестирование?

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

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

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

Другие интересные статьи в нашем блоге (от переводчика):

  1. Property-based тестирование с QuickCheck
  2. Haskell – хороший выбор с точки зрения безопасности ПО?
  3. Как мы выбираем языки программирования в Typeable
  4. Язык моделирования Alloy и приключения с параллельными запросами к базе данных

From Wikipedia, the free encyclopedia

In statistics and optimization, errors and residuals are two closely related and easily confused measures of the deviation of an observed value of an element of a statistical sample from its «true value» (not necessarily observable). The error of an observation is the deviation of the observed value from the true value of a quantity of interest (for example, a population mean). The residual is the difference between the observed value and the estimated value of the quantity of interest (for example, a sample mean). The distinction is most important in regression analysis, where the concepts are sometimes called the regression errors and regression residuals and where they lead to the concept of studentized residuals.
In econometrics, «errors» are also called disturbances.[1][2][3]

Introduction[edit]

Suppose there is a series of observations from a univariate distribution and we want to estimate the mean of that distribution (the so-called location model). In this case, the errors are the deviations of the observations from the population mean, while the residuals are the deviations of the observations from the sample mean.

A statistical error (or disturbance) is the amount by which an observation differs from its expected value, the latter being based on the whole population from which the statistical unit was chosen randomly. For example, if the mean height in a population of 21-year-old men is 1.75 meters, and one randomly chosen man is 1.80 meters tall, then the «error» is 0.05 meters; if the randomly chosen man is 1.70 meters tall, then the «error» is −0.05 meters. The expected value, being the mean of the entire population, is typically unobservable, and hence the statistical error cannot be observed either.

A residual (or fitting deviation), on the other hand, is an observable estimate of the unobservable statistical error. Consider the previous example with men’s heights and suppose we have a random sample of n people. The sample mean could serve as a good estimator of the population mean. Then we have:

  • The difference between the height of each man in the sample and the unobservable population mean is a statistical error, whereas
  • The difference between the height of each man in the sample and the observable sample mean is a residual.

Note that, because of the definition of the sample mean, the sum of the residuals within a random sample is necessarily zero, and thus the residuals are necessarily not independent. The statistical errors, on the other hand, are independent, and their sum within the random sample is almost surely not zero.

One can standardize statistical errors (especially of a normal distribution) in a z-score (or «standard score»), and standardize residuals in a t-statistic, or more generally studentized residuals.

In univariate distributions[edit]

If we assume a normally distributed population with mean μ and standard deviation σ, and choose individuals independently, then we have

{displaystyle X_{1},dots ,X_{n}sim Nleft(mu ,sigma ^{2}right),}

and the sample mean

overline{X}={X_1 + cdots + X_n over n}

is a random variable distributed such that:

{displaystyle {overline {X}}sim Nleft(mu ,{frac {sigma ^{2}}{n}}right).}

The statistical errors are then

{displaystyle e_{i}=X_{i}-mu ,,}

with expected values of zero,[4] whereas the residuals are

{displaystyle r_{i}=X_{i}-{overline {X}}.}

The sum of squares of the statistical errors, divided by σ2, has a chi-squared distribution with n degrees of freedom:

{displaystyle {frac {1}{sigma ^{2}}}sum _{i=1}^{n}e_{i}^{2}sim chi _{n}^{2}.}

However, this quantity is not observable as the population mean is unknown. The sum of squares of the residuals, on the other hand, is observable. The quotient of that sum by σ2 has a chi-squared distribution with only n − 1 degrees of freedom:

{frac  1{sigma ^{2}}}sum _{{i=1}}^{n}r_{i}^{2}sim chi _{{n-1}}^{2}.

This difference between n and n − 1 degrees of freedom results in Bessel’s correction for the estimation of sample variance of a population with unknown mean and unknown variance. No correction is necessary if the population mean is known.

[edit]

It is remarkable that the sum of squares of the residuals and the sample mean can be shown to be independent of each other, using, e.g. Basu’s theorem. That fact, and the normal and chi-squared distributions given above form the basis of calculations involving the t-statistic:

{displaystyle T={frac {{overline {X}}_{n}-mu _{0}}{S_{n}/{sqrt {n}}}},}

where {displaystyle {overline {X}}_{n}-mu _{0}} represents the errors, S_{n} represents the sample standard deviation for a sample of size n, and unknown σ, and the denominator term S_n/sqrt n accounts for the standard deviation of the errors according to:[5]

{displaystyle operatorname {Var} left({overline {X}}_{n}right)={frac {sigma ^{2}}{n}}}

The probability distributions of the numerator and the denominator separately depend on the value of the unobservable population standard deviation σ, but σ appears in both the numerator and the denominator and cancels. That is fortunate because it means that even though we do not know σ, we know the probability distribution of this quotient: it has a Student’s t-distribution with n − 1 degrees of freedom. We can therefore use this quotient to find a confidence interval for μ. This t-statistic can be interpreted as «the number of standard errors away from the regression line.»[6]

Regressions[edit]

In regression analysis, the distinction between errors and residuals is subtle and important, and leads to the concept of studentized residuals. Given an unobservable function that relates the independent variable to the dependent variable – say, a line – the deviations of the dependent variable observations from this function are the unobservable errors. If one runs a regression on some data, then the deviations of the dependent variable observations from the fitted function are the residuals. If the linear model is applicable, a scatterplot of residuals plotted against the independent variable should be random about zero with no trend to the residuals.[5] If the data exhibit a trend, the regression model is likely incorrect; for example, the true function may be a quadratic or higher order polynomial. If they are random, or have no trend, but «fan out» — they exhibit a phenomenon called heteroscedasticity. If all of the residuals are equal, or do not fan out, they exhibit homoscedasticity.

However, a terminological difference arises in the expression mean squared error (MSE). The mean squared error of a regression is a number computed from the sum of squares of the computed residuals, and not of the unobservable errors. If that sum of squares is divided by n, the number of observations, the result is the mean of the squared residuals. Since this is a biased estimate of the variance of the unobserved errors, the bias is removed by dividing the sum of the squared residuals by df = n − p − 1, instead of n, where df is the number of degrees of freedom (n minus the number of parameters (excluding the intercept) p being estimated — 1). This forms an unbiased estimate of the variance of the unobserved errors, and is called the mean squared error.[7]

Another method to calculate the mean square of error when analyzing the variance of linear regression using a technique like that used in ANOVA (they are the same because ANOVA is a type of regression), the sum of squares of the residuals (aka sum of squares of the error) is divided by the degrees of freedom (where the degrees of freedom equal n − p − 1, where p is the number of parameters estimated in the model (one for each variable in the regression equation, not including the intercept)). One can then also calculate the mean square of the model by dividing the sum of squares of the model minus the degrees of freedom, which is just the number of parameters. Then the F value can be calculated by dividing the mean square of the model by the mean square of the error, and we can then determine significance (which is why you want the mean squares to begin with.).[8]

However, because of the behavior of the process of regression, the distributions of residuals at different data points (of the input variable) may vary even if the errors themselves are identically distributed. Concretely, in a linear regression where the errors are identically distributed, the variability of residuals of inputs in the middle of the domain will be higher than the variability of residuals at the ends of the domain:[9] linear regressions fit endpoints better than the middle. This is also reflected in the influence functions of various data points on the regression coefficients: endpoints have more influence.

Thus to compare residuals at different inputs, one needs to adjust the residuals by the expected variability of residuals, which is called studentizing. This is particularly important in the case of detecting outliers, where the case in question is somehow different from the others in a dataset. For example, a large residual may be expected in the middle of the domain, but considered an outlier at the end of the domain.

Other uses of the word «error» in statistics[edit]

The use of the term «error» as discussed in the sections above is in the sense of a deviation of a value from a hypothetical unobserved value. At least two other uses also occur in statistics, both referring to observable prediction errors:

The mean squared error (MSE) refers to the amount by which the values predicted by an estimator differ from the quantities being estimated (typically outside the sample from which the model was estimated).
The root mean square error (RMSE) is the square-root of MSE.
The sum of squares of errors (SSE) is the MSE multiplied by the sample size.

Sum of squares of residuals (SSR) is the sum of the squares of the deviations of the actual values from the predicted values, within the sample used for estimation. This is the basis for the least squares estimate, where the regression coefficients are chosen such that the SSR is minimal (i.e. its derivative is zero).

Likewise, the sum of absolute errors (SAE) is the sum of the absolute values of the residuals, which is minimized in the least absolute deviations approach to regression.

The mean error (ME) is the bias.
The mean residual (MR) is always zero for least-squares estimators.

See also[edit]

  • Absolute deviation
  • Consensus forecasts
  • Error detection and correction
  • Explained sum of squares
  • Innovation (signal processing)
  • Lack-of-fit sum of squares
  • Margin of error
  • Mean absolute error
  • Observational error
  • Propagation of error
  • Probable error
  • Random and systematic errors
  • Reduced chi-squared statistic
  • Regression dilution
  • Root mean square deviation
  • Sampling error
  • Standard error
  • Studentized residual
  • Type I and type II errors

References[edit]

  1. ^ Kennedy, P. (2008). A Guide to Econometrics. Wiley. p. 576. ISBN 978-1-4051-8257-7. Retrieved 2022-05-13.
  2. ^ Wooldridge, J.M. (2019). Introductory Econometrics: A Modern Approach. Cengage Learning. p. 57. ISBN 978-1-337-67133-0. Retrieved 2022-05-13.
  3. ^ Das, P. (2019). Econometrics in Theory and Practice: Analysis of Cross Section, Time Series and Panel Data with Stata 15.1. Springer Singapore. p. 7. ISBN 978-981-329-019-8. Retrieved 2022-05-13.
  4. ^ Wetherill, G. Barrie. (1981). Intermediate statistical methods. London: Chapman and Hall. ISBN 0-412-16440-X. OCLC 7779780.
  5. ^ a b Frederik Michel Dekking; Cornelis Kraaikamp; Hendrik Paul Lopuhaä; Ludolf Erwin Meester (2005-06-15). A modern introduction to probability and statistics : understanding why and how. London: Springer London. ISBN 978-1-85233-896-1. OCLC 262680588.
  6. ^ Peter Bruce; Andrew Bruce (2017-05-10). Practical statistics for data scientists : 50 essential concepts (First ed.). Sebastopol, CA: O’Reilly Media Inc. ISBN 978-1-4919-5296-2. OCLC 987251007.
  7. ^ Steel, Robert G. D.; Torrie, James H. (1960). Principles and Procedures of Statistics, with Special Reference to Biological Sciences. McGraw-Hill. p. 288.
  8. ^ Zelterman, Daniel (2010). Applied linear models with SAS ([Online-Ausg.]. ed.). Cambridge: Cambridge University Press. ISBN 9780521761598.
  9. ^ «7.3: Types of Outliers in Linear Regression». Statistics LibreTexts. 2013-11-21. Retrieved 2019-11-22.
  • Cook, R. Dennis; Weisberg, Sanford (1982). Residuals and Influence in Regression (Repr. ed.). New York: Chapman and Hall. ISBN 041224280X. Retrieved 23 February 2013.
  • Cox, David R.; Snell, E. Joyce (1968). «A general definition of residuals». Journal of the Royal Statistical Society, Series B. 30 (2): 248–275. JSTOR 2984505.
  • Weisberg, Sanford (1985). Applied Linear Regression (2nd ed.). New York: Wiley. ISBN 9780471879572. Retrieved 23 February 2013.
  • «Errors, theory of», Encyclopedia of Mathematics, EMS Press, 2001 [1994]

External links[edit]

  • Media related to Errors and residuals at Wikimedia Commons

Регрессионные виды тестирования (Regression testing)

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

Регресс — это противоположность прогресса. Любое ПО по мере прогресса в функционале неизбежно усложняется, увеличиваются взаимосвязи в функциях и т.п., и чтобы убедиться в том, что в существующей системе не начинается регресс, полезно иногда проводить ее полное тестирование. И уж тем более логично перетестировать всё, что можно, если в систему были внесены какие-то существенные изменения. Но этого недостаточно. По-сути, проблема намного серьезнее — мы каждый раз не знаем, что принесет с собой новая функциональность в системе. Нам каждый раз надо предположить/узнать/протестировать новые взаимодействия в системе, а не тестировать только новые функции в изоляции от остальных. Старый функционал с новым если начинают пересекаться — надо заново расчехлять аналитику, выявлять новые ситуации, которые могут возникнуть, писать новые тест-кейсы, которые затрагивают уже не столько функциональные, сколько интеграционные аспекты. Поэтому выяснение «не наступил ли регресс» (внимание, не путать с «не наступила ли регрессия») — постоянная задача, которую также необходимо решать в контексте maintenance testing.

Регрессионное тестирование (Regression Testing) — собирательное название для всех видов тестирования программного обеспечения связанных с изменениями, направленных на обнаружение ошибок в уже протестированных участках исходного кода, на проверку того, что новая функциональность не зааффектила (affect) старую. Такие ошибки — когда после внесения изменений в программу перестаёт работать то, что должно было продолжать работать, — называют регрессионными ошибками (regression bugs). Регрессионные тесты должны быть частью релизного цикла (Release Cycle) и учитываться при тестовой оценке (test estimation).

При корректировках программы необходимо гарантировать сохранение качества. Для этого используется регрессионное тестирование — дорогостоящая, но необходимая деятельность в рамках maintenance testing, направленная на перепроверку корректности измененной программы. В соответствии со стандартным определением, регрессионное тестирование — это выборочное тестирование, позволяющее убедиться, что изменения не вызвали нежелательных побочных эффектов, или что измененная система по-прежнему соответствует требованиям. Регрессионное тестирование обычно проводится перед релизом новой версии приложения. Это происходит следующим образом: в течение какого-то времени делаются какие-то фичи и другие задачи, они тестируются по отдельности и сливаются в общую ветку (мастер/девелоп — чаще всего эта ветка называется в зависимости от процессов в проекте). Дальше, когда время подходит к релизу от ветки девелопа создается ветка релиза, из которой собирается релиз-кандидат и на нем уже проводят регресс.

Главной задачей maintenance testing является реализация систематического процесса обработки изменений в коде. После каждой модификации программы необходимо удостовериться, что на функциональность программы не оказал влияния модифицированный код. Если такое влияние обнаружено, говорят о регрессионном дефекте. Для регрессионного тестирования функциональных возможностей, изменение которых не планировалось, используются ранее разработанные тесты. Одна из целей регрессионного тестирования состоит в том, чтобы, в соответствии с используемым критерием покрытия кода (например, критерием покрытия потока операторов или потока данных), гарантировать тот же уровень покрытия, что и при полном повторном тестировании программы. Для этого необходимо запускать тесты, относящиеся к измененным областям кода или функциональным возможностям.

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

Можно заключить, что регрессионное тестирование выполняется чтобы минимизировать регрессионные риски. То есть, риски того, что при очередном изменении продукт перестанет выполнять свои функции. С регрессионным тестированием плотно связана другая активность — импакт анализ (Impact Analysis, анализ влияния изменений). Итоговая область регрессии называется Regression Scope / Scope of Regression.

Классификация регрессионного тестирования:

  • Проверить всё (Retest All): Как следует из названия, все тест-кейсы в наборе тестов повторно выполняются, чтобы гарантировать отсутствие ошибок, возникших из-за изменения кода. Это дорогостоящий метод, поскольку он требует больше времени и ресурсов по сравнению с другими методами;
  • Минимизация набора тестов (test suite minimization) стремится уменьшить размер тестового набора за счет устранения избыточных тестовых примеров из тестового набора;
  • Задача выбора теста (test case selection) связана с проблемой выбора подмножества тестов, которые будут использоваться для проверки измененных частей программного обеспечения. Для этого требуется выбрать подмножество тестов из предыдущей версии, которые могут обнаруживать неисправности, основываясь на различных стратегиях. Большинство задокументированных методов регрессионного тестирования сосредоточены именно на этой технике. Обычная стратегия состоит в том, чтобы сосредоточить внимание на отождествления модифицированных частей SUT (system under test) и для выбора тестовых случаев, имеющих отношение к ним. Например, техника полного повторного тестирования (retest-all) — один из наивных типов выбора регрессионного теста путем повторного выполнения всех видов тестов от предыдущей версии на новой. Она часто используется в промышленности из-за её простого и быстрого внедрения. Тем не менее, её способность обнаружения неисправностей ограничена. Таким образом, значительный объём работ связан с разработкой эффективных и масштабируемых селективных методов;
  • Задача определения приоритетов теста (test case prioritization). Ее цели заключаются в выполнении заказанных тестов на основе какого-либо критерия. Например, на основе истории, базы или требований, которые, как ожидается, приведут к более раннему выявлению неисправностей или помогут максимизировать некоторые другие полезные свойства;
  • Гибридный: Гибридный метод представляет собой комбинацию выборочного и приоритезации. Вместо того, чтобы выбирать весь набор тестов, выберите только те тест-кейсы, которые повторно выполняются в зависимости от их приоритета;

Типы регрессии по Канеру:

  • Регрессия багов (Bug regression) — попытка доказать, что исправленная ошибка на самом деле не исправлена;
  • Регрессия старых багов (Old bugs regression) — попытка доказать, что недавнее изменение кода или данных сломало исправление старых ошибок, т.е. старые баги стали снова воспроизводиться;
  • Регрессия побочного эффекта (Side effect regression) — попытка доказать, что недавнее изменение кода или данных сломало другие части разрабатываемого приложения;

Регрессия в Agile:

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

  • Регрессия уровня спринта (Sprint Level Regression): выполняется в основном для новых функций или улучшений, внесенных в последний спринт. Тест-кейсы из набора тестов выбираются в соответствии с новыми добавленными функциями или сделанными улучшениями;
  • Сквозная регрессия (End to End Regression): включает в себя все тест-кейсы, которые должны быть повторно выполнены для сквозного тестирования всего продукта, охватывая все основные функции;

Смоук тестирование (Smoke testing)

Тест «на дым» (smoke test): Выборка из общего числа запланированных тестовых сценариев, покрывающая основную функциональность компонента или системы. Проводится с целью удостовериться, что базовые функции программы в целом работают корректно, без углубления в детали. Ежедневная сборка и тест «на дым» являются передовыми практическими методами. См. входной тест, тест верификации сборки. (ISTQB)

Тест верификации сборки (build verification test): Набор автоматических тестов, валидирующих целостность каждой новой сборки и верифицирующих ее ключевую/базовую функциональность, стабильность и тестируемость. Данный вид тестирования используется там, где присутствует высокая частота сборок (например, проекты с использованием гибких методологий разработки) и выполняется для каждой новой сборки перед передачей ее в тестирования. См. также регрессионное тестирование, тест «на дым». (ISTQB)

Smoke testing, BVT — Build Verification Testing, BAT — Builds Acceptance Testing, Breath Testing, Shakeout/Shakedown Testing, Intake test, а также в русскоязычных вариантах дымовое, на дым, дымное, тестирование сборки и т.п. — это подмножество регрессионного тестирования, короткий цикл тестов, выполняемый для каждой новой сборки для подтверждения того, что ПО после внесенных изменений стартует и выполняет основные функции без критических и блокирующих дефектов. В случае отсутствия блокеров Smoke testing объявляется пройденным, и команда QA может начинать дальнейшее тестирование полного цикла, в противном случае, сборка объявляется дефектной, что делает дальнейшее тестирование пустой тратой времени и ресурсов. В таком случае сборка возвращается на доработку и исправление. Smoke testing обычно используется для Integration, Acceptance and System Testing.

Если мы говорим про сайт интернет-магазина, то сценарий может быть следующим:

  • Сайт открывается
  • Можно выбрать случайный товар и добавить его в корзину
  • Можно оформить и оплатить заказ

Если мы говорим про мобильное приложение, например, messenger, то:

  • Приложение устанавливается и запускается
  • Можно авторизоваться
  • Можно написать сообщение случайном контакту

Небольшая шпаргалка по степени важности:

  • smoke — самое важное. Тест-кейсы играют очень важную роль на этом уровне тестирования, поэтому предел метрик (metric limit) часто соответствует 100% или примерно 100%;
  • critical path — повседневное. Тесты критического пути запускаются для проверки функциональности, используемой типичными пользователями в их повседневной деятельности. Есть много пользователей, которые обычно используют определенную часть функциональности приложения, которую необходимо проверить, как только smoke этап будет успешно завершен. Здесь лимит метрик немного ниже, чем у smoke, и соответствует 70-80-90% в зависимости от цели проекта;
  • extended — все. Выполняется для изучения всей функциональности, указанной в требованиях. Проверяется даже функциональность с низким приоритетом. При этом в этом тестировании нужно понимать, какой функционал наиболее ценный, а какой менее важный. При условии, что у вас достаточно времени или других ресурсов, тесты на этом уровне можно использовать для требований с низким приоритетом;

Примечание. В русском языке термин ошибочно переводят как проверка дыма, корректнее уж говорить “на дым”. История термина: Первое свое применение этот термин получил у печников, которые, собрав печь, закрывали все заглушки, затапливали ее и смотрели, чтобы дым шел только из положенных мест. Повторное «рождение» термина произошло в радиоэлектронике. Первое включение нового радиоэлектронного устройства, пришедшего из производства, совершается на очень короткое время (меньше секунды). Затем инженер руками ощупывает все микросхемы на предмет перегрева. Сильно нагревшаяся за эту секунду микросхема может свидетельствовать о грубой ошибке в схеме. Если первое включение не выявило перегрева, то прибор включается снова на большее время. Проверка повторяется. И так далее несколько раз. Выражение «smoke-test» используется инженерами в шуточном смысле, так как появления дыма, а значит и порчи частей устройства, стараются избежать.

Санити тестирование (Sanity testing)

Тест работоспособности (sanity test): См. тест «на дым». (ISTQB)

Другие источники:

Sanity testing также является подмножеством регрессионного тестирования и выполняется до или вместо полной регрессии, но после smoke. Эти два подвида похожи, но в целом Sanity используется на более стабильных билдах для определения работоспособности определенной части приложения после внесения изменений.

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

Подтверждающее, повторное тестирование (confirmation testing, re-testing)

Подтверждающее тестирование (confirmation testing): Тестирование, при котором выполняются тестовые сценарии, которые были не пройдены при последнем запуске, с целью подтвердить успешность исправлений. (ISTQB)

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

Тестирование N+1 (N+1 testing)

Вариант регрессионного тестирования представлен как N+1. В этом методе тестирование выполняется в несколько циклов, в которых ошибки, обнаруженные в тестовом цикле «N», устраняются и повторно тестируются в тестовом цикле N + 1. Цикл повторяется, пока не будет найдено ни одной ошибки.

Разница между повторным и регрессионным тестированием:

  • Регрессионное тестирование проводится для подтверждения того, что недавнее изменение программы или кода не оказало неблагоприятного воздействия на существующие функции. Повторное тестирование проводится для подтверждения того, что тест-кейсы, которые не прошли, проходят после устранения дефектов;
  • Цель регрессионного тестирования подтвердить, что новые изменения кода не должны иметь побочных эффектов для существующих функций. Повторное тестирование проводится на основе исправлений дефектов.;
  • Проверка дефектов не является частью регрессионного тестирования. Проверка дефекта является частью повторного тестирования;
  • В зависимости от проекта и наличия ресурсов, регрессионное тестирование может проводиться параллельно с повторным тестированием. Приоритет повторного тестирования выше, чем регрессионное тестирование, поэтому оно проводится перед регрессионным тестированием;
  • Регрессионное тестирование называется общим (generic) тестированием. Повторное тестирование — это плановое (planned) тестирование;
  • Регрессионное тестирование проводится для пройденных Test case. Повторное тестирование проводится только для неудачных тестов;
  • Регрессионное тестирование проверяет наличие неожиданных побочных эффектов. Повторное тестирование гарантирует, что первоначальная ошибка была исправлена;
  • Test case для регрессионного тестирования могут быть получены из функциональной спецификации, user tutorials and manuals, а также defect reports в отношении исправленных проблем. Test case для повторного тестирования не могут быть получены до начала тестирования;

Может ли быть ситуация, когда регрессия проводится не после изменений в коде?

Да, в ситуациях с внешними факторами: изменения в БД, версии ОС и т.п.

Источники:

  • Maintenance, Regression testing and Re-testing
  • Регрессионное тестирование
  • Тестировщики нужны — пост “Регресс для самых маленьких”
  • QA Outsourcing: Smoke Testing, Critical Path Testing, Extended Testing
  • What Is Regression Testing? Definition, Tools, Method, And Example
  • В чём разница Smoke, Sanity, Regression, Re-test и как их различать?
  • Difference Between Retesting and Regression Testing
  • Top 150 Software Testing Interview Questions and Answers for Freshers and Experienced

Дополнительный материал:

  • ГОСТ Р 56920-2016/ISO/IEC/IEEE 29119-1:2013 “D.6 Подпроцесс регрессионного тестирования”, “D.7 Подпроцесс повторного тестирования”
  • Лекция 11: Регрессионное тестирование: цели и задачи, условия применения, классификация тестов и методов отбора
  • Black Box Software Testing PART 11 — REGRESSION TESTING by Cem Kaner + 2005 year version
  • Епифанов Н. А. — Методы реализации регрессионного тестирования по расширенным тестовым наборам
  • Anti-Regression Approaches: Impact Analysis and Regression Testing Compared and Combined — Part I: Introduction and Impact Analysis
  • Anti-Regression Approaches — Part II: Regression Prevention and Detection Using Static Techniques
  • Как сохранить нервы тестировщика или ускорить регресс с 8 до 2 часов
  • Регрессионное тестирование или Regression Testing
  • QA Outsourcing: Smoke Testing, Critical Path Testing, Extended Testing
  • Антирегрессионное тестирование — минимизируйте затраты
  • Способы сокращения регрессионного тестирования
  • Курс Тестирование ПО. Занятие 26. Регрессионное тестирование (Regression Testing)
  • История о бесконечном регрессионном тестировании

Регрессио́нное тести́рование (англ. regression testing, от лат. regressio — движение назад) — собирательное название для всех видов тестирования программного обеспечения, направленных на обнаружение ошибок в уже протестированных участках исходного кода. Такие ошибки — когда после внесения изменений в программу перестаёт работать то, что должно было продолжать работать, — называют регрессионными ошибками (англ. regression bugs).

Регрессионное тестирование (по некоторым[каким?] источникам) включает new bug-fix — проверка исправления вновь найденного дефекта, old bug-fix — проверка, что исправленный ранее и верифицированный дефект не воспроизводится в системе снова, а также side-effect — проверка того, что не нарушилась работоспособность работающей ранее функциональности, если её код мог быть затронут при исправлении некоторых дефектов в другой функциональности.
Обычно используемые методы регрессионного тестирования включают повторные прогоны предыдущих тестов, а также проверки, не попали ли регрессионные ошибки в очередную версию в результате слияния кода.

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

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

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

Содержание

  • 1 Использование
  • 2 Классификация
    • 2.1 Задача минимизации наборов
    • 2.2 Задача с определением приоритетов
    • 2.3 Задача выбора тестов
  • 3 Преимущества и недостатки 
  • 4 Цитаты
  • 5 См. также
  • 6 Примечания
  • 7 Ссылки
  • 8 Литература

Использование

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

Классификация

В своей статье S. Yoo and M. Harman[1] предоставляют следующую классификацию регрессионного тестирования:

  • Тест минимизации наборов (англ. test suite minimization) стремится уменьшить размер тестового набора за счёт устранения избыточных тестовых примеров из тестового набора.
  • Тестовая задача на определение приоритетов (англ. test case prioritization). Её цели заключаются в выполнении заказанных тестов на основе какого-либо критерия. Например, на основе истории, базы или требований, которые, как ожидается, приведут к более раннему выявлению неисправностей или помогут максимизировать некоторые другие полезные свойства.
  • Тестовая задача выбора (англ. test case selection)  связана с проблемой выбора подмножества тестов, которые будут использоваться для проверки изменённых частей программного обеспечения. Для этого требуется выбрать подмножество тестов из предыдущей версии, которые могут обнаруживать неисправности, основываясь на различных стратегиях. Большинство задокументированных методов регрессионного тестирования сосредоточены именно на этой технике. Обычная стратегия состоит в том, чтобы сосредоточить внимание на отождествления модифицированных частей SUT (англ. SUT — system under test ) и для выбора тестовых случаев, имеющих отношение к ним. Например, техника полного повторного тестирования (англ. retest-all) – один из наивных типов выбора регрессивного теста путём повторного выполнения всех видов тестов от предыдущей версии на новой. Она часто используется в промышленности из-за её простого и быстрого внедрения. Тем не менее, её способность обнаружения неисправностей ограничена. Таким образом, значительный объём работ связан с разработкой эффективных и масштабируемых селективных методов.
  • Гибридный тест. Является сочетанием задач на определение приоритетов и выбора.

Задача минимизации наборов

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

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

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

Задача с определением приоритетов

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

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

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

Задача выбора тестов

Метод выбора позволяет выбрать подмножество или все тестовые случаи, чтобы проверить изменённые части программного обеспечения. Следующие подходы тестируют механизмы и безопасности, и уязвимости.

1.     Подход, основанный на диаграмме состояния (UML-based), регрессионного тестирования для требований безопасности аутентификации, конфиденциальности, доступности, авторизации и целостность. Тесты, представленные в виде диаграммы последовательности, выбираются на основе теста изменения требований.

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

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

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

5.     Подход к требованиям тестирования безопасности веб-сервиса релизов. Пользователь службы может периодически повторно выполнить набор тестов, направленных против сервиса чтобы проверить, что пользователь по-прежнему обладает правильными правами.

6.     Coverage-based метод отбора для эволюционного тестирования политик безопасности, каждая из которых включает в себя последовательность правил для определения, какие кто имеет допуск к ресурсу и при каких условиях.

Преимущества и недостатки 

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

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

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

Цитаты

Фундаментальная проблема при сопровождении программ состоит в том, что исправление одной ошибки с большой вероятностью (20—50 %) влечёт появление новой. Поэтому весь процесс идёт по принципу «два шага вперёд, шаг назад».

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

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

См. также

  • Автоматизированное тестирование
  • Бета-тестирование
  • Интеграционное тестирование
  • Модульное тестирование
  • Непрерывная интеграция
  • Разработка через тестирование
  • Система отслеживания ошибок
  • Системное тестирование
  • Тестирование программного обеспечения
  • Экстремальное программирование
  • Юзабилити-тестирование

Примечания

  1. S. Yoo and M. Harman. Regression testing minimisation, selection and prioritisation: A survey.. — 2010. — С. 121-141.
  2. Ф. Брукс, Мифический человеко-месяц или как создаются программные системы. Пер. с англ. — СПб.: Символ-Плюс, 2001. — 304 с.: ил. (с. 113—114).

Ссылки

  • Регрессионное тестирование (regression testing)  (рус.)

Литература

[1] Michael Felderer, Matthias Büchler, Martin Johns. Security Testing: A Survey

  1. Michael Felderer, Matthias Büchler, Martin Johns. Security Testing: A Survey // researchgate. — 2016. — 12 март. — С. 22-26.

Понравилась статья? Поделить с друзьями:
  • Регламентная операция ошибка
  • Редмонд ошибка е2 при закрытой крышке
  • Регистрируясь на портале вам сообщается пароль ошибка
  • Редмонд мультиварка ошибка е1 после нагрева
  • Регистрация утилиты администрирования серверов 1с предприятия ошибка 0x80070005