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
860
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Пример fuzzy testing для поиска URL в тексте
Как fuzzy testing помог дополнить регулярку и выявить не самые очевидные баги.
Moscow Python Meetup
PRO
October 24, 2012
More Decks by Moscow Python Meetup
See All by Moscow Python Meetup
Moscow Python Meetup №111. Как мы изобретали Temporal, пытаясь просто создать приложение
moscowdjango
PRO
0
98
Moscow Python Meetup №110. Артём Тарасов (Альфа-Банк, Senior Engineer). Менторство как допинг: Как прокачать свои хард-скиллы, обучая других
moscowdjango
PRO
0
74
Moscow Python Meetup №110. Алёна Тямейкина (Островок.ру, Python Developer). Автоматизации процессов разработки
moscowdjango
PRO
0
79
Moscow Python Meetup №110. Адриан Макриденко (ГК Астра Линукс, разработчик серверной части). Токены авторизации: почему JWT легко использовать неправильно и как это исправляет PASETO?
moscowdjango
PRO
0
93
Moscow Python Meetup №109. Георгий Дьячков (Альфа банк, Главный разработчик). Векторные базы в агентной архитектуре и как изменятся вопросы на собеседованиях в 2026
moscowdjango
PRO
0
110
Moscow Python Meetup №109. Евгений Блинов (The Mutating Company). Ближайшее будущее мутационного тестирования на Python
moscowdjango
PRO
0
99
Moscow Python Meetup №108. Воркшоп "Построение AI-агента: Говори с данными на языке бизнеса"
moscowdjango
PRO
0
160
Moscow Python Meetup №108. Gather. Inspire. Deliver.
moscowdjango
PRO
0
130
Moscow Python Meetup №107. Бесшовные релизы глазами разработчика: обновляем код Облака без API
moscowdjango
PRO
0
120
Other Decks in Technology
See All in Technology
あなたの知らないバージョン命名規則
sat
PRO
2
850
現場の暗黙知を継承するAIエージェント — 対話から生まれる長期記憶と Skills
atsukish
0
140
OpenID for Verifiable Credentials 実装から見えた相互運用性確保までの道のり(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
360
Eight Engineering Unit 紹介資料
sansan33
PRO
3
8.3k
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.5k
Data Hubグループ 紹介資料
sansan33
PRO
0
3.2k
1.5時間を無駄にして学んだwsl2におけるaptとsnapの選択と仕組み
yosaka0123
0
470
書籍『生成AIの安全性入門』の入門
wataoka
0
100
サービス内で複数のOP・ASを連鎖させる(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
350
hookで自作する Claude Code の「実況ボード」
shinyasaita
2
240
ハッカソンで入賞した話 @ Findy LT
asari194617
0
1.5k
EUDIWの枠組みを出発点に民間エコシステムの在り方を考える(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
350
Featured
See All Featured
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Leo the Paperboy
mayatellez
8
2.2k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.6k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Amusing Abliteration
ianozsvald
1
270
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
Technical Leadership for Architectural Decision Making
baasie
3
540
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
260
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
390
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
750
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
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%-покрытия на границах (где обычно все
самое вкусное) • Не факт, что будут выявлены критичные баги • Но... • Вы можете прогнозировать поведение программы в стресс-режиме
Применимость • Применим на стыках взаимодействия программ (форматы файлов, передача
данных, внешние события) • Очень сильно помогает выявить на раннем этапе то, что может “завалить” программу в боевом режиме
Вопросы?