Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Пример fuzzy testing для поиска URL в тексте
Search
Moscow Python Meetup
PRO
October 24, 2012
Technology
1
760
Пример fuzzy testing для поиска URL в тексте
Как fuzzy testing помог дополнить регулярку и выявить не самые очевидные баги.
Moscow Python Meetup
PRO
October 24, 2012
Tweet
Share
More Decks by Moscow Python Meetup
See All by Moscow Python Meetup
Moscow Python Meetup №95. Макс Столпасов (X5 Tech, TeamLead). D в DDD — где D это доменная логика
moscowdjango
PRO
0
30
Moscow Python Meetup №95. Юлия Сухинина (АО «ГОЛЬФСТРИМ охранные системы» (МТС), Руководитель по развитию). Разработка ТГ Бота с ИИ модулем для автоматизации процесса контроля качества оформления документов
moscowdjango
PRO
0
46
Moscow Python Meetup №95 Арсен Гумин (Сбер, Руководитель направления по исследованию данных) Model-as-a-service: с нуля до enterprise ready
moscowdjango
PRO
0
8
Moscow Python Meetup №94. Алексей Жиряков (KION — руководитель направления, техлид бекенд команды витрины). Geo по IP без усилителей вкуса и консервантов
moscowdjango
PRO
0
24
Moscow Python Meetup №94. Дмитрий Легчиков (CTO Harmonix). Датасторителлинг на Streamlit
moscowdjango
PRO
0
36
Moscow Python Meetup №94. Александр Гончаров (SlashHash LLC). Это вообще не просто!
moscowdjango
PRO
0
48
Moscow Python Meetup №93. Сурен Хоренян (ВК Реклама, Руководитель команды в команде интерфейсов). Python нельзя Go: почему меня не зацепил новый тренд.
moscowdjango
PRO
0
130
Moscow Python Meetup №92. Евгений Блинов (Яндекс, Руководитель команды интеграции робототехнических решений). Расширяем возможности стандартной библиотеки.
moscowdjango
PRO
0
71
Moscow Python Meetup №92. Иван Елфимов (Ostrovok.ru, Devrel). Пишем свой фреймворк поверх Django
moscowdjango
PRO
0
99
Other Decks in Technology
See All in Technology
Why App Signing Matters for Your Android Apps - Android Bangkok Conference 2024
akexorcist
0
120
Evangelismo técnico: ¿qué, cómo y por qué?
trishagee
0
360
Introduction to Works of ML Engineer in LY Corporation
lycorp_recruit_jp
0
110
オープンソースAIとは何か? --「オープンソースAIの定義 v1.0」詳細解説
shujisado
7
800
Terraform CI/CD パイプラインにおける AWS CodeCommit の代替手段
hiyanger
1
240
TanStack Routerに移行するのかい しないのかい、どっちなんだい! / Are you going to migrate to TanStack Router or not? Which one is it?
kaminashi
0
580
データプロダクトの定義からはじめる、データコントラクト駆動なデータ基盤
chanyou0311
2
300
Lexical Analysis
shigashiyama
1
150
[CV勉強会@関東 ECCV2024 読み会] オンラインマッピング x トラッキング MapTracker: Tracking with Strided Memory Fusion for Consistent Vector HD Mapping (Chen+, ECCV24)
abemii
0
220
TypeScriptの次なる大進化なるか!? 条件型を返り値とする関数の型推論
uhyo
2
1.6k
ドメイン名の終活について - JPAAWG 7th -
mikit
33
20k
Engineer Career Talk
lycorp_recruit_jp
0
150
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
4
120
Code Review Best Practice
trishagee
64
17k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
364
24k
Raft: Consensus for Rubyists
vanstee
136
6.6k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
How to Ace a Technical Interview
jacobian
276
23k
4 Signs Your Business is Dying
shpigford
180
21k
How GitHub (no longer) Works
holman
310
140k
Faster Mobile Websites
deanohume
305
30k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
410
The Cult of Friendly URLs
andyhume
78
6k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Transcript
Пример 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%-покрытия на границах (где обычно все
самое вкусное) • Не факт, что будут выявлены критичные баги • Но... • Вы можете прогнозировать поведение программы в стресс-режиме
Применимость • Применим на стыках взаимодействия программ (форматы файлов, передача
данных, внешние события) • Очень сильно помогает выявить на раннем этапе то, что может “завалить” программу в боевом режиме
Вопросы?