Upload
marat-akhin
View
266
Download
1
Embed Size (px)
DESCRIPTION
Citation preview
Случайное тестированиеSoftware Testing 101
Марат Ахин
Санкт-Петербургский государственный политехнический университет
2014
Марат Ахин (СПбГПУ) RT 2014 245 / 346
Quiz
Марат Ахин (СПбГПУ) RT 2014 246 / 346
Recap
Марат Ахин (СПбГПУ) RT 2014 247 / 346
Случайное тестирование
Содержание
1 Случайное тестированиеГенерация тестовFuzzingGenerative random testingMutation random testingDirected random testing
Марат Ахин (СПбГПУ) RT 2014 248 / 346
Случайное тестирование Генерация тестов
Генерация тестов
Развитие идеи генерации тестовых оракуловПолная автоматизация процесса тестирования
Марат Ахин (СПбГПУ) RT 2014 249 / 346
Случайное тестирование Генерация тестов
Генерация тестов
Основная идеяЗаставить компьютер работать вместо нас
ДешевлеБыстрееНет человеческого фактора
Марат Ахин (СПбГПУ) RT 2014 250 / 346
Случайное тестирование Генерация тестов
Генерация тестов
Автоматическая генерация компонентов тестов
Входные данныеПоследовательности вызовов APIТестовые оракулы
Марат Ахин (СПбГПУ) RT 2014 251 / 346
Случайное тестирование Генерация тестов
Генерация тестов
Результаты очень сильно зависят от того, что именно мы тестируем...
kd-treestoimd5sumPDF reader
Марат Ахин (СПбГПУ) RT 2014 252 / 346
Случайное тестирование Fuzzing
Fuzzing
Прародитель случайного тестирования
Полностью случайные данныеВариант smoke testing
P8FT8PjBG7s71Bw1a8EP4svDPL5g4E791TJcs5t9ZbxQAsLZx436PdJcxk3vq61192
Марат Ахин (СПбГПУ) RT 2014 253 / 346
Случайное тестирование Fuzzing
Fuzzing
Используем слабые оракулыПри необходимости вставляем заглушки
Что такое случайные данные?Набор байтВызовы функций APIПользовательский ввод
Марат Ахин (СПбГПУ) RT 2014 254 / 346
Случайное тестирование Fuzzing
Fuzzing
1989 – первое применение фаззинга на утилитах *NIX1995 – повторная проверка утилит *NIX2000 – проверка Windows NT/Windows 20002006 – проверка утилит Mac OS X
Стали ли результаты лучше?
Марат Ахин (СПбГПУ) RT 2014 255 / 346
Случайное тестирование Fuzzing
Fuzzing
Нет!
Все стало еще хуже!
GUI: 26% -> 45% -> 64% -> 73%Многие баги, обнаруженные фаззингом, были исправлены......но появилось еще больше новых!
Марат Ахин (СПбГПУ) RT 2014 256 / 346
Случайное тестирование Fuzzing
Fuzzing
Марат Ахин (СПбГПУ) RT 2014 257 / 346
Случайное тестирование Fuzzing
Fuzzing
md5sumkd-treestoiPDF reader
Работает для всех программНо есть одно «но»... c©
Марат Ахин (СПбГПУ) RT 2014 258 / 346
Случайное тестирование Fuzzing
Проблема валидности данных
Полностью случайные данные являются невалидными входнымиданными для большинства программ
Марат Ахин (СПбГПУ) RT 2014 259 / 346
Случайное тестирование Fuzzing
Проблема валидности данных
Большинство программ ожидают структурированные входныеданные
P8FT8PjBG7s71Bw1a8EP4svDPL5g4E791TJcs5t9ZbxQAsLZx436PdJcxk3vq61192
vs3.1415926535897932384626433832797[(1,0,0),(0,1,0),(0,0,1),(1,1,1)]
Марат Ахин (СПбГПУ) RT 2014 260 / 346
Случайное тестирование Generative random testing
Generative random testing
Если мы знаем структуру, то мы можем ей воспользоваться
Генерируем отдельные элементыКомбинируем их в соответствии с заданной структуройВносим случайные нарушения структуры
Марат Ахин (СПбГПУ) RT 2014 261 / 346
Случайное тестирование Generative random testing
Generative random testing
Что такое структура?
Набор правил генерацииГрамматикаФормальная спецификацияСтандарт на формат входных файлов
Марат Ахин (СПбГПУ) RT 2014 262 / 346
Случайное тестирование Generative random testing
Generative random testing
kd-treestoiPDF reader
Работает для структурированных входных данныхНо есть одно «но»... c©
Марат Ахин (СПбГПУ) RT 2014 263 / 346
Случайное тестирование Generative random testing
Проблема сложной структуры
Иногда структура входных данных является слишком сложной
Марат Ахин (СПбГПУ) RT 2014 264 / 346
Случайное тестирование Mutation random testing
Mutation random testing
Обычно у нас есть какой-то набор тестовых входных данных
Подвергаем тестовые данные мутацииПри этом возможно использование знания структуры данныхЧасть данных может генерироваться случайно
Марат Ахин (СПбГПУ) RT 2014 265 / 346
Случайное тестирование Mutation random testing
Mutation random testing
Какие могут быть мутационные трансформации?
Добавление нового фрагментаУдаление старого фрагментаИзменение фрагмента
Обмен двух фрагментов местамиЗамена значений на граничные
Марат Ахин (СПбГПУ) RT 2014 266 / 346
Случайное тестирование Mutation random testing
Mutation random testing
PDF readerWeb browser
Работает практически для всегоНо есть одно «но»... c©
Марат Ахин (СПбГПУ) RT 2014 267 / 346
Случайное тестирование Mutation random testing
Проблема скелета в шкафу
Добраться до самых дальних закоулков нельзя
Марат Ахин (СПбГПУ) RT 2014 268 / 346
Случайное тестирование Directed random testing
Directed random testing
В чем заключаются основные проблемы случайного тестирования?
Некорректные тестыЭквивалентные тестыДлинные тесты
Марат Ахин (СПбГПУ) RT 2014 269 / 346
Случайное тестирование Directed random testing
Directed random testing
Марат Ахин (СПбГПУ) RT 2014 270 / 346
Случайное тестирование Directed random testing
Directed random testing
Некорректные тесты
Более строгие правила генерации/мутацииЯвный учет некорректных тестов
Марат Ахин (СПбГПУ) RT 2014 271 / 346
Случайное тестирование Directed random testing
Directed random testing
Эквивалентные тесты
Обнаружение тестов, на которых программа ведет себяодинаковым образом
СтатическиДинамически
Вспомним про тестовое покрытие...
Марат Ахин (СПбГПУ) RT 2014 272 / 346
Случайное тестирование Directed random testing
Directed random testing
Длинные тесты
Минимизация тестовДихотомияСтохастический поискЭволюционные алгоритмы
Delta debugging
Марат Ахин (СПбГПУ) RT 2014 273 / 346
Случайное тестирование Directed random testing
Directed random testing
А можно ли еще лучше?
Каждый новый тест минимально отличается от имеющихсяКаждый новый тест улучшает тестовое покрытиеКаждый новый тест должен генерироваться достаточно быстро
Марат Ахин (СПбГПУ) RT 2014 274 / 346
Случайное тестирование Directed random testing
Concolic testing
Concolic testing
Комбинируем информацию о конкретных выполненияхпрограммы......и информацию о символическом поведении программы
Комбинация статического и динамического анализов
Марат Ахин (СПбГПУ) RT 2014 275 / 346
Случайное тестирование Directed random testing
Satisfiability modulo theories
1 void f(int x) {2 int y = x^2;34 bool A = x > 0;5 bool B = x < 10;6 bool C = y > 20;78 if (B && C) {9 if (A) {
10 ...11 }12 }13 }
SMT to the rescue
1 x, y = Ints(’x y’)2 A, B, C = Bools(’A B C’)34 s = Solver ()56 s.add(y == x * x)7 s.add(A == (x > 0))8 s.add(B == (x < 10))9 s.add(C == (y > 20))
Марат Ахин (СПбГПУ) RT 2014 276 / 346
Случайное тестирование Directed random testing
Satisfiability modulo theories
1 print s.check(B and C, A)2 print s.model ()3 # sat4 # [A = True , B = True , y = 25, x = 5, C = True]56 print s.check(B and C, Not(A))7 print s.model ()8 # sat9 # [A = False , B = True , y = 25, x = -5, C = True]
1011 print s.check(Not(B and C))12 print s.model ()13 # sat14 # [A = False , B = True , y = 0, x = 0, C = False]
Марат Ахин (СПбГПУ) RT 2014 277 / 346
Случайное тестирование Directed random testing
Проблемы concolic testing
Почему я слышу об этом впервые в жизни?
Это сложноЭто очень сложноЭто очень-очень сложно
Марат Ахин (СПбГПУ) RT 2014 278 / 346
Случайное тестирование Directed random testing
Проблемы concolic testing
Инструментирование программыМоделирование памятиВзрыв пространства состояний
Оптимизации!
Марат Ахин (СПбГПУ) RT 2014 279 / 346
Случайное тестирование Directed random testing
Concolic testing
SAGE
Microsoft Research500+ машино-летБолее трети всех багов в различных проектах MicrosoftРазвивается вместе с тестируемым им ПО
Марат Ахин (СПбГПУ) RT 2014 280 / 346
Случайное тестирование Directed random testing
Directed random testing
Visual StudioMicrosoft Office
Работает для всегоНо есть одно «но»... c©
Марат Ахин (СПбГПУ) RT 2014 281 / 346
Случайное тестирование Directed random testing
Проблема мистера Икс
Некоторые части системы могут быть «черным ящиком»
Марат Ахин (СПбГПУ) RT 2014 282 / 346
W.I.L.T. What I Learned Today?
W.I.L.T.
Марат Ахин (СПбГПУ) RT 2014 283 / 346