Upload
moscowdjango
View
403
Download
1
Embed Size (px)
DESCRIPTION
Как fuzzy testing помог дополнить регулярку и выявить не самые очевидные баги.
Citation preview
Пример fuzz testing для поиска URL в тексте Николай Ходов ([email protected])
Fuzz testing
Условное деление
Задача
● В произвольном тексте:
● Найти все URL'ы
Бесплотные попытки
https?://(.*?)
А как же вот это?!● ya.ru● It.s.bori.ng● vk.com/durov● Google.com/#plus-plus● //st.domain.com/?q=1● И еще миллионы
вариантов...
Пишем регулярку
(https?://)?<domain>{1,3}.<TLD>(/<path>)*(?<query_string>?)(#<hashtag>?)?
RFC 1738+
Тестируем вручную
● 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 строке мозг усиленно отказывается что-либо придумывать.
Пусть тестирует сам компьютер!
Kwh89 ydhfj 09 u ><LAKSUy236 v
Fully Random URL
Текст должен остаться неизменным
Баги
● Домены не могут начинаться на “-” (тире)● RFC не последняя инстанция (//)● Разные наборы символов для query string и
для пути
Надежность
● Не дает 100%-покрытия на границах (где обычно все самое вкусное)
● Не факт, что будут выявлены критичные баги
● Но...● Вы можете прогнозировать поведение
программы в стресс-режиме
Применимость
● Применим на стыках взаимодействия программ (форматы файлов, передача данных, внешние события)
● Очень сильно помогает выявить на раннем этапе то, что может “завалить” программу в боевом режиме
Вопросы?