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
47
Moscow Python Meetup №95. Юлия Сухинина (АО «ГОЛЬФСТРИМ охранные системы» (МТС), Руководитель по развитию). Разработка ТГ Бота с ИИ модулем для автоматизации процесса контроля качества оформления документов
moscowdjango
PRO
0
91
Moscow Python Meetup №95 Арсен Гумин (Сбер, Руководитель направления по исследованию данных) Model-as-a-service: с нуля до enterprise ready
moscowdjango
PRO
0
35
Moscow Python Meetup №94. Алексей Жиряков (KION — руководитель направления, техлид бекенд команды витрины). Geo по IP без усилителей вкуса и консервантов
moscowdjango
PRO
0
34
Moscow Python Meetup №94. Дмитрий Легчиков (CTO Harmonix). Датасторителлинг на Streamlit
moscowdjango
PRO
0
53
Moscow Python Meetup №94. Александр Гончаров (SlashHash LLC). Это вообще не просто!
moscowdjango
PRO
0
67
Moscow Python Meetup №93. Сурен Хоренян (ВК Реклама, Руководитель команды в команде интерфейсов). Python нельзя Go: почему меня не зацепил новый тренд.
moscowdjango
PRO
0
160
Moscow Python Meetup №92. Евгений Блинов (Яндекс, Руководитель команды интеграции робототехнических решений). Расширяем возможности стандартной библиотеки.
moscowdjango
PRO
0
83
Moscow Python Meetup №92. Иван Елфимов (Ostrovok.ru, Devrel). Пишем свой фреймворк поверх Django
moscowdjango
PRO
0
110
Other Decks in Technology
See All in Technology
GitHub Copilot のテクニック集/GitHub Copilot Techniques
rayuron
33
13k
多領域インシデントマネジメントへの挑戦:ハードウェアとソフトウェアの融合が生む課題/Challenge to multidisciplinary incident management: Issues created by the fusion of hardware and software
bitkey
PRO
2
100
組織に自動テストを書く文化を根付かせる戦略(2024冬版) / Building Automated Test Culture 2024 Winter Edition
twada
PRO
13
3.7k
Oracle Cloudの生成AIサービスって実際どこまで使えるの? エンジニア目線で試してみた
minorun365
PRO
4
280
複雑性の高いオブジェクト編集に向き合う: プラガブルなReactフォーム設計
righttouch
PRO
0
110
サイバー攻撃を想定したセキュリティガイドライン 策定とASM及びCNAPPの活用方法
syoshie
3
1.2k
コンテナセキュリティのためのLandlock入門
nullpo_head
2
320
[Ruby] Develop a Morse Code Learning Gem & Beep from Strings
oguressive
1
150
生成AIをより賢く エンジニアのための RAG入門 - Oracle AI Jam Session #20
kutsushitaneko
4
220
マルチプロダクト開発の現場でAWS Security Hubを1年以上運用して得た教訓
muziyoshiz
2
2.3k
AWS re:Invent 2024で発表された コードを書く開発者向け機能について
maruto
0
190
終了の危機にあった15年続くWebサービスを全力で存続させる - phpcon2024
yositosi
3
4.5k
Featured
See All Featured
Practical Orchestrator
shlominoach
186
10k
Code Review Best Practice
trishagee
65
17k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.5k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Designing Experiences People Love
moore
138
23k
The Invisible Side of Design
smashingmag
298
50k
Into the Great Unknown - MozCon
thekraken
33
1.5k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
How GitHub (no longer) Works
holman
311
140k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
66k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
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%-покрытия на границах (где обычно все
самое вкусное) • Не факт, что будут выявлены критичные баги • Но... • Вы можете прогнозировать поведение программы в стресс-режиме
Применимость • Применим на стыках взаимодействия программ (форматы файлов, передача
данных, внешние события) • Очень сильно помогает выявить на раннем этапе то, что может “завалить” программу в боевом режиме
Вопросы?