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

Пример fuzzy testing для поиска URL в тексте

Embed Size (px)

DESCRIPTION

Как fuzzy testing помог дополнить регулярку и выявить не самые очевидные баги.

Citation preview

Page 1: Пример fuzzy testing для поиска URL в тексте

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

Page 2: Пример fuzzy testing для поиска URL в тексте

Fuzz testing

Page 3: Пример fuzzy testing для поиска URL в тексте

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

Page 4: Пример fuzzy testing для поиска URL в тексте

Задача

● В произвольном тексте:

● Найти все URL'ы

Page 5: Пример fuzzy testing для поиска URL в тексте

Бесплотные попытки

https?://(.*?)

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

вариантов...

Page 6: Пример fuzzy testing для поиска URL в тексте

Пишем регулярку

(https?://)?<domain>{1,3}.<TLD>(/<path>)*(?<query_string>?)(#<hashtag>?)?

RFC 1738+

Page 7: Пример fuzzy testing для поиска URL в тексте

Тестируем вручную

● 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 строке мозг усиленно отказывается что-либо придумывать.

Page 8: Пример fuzzy testing для поиска URL в тексте

Пусть тестирует сам компьютер!

Kwh89 ydhfj 09 u ><LAKSUy236 v

Fully Random URL

Текст должен остаться неизменным

Page 9: Пример fuzzy testing для поиска URL в тексте

Баги

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

для пути

Page 10: Пример fuzzy testing для поиска URL в тексте

Надежность

● Не дает 100%-покрытия на границах (где обычно все самое вкусное)

● Не факт, что будут выявлены критичные баги

● Но...● Вы можете прогнозировать поведение

программы в стресс-режиме

Page 11: Пример fuzzy testing для поиска URL в тексте

Применимость

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

● Очень сильно помогает выявить на раннем этапе то, что может “завалить” программу в боевом режиме

Page 12: Пример fuzzy testing для поиска URL в тексте

Вопросы?