bdd in python - Кирилл Борисов, pycon ru 2014
DESCRIPTION
TRANSCRIPT
BDD IN PYTHON
WATERFALL
• Применяется с 1956 года
• Длительный цикл разработки
• Переход между стадиями только при завершении предыдущей
• Все зависит от первоначальных требований
XP (EXTREME PROGRAMMING)
• Повышение качества конечного ПО
• Частые релизы
• Короткие циклы разработки
• Постоянный контакт с заказчиком
• Быстрая реакция на изменение требований
TDD(TEST-DRIVEN DEVELOPMENT)
• Возник как следствие XP
• Во главе угла – контроль качества
• Короткий цикл разработки:
– Написание тестов
– Написание кода
– Рефакторинг кода
• Быстрая локализация ошибок
ВОПРОСЫ К TDD
• «А что мы тестируем?»
• «Каков объем тестов?»
• «Как называть тесты?»
• «Из-за чего произошла ошибка?»
TDDНЕ ВСЕ ТАК ПРОСТО :-(
BEHAVIOR-DRIVEN DEVELOPMENT
"BDD is a second-generation, outside-in, pull-based, multiple-stakeholder,
multiple-scale, high automation, agile methodology".
Dan North
BDDОСНОВНЫЕ ВЕХИ
• 2004 - начата работа над JBehave
• 2006 - выходит статья "Introducing BDD"
• 2007 - создается RBehave, RSpec.
• 2009 - выходит первая версия Cucumber.
BDDЦИКЛ РАЗРАБОТКИ
1. Анализ User Story
2. Расстановка приоритетов
3. Создание и рефакторинг сценария
4. Написание кода
5. Рефакторинг кода
6. ?????????
7. PROFIT!!!
BDDДЬЯВОЛ В МЕЛОЧАХ
• BDD дополняет TDD
• Сценарии поведения не заменяют тестов
• Придется вспомнить русский язык
• Придется общаться с людьми :-(
BDDGHERKIN
• Язык описания поведения системы
• Основные сущности:
• Функции (Feature)
• Сценарии (Scenario)
• Шаги (Given, When, Then)
BDDПРИМЕР СЦЕНАРИЯ НА GHERKIN
Функция: срабатывание флага уведомления Для того, чтобы быть в курсе состояния акций В качестве трейдера Я хочу получать оповещения о изменениях курса
Сценарий: трейдер уведомляется о превышении Дано акции и порог оповещения равен 15.0 Когда стоимость акций равна 6 То уведомление в состоянии "ВЫКЛ" Когда стоимость акций равна 16 То уведомление в состоянии "ВКЛ"
LETTUCEhttp://lettuce.it
• Сравнительно точный порт Cucumber
• Интеграция с Django
• Ручное управление общим состоянием
• Не очень стабильная работа
FRESHENhttps://github.com/rlisagor/freshen
• Различные контексты исполнения
• Интеграция с nose
• Интеграция с nose
• Мало обработчиков этапов исполнения
CUCUMBERhttp://cukes.info
• Он работает!
• Работа через rubypython
• Ruby? В моем Python?!
BEHAVEhttp://pythonhosted.org/behave
• Гибкая настройка
• Подробная документация
• Поддержка тэгов (--tags)
• Активно развивается
• Среднее качество кода :-(
PYVOWShttp://heynemann.github.io/pyvows/
• Асинхронное выполнение тестов
• Сценарий описыватся в коде (путь xBehave)
• Трудночитаемый синтаксис