Тестовый оракул: что, где, когда

42
Тестовый оракул: что, где, когда Software Testing 101 Марат Ахин Санкт-Петербургский государственный политехнический университет 2014 Марат Ахин (СПбГПУ) TO 2014 205 / 328

Upload: marat-akhin

Post on 04-Jul-2015

410 views

Category:

Education


2 download

TRANSCRIPT

Page 1: Тестовый оракул: что, где, когда

Тестовый оракул: что, где, когдаSoftware Testing 101

Марат Ахин

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

2014

Марат Ахин (СПбГПУ) TO 2014 205 / 328

Page 2: Тестовый оракул: что, где, когда

Quiz

Марат Ахин (СПбГПУ) TO 2014 206 / 328

Page 3: Тестовый оракул: что, где, когда

Recap

Марат Ахин (СПбГПУ) TO 2014 207 / 328

Page 4: Тестовый оракул: что, где, когда

Проблемы тестирования Проблемы тестирования

Проблемы тестирования

What’s up, Doc? (с)

Проблема тестовых входных данныхПроблема наблюдаемостиПроблема «останова»Проблема тестового оракула

Марат Ахин (СПбГПУ) TO 2014 208 / 328

Page 5: Тестовый оракул: что, где, когда

Проблема тестового оракула

Содержание

1 Проблема тестового оракулаТестовый оракулВиды тестовых оракуловГенерация оракулов

Марат Ахин (СПбГПУ) TO 2014 209 / 328

Page 6: Тестовый оракул: что, где, когда

Проблема тестового оракула Тестовый оракул

Тестовый оракул

Magic 8-ball тестирования

Марат Ахин (СПбГПУ) TO 2014 210 / 328

Page 7: Тестовый оракул: что, где, когда

Проблема тестового оракула Тестовый оракул

Тестовый оракул

Марат Ахин (СПбГПУ) TO 2014 211 / 328

Page 8: Тестовый оракул: что, где, когда

Проблема тестового оракула Тестовый оракул

Тестовый оракул

В чем заключается проблема тестового оракула?

Его нет!

Марат Ахин (СПбГПУ) TO 2014 212 / 328

Page 9: Тестовый оракул: что, где, когда

Проблема тестового оракула Тестовый оракул

Тестовый оракул

Вид тестового оракула очень сильно зависит от того, какуюэталонную модель мы используем

kd-treestoimd5sumPDF reader

Марат Ахин (СПбГПУ) TO 2014 213 / 328

Page 10: Тестовый оракул: что, где, когда

Проблема тестового оракула Виды тестовых оракулов

Виды тестовых оракулов

Точность

vs

Полнота

Марат Ахин (СПбГПУ) TO 2014 214 / 328

Page 11: Тестовый оракул: что, где, когда

Проблема тестового оракула Виды тестовых оракулов

Точность

Способность оракула избегать ложных обнаружений

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

Марат Ахин (СПбГПУ) TO 2014 215 / 328

Page 12: Тестовый оракул: что, где, когда

Проблема тестового оракула Виды тестовых оракулов

Полнота

Способность оракула находить все ошибки

Пропущенные ошибки при тестировании – дополнительныезатраты на их исправление позднееЕсли оракул пропускает много ошибок, его необходимо усиливатьдругими способами

Марат Ахин (СПбГПУ) TO 2014 216 / 328

Page 13: Тестовый оракул: что, где, когда

Проблема тестового оракула Виды тестовых оракулов

Виды тестовых оракулов

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

СлабыеСредниеСильные

Марат Ахин (СПбГПУ) TO 2014 217 / 328

Page 14: Тестовый оракул: что, где, когда

Проблема тестового оракула Виды тестовых оракулов

Слабые оракулы

ПадениеSegmentation faultCore dump

Работают всегдаПрактически ничего не говорят о причине ошибки

Марат Ахин (СПбГПУ) TO 2014 218 / 328

Page 15: Тестовый оракул: что, где, когда

Проблема тестового оракула Виды тестовых оракулов

Слабые оракулы

