SlideShare a Scribd company logo
1 of 39
Download to read offline
Случайное тестирование
Software Testing 101
Марат Ахин
Санкт-Петербургский государственный политехнический университет
2014
Марат Ахин (СПбГПУ) RT 2014 245 / 346
Quiz
Марат Ахин (СПбГПУ) RT 2014 246 / 346
Recap
Марат Ахин (СПбГПУ) RT 2014 247 / 346
Случайное тестирование
Содержание
1 Случайное тестирование
Генерация тестов
Fuzzing
Generative random testing
Mutation random testing
Directed random testing
Марат Ахин (СПбГПУ) RT 2014 248 / 346
Случайное тестирование Генерация тестов
Генерация тестов
Развитие идеи генерации тестовых оракулов
Полная автоматизация процесса тестирования
Марат Ахин (СПбГПУ) RT 2014 249 / 346
Случайное тестирование Генерация тестов
Генерация тестов
Основная идея
Заставить компьютер работать вместо нас
Дешевле
Быстрее
Нет человеческого фактора
Марат Ахин (СПбГПУ) RT 2014 250 / 346
Случайное тестирование Генерация тестов
Генерация тестов
Автоматическая генерация компонентов тестов
Входные данные
Последовательности вызовов API
Тестовые оракулы
Марат Ахин (СПбГПУ) RT 2014 251 / 346
Случайное тестирование Генерация тестов
Генерация тестов
Результаты очень сильно зависят от того, что именно мы тестируем...
kd-tree
stoi
md5sum
PDF reader
Марат Ахин (СПбГПУ) RT 2014 252 / 346
Случайное тестирование Fuzzing
Fuzzing
Прародитель случайного тестирования
Полностью случайные данные
Вариант smoke testing
P8FT8PjBG7s71Bw1a8EP4svDPL5g4E791
TJcs5t9ZbxQAsLZx436PdJcxk3vq61192
Марат Ахин (СПбГПУ) RT 2014 253 / 346
Случайное тестирование Fuzzing
Fuzzing
Используем слабые оракулы
При необходимости вставляем заглушки
Что такое случайные данные?
Набор байт
Вызовы функций API
Пользовательский ввод
Марат Ахин (СПбГПУ) RT 2014 254 / 346
Случайное тестирование Fuzzing
Fuzzing
1989 – первое применение фаззинга на утилитах *NIX
1995 – повторная проверка утилит *NIX
2000 – проверка Windows NT/Windows 2000
2006 – проверка утилит 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
md5sum
kd-tree
stoi
PDF reader
Работает для всех программ
Но есть одно «но»... c
Марат Ахин (СПбГПУ) RT 2014 258 / 346
Случайное тестирование Fuzzing
Проблема валидности данных
Полностью случайные данные являются невалидными входными
данными для большинства программ
Марат Ахин (СПбГПУ) RT 2014 259 / 346
Случайное тестирование Fuzzing
Проблема валидности данных
Большинство программ ожидают структурированные входные
данные
P8FT8PjBG7s71Bw1a8EP4svDPL5g4E791
TJcs5t9ZbxQAsLZx436PdJcxk3vq61192
vs
3.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-tree
stoi
PDF 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 reader
Web 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;
3
4 bool A = x > 0;
5 bool B = x < 10;
6 bool C = y > 20;
7
8 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’)
3
4 s = Solver ()
5
6 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 # sat
4 # [A = True , B = True , y = 25, x = 5, C = True]
5
6 print s.check(B and C, Not(A))
7 print s.model ()
8 # sat
9 # [A = False , B = True , y = 25, x = -5, C = True]
10
11 print s.check(Not(B and C))
12 print s.model ()
13 # sat
14 # [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 Research
500+ машино-лет
Более трети всех багов в различных проектах Microsoft
Развивается вместе с тестируемым им ПО
Марат Ахин (СПбГПУ) RT 2014 280 / 346
Случайное тестирование Directed random testing
Directed random testing
Visual Studio
Microsoft 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

More Related Content

What's hot

КГТУ Лекция 1: Обеспечение Качества Программного Обеспечения
КГТУ Лекция 1: Обеспечение Качества Программного ОбеспеченияКГТУ Лекция 1: Обеспечение Качества Программного Обеспечения
КГТУ Лекция 1: Обеспечение Качества Программного ОбеспеченияIosif Itkin
 
