42
Регрессионное тестирование Software Testing 101 Марат Ахин Санкт-Петербургский государственный политехнический университет 2014 Марат Ахин (СПбГПУ) RT 2014 283 / 349

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

Embed Size (px)

Citation preview

Page 1: Регрессионное тестирование

Регрессионное тестированиеSoftware Testing 101

Марат Ахин

Санкт-Петербургский государственный политехнический университет

2014

Марат Ахин (СПбГПУ) RT 2014 283 / 349

Page 2: Регрессионное тестирование

Quiz

Марат Ахин (СПбГПУ) RT 2014 284 / 349

Page 3: Регрессионное тестирование

Recap

Марат Ахин (СПбГПУ) RT 2014 285 / 349

Page 4: Регрессионное тестирование

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

Содержание

1 Регрессионное тестированиеТестирование ПО в процессе разработкиРегрессионное тестированиеВыборочное регрессионное тестированиеУправление регрессионными тестамиРегрессионное тестирование на практике

Марат Ахин (СПбГПУ) RT 2014 286 / 349

Page 5: Регрессионное тестирование

Регрессионное тестирование Тестирование ПО в процессе разработки

Тестирование ПО в процессе разработки

Как ПО изменяется в процессе разработки?

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

Любые (даже самые незначительные) изменения могут серьезноповлиять на качество ПО

Марат Ахин (СПбГПУ) RT 2014 287 / 349

Page 6: Регрессионное тестирование

Регрессионное тестирование Тестирование ПО в процессе разработки

Тестирование ПО в процессе разработки

Как ПО изменяется в процессе разработки?

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

Любые (даже самые незначительные) изменения могут серьезноповлиять на качество ПО

Марат Ахин (СПбГПУ) RT 2014 287 / 349

Page 7: Регрессионное тестирование

Регрессионное тестирование Тестирование ПО в процессе разработки

Тестирование ПО в процессе разработки

Как ПО изменяется в процессе разработки?

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

Любые (даже самые незначительные) изменения могут серьезноповлиять на качество ПО

Марат Ахин (СПбГПУ) RT 2014 287 / 349

Page 8: Регрессионное тестирование

Регрессионное тестирование Тестирование ПО в процессе разработки

Тестирование ПО в процессе разработки

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

Основной вид тестирования в процессе разработки ПО – эторегрессионное тестирование

Марат Ахин (СПбГПУ) RT 2014 288 / 349

Page 9: Регрессионное тестирование

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

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

Как выглядит одна итерация регрессионного тестирования?

1 Мы модифицируем программу P и получаем программу P′

2 Из всего множества тестов T мы выбираем набор тестов T′,

который необходимо выполнить на P′

3 Для новой функциональности мы разрабатываем новые тесты T′′

4 Полученный набор тестов T′+ T

′′запускается на P

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

Какие проблемы связаны с РТ?

Марат Ахин (СПбГПУ) RT 2014 289 / 349

Page 10: Регрессионное тестирование

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

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

Проблема №1

Как выбрать набор тестов T′после изменения в программе?

Консервативный подходВыбираем все имеющиеся тестыПолное регрессионное тестирование

Случайный подходВыбираем случайное подмножество всех тестовСлучайное выборочное регрессионное тестирование

Марат Ахин (СПбГПУ) RT 2014 290 / 349

Page 11: Регрессионное тестирование

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

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

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

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

«Качественно. Быстро. Дешево. Выберите любые два.»

Марат Ахин (СПбГПУ) RT 2014 291 / 349

Page 12: Регрессионное тестирование

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

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

Умный подходВыбирать тесты, которые «затрагивают» при выполненииизмененные части программыВыборочное регрессионное тестирование

Все подходы к ВРТ различаются по двум основным критериямСпособ идентификации измененных программных компонентовМетод получения информации о покрытии элементов программытестами

Марат Ахин (СПбГПУ) RT 2014 292 / 349

Page 13: Регрессионное тестирование

Регрессионное тестирование Выборочное регрессионное тестирование

Подход МакКарти

Анализ изменений на уровне целого модуляСвязь элементов программы с тестами задается вручнуюразработчиком

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