Сбой при работе в обычном окруженииNullPointerExceptionOutOfMemoryExceptionClassNotFoundException

Работают при поддержке стандартной среды выполненияСодержат определенную информацию о месте ошибки

Марат Ахин (СПбГПУ) TO 2014 219 / 328

Page 16: Тестовый оракул: что, где, когда

Проблема тестового оракула Виды тестовых оракулов

Слабые оракулы

Сбой при работе в специальном тестовом окруженииValgrind

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

Марат Ахин (СПбГПУ) TO 2014 220 / 328

Page 17: Тестовый оракул: что, где, когда

Проблема тестового оракула Виды тестовых оракулов

Valgrind

Фреймворк для построения средств динамического анализапрограммВключает встроенные реализации для

MemcheckCachegrindCallgrindHelgrindDRDMassifDHAT...

Марат Ахин (СПбГПУ) TO 2014 221 / 328

Page 18: Тестовый оракул: что, где, когда

Проблема тестового оракула Виды тестовых оракулов

Слабые оракулы

Хорошая точностьПлохая полнота

Марат Ахин (СПбГПУ) TO 2014 222 / 328

Page 19: Тестовый оракул: что, где, когда

Проблема тестового оракула Виды тестовых оракулов

Средние оракулы

AssertionsТесты

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

Марат Ахин (СПбГПУ) TO 2014 223 / 328

Page 20: Тестовый оракул: что, где, когда

Проблема тестового оракула Виды тестовых оракулов

Средние оракулы

Хорошая точностьСредняя полнота

Марат Ахин (СПбГПУ) TO 2014 224 / 328

Page 21: Тестовый оракул: что, где, когда

Проблема тестового оракула Виды тестовых оракулов

Сильные оракулы

Эталонная реализация

Предыдущая версия программыФормально верифицированная реализацияАвтоматически сгенерированная версия

Марат Ахин (СПбГПУ) TO 2014 225 / 328

Page 22: Тестовый оракул: что, где, когда

Проблема тестового оракула Виды тестовых оракулов

Сильные оракулы

«Обратная функция»

Прямое/обратное преобразование ФурьеАрхиватор/деархиваторКодер/декодер видео

Марат Ахин (СПбГПУ) TO 2014 226 / 328

Page 23: Тестовый оракул: что, где, когда

Проблема тестового оракула Виды тестовых оракулов

Сильные оракулы

Средняя точностьХорошая полнота

Марат Ахин (СПбГПУ) TO 2014 227 / 328

Page 24: Тестовый оракул: что, где, когда

Проблема тестового оракула Генерация оракулов

Генерация оракулов

Можно ли генерировать оракула автоматически?

Да!Слабые оракулыСредние оракулы

Марат Ахин (СПбГПУ) TO 2014 228 / 328

Page 25: Тестовый оракул: что, где, когда

Проблема тестового оракула Генерация оракулов

Генерация оракулов

Можно ли генерировать оракула автоматически?

Да!Слабые оракулыСредние оракулы

Марат Ахин (СПбГПУ) TO 2014 228 / 328

Page 26: Тестовый оракул: что, где, когда

Проблема тестового оракула Генерация оракулов

Генерация слабых оракулов

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

Марат Ахин (СПбГПУ) TO 2014 229 / 328

Page 27: Тестовый оракул: что, где, когда

Проблема тестового оракула Генерация оракулов

Генерация слабых оракулов

В явном виде используются весьма редкоСлучайное тестирование...

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

Марат Ахин (СПбГПУ) TO 2014 230 / 328

Page 28: Тестовый оракул: что, где, когда

Проблема тестового оракула Генерация оракулов

Генерация средних оракулов

AssertionsТесты

Марат Ахин (СПбГПУ) TO 2014 231 / 328

Page 29: Тестовый оракул: что, где, когда

Проблема тестового оракула Генерация оракулов

Генерация средних оракулов

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

Зачем их генерировать автоматически?

Марат Ахин (СПбГПУ) TO 2014 232 / 328

Page 30: Тестовый оракул: что, где, когда