Илья Фомин - Проблемы автоматизируемости тестирования и их решения
Илья Фомин - Проблемы автоматизируемости тестирования и их решенияИлья Фомин - Проблемы автоматизируемости тестирования и их решения
Илья Фомин - Проблемы автоматизируемости тестирования и их решенияSQALab
 
API design in java project
API design in java projectAPI design in java project
API design in java projectchashnikov
 
Урок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибокУрок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибокTatyanazaxarova
 
ПРИМЕНЕНИЕ ГЕНЕТИЧЕСКИХ АЛГОРИТМОВ К ГЕНЕРАЦИИ ТЕСТОВ ДЛЯ АВТОМАТНЫХ ПРОГРАММ
ПРИМЕНЕНИЕ ГЕНЕТИЧЕСКИХ АЛГОРИТМОВ К ГЕНЕРАЦИИ ТЕСТОВ ДЛЯ АВТОМАТНЫХ ПРОГРАММПРИМЕНЕНИЕ ГЕНЕТИЧЕСКИХ АЛГОРИТМОВ К ГЕНЕРАЦИИ ТЕСТОВ ДЛЯ АВТОМАТНЫХ ПРОГРАММ
ПРИМЕНЕНИЕ ГЕНЕТИЧЕСКИХ АЛГОРИТМОВ К ГЕНЕРАЦИИ ТЕСТОВ ДЛЯ АВТОМАТНЫХ ПРОГРАММITMO University
 
анализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестированияанализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестированияRuslan Shevchenko
 
ОЛЕКСАНДР ЄПІШЕВ «Мутаційне тестування: тести для тестів» Lviv QA Day 2019
ОЛЕКСАНДР ЄПІШЕВ «Мутаційне тестування: тести для тестів»  Lviv QA Day 2019ОЛЕКСАНДР ЄПІШЕВ «Мутаційне тестування: тести для тестів»  Lviv QA Day 2019
ОЛЕКСАНДР ЄПІШЕВ «Мутаційне тестування: тести для тестів» Lviv QA Day 2019GoQA
 
Testing of Embedded SW – Alternative to Classic TDD
Testing of Embedded SW – Alternative to Classic TDDTesting of Embedded SW – Alternative to Classic TDD
Testing of Embedded SW – Alternative to Classic TDDДмитрий Овечкин
 
Илья Фофанов "Обработка ошибок в C#"
Илья Фофанов "Обработка ошибок в C#"Илья Фофанов "Обработка ошибок в C#"
Илья Фофанов "Обработка ошибок в C#"Yulia Tsisyk
 
20120309 formal semantics shilov_lecture04
20120309 formal semantics shilov_lecture0420120309 formal semantics shilov_lecture04
20120309 formal semantics shilov_lecture04Computer Science Club
 
Что такое "Parallel Lint"?
Что такое "Parallel Lint"?Что такое "Parallel Lint"?
Что такое "Parallel Lint"?Tatyanazaxarova
 
Security Tesint: Sql injection
Security Tesint: Sql injectionSecurity Tesint: Sql injection
Security Tesint: Sql injectionSergey Polazhenko
 
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...yaevents
 
Тестирование параллельных программ
Тестирование параллельных программТестирование параллельных программ
Тестирование параллельных программTatyanazaxarova
 
Андрей Кирпичев "Гибкая модульность инструментами АОП"
Андрей Кирпичев  "Гибкая модульность инструментами АОП"Андрей Кирпичев  "Гибкая модульность инструментами АОП"
Андрей Кирпичев "Гибкая модульность инструментами АОП"MskDotNet Community
 
Cтатический анализ кода (на примере DDD-фреймворка)
Cтатический анализ кода (на примере DDD-фреймворка)Cтатический анализ кода (на примере DDD-фреймворка)
Cтатический анализ кода (на примере DDD-фреймворка)ngrebnev
 
Сложности performance-тестирования / Андрей Акиньшин (JetBrains)
Сложности performance-тестирования / Андрей Акиньшин (JetBrains)Сложности performance-тестирования / Андрей Акиньшин (JetBrains)
Сложности performance-тестирования / Андрей Акиньшин (JetBrains)Ontico
 
обработка исключений в Java
обработка исключений в Javaобработка исключений в Java
обработка исключений в Javametaform
 
Вещи в Java, о которых вы (возможно) не знали
Вещи в Java, о которых вы (возможно) не зналиВещи в Java, о которых вы (возможно) не знали
Вещи в Java, о которых вы (возможно) не зналиZheka Kozlov
 
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Dmytro Mindra
 

