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
750
Пример 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 №90, Алексей Жиряков (онлайн-кинотеатр KION, TechLead Backend команды витрины). Remote Config и АБ-эксперименты
moscowdjango
PRO
0
73
Moscow Python Meetup №90. Александр Ковалев (IVA Technologies, руководитель группы разработки бизнес логики). SPA без скриптизеров =)
moscowdjango
PRO
0
88
Moscow Python Meetup №90. Антон Ершов (Самолет, руководитель функции бэкенд 10D). SAGA: Координации в мире микросервисов
moscowdjango
PRO
0
74
Moscow Python Meetup №89 Алексей Жиряков (онлайн-кинотеатр KION, TechLead Backend команды витрины). Доверяй, но проверяй: как KION обрабатывает свыше 400М продуктовых событий в сутки.
moscowdjango
PRO
0
67
Moscow Python Meetup №88. Евгений Блинов (VK, Руководитель команды). Токены отмены как паттерн и как библиотека cantok
moscowdjango
PRO
0
120
Moscow Python Meetup №89 Павел Мамаев (Сбер, Ведущий инженер по разработке). Классификация запросов клиентов. Дёшево и сердито
moscowdjango
PRO
0
62
Moscow Python Meetup №88. Александр Винокуров (Группа компаний "Самолет", руководитель группы разработки). Практическая сторона тестов
moscowdjango
PRO
0
85
Moscow Python Meetup №88. Иван Елфимов (Ostrovok.ru, тимлид). Переход от Statsd к Prometheus в большом Django-проекте
moscowdjango
PRO
0
95
Moscow Python Meetup №88. Александр Гончаров (Reef Technologies, старший разработчик). Рекрутинг на максималках: что бывает, если наймом занимаются сами программисты
moscowdjango
PRO
0
77
Other Decks in Technology
See All in Technology
推薦システムを本番導入する上で一番優先すべきだったこと~NewsPicks記事推薦機能の改善事例を元に~
morinota
0
130
プレイドにおけるDatadog APMの活用方法
plaidtech
PRO
2
120
成長期に歩みを止めないための創業期の開発文化形成
mayah
6
420
LLMアプリケーションの評価の実践と課題 ~PharmaXにおける今後の展望~
pharma_x_tech
2
170
公共領域から学ぶ クラウド移行についてエンジニアが意識していること
kawakawa2222
0
140
Azure OpenAI Service Dev Day / LLMでできる!使える!生成AIエージェント
masahiro_nishimi
3
800
エンジニア向け会社紹介資料
caddi_eng
14
230k
Git 研修 Basic【MIXI 24新卒技術研修】
mixi_engineers
PRO
0
310
簡単に始めるSnowflakeの機械学習
nayuts
1
190
頼られるのが大好きな 皆さんへ - 支援相手との期待の合わせ方、突き放し方 -/For_people_who_like_to_be_relied_on
naitosatoshi
1
290
サーバーレスAPI(API Gateway+Lambda)とNext.jsで 個人ブログを作ろう!
shuntaka
PRO
0
560
20240725 LLMによるDXのビジョンと、今何からやるべきか @Azure OpenAI Service Dev Day
nrryuya
3
1.2k
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
353
29k
Fireside Chat
paigeccino
25
2.8k
Bash Introduction
62gerente
607
210k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
26
1.6k
The Art of Programming - Codeland 2020
erikaheidi
48
13k
It's Worth the Effort
3n
181
27k
Git: the NoSQL Database
bkeepers
PRO
423
64k
Designing for humans not robots
tammielis
247
25k
Producing Creativity
orderedlist
PRO
340
39k
No one is an island. Learnings from fostering a developers community.
thoeni
17
2.8k
Teambox: Starting and Learning
jrom
130
8.6k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
360
22k
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%-покрытия на границах (где обычно все
самое вкусное) • Не факт, что будут выявлены критичные баги • Но... • Вы можете прогнозировать поведение программы в стресс-режиме
Применимость • Применим на стыках взаимодействия программ (форматы файлов, передача
данных, внешние события) • Очень сильно помогает выявить на раннем этапе то, что может “завалить” программу в боевом режиме
Вопросы?