Вы находитесь на странице: 1из 39

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

Software Testing 101

Марат Ахин

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

2018

Марат Ахин (СПбПУ) TO 2018 206 / 347


Quiz

Марат Ахин (СПбПУ) TO 2018 207 / 347


Recap

Марат Ахин (СПбПУ) TO 2018 208 / 347


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

What’s up, Doc? (с)


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

Марат Ахин (СПбПУ) TO 2018 209 / 347


Содержание

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


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

Марат Ахин (СПбПУ) TO 2018 210 / 347


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

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

Марат Ахин (СПбПУ) TO 2018 211 / 347


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

Марат Ахин (СПбПУ) TO 2018 212 / 347


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

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

Его нет!

Марат Ахин (СПбПУ) TO 2018 213 / 347


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

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


эталонную модель мы используем

kd-tree
stoi
md5sum
PDF reader

Марат Ахин (СПбПУ) TO 2018 214 / 347


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

Точность
vs
Полнота

Марат Ахин (СПбПУ) TO 2018 215 / 347


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

Ложные обнаружения при тестировании – лишние затраты на их


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

Марат Ахин (СПбПУ) TO 2018 216 / 347


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

Пропущенные ошибки при тестировании – дополнительные


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

Марат Ахин (СПбПУ) TO 2018 217 / 347


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

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


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

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

Марат Ахин (СПбПУ) TO 2018 218 / 347


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

Падение
Segmentation fault
Core dump

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

Марат Ахин (СПбПУ) TO 2018 219 / 347


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

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


NullPointerException
OutOfMemoryException
ClassNotFoundException

Работают при поддержке стандартной среды выполнения


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

Марат Ахин (СПбПУ) TO 2018 220 / 347


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

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


Valgrind

Предоставляют специальную среду выполнения


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

Марат Ахин (СПбПУ) TO 2018 221 / 347


Valgrind

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


программ
Включает встроенные реализации для
Memcheck
Cachegrind
Callgrind
Helgrind
DRD
Massif
DHAT
...

Марат Ахин (СПбПУ) TO 2018 222 / 347


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

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

Марат Ахин (СПбПУ) TO 2018 223 / 347


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

Assertions
Тесты

Требуют определенных усилий со стороны разработчиков


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

Марат Ахин (СПбПУ) TO 2018 224 / 347


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

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

Марат Ахин (СПбПУ) TO 2018 225 / 347


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

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

Предыдущая версия программы


Формально верифицированная реализация
Автоматически сгенерированная версия

Марат Ахин (СПбПУ) TO 2018 226 / 347


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

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

Прямое/обратное преобразование Фурье


Архиватор/деархиватор
Кодер/декодер видео

Марат Ахин (СПбПУ) TO 2018 227 / 347


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

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

Марат Ахин (СПбПУ) TO 2018 228 / 347


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

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

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

Марат Ахин (СПбПУ) TO 2018 229 / 347


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

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

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

Марат Ахин (СПбПУ) TO 2018 229 / 347


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

Все уже есть


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

Марат Ахин (СПбПУ) TO 2018 230 / 347


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

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


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

Сложно понять, где произошла ошибка


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

Марат Ахин (СПбПУ) TO 2018 231 / 347


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

Assertions
Тесты

Марат Ахин (СПбПУ) TO 2018 232 / 347


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

Все уже есть


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

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

Марат Ахин (СПбПУ) TO 2018 233 / 347


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

Марат Ахин (СПбПУ) TO 2018 234 / 347


Генерация assertions

Assertions проверяют корректность внутреннего состояния


Как автоматически сгенерировать assertions?

Machine learning

Марат Ахин (СПбПУ) TO 2018 235 / 347


Генерация assertions

Собираем информацию о выполнении программы


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

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


Плохо работает для всех остальных

Марат Ахин (СПбПУ) TO 2018 236 / 347


Генерация assertions

Собираем информацию о выполнении программы


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

Способ усиления слабых оракулов до средних


Не работает, если ничего не падает

Марат Ахин (СПбПУ) TO 2018 237 / 347


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

Тесты – один из видов эталонной модели поведения


Как автоматически сгенерировать эталонную модель?

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

Марат Ахин (СПбПУ) TO 2018 238 / 347


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

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

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

Собираем информацию о выполнении оригинальной программы и


мутанта
Анализируем разницу
...
PROFIT!

Марат Ахин (СПбПУ) TO 2018 239 / 347


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

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

Что такое разница в работе GUI?


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

Марат Ахин (СПбПУ) TO 2018 240 / 347


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

Нужна модель самого GUI


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

Марат Ахин (СПбПУ) TO 2018 241 / 347


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

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

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

Марат Ахин (СПбПУ) TO 2018 242 / 347


W.I.L.T.

Марат Ахин (СПбПУ) TO 2018 243 / 347