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
780
Пример 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
Михаил Васильев (Cтарший специалист по машинному обучению) Поиск аномалий в данных. Алгоритмы iForest и PCA
moscowdjango
PRO
0
50
Мария Рубаненко (Fintech AI, Team lead DS) Повышаем производительность программ: мой путь к succ[ess | inct]
moscowdjango
PRO
0
66
Moscow Python Meetup №100. Зачем рекламе Python, а Python — реклама
moscowdjango
PRO
0
58
Moscow Python Meetup №100. 10 лет в MoscowPython: добрые истории
moscowdjango
PRO
0
36
Moscow Python Meetup №100. Митапы, пицца и карьера: как стикеры помогли стать тимлидом и стартапером
moscowdjango
PRO
0
44
Moscow Python Meetup №99. Михаил Васильев (Cтарший специалист по машинному обучению). Поиск аномалий в данных, алгоритмы HBOS и ECOD
moscowdjango
PRO
0
130
Moscow Python Meetup №99. Артем Геташвили (Senior Python Developer). Как работает спутниковая связь и при чём тут Python?
moscowdjango
PRO
0
77
Moscow Python Meetup №98 Михаил Васильев (Маквес, Старший специалист по машинному обучению). NLP нейросети в защите данных: опыт Makves DCAP
moscowdjango
PRO
0
150
Moscow Python Meetup №98 Алексей Лавриненко (Фаст Софт, Team Lead Python). Недописанная Кафкой Сага
moscowdjango
PRO
0
79
Other Decks in Technology
See All in Technology
菸酒生在 LINE Taiwan 的後端雙刀流
line_developers_tw
PRO
0
210
Create a Rails8 responsive app with Gemini and RubyLLM
palladius
0
120
“プロダクトを好きになれるか“も QAエンジニア転職の大事な判断基準だと思ったの
tomodakengo
0
140
新規プロダクト開発、AIでどう変わった? #デザインエンジニアMeetup
bengo4com
0
470
本部長の代わりに提案書レビュー! KDDI営業が毎日使うAIエージェント「A-BOSS」開発秘話
minorun365
PRO
14
1.8k
TerraformをSaaSで使うとAzureの運用がこんなに楽ちん!HCP Terraformって何?
mnakabayashi
0
150
Nonaka Sensei
kawaguti
PRO
4
730
AWS全冠したので振りかえってみる
tajimon
0
140
Definition of Done
kawaguti
PRO
4
270
活きてなかったデータを活かしてみた話 / Shirokane Kougyou vol 19
sansan_randd
1
350
堅牢な認証基盤の実現 TypeScriptで代数的データ型を活用する
kakehashi
PRO
2
230
AIエージェントの継続的改善のためオブザーバビリティ
pharma_x_tech
6
1.3k
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.3k
Thoughts on Productivity
jonyablonski
69
4.7k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
BBQ
matthewcrist
89
9.7k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
Bash Introduction
62gerente
614
210k
Building a Modern Day E-commerce SEO Strategy
aleyda
41
7.3k
Side Projects
sachag
455
42k
Gamification - CAS2011
davidbonilla
81
5.3k
Designing for Performance
lara
609
69k
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%-покрытия на границах (где обычно все
самое вкусное) • Не факт, что будут выявлены критичные баги • Но... • Вы можете прогнозировать поведение программы в стресс-режиме
Применимость • Применим на стыках взаимодействия программ (форматы файлов, передача
данных, внешние события) • Очень сильно помогает выявить на раннем этапе то, что может “завалить” программу в боевом режиме
Вопросы?