Slide 1

Slide 1 text

Пример fuzz testing для поиска URL в тексте Николай Ходов ([email protected])

Slide 2

Slide 2 text

Fuzz testing

Slide 3

Slide 3 text

Условное деление

Slide 4

Slide 4 text

Задача ● В произвольном тексте: ● Найти все URL'ы

Slide 5

Slide 5 text

Бесплотные попытки https?://(.*?) А как же вот это?! ● ya.ru ● It.s.bori.ng ● vk.com/durov ● Google.com/#plus-plus ● //st.domain.com/?q=1 ● И еще миллионы вариантов...

Slide 6

Slide 6 text

Пишем регулярку (https?://)?{1,3}.(/)*(??)(#?)? RFC 1738 +

Slide 7

Slide 7 text

Тестируем вручную ● self.assertEqual(strip_links('word1 https://ya.ru word2'), 'word1 word2') ● self.assertEqual(strip_links('word1 domain.arpa/test.link word2'), 'word1 word2') ● self.assertEqual(strip_links('word1 ya.ru/yandsearch? sdfsdfsdf=1fsdf word2'), 'word1 word2') ● self.assertEqual(strip_links('word1 naked.domain.asia word2'), 'word1 word2') ● … ● На 15 строке мозг усиленно отказывается что-либо придумывать.

Slide 8

Slide 8 text

Пусть тестирует сам компьютер! Kwh89 ydhfj 09 u >

Slide 9

Slide 9 text

Баги ● Домены не могут начинаться на “-” (тире) ● RFC не последняя инстанция (//) ● Разные наборы символов для query string и для пути

Slide 10

Slide 10 text

Надежность ● Не дает 100%-покрытия на границах (где обычно все самое вкусное) ● Не факт, что будут выявлены критичные баги ● Но... ● Вы можете прогнозировать поведение программы в стресс-режиме

Slide 11

Slide 11 text

Применимость ● Применим на стыках взаимодействия программ (форматы файлов, передача данных, внешние события) ● Очень сильно помогает выявить на раннем этапе то, что может “завалить” программу в боевом режиме

Slide 12

Slide 12 text

Вопросы?