Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

1,239 views

Published on

Published in: Education
  • Be the first to comment

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

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

×