Тестовый оракул: что, где, когда
Software Testing 101
Марат Ахин
Санкт-Петербургский государственный политехнический университет
2014
Марат Ахин (СПбГПУ) TO 2014 205 / 328
Quiz
Марат Ахин (СПбГПУ) TO 2014 206 / 328
Recap
Марат Ахин (СПбГПУ) TO 2014 207 / 328
Проблемы тестирования Проблемы тестирования
Проблемы тестирования
What’s up, Doc? (с)
Проблема тестовых входных данных
Проблема наблюдаемости
Проблема «останова»
Проблема тестового оракула
Марат Ахин (СПбГПУ) TO 2014 208 / 328
Проблема тестового оракула
Содержание
1 Проблема тестового оракула
Тестовый оракул
Виды тестовых оракулов
Генерация оракулов
Марат Ахин (СПбГПУ) TO 2014 209 / 328
Проблема тестового оракула Тестовый оракул
Тестовый оракул
Magic 8-ball тестирования
Марат Ахин (СПбГПУ) TO 2014 210 / 328
Проблема тестового оракула Тестовый оракул
Тестовый оракул
Марат Ахин (СПбГПУ) TO 2014 211 / 328
Проблема тестового оракула Тестовый оракул
Тестовый оракул
В чем заключается проблема тестового оракула?
Его нет!
Марат Ахин (СПбГПУ) TO 2014 212 / 328
Проблема тестового оракула Тестовый оракул
Тестовый оракул
Вид тестового оракула очень сильно зависит от того, какую
эталонную модель мы используем
kd-tree
stoi
md5sum
PDF reader
Марат Ахин (СПбГПУ) TO 2014 213 / 328
Проблема тестового оракула Виды тестовых оракулов
Виды тестовых оракулов
Точность
vs
Полнота
Марат Ахин (СПбГПУ) TO 2014 214 / 328
Проблема тестового оракула Виды тестовых оракулов
Точность
Способность оракула избегать ложных обнаружений
Ложные обнаружения при тестировании – лишние затраты на их
обнаружение и игнорирование
Если их будет слишком много, оракул никто не будет
использовать из-за зашумления результатов
Марат Ахин (СПбГПУ) TO 2014 215 / 328
Проблема тестового оракула Виды тестовых оракулов
Полнота
Способность оракула находить все ошибки
Пропущенные ошибки при тестировании – дополнительные
затраты на их исправление позднее
Если оракул пропускает много ошибок, его необходимо усиливать
другими способами
Марат Ахин (СПбГПУ) TO 2014 216 / 328
Проблема тестового оракула Виды тестовых оракулов
Виды тестовых оракулов
Варьируя используемые подходы, можно получить те или иные виды
тестовых оракулов
Слабые
Средние
Сильные
Марат Ахин (СПбГПУ) TO 2014 217 / 328
Проблема тестового оракула Виды тестовых оракулов
Слабые оракулы
Падение
Segmentation fault
Core dump
Работают всегда
Практически ничего не говорят о причине ошибки
Марат Ахин (СПбГПУ) TO 2014 218 / 328
Проблема тестового оракула Виды тестовых оракулов
Слабые оракулы
Сбой при работе в обычном окружении
NullPointerException
OutOfMemoryException
ClassNotFoundException
Работают при поддержке стандартной среды выполнения
Содержат определенную информацию о месте ошибки
Марат Ахин (СПбГПУ) TO 2014 219 / 328
Проблема тестового оракула Виды тестовых оракулов
Слабые оракулы
Сбой при работе в специальном тестовом окружении
Valgrind
Предоставляют специальную среду выполнения
Позволяют весьма точно определить причину ошибок
Марат Ахин (СПбГПУ) TO 2014 220 / 328
Проблема тестового оракула Виды тестовых оракулов
Valgrind
Фреймворк для построения средств динамического анализа
программ
Включает встроенные реализации для
Memcheck
Cachegrind
Callgrind
Helgrind
DRD
Massif
DHAT
...
Марат Ахин (СПбГПУ) TO 2014 221 / 328
Проблема тестового оракула Виды тестовых оракулов
Слабые оракулы
Хорошая точность
Плохая полнота
Марат Ахин (СПбГПУ) TO 2014 222 / 328
Проблема тестового оракула Виды тестовых оракулов
Средние оракулы
Assertions
Тесты
Требуют определенных усилий со стороны разработчиков
В зависимости от степени усилий, будут более или менее точно
указывать на место возникновения ошибки
Марат Ахин (СПбГПУ) TO 2014 223 / 328
Проблема тестового оракула Виды тестовых оракулов
Средние оракулы
Хорошая точность
Средняя полнота
Марат Ахин (СПбГПУ) TO 2014 224 / 328
Проблема тестового оракула Виды тестовых оракулов
Сильные оракулы
Эталонная реализация
Предыдущая версия программы
Формально верифицированная реализация
Автоматически сгенерированная версия
Марат Ахин (СПбГПУ) TO 2014 225 / 328
Проблема тестового оракула Виды тестовых оракулов
Сильные оракулы
«Обратная функция»
Прямое/обратное преобразование Фурье
Архиватор/деархиватор
Кодер/декодер видео
Марат Ахин (СПбГПУ) TO 2014 226 / 328
Проблема тестового оракула Виды тестовых оракулов
Сильные оракулы
Средняя точность
Хорошая полнота
Марат Ахин (СПбГПУ) TO 2014 227 / 328
Проблема тестового оракула Генерация оракулов
Генерация оракулов
Можно ли генерировать оракула автоматически?
Да!
Слабые оракулы
Средние оракулы
Марат Ахин (СПбГПУ) TO 2014 228 / 328
Проблема тестового оракула Генерация оракулов
Генерация оракулов
Можно ли генерировать оракула автоматически?
Да!
Слабые оракулы
Средние оракулы
Марат Ахин (СПбГПУ) TO 2014 228 / 328
Проблема тестового оракула Генерация оракулов
Генерация слабых оракулов
Все уже есть
Слабый оракул предоставляется средой выполнения
Если что-то упало, мы всегда об этом узнаем
Марат Ахин (СПбГПУ) TO 2014 229 / 328
Проблема тестового оракула Генерация оракулов
Генерация слабых оракулов
В явном виде используются весьма редко
Случайное тестирование
...
Сложно понять, где произошла ошибка
Не всегда очевидно, в чем именно заключается ошибка
Марат Ахин (СПбГПУ) TO 2014 230 / 328
Проблема тестового оракула Генерация оракулов
Генерация средних оракулов
Assertions
Тесты
Марат Ахин (СПбГПУ) TO 2014 231 / 328
Проблема тестового оракула Генерация оракулов
Генерация средних оракулов
Все уже есть
Средние оракулы разрабатываются параллельно с разработкой ПО
При возникновении проблемы мы сразу узнаем о ней
Зачем их генерировать автоматически?
Марат Ахин (СПбГПУ) TO 2014 232 / 328
Проблема тестового оракула Генерация оракулов
Генерация средних оракулов
Марат Ахин (СПбГПУ) TO 2014 233 / 328
Проблема тестового оракула Генерация оракулов
Генерация assertions
Assertions проверяют корректность внутреннего состояния
Как автоматически сгенерировать assertions?
Machine learning
Марат Ахин (СПбГПУ) TO 2014 234 / 328
Проблема тестового оракула Генерация оракулов
Генерация assertions
Собираем информацию о выполнении программы
Выводим определенные закономерности в работе программы
Генерируем assertion, проверяющий ненарушение закономерностей
...
PROFIT!
Хорошо работает для FSM-подобных программ
Плохо работает для всех остальных
Марат Ахин (СПбГПУ) TO 2014 235 / 328
Проблема тестового оракула Генерация оракулов
Генерация assertions
Собираем информацию о выполнении программы
В случае падения определяем его причину
Генерируем защитный assertion
...
PROFIT!
Способ усиления слабых оракулов до средних
Не работает, если ничего не падает
Марат Ахин (СПбГПУ) TO 2014 236 / 328
Проблема тестового оракула Генерация оракулов
Генерация тестов
Тесты – один из видов эталонной модели поведения
Как автоматически сгенерировать эталонную модель?
Мутационное тестирование
Марат Ахин (СПбГПУ) TO 2014 237 / 328
Проблема тестового оракула Генерация оракулов
Генерация тестов
Вспомним, что:
Идеальный тест работает только на тестируемой программе
Если тест проходит на мутанте, это плохо
Собираем информацию о выполнении оригинальной программы и
мутанта
Анализируем разницу
...
PROFIT!
Марат Ахин (СПбГПУ) TO 2014 238 / 328
Проблема тестового оракула Генерация оракулов
Генерация тестов для GUI
А если у нас есть GUI???
Что такое разница в работе GUI?
Как можно автоматически ее обнаружить?
Марат Ахин (СПбГПУ) TO 2014 239 / 328
Проблема тестового оракула Генерация оракулов
Генерация тестов для GUI
Нужна модель самого GUI
Нужна модель изменений GUI
Извлечение моделей должно выполняться автоматически
Марат Ахин (СПбГПУ) TO 2014 240 / 328
Проблема тестового оракула Генерация оракулов
Генерация тестов для GUI
GUITAR
GUI – иерархия отдельных компонентов
События – переводят иерархию из одного состояния в другое
Как сгенерировать тестового оракула?
Марат Ахин (СПбГПУ) TO 2014 241 / 328
Проблема тестового оракула Генерация оракулов
Генерация тестов для GUI
Capture/replay
Формальная спецификация
Трассировка выполнения
Каждому событию соответствует свой переход
Марат Ахин (СПбГПУ) TO 2014 242 / 328
Проблема тестового оракула Генерация оракулов
Генерация тестов для GUI
Оракул – набор (частичных) состояний, соответствующих
переходам по событиям GUI
Как проверять корректность?
Активный компонент
Активное окно
Видимые окна
Все окна
В конце теста
После каждого N события
После каждого события
Марат Ахин (СПбГПУ) TO 2014 243 / 328
Проблема тестового оракула Генерация оракулов
Генерация тестов
Можно ли придумать что-то еще?
Случайное тестирование
Марат Ахин (СПбГПУ) TO 2014 244 / 328
W.I.L.T. What I Learned Today?
W.I.L.T.
Марат Ахин (СПбГПУ) TO 2014 245 / 328

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

  • 1.
    Тестовый оракул: что,где, когда Software Testing 101 Марат Ахин Санкт-Петербургский государственный политехнический университет 2014 Марат Ахин (СПбГПУ) TO 2014 205 / 328
  • 2.
  • 3.
  • 4.
    Проблемы тестирования Проблемытестирования Проблемы тестирования What’s up, Doc? (с) Проблема тестовых входных данных Проблема наблюдаемости Проблема «останова» Проблема тестового оракула Марат Ахин (СПбГПУ) TO 2014 208 / 328
  • 5.
    Проблема тестового оракула Содержание 1Проблема тестового оракула Тестовый оракул Виды тестовых оракулов Генерация оракулов Марат Ахин (СПбГПУ) TO 2014 209 / 328
  • 6.
    Проблема тестового оракулаТестовый оракул Тестовый оракул Magic 8-ball тестирования Марат Ахин (СПбГПУ) TO 2014 210 / 328
  • 7.
    Проблема тестового оракулаТестовый оракул Тестовый оракул Марат Ахин (СПбГПУ) TO 2014 211 / 328
  • 8.
    Проблема тестового оракулаТестовый оракул Тестовый оракул В чем заключается проблема тестового оракула? Его нет! Марат Ахин (СПбГПУ) TO 2014 212 / 328
  • 9.
    Проблема тестового оракулаТестовый оракул Тестовый оракул Вид тестового оракула очень сильно зависит от того, какую эталонную модель мы используем kd-tree stoi md5sum PDF reader Марат Ахин (СПбГПУ) TO 2014 213 / 328
  • 10.
    Проблема тестового оракулаВиды тестовых оракулов Виды тестовых оракулов Точность vs Полнота Марат Ахин (СПбГПУ) TO 2014 214 / 328
  • 11.
    Проблема тестового оракулаВиды тестовых оракулов Точность Способность оракула избегать ложных обнаружений Ложные обнаружения при тестировании – лишние затраты на их обнаружение и игнорирование Если их будет слишком много, оракул никто не будет использовать из-за зашумления результатов Марат Ахин (СПбГПУ) TO 2014 215 / 328
  • 12.
    Проблема тестового оракулаВиды тестовых оракулов Полнота Способность оракула находить все ошибки Пропущенные ошибки при тестировании – дополнительные затраты на их исправление позднее Если оракул пропускает много ошибок, его необходимо усиливать другими способами Марат Ахин (СПбГПУ) TO 2014 216 / 328
  • 13.
    Проблема тестового оракулаВиды тестовых оракулов Виды тестовых оракулов Варьируя используемые подходы, можно получить те или иные виды тестовых оракулов Слабые Средние Сильные Марат Ахин (СПбГПУ) TO 2014 217 / 328
  • 14.
    Проблема тестового оракулаВиды тестовых оракулов Слабые оракулы Падение Segmentation fault Core dump Работают всегда Практически ничего не говорят о причине ошибки Марат Ахин (СПбГПУ) TO 2014 218 / 328
  • 15.
    Проблема тестового оракулаВиды тестовых оракулов Слабые оракулы Сбой при работе в обычном окружении NullPointerException OutOfMemoryException ClassNotFoundException Работают при поддержке стандартной среды выполнения Содержат определенную информацию о месте ошибки Марат Ахин (СПбГПУ) TO 2014 219 / 328
  • 16.
    Проблема тестового оракулаВиды тестовых оракулов Слабые оракулы Сбой при работе в специальном тестовом окружении Valgrind Предоставляют специальную среду выполнения Позволяют весьма точно определить причину ошибок Марат Ахин (СПбГПУ) TO 2014 220 / 328
  • 17.
    Проблема тестового оракулаВиды тестовых оракулов Valgrind Фреймворк для построения средств динамического анализа программ Включает встроенные реализации для Memcheck Cachegrind Callgrind Helgrind DRD Massif DHAT ... Марат Ахин (СПбГПУ) TO 2014 221 / 328
  • 18.
    Проблема тестового оракулаВиды тестовых оракулов Слабые оракулы Хорошая точность Плохая полнота Марат Ахин (СПбГПУ) TO 2014 222 / 328
  • 19.
    Проблема тестового оракулаВиды тестовых оракулов Средние оракулы Assertions Тесты Требуют определенных усилий со стороны разработчиков В зависимости от степени усилий, будут более или менее точно указывать на место возникновения ошибки Марат Ахин (СПбГПУ) TO 2014 223 / 328
  • 20.
    Проблема тестового оракулаВиды тестовых оракулов Средние оракулы Хорошая точность Средняя полнота Марат Ахин (СПбГПУ) TO 2014 224 / 328
  • 21.
    Проблема тестового оракулаВиды тестовых оракулов Сильные оракулы Эталонная реализация Предыдущая версия программы Формально верифицированная реализация Автоматически сгенерированная версия Марат Ахин (СПбГПУ) TO 2014 225 / 328
  • 22.
    Проблема тестового оракулаВиды тестовых оракулов Сильные оракулы «Обратная функция» Прямое/обратное преобразование Фурье Архиватор/деархиватор Кодер/декодер видео Марат Ахин (СПбГПУ) TO 2014 226 / 328
  • 23.
    Проблема тестового оракулаВиды тестовых оракулов Сильные оракулы Средняя точность Хорошая полнота Марат Ахин (СПбГПУ) TO 2014 227 / 328
  • 24.
    Проблема тестового оракулаГенерация оракулов Генерация оракулов Можно ли генерировать оракула автоматически? Да! Слабые оракулы Средние оракулы Марат Ахин (СПбГПУ) TO 2014 228 / 328
  • 25.
    Проблема тестового оракулаГенерация оракулов Генерация оракулов Можно ли генерировать оракула автоматически? Да! Слабые оракулы Средние оракулы Марат Ахин (СПбГПУ) TO 2014 228 / 328
  • 26.
    Проблема тестового оракулаГенерация оракулов Генерация слабых оракулов Все уже есть Слабый оракул предоставляется средой выполнения Если что-то упало, мы всегда об этом узнаем Марат Ахин (СПбГПУ) TO 2014 229 / 328
  • 27.
    Проблема тестового оракулаГенерация оракулов Генерация слабых оракулов В явном виде используются весьма редко Случайное тестирование ... Сложно понять, где произошла ошибка Не всегда очевидно, в чем именно заключается ошибка Марат Ахин (СПбГПУ) TO 2014 230 / 328
  • 28.
    Проблема тестового оракулаГенерация оракулов Генерация средних оракулов Assertions Тесты Марат Ахин (СПбГПУ) TO 2014 231 / 328
  • 29.
    Проблема тестового оракулаГенерация оракулов Генерация средних оракулов Все уже есть Средние оракулы разрабатываются параллельно с разработкой ПО При возникновении проблемы мы сразу узнаем о ней Зачем их генерировать автоматически? Марат Ахин (СПбГПУ) TO 2014 232 / 328
  • 30.
    Проблема тестового оракулаГенерация оракулов Генерация средних оракулов Марат Ахин (СПбГПУ) TO 2014 233 / 328
  • 31.
    Проблема тестового оракулаГенерация оракулов Генерация assertions Assertions проверяют корректность внутреннего состояния Как автоматически сгенерировать assertions? Machine learning Марат Ахин (СПбГПУ) TO 2014 234 / 328
  • 32.
    Проблема тестового оракулаГенерация оракулов Генерация assertions Собираем информацию о выполнении программы Выводим определенные закономерности в работе программы Генерируем assertion, проверяющий ненарушение закономерностей ... PROFIT! Хорошо работает для FSM-подобных программ Плохо работает для всех остальных Марат Ахин (СПбГПУ) TO 2014 235 / 328
  • 33.
    Проблема тестового оракулаГенерация оракулов Генерация assertions Собираем информацию о выполнении программы В случае падения определяем его причину Генерируем защитный assertion ... PROFIT! Способ усиления слабых оракулов до средних Не работает, если ничего не падает Марат Ахин (СПбГПУ) TO 2014 236 / 328
  • 34.
    Проблема тестового оракулаГенерация оракулов Генерация тестов Тесты – один из видов эталонной модели поведения Как автоматически сгенерировать эталонную модель? Мутационное тестирование Марат Ахин (СПбГПУ) TO 2014 237 / 328
  • 35.
    Проблема тестового оракулаГенерация оракулов Генерация тестов Вспомним, что: Идеальный тест работает только на тестируемой программе Если тест проходит на мутанте, это плохо Собираем информацию о выполнении оригинальной программы и мутанта Анализируем разницу ... PROFIT! Марат Ахин (СПбГПУ) TO 2014 238 / 328
  • 36.
    Проблема тестового оракулаГенерация оракулов Генерация тестов для GUI А если у нас есть GUI??? Что такое разница в работе GUI? Как можно автоматически ее обнаружить? Марат Ахин (СПбГПУ) TO 2014 239 / 328
  • 37.
    Проблема тестового оракулаГенерация оракулов Генерация тестов для GUI Нужна модель самого GUI Нужна модель изменений GUI Извлечение моделей должно выполняться автоматически Марат Ахин (СПбГПУ) TO 2014 240 / 328
  • 38.
    Проблема тестового оракулаГенерация оракулов Генерация тестов для GUI GUITAR GUI – иерархия отдельных компонентов События – переводят иерархию из одного состояния в другое Как сгенерировать тестового оракула? Марат Ахин (СПбГПУ) TO 2014 241 / 328
  • 39.
    Проблема тестового оракулаГенерация оракулов Генерация тестов для GUI Capture/replay Формальная спецификация Трассировка выполнения Каждому событию соответствует свой переход Марат Ахин (СПбГПУ) TO 2014 242 / 328
  • 40.
    Проблема тестового оракулаГенерация оракулов Генерация тестов для GUI Оракул – набор (частичных) состояний, соответствующих переходам по событиям GUI Как проверять корректность? Активный компонент Активное окно Видимые окна Все окна В конце теста После каждого N события После каждого события Марат Ахин (СПбГПУ) TO 2014 243 / 328
  • 41.
    Проблема тестового оракулаГенерация оракулов Генерация тестов Можно ли придумать что-то еще? Случайное тестирование Марат Ахин (СПбГПУ) TO 2014 244 / 328
  • 42.
    W.I.L.T. What ILearned Today? W.I.L.T. Марат Ахин (СПбГПУ) TO 2014 245 / 328