Марат Ахин (СПбГПУ) RT 2014 293 / 349

Page 14: Регрессионное тестирование

Регрессионное тестирование Выборочное регрессионное тестирование

Подход на основе концепции файервола

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

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

Марат Ахин (СПбГПУ) RT 2014 294 / 349

Page 15: Регрессионное тестирование

Регрессионное тестирование Выборочное регрессионное тестирование

Поход Ротермела и Харролд

Анализ изменений на уровне узлов CFG программыСвязь элементов программы с тестами задается на уровне CFG наоснове динамической информации о выполнении каждого теста

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

Марат Ахин (СПбГПУ) RT 2014 295 / 349

Page 16: Регрессионное тестирование

Регрессионное тестирование Выборочное регрессионное тестирование

Подход Балла

Анализ изменений на уровне узлов CFG программыСвязь элементов программы с тестами задается на уровне CFG наоснове динамической информации о выполнении каждого теста

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

Марат Ахин (СПбГПУ) RT 2014 296 / 349

Page 17: Регрессионное тестирование

Регрессионное тестирование Выборочное регрессионное тестирование

Подход на основе AST

Анализ изменений на уровне вершин AST программыСвязь элементов программы с тестами задается на уровне AST наоснове динамической информации о выполнении каждого теста

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

Марат Ахин (СПбГПУ) RT 2014 297 / 349

Page 18: Регрессионное тестирование

Регрессионное тестирование Управление регрессионными тестами

Управление регрессионными тестами

Проблема №2Как управлять набором регрессионных тестов?

Когда и как добавлять в набор новые тесты?Когда можно удалять старые тесты?

Марат Ахин (СПбГПУ) RT 2014 298 / 349

Page 19: Регрессионное тестирование

Регрессионное тестирование Управление регрессионными тестами

Добавление новых тестов

Когда надо добавлять новый регрессионный тест?

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

Марат Ахин (СПбГПУ) RT 2014 299 / 349

Page 20: Регрессионное тестирование

Регрессионное тестирование Управление регрессионными тестами

Добавление новых тестов

Когда надо добавлять новый регрессионный тест?

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

Марат Ахин (СПбГПУ) RT 2014 299 / 349

Page 21: Регрессионное тестирование

Регрессионное тестирование Управление регрессионными тестами

Добавление новых тестов

Когда надо добавлять новый регрессионный тест?

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

Марат Ахин (СПбГПУ) RT 2014 299 / 349

Page 22: Регрессионное тестирование

Регрессионное тестирование Управление регрессионными тестами

Добавление новых тестов

Когда надо добавлять новый регрессионный тест?

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

Марат Ахин (СПбГПУ) RT 2014 299 / 349

Page 23: Регрессионное тестирование

Регрессионное тестирование Управление регрессионными тестами

Добавление новых тестов

С течением времени число тестов увеличиваетсяЧем больше тестов, тем лучше тестовое покрытиеПроблемы начинаются, когда тестов становится слишком много

Что такое «слишком много»?

Марат Ахин (СПбГПУ) RT 2014 300 / 349

Page 24: Регрессионное тестирование

Регрессионное тестирование Управление регрессионными тестами

Удаление старых тестов

Когда можно удалять старый тест?

Никогда

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

Марат Ахин (СПбГПУ) RT 2014 301 / 349

Page 25: Регрессионное тестирование

Регрессионное тестирование Управление регрессионными тестами

Удаление старых тестов

Когда можно удалять старый тест?

Никогда

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

Марат Ахин (СПбГПУ) RT 2014 301 / 349

Page 26: Регрессионное тестирование

Регрессионное тестирование Управление регрессионными тестами

Удаление старых тестов

Когда можно удалять старый тест?

Никогда

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

Марат Ахин (СПбГПУ) RT 2014 301 / 349

Page 27: Регрессионное тестирование

Регрессионное тестирование Управление регрессионными тестами

Удаление старых тестов

Когда можно удалять старый тест?

Никогда

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

Марат Ахин (СПбГПУ) RT 2014 301 / 349

Page 28: Регрессионное тестирование

