Пример fuzz testing для поиска URL в тексте                        Николай Ходов (nkhodov@gmail.com)
Fuzz testing
Условное деление
Задача●   В произвольном тексте:●   Найти все URLы
Бесплотные попытки                     А как же вот это?!                 ●   ya.ru                 ●   It.s.bori.ng      ...
Пишем регулярку                                              RFC 1738                              +(https?://)?<domain>{1...
Тестируем вручную●   self.assertEqual(strip_links(word1 https://ya.ru word2), word1    word2)●   self.assertEqual(strip_li...
Пусть тестирует сам компьютер!Fully Random URL   Kwh89 ydhfj 09 u ><LAKSUy236 vТекст должен остаться неизменным
Баги●   Домены не могут начинаться на “-” (тире)●   RFC не последняя инстанция (//)●   Разные наборы символов для query st...
Надежность●   Не дает 100%-покрытия на границах (где    обычно все самое вкусное)●   Не факт, что будут выявлены критичные...
Применимость●   Применим на стыках взаимодействия    программ (форматы файлов, передача    данных, внешние события)●   Оче...
Вопросы?
Upcoming SlideShare
Loading in …5
×

Пример fuzzy testing для поиска URL в тексте

499
-1

Published on

Как fuzzy testing помог дополнить регулярку и выявить не самые очевидные баги.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
499
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
5
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Пример fuzzy testing для поиска URL в тексте

  1. 1. Пример fuzz testing для поиска URL в тексте Николай Ходов (nkhodov@gmail.com)
  2. 2. Fuzz testing
  3. 3. Условное деление
  4. 4. Задача● В произвольном тексте:● Найти все URLы
  5. 5. Бесплотные попытки А как же вот это?! ● ya.ru ● It.s.bori.ng ● vk.com/durov ● Google.com/#plus-plus ● //st.domain.com/?q=1https?://(.*?) ● И еще миллионы вариантов...
  6. 6. Пишем регулярку RFC 1738 +(https?://)?<domain>{1,3}.<TLD>(/<path>)*(?<query_string>?)(#<hashtag>?)?
  7. 7. Тестируем вручную● 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 строке мозг усиленно отказывается что-либо придумывать.
  8. 8. Пусть тестирует сам компьютер!Fully Random URL Kwh89 ydhfj 09 u ><LAKSUy236 vТекст должен остаться неизменным
  9. 9. Баги● Домены не могут начинаться на “-” (тире)● RFC не последняя инстанция (//)● Разные наборы символов для query string и для пути
  10. 10. Надежность● Не дает 100%-покрытия на границах (где обычно все самое вкусное)● Не факт, что будут выявлены критичные баги● Но...● Вы можете прогнозировать поведение программы в стресс-режиме
  11. 11. Применимость● Применим на стыках взаимодействия программ (форматы файлов, передача данных, внешние события)● Очень сильно помогает выявить на раннем этапе то, что может “завалить” программу в боевом режиме
  12. 12. Вопросы?
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×