Пример fuzzy testing для поиска url в тексте
DESCRIPTION
Как fuzzy testing помог дополнить регулярку и выявить не самые очевидные баги.TRANSCRIPT
![Page 1: Пример fuzzy testing для поиска URL в тексте](https://reader033.vdocuments.pub/reader033/viewer/2022051323/54bb066c4a7959945d8b456f/html5/thumbnails/1.jpg)
Пример fuzz testing для поиска URL в тексте Николай Ходов ([email protected])
![Page 2: Пример fuzzy testing для поиска URL в тексте](https://reader033.vdocuments.pub/reader033/viewer/2022051323/54bb066c4a7959945d8b456f/html5/thumbnails/2.jpg)
Fuzz testing
![Page 3: Пример fuzzy testing для поиска URL в тексте](https://reader033.vdocuments.pub/reader033/viewer/2022051323/54bb066c4a7959945d8b456f/html5/thumbnails/3.jpg)
Условное деление
![Page 4: Пример fuzzy testing для поиска URL в тексте](https://reader033.vdocuments.pub/reader033/viewer/2022051323/54bb066c4a7959945d8b456f/html5/thumbnails/4.jpg)
Задача
● В произвольном тексте:
● Найти все URL'ы
![Page 5: Пример fuzzy testing для поиска URL в тексте](https://reader033.vdocuments.pub/reader033/viewer/2022051323/54bb066c4a7959945d8b456f/html5/thumbnails/5.jpg)
Бесплотные попытки
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://reader033.vdocuments.pub/reader033/viewer/2022051323/54bb066c4a7959945d8b456f/html5/thumbnails/6.jpg)
Пишем регулярку
(https?://)?<domain>{1,3}.<TLD>(/<path>)*(?<query_string>?)(#<hashtag>?)?
RFC 1738+
![Page 7: Пример fuzzy testing для поиска URL в тексте](https://reader033.vdocuments.pub/reader033/viewer/2022051323/54bb066c4a7959945d8b456f/html5/thumbnails/7.jpg)
Тестируем вручную
● 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 в тексте](https://reader033.vdocuments.pub/reader033/viewer/2022051323/54bb066c4a7959945d8b456f/html5/thumbnails/8.jpg)
Пусть тестирует сам компьютер!
Kwh89 ydhfj 09 u ><LAKSUy236 v
Fully Random URL
Текст должен остаться неизменным
![Page 9: Пример fuzzy testing для поиска URL в тексте](https://reader033.vdocuments.pub/reader033/viewer/2022051323/54bb066c4a7959945d8b456f/html5/thumbnails/9.jpg)
Баги
● Домены не могут начинаться на “-” (тире)● RFC не последняя инстанция (//)● Разные наборы символов для query string и
для пути
![Page 10: Пример fuzzy testing для поиска URL в тексте](https://reader033.vdocuments.pub/reader033/viewer/2022051323/54bb066c4a7959945d8b456f/html5/thumbnails/10.jpg)
Надежность
● Не дает 100%-покрытия на границах (где обычно все самое вкусное)
● Не факт, что будут выявлены критичные баги
● Но...● Вы можете прогнозировать поведение
программы в стресс-режиме
![Page 11: Пример fuzzy testing для поиска URL в тексте](https://reader033.vdocuments.pub/reader033/viewer/2022051323/54bb066c4a7959945d8b456f/html5/thumbnails/11.jpg)
Применимость
● Применим на стыках взаимодействия программ (форматы файлов, передача данных, внешние события)
● Очень сильно помогает выявить на раннем этапе то, что может “завалить” программу в боевом режиме
![Page 12: Пример fuzzy testing для поиска URL в тексте](https://reader033.vdocuments.pub/reader033/viewer/2022051323/54bb066c4a7959945d8b456f/html5/thumbnails/12.jpg)
Вопросы?