Проблема тестового оракула Генерация оракулов

Генерация средних оракулов

Марат Ахин (СПбГПУ) TO 2014 233 / 328

Page 31: Тестовый оракул: что, где, когда

Проблема тестового оракула Генерация оракулов

Генерация assertions

Assertions проверяют корректность внутреннего состоянияКак автоматически сгенерировать assertions?

Machine learning

Марат Ахин (СПбГПУ) TO 2014 234 / 328

Page 32: Тестовый оракул: что, где, когда

Проблема тестового оракула Генерация оракулов

Генерация assertions

Собираем информацию о выполнении программыВыводим определенные закономерности в работе программыГенерируем assertion, проверяющий ненарушение закономерностей...PROFIT!

Хорошо работает для FSM-подобных программПлохо работает для всех остальных

Марат Ахин (СПбГПУ) TO 2014 235 / 328

Page 33: Тестовый оракул: что, где, когда

Проблема тестового оракула Генерация оракулов

Генерация assertions

Собираем информацию о выполнении программыВ случае падения определяем его причинуГенерируем защитный assertion...PROFIT!

Способ усиления слабых оракулов до среднихНе работает, если ничего не падает

Марат Ахин (СПбГПУ) TO 2014 236 / 328

Page 34: Тестовый оракул: что, где, когда

Проблема тестового оракула Генерация оракулов

Генерация тестов

Тесты – один из видов эталонной модели поведенияКак автоматически сгенерировать эталонную модель?

Мутационное тестирование

Марат Ахин (СПбГПУ) TO 2014 237 / 328

Page 35: Тестовый оракул: что, где, когда

Проблема тестового оракула Генерация оракулов

Генерация тестов

Вспомним, что:Идеальный тест работает только на тестируемой программе

Если тест проходит на мутанте, это плохо

Собираем информацию о выполнении оригинальной программы имутантаАнализируем разницу...PROFIT!

Марат Ахин (СПбГПУ) TO 2014 238 / 328

Page 36: Тестовый оракул: что, где, когда

Проблема тестового оракула Генерация оракулов

Генерация тестов для GUI

А если у нас есть GUI???

Что такое разница в работе GUI?Как можно автоматически ее обнаружить?

Марат Ахин (СПбГПУ) TO 2014 239 / 328

Page 37: Тестовый оракул: что, где, когда

Проблема тестового оракула Генерация оракулов

Генерация тестов для GUI

Нужна модель самого GUIНужна модель изменений GUIИзвлечение моделей должно выполняться автоматически

Марат Ахин (СПбГПУ) TO 2014 240 / 328

Page 38: Тестовый оракул: что, где, когда

Проблема тестового оракула Генерация оракулов

Генерация тестов для GUI

GUITAR

GUI – иерархия отдельных компонентовСобытия – переводят иерархию из одного состояния в другое

Как сгенерировать тестового оракула?

Марат Ахин (СПбГПУ) TO 2014 241 / 328

Page 39: Тестовый оракул: что, где, когда

Проблема тестового оракула Генерация оракулов

Генерация тестов для GUI

Capture/replayФормальная спецификацияТрассировка выполнения

Каждому событию соответствует свой переход

Марат Ахин (СПбГПУ) TO 2014 242 / 328

Page 40: Тестовый оракул: что, где, когда

Проблема тестового оракула Генерация оракулов

Генерация тестов для GUI

Оракул – набор (частичных) состояний, соответствующихпереходам по событиям GUI

Как проверять корректность?Активный компонентАктивное окноВидимые окнаВсе окна

В конце тестаПосле каждого N событияПосле каждого события

Марат Ахин (СПбГПУ) TO 2014 243 / 328

Page 41: Тестовый оракул: что, где, когда

Проблема тестового оракула Генерация оракулов

Генерация тестов

Можно ли придумать что-то еще?

Случайное тестирование

Марат Ахин (СПбГПУ) TO 2014 244 / 328

Page 42: Тестовый оракул: что, где, когда

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

W.I.L.T.

Марат Ахин (СПбГПУ) TO 2014 245 / 328