What's hot (20)

КГТУ Лекция 1: Обеспечение Качества Программного Обеспечения
КГТУ Лекция 1: Обеспечение Качества Программного ОбеспеченияКГТУ Лекция 1: Обеспечение Качества Программного Обеспечения
КГТУ Лекция 1: Обеспечение Качества Программного Обеспечения
 
Илья Фомин - Проблемы автоматизируемости тестирования и их решения
Илья Фомин - Проблемы автоматизируемости тестирования и их решенияИлья Фомин - Проблемы автоматизируемости тестирования и их решения
Илья Фомин - Проблемы автоматизируемости тестирования и их решения
 
API design in java project
API design in java projectAPI design in java project
API design in java project
 
Урок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибокУрок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибок
 
ПРИМЕНЕНИЕ ГЕНЕТИЧЕСКИХ АЛГОРИТМОВ К ГЕНЕРАЦИИ ТЕСТОВ ДЛЯ АВТОМАТНЫХ ПРОГРАММ
ПРИМЕНЕНИЕ ГЕНЕТИЧЕСКИХ АЛГОРИТМОВ К ГЕНЕРАЦИИ ТЕСТОВ ДЛЯ АВТОМАТНЫХ ПРОГРАММПРИМЕНЕНИЕ ГЕНЕТИЧЕСКИХ АЛГОРИТМОВ К ГЕНЕРАЦИИ ТЕСТОВ ДЛЯ АВТОМАТНЫХ ПРОГРАММ
ПРИМЕНЕНИЕ ГЕНЕТИЧЕСКИХ АЛГОРИТМОВ К ГЕНЕРАЦИИ ТЕСТОВ ДЛЯ АВТОМАТНЫХ ПРОГРАММ
 
анализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестированияанализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестирования
 
ОЛЕКСАНДР ЄПІШЕВ «Мутаційне тестування: тести для тестів» Lviv QA Day 2019
ОЛЕКСАНДР ЄПІШЕВ «Мутаційне тестування: тести для тестів»  Lviv QA Day 2019ОЛЕКСАНДР ЄПІШЕВ «Мутаційне тестування: тести для тестів»  Lviv QA Day 2019
ОЛЕКСАНДР ЄПІШЕВ «Мутаційне тестування: тести для тестів» Lviv QA Day 2019
 
Testing of Embedded SW – Alternative to Classic TDD
Testing of Embedded SW – Alternative to Classic TDDTesting of Embedded SW – Alternative to Classic TDD
Testing of Embedded SW – Alternative to Classic TDD
 
Илья Фофанов "Обработка ошибок в C#"
Илья Фофанов "Обработка ошибок в C#"Илья Фофанов "Обработка ошибок в C#"
Илья Фофанов "Обработка ошибок в C#"
 
20120309 formal semantics shilov_lecture04
20120309 formal semantics shilov_lecture0420120309 formal semantics shilov_lecture04
20120309 formal semantics shilov_lecture04
 
Что такое "Parallel Lint"?
Что такое "Parallel Lint"?Что такое "Parallel Lint"?
Что такое "Parallel Lint"?
 
Security Tesint: Sql injection
Security Tesint: Sql injectionSecurity Tesint: Sql injection
Security Tesint: Sql injection
 
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
 
Тестирование параллельных программ
Тестирование параллельных программТестирование параллельных программ
Тестирование параллельных программ
 
Андрей Кирпичев "Гибкая модульность инструментами АОП"
Андрей Кирпичев  "Гибкая модульность инструментами АОП"Андрей Кирпичев  "Гибкая модульность инструментами АОП"
Андрей Кирпичев "Гибкая модульность инструментами АОП"
 
Cтатический анализ кода (на примере DDD-фреймворка)
Cтатический анализ кода (на примере DDD-фреймворка)Cтатический анализ кода (на примере DDD-фреймворка)
Cтатический анализ кода (на примере DDD-фреймворка)
 
Сложности performance-тестирования / Андрей Акиньшин (JetBrains)
Сложности performance-тестирования / Андрей Акиньшин (JetBrains)Сложности performance-тестирования / Андрей Акиньшин (JetBrains)
Сложности performance-тестирования / Андрей Акиньшин (JetBrains)
 
обработка исключений в Java
обработка исключений в Javaобработка исключений в Java
обработка исключений в Java
 