Регрессионное тестирование Управление регрессионными тестами

Удаление старых тестов

Когда можно удалять старый тест?

Никогда

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

Марат Ахин (СПбГПУ) RT 2014 301 / 349

Page 29: Регрессионное тестирование

Регрессионное тестирование Управление регрессионными тестами

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

Проблема №3Как запускать регрессионные тесты?

Взяли имеющийся набор тестов и запустили их

Такой подход может не всегда нас устраиватьЧто мы можем изменить?

Марат Ахин (СПбГПУ) RT 2014 302 / 349

Page 30: Регрессионное тестирование

Регрессионное тестирование Управление регрессионными тестами

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

Мы можем изменить порядок, в котором мы запускаемрегрессионные тестыЗачем?

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

Как мы можем приоритизировать регрессионные тесты?

Марат Ахин (СПбГПУ) RT 2014 303 / 349

Page 31: Регрессионное тестирование

Регрессионное тестирование Управление регрессионными тестами

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

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

Марат Ахин (СПбГПУ) RT 2014 304 / 349

Page 32: Регрессионное тестирование

Регрессионное тестирование Управление регрессионными тестами

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

На основе знаний о тестовом покрытии ПОСперва выполняются тесты, которые имеют наибольшее покрытиеПОСперва выполняются тесты, которые покрывают более важныекомпоненты ПО

Марат Ахин (СПбГПУ) RT 2014 305 / 349

Page 33: Регрессионное тестирование

Регрессионное тестирование Управление регрессионными тестами

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

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

Марат Ахин (СПбГПУ) RT 2014 306 / 349

Page 34: Регрессионное тестирование

Регрессионное тестирование Управление регрессионными тестами

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

Случайным образомПодход перекликается со случайным ВРТЕсли мы можем случайным образом поменять порядоквыполнения тестов, то почему бы это не сделать?

Марат Ахин (СПбГПУ) RT 2014 307 / 349

Page 35: Регрессионное тестирование

Регрессионное тестирование Управление регрессионными тестами

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

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

Марат Ахин (СПбГПУ) RT 2014 308 / 349

Page 36: Регрессионное тестирование

Регрессионное тестирование Управление регрессионными тестами

Анализ результатов регрессионного тестирования

Проблема №4Что делать с результатами регрессионного тестирования?

Если все тесты проходят – все хорошо

Если тест не проходит – то все зависит от того, по какой причинеон не проходит

Варианты?

Марат Ахин (СПбГПУ) RT 2014 309 / 349

Page 37: Регрессионное тестирование

Регрессионное тестирование Управление регрессионными тестами

Анализ результатов регрессионного тестирования

Марат Ахин (СПбГПУ) RT 2014 310 / 349

Page 38: Регрессионное тестирование

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

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

Как обстоит дело с РТ/ВРТ на практике?

Марат Ахин (СПбГПУ) RT 2014 311 / 349

Page 39: Регрессионное тестирование

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

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

РТ используется очень частоTDDAgile DevelopmentRUP

ВРТ практически не используется

Почему?

Марат Ахин (СПбГПУ) RT 2014 312 / 349

Page 40: Регрессионное тестирование

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

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

Крайняя сложность выбора регрессионных тестовОпасность пропустить регрессионную ошибку при использованиинебезопасного ВРТСтрах перед использованием «непонятной» технологииПростота экстенсивного пути решения проблем РТ

Отсутствие хорошей инструментальной поддержки

Какие еще сложности связаны с ВРТ?

Марат Ахин (СПбГПУ) RT 2014 313 / 349

Page 41: Регрессионное тестирование

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

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

Недетерминизм в тестахЕсли выполнение тестов может отличаться от запуска к запуску —все плохоПочему?

Эффект «лавины»Пропущенный тест в ВРТ может дальше привести к каскадномупропуску множества тестовЧто делать?

Марат Ахин (СПбГПУ) RT 2014 314 / 349

Page 42: Регрессионное тестирование

W.I.L.T. What I Learned Today?

W.I.L.T.

Марат Ахин (СПбГПУ) RT 2014 315 / 349