Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

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

Moscow Python Meetup
PRO

October 24, 2012
Tweet

More Decks by Moscow Python Meetup

Other Decks in Technology

Transcript

  1. Пример fuzz testing для поиска URL в тексте
    Николай Ходов ([email protected])

    View Slide

  2. Fuzz testing

    View Slide

  3. Условное деление

    View Slide

  4. Задача

    В произвольном тексте:

    Найти все URL'ы

    View Slide

  5. Бесплотные попытки
    https?://(.*?)
    А как же вот это?!

    ya.ru

    It.s.bori.ng

    vk.com/durov

    Google.com/#plus-plus

    //st.domain.com/?q=1

    И еще миллионы
    вариантов...

    View Slide

  6. Пишем регулярку
    (https?://)?{1,3}.(/)*(??)(#?)?
    RFC 1738
    +

    View Slide

  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 строке мозг усиленно отказывается что-либо
    придумывать.

    View Slide

  8. Пусть тестирует сам компьютер!
    Kwh89 ydhfj 09 u >Fully Random URL
    Текст должен остаться неизменным

    View Slide

  9. Баги

    Домены не могут начинаться на “-” (тире)

    RFC не последняя инстанция (//)

    Разные наборы символов для query string и
    для пути

    View Slide

  10. Надежность

    Не дает 100%-покрытия на границах (где
    обычно все самое вкусное)

    Не факт, что будут выявлены критичные
    баги

    Но...

    Вы можете прогнозировать поведение
    программы в стресс-режиме

    View Slide

  11. Применимость

    Применим на стыках взаимодействия
    программ (форматы файлов, передача
    данных, внешние события)

    Очень сильно помогает выявить на раннем
    этапе то, что может “завалить” программу в
    боевом режиме

    View Slide

  12. Вопросы?

    View Slide