1. Эволюция к
Behavior Driven Development
на примере популярного фреймворка
JBehave
Александр Дергачев
30 May 2012
2. Содержание
• Концепция Behavior Driven Development:
– Test Driven Development
– Domain Driven Design
– User Stories
• Использование BDD c JBehave:
– Написание и реализация сценариев на Java
– Интеграция с Maven и различными IDE
– Конфигурация Integration тестов
– Генерация отчетов в HTML
2 www.ExigenServices.com
3. Концепция Test Driven Development
1) Cначала
пишется тест
2) Код, чтобы
прошел тест
3) Рефакторинг
3 www.ExigenServices.com
4. Test Driven Development на практике
• Средства предварительной отладки и проверки
функциональности повышают скорость разработки и качество
кода
• Некоторые разработчики не могут преодолеть концептуальную
пропасть, с которой у них ассоциируется слово тестирование
• Опыт показывает, что невозможно проверить то, что еще не
существует
4 www.ExigenServices.com
5. Функциональность первична
Простой пример:
• Что такое online P2P перевод денег?
• Клиент должен иметь возможность перевести указанную сумму
со своего счета на другой.
Возможный сценарий:
• Что если у клиента не достаточно средств?
• Система должна выдать сообщение об ошибки «…» и баланс не
должен измениться.
5 www.ExigenServices.com
6. Знакомство с Behavior Driven Development
«BDD может легко и эффективно превратить требования в
написанный, протестированный, готовый к релизу код, в то время
как требования достаточно четкие, чтобы каждый понимал что
происходит.»
Метод разработки основанный на User Stories, Test Driven
Development, Domain Driven Design и Continuous Integration.
6 www.ExigenServices.com
8. Концепция Behavior Driven Development
1) Рассматриваем
один сценарии
2) Описываем
8 www.ExigenServices.com
6) Переходим
к след. шагу
7) Рефакторинг
5)
Рефакторинг
4) Код шага
успешен
N-ый шаг
3) Код шага
не успешен
jbehave,
easyb
Given user has an
available balance of $10
user.
setBalance(value);
9. Использование BDD c
• JBehave – это популярный Behavior Driven Development
фреймворк для платформы Java, основанная на принципах xUnit
• Автоматизирует тестирование User Stories:
– Пошаговый разбор сценариев в разных форматах
– Синхронное и асинхронное выполнение сценариев
• Расширяет Continuous Integration
• Предоставляет подробные отчеты в HTML
9 www.ExigenServices.com
10. Написание сценариев для
Scenario: Payer doesn't have enough funds
Given Alex is logged into account page
And has an available balance of $90
When he enters in the amount field $90.01
And enters in the recipient field ad@java.com
And clicks on the submit button in the form
Then Alex should see error message «…»
And available balance remains unchanged
10 www.ExigenServices.com
11. Реализация сценариев с
@Given("has an available balance of $amount")
public void aBalance(String amount) {
user.setBalance(amount);
}
@When("clicks on the $name button in the form")
public void clickButton(String name) {
selenium.click(name);
}
@Then("$user should see error message $text")
public void errorMsg(String user, String text) {
Assert.fail("not implemented");
}
11 www.ExigenServices.com
12. Конфигурация
public class P2PSendMoney extends JUnitStory {
@Given("...") { ... }
@Override
public Configuration configuration() {
return new MostUsefulConfiguration()
.useStoryReporterBuilder(
new StoryReporterBuilder()
.withFormats(CONSOLE, HTML, XML));
}
}
}
12 www.ExigenServices.com
17. Генерация отчетов в
Stories Scenarios Steps … Duration View
Name Total Successful Failed Total … (hh:mm:ss.SSS)
… 6 2 4 25 (00:00:05.132)
17 www.ExigenServices.com
stats
html
xml
P2P
Send
Money
5 5 0 35 (00:00:15.262)
stats
html
xml
Total 11 7 4 60 (00:00:20.394)
stats
html
xml
18. Генерация отчетов в
P2P Send Money
com/forceassociates/onpay_webtester/stories/P2PSendMoney.story.txt
Scenario: Person registers for OnPay Examples
<…>
Scenario: Payer doesn’t have enough funds Examples
Given <name> is logged into account page
And has an available balance of <balance>
When he enters in the amount field <amount>
<…>
name balance amount mail
Alex $90 $90.01 ad@...
Bob $0 $10 hp@...
Jack $0.01 $0.02 go@...
18 www.ExigenServices.com
19. Ресурсы
• В поисках качества кода: Знакомство с Behavior Driven
Development, Эндрю Гловер, IBM Developer Works
• Behavior Driven Development, Gorden Force, The San Francisco Java
User Group
• JBehave Official Website, http://jbehave.org/index.html
• What’s in a Story?, Dan North, http://dannorth.net/whats-in-a-story
• Behavior Driven Development Official Website,
http://behaviour-driven.org
19 www.ExigenServices.com
20. Спасибо за внимание!
Given that you have heard the presentation
And discovered that BDD is really fun
When you are thinking about testing strategies
Then you should give BDD a chance!
Questions?
mailto: Aleksander.Dergachev@exigenservices.com
20 www.ExigenServices.com
Editor's Notes
Behavior Driven Development (BDD) - эволюционный метод разработки, основанный на Test Driven Development и Domain Driven Design. Что если вместо того, чтобы думать в терминах написания тестов и тестирования компонентов, начать думать о функциональности? Говоря про функциональность, я имею в виду как приложение должно вести себя, фактически его спецификацию. Познакомьтесь с BDD с помощью нового и популярного фреймворка JBehave и узнайте, что произойдет, если фокусироваться на том, как программа работает, а не на том, что она производит в конечном итоге. Получите опыт использования JBehave для написания сценариев и их реализации на Java, интеграции с Maven и различными IDE, внедрение в автоматический процесс сборки для Integration тестов Web сервисов, генерации подробных отчетов в HTML и других возможностей
Вебинар будет полезен всем, кто работает над созданием корпоративных систем на Java: архитекторам и менеджерам, которые выбирают метод разработки приложения или планирует найти лучшую замену уже используемому; разработчикам и специалистам по тестированию, которые хотят использовать четкие, структурированные описания функциональности системы и легко трансформировать их в каркас для тестирования за минимальное время с помощью современных фреймворков; заказчикам и аналитикам, которые ищут простой и эффективный способ описания требований и хотят отслеживать создание функциональности системы в реальном времени.