Вещи в Java, о которых вы (возможно) не знали
Вещи в Java, о которых вы (возможно) не зналиВещи в Java, о которых вы (возможно) не знали
Вещи в Java, о которых вы (возможно) не знали
 
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
 

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

Поиск ошибок в программах на языке C#
Поиск ошибок в программах на языке C#Поиск ошибок в программах на языке C#
Поиск ошибок в программах на языке C#Mikhail Shcherbakov
 
На что способны современные статические анализаторы для C#
На что способны современные статические анализаторы для C#На что способны современные статические анализаторы для C#
На что способны современные статические анализаторы для C#Artem Borzilov
 
Физическое моделирование объекта управления
Физическое моделирование объекта управленияФизическое моделирование объекта управления
Физическое моделирование объекта управленияMATLAB
 
[JAM 1.1] Testing not for Fun (Evgeny Kaziak)
[JAM 1.1] Testing not for Fun (Evgeny Kaziak)[JAM 1.1] Testing not for Fun (Evgeny Kaziak)
[JAM 1.1] Testing not for Fun (Evgeny Kaziak)Evgeny Kaziak
 
Тестирование весна 2013 лекция 2
Тестирование весна 2013 лекция 2Тестирование весна 2013 лекция 2
Тестирование весна 2013 лекция 2Technopark
 
Всё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программистаВсё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программистаAndrey Karpov
 
QA Fest 2017. Иван Пашко. Антипаттерны и запахи в автоматизации тестирования
QA Fest 2017. Иван Пашко. Антипаттерны и запахи в автоматизации тестированияQA Fest 2017. Иван Пашко. Антипаттерны и запахи в автоматизации тестирования
QA Fest 2017. Иван Пашко. Антипаттерны и запахи в автоматизации тестированияQAFest
 
Автоматизация тестирования встроенного ПО
Автоматизация тестирования встроенного ПОАвтоматизация тестирования встроенного ПО
Автоматизация тестирования встроенного ПОSQALab
 
Let's Talk About Junit 5
Let's Talk About Junit 5Let's Talk About Junit 5
Let's Talk About Junit 5SQALab
 

Similar to Случайное тестирование (10)

Поиск ошибок в программах на языке C#
Поиск ошибок в программах на языке C#Поиск ошибок в программах на языке C#
Поиск ошибок в программах на языке C#
 
На что способны современные статические анализаторы для C#
На что способны современные статические анализаторы для C#На что способны современные статические анализаторы для C#
На что способны современные статические анализаторы для C#
 
Физическое моделирование объекта управления
Физическое моделирование объекта управленияФизическое моделирование объекта управления
Физическое моделирование объекта управления
 
[JAM 1.1] Testing not for Fun (Evgeny Kaziak)
[JAM 1.1] Testing not for Fun (Evgeny Kaziak)[JAM 1.1] Testing not for Fun (Evgeny Kaziak)
[JAM 1.1] Testing not for Fun (Evgeny Kaziak)
 
Тестирование весна 2013 лекция 2
Тестирование весна 2013 лекция 2Тестирование весна 2013 лекция 2
Тестирование весна 2013 лекция 2
 
Всё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программистаВсё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программиста
 
QA Fest 2017. Иван Пашко. Антипаттерны и запахи в автоматизации тестирования
QA Fest 2017. Иван Пашко. Антипаттерны и запахи в автоматизации тестированияQA Fest 2017. Иван Пашко. Антипаттерны и запахи в автоматизации тестирования
QA Fest 2017. Иван Пашко. Антипаттерны и запахи в автоматизации тестирования
 
Автоматизация тестирования встроенного ПО
Автоматизация тестирования встроенного ПОАвтоматизация тестирования встроенного ПО
Автоматизация тестирования встроенного ПО
 
Let's Talk About Junit 5
Let's Talk About Junit 5Let's Talk About Junit 5
Let's Talk About Junit 5
 
10M tests per day
10M tests per day10M tests per day
10M tests per day
 

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

  • 1. Случайное тестирование Software Testing 101 Марат Ахин Санкт-Петербургский государственный политехнический университет 2014 Марат Ахин (СПбГПУ) RT 2014 245 / 346
  • 4. Случайное тестирование Содержание 1 Случайное тестирование Генерация тестов Fuzzing Generative random testing Mutation random testing Directed random testing Марат Ахин (СПбГПУ) RT 2014 248 / 346
  • 5. Случайное тестирование Генерация тестов Генерация тестов Развитие идеи генерации тестовых оракулов Полная автоматизация процесса тестирования Марат Ахин (СПбГПУ) RT 2014 249 / 346
  • 6. Случайное тестирование Генерация тестов Генерация тестов Основная идея Заставить компьютер работать вместо нас Дешевле Быстрее Нет человеческого фактора Марат Ахин (СПбГПУ) RT 2014 250 / 346
  • 7. Случайное тестирование Генерация тестов Генерация тестов Автоматическая генерация компонентов тестов Входные данные Последовательности вызовов API Тестовые оракулы Марат Ахин (СПбГПУ) RT 2014 251 / 346
  • 8. Случайное тестирование Генерация тестов Генерация тестов Результаты очень сильно зависят от того, что именно мы тестируем... kd-tree stoi md5sum PDF reader Марат Ахин (СПбГПУ) RT 2014 252 / 346
  • 9. Случайное тестирование Fuzzing Fuzzing Прародитель случайного тестирования Полностью случайные данные Вариант smoke testing P8FT8PjBG7s71Bw1a8EP4svDPL5g4E791 TJcs5t9ZbxQAsLZx436PdJcxk3vq61192 Марат Ахин (СПбГПУ) RT 2014 253 / 346
  • 10. Случайное тестирование Fuzzing Fuzzing Используем слабые оракулы При необходимости вставляем заглушки Что такое случайные данные? Набор байт Вызовы функций API Пользовательский ввод Марат Ахин (СПбГПУ) RT 2014 254 / 346
  • 11. Случайное тестирование Fuzzing Fuzzing 1989 – первое применение фаззинга на утилитах *NIX 1995 – повторная проверка утилит *NIX 2000 – проверка Windows NT/Windows 2000 2006 – проверка утилит Mac OS X Стали ли результаты лучше? Марат Ахин (СПбГПУ) RT 2014 255 / 346
  • 12. Случайное тестирование Fuzzing Fuzzing Нет! Все стало еще хуже! GUI: 26% -> 45% -> 64% -> 73% Многие баги, обнаруженные фаззингом, были исправлены... ...но появилось еще больше новых! Марат Ахин (СПбГПУ) RT 2014 256 / 346
  • 14. Случайное тестирование Fuzzing Fuzzing md5sum kd-tree stoi PDF reader Работает для всех программ Но есть одно «но»... c Марат Ахин (СПбГПУ) RT 2014 258 / 346
  • 15. Случайное тестирование Fuzzing Проблема валидности данных Полностью случайные данные являются невалидными входными данными для большинства программ Марат Ахин (СПбГПУ) RT 2014 259 / 346
  • 16. Случайное тестирование Fuzzing Проблема валидности данных Большинство программ ожидают структурированные входные данные P8FT8PjBG7s71Bw1a8EP4svDPL5g4E791 TJcs5t9ZbxQAsLZx436PdJcxk3vq61192 vs 3.1415926535897932384626433832797 [(1,0,0),(0,1,0),(0,0,1),(1,1,1)] Марат Ахин (СПбГПУ) RT 2014 260 / 346
  • 17. Случайное тестирование Generative random testing Generative random testing Если мы знаем структуру, то мы можем ей воспользоваться Генерируем отдельные элементы Комбинируем их в соответствии с заданной структурой Вносим случайные нарушения структуры Марат Ахин (СПбГПУ) RT 2014 261 / 346
  • 18. Случайное тестирование Generative random testing Generative random testing Что такое структура? Набор правил генерации Грамматика Формальная спецификация Стандарт на формат входных файлов Марат Ахин (СПбГПУ) RT 2014 262 / 346
  • 19. Случайное тестирование Generative random testing Generative random testing kd-tree stoi PDF reader Работает для структурированных входных данных Но есть одно «но»... c Марат Ахин (СПбГПУ) RT 2014 263 / 346
  • 20. Случайное тестирование Generative random testing Проблема сложной структуры Иногда структура входных данных является слишком сложной Марат Ахин (СПбГПУ) RT 2014 264 / 346
  • 21. Случайное тестирование Mutation random testing Mutation random testing Обычно у нас есть какой-то набор тестовых входных данных Подвергаем тестовые данные мутации При этом возможно использование знания структуры данных Часть данных может генерироваться случайно Марат Ахин (СПбГПУ) RT 2014 265 / 346
  • 22. Случайное тестирование Mutation random testing Mutation random testing Какие могут быть мутационные трансформации? Добавление нового фрагмента Удаление старого фрагмента Изменение фрагмента Обмен двух фрагментов местами Замена значений на граничные Марат Ахин (СПбГПУ) RT 2014 266 / 346
  • 23. Случайное тестирование Mutation random testing Mutation random testing PDF reader Web browser Работает практически для всего Но есть одно «но»... c Марат Ахин (СПбГПУ) RT 2014 267 / 346
  • 24. Случайное тестирование Mutation random testing Проблема скелета в шкафу Добраться до самых дальних закоулков нельзя Марат Ахин (СПбГПУ) RT 2014 268 / 346
  • 25. Случайное тестирование Directed random testing Directed random testing В чем заключаются основные проблемы случайного тестирования? Некорректные тесты Эквивалентные тесты Длинные тесты Марат Ахин (СПбГПУ) RT 2014 269 / 346
  • 26. Случайное тестирование Directed random testing Directed random testing Марат Ахин (СПбГПУ) RT 2014 270 / 346
  • 27. Случайное тестирование Directed random testing Directed random testing Некорректные тесты Более строгие правила генерации/мутации Явный учет некорректных тестов Марат Ахин (СПбГПУ) RT 2014 271 / 346
  • 28. Случайное тестирование Directed random testing Directed random testing Эквивалентные тесты Обнаружение тестов, на которых программа ведет себя одинаковым образом Статически Динамически Вспомним про тестовое покрытие... Марат Ахин (СПбГПУ) RT 2014 272 / 346
  • 29. Случайное тестирование Directed random testing Directed random testing Длинные тесты Минимизация тестов Дихотомия Стохастический поиск Эволюционные алгоритмы Delta debugging Марат Ахин (СПбГПУ) RT 2014 273 / 346
  • 30. Случайное тестирование Directed random testing Directed random testing А можно ли еще лучше? Каждый новый тест минимально отличается от имеющихся Каждый новый тест улучшает тестовое покрытие Каждый новый тест должен генерироваться достаточно быстро Марат Ахин (СПбГПУ) RT 2014 274 / 346
  • 31. Случайное тестирование Directed random testing Concolic testing Concolic testing Комбинируем информацию о конкретных выполнениях программы... ...и информацию о символическом поведении программы Комбинация статического и динамического анализов Марат Ахин (СПбГПУ) RT 2014 275 / 346
  • 32. Случайное тестирование Directed random testing Satisfiability modulo theories 1 void f(int x) { 2 int y = x^2; 3 4 bool A = x > 0; 5 bool B = x < 10; 6 bool C = y > 20; 7 8 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’) 3 4 s = Solver () 5 6 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
  • 33. Случайное тестирование Directed random testing Satisfiability modulo theories 1 print s.check(B and C, A) 2 print s.model () 3 # sat 4 # [A = True , B = True , y = 25, x = 5, C = True] 5 6 print s.check(B and C, Not(A)) 7 print s.model () 8 # sat 9 # [A = False , B = True , y = 25, x = -5, C = True] 10 11 print s.check(Not(B and C)) 12 print s.model () 13 # sat 14 # [A = False , B = True , y = 0, x = 0, C = False] Марат Ахин (СПбГПУ) RT 2014 277 / 346
  • 34. Случайное тестирование Directed random testing Проблемы concolic testing Почему я слышу об этом впервые в жизни? Это сложно Это очень сложно Это очень-очень сложно Марат Ахин (СПбГПУ) RT 2014 278 / 346
  • 35. Случайное тестирование Directed random testing Проблемы concolic testing Инструментирование программы Моделирование памяти Взрыв пространства состояний Оптимизации! Марат Ахин (СПбГПУ) RT 2014 279 / 346
  • 36. Случайное тестирование Directed random testing Concolic testing SAGE Microsoft Research 500+ машино-лет Более трети всех багов в различных проектах Microsoft Развивается вместе с тестируемым им ПО Марат Ахин (СПбГПУ) RT 2014 280 / 346
  • 37. Случайное тестирование Directed random testing Directed random testing Visual Studio Microsoft Office Работает для всего Но есть одно «но»... c Марат Ахин (СПбГПУ) RT 2014 281 / 346
  • 38. Случайное тестирование Directed random testing Проблема мистера Икс Некоторые части системы могут быть «черным ящиком» Марат Ахин (СПбГПУ) RT 2014 282 / 346
  • 39. W.I.L.T. What I Learned Today? W.I.L.T. Марат Ахин (СПбГПУ) RT 2014 283 / 346