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

Post on 21-Dec-2014

267 Views

Category:

Education

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

Случайное тестирование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

top related