SlideShare uma empresa Scribd logo
1 de 20
Эволюция к
        Behavior Driven Development
на примере популярного фреймворка
                             JBehave
                       Александр Дергачев
    10 February 2012
Содержание

• Концепция Behavior Driven Development:
    – Test Driven Development
    – Domain Driven Design
    – User Stories

• Использование BDD c JBehave:
    –   Написание и реализация сценариев на Java
    –   Интеграция с Maven и различными IDE
    –   Конфигурация Integration тестов
    –   Генерация отчетов в HTML


2                           www.ExigenServices.com
Концепция Test Driven Development



                        1) Cначала
                       пишется тест




      3) Рефакторинг

                                       2) Код, чтобы
                                        прошел тест




3                             www.ExigenServices.com
Test Driven Development на практике


• Средства предварительной отладки и проверки
  функциональности повышают скорость разработки и качество
  кода
• Некоторые разработчики не могут преодолеть концептуальную
  пропасть, с которой у них ассоциируется слово тестирование
• Опыт показывает, что невозможно проверить то, что еще не
  существует




4                        www.ExigenServices.com
Функциональность первична

Простой пример:
• Что такое online P2P перевод денег?
• Клиент должен иметь возможность перевести указанную сумму
  со своего счета на другой.

Возможный сценарий:
• Что если у клиента не достаточно средств?
• Система должна выдать сообщение об ошибки «…» и баланс не
  должен измениться.




5                       www.ExigenServices.com
Знакомство с Behavior Driven Development

«BDD может легко и эффективно превратить требования в
написанный, протестированный, готовый к релизу код, в то время
как требования достаточно четкие, чтобы каждый понимал что
происходит.»




Метод разработки основанный на User Stories, Test Driven
Development, Domain Driven Design и Continuous Integration.

6                          www.ExigenServices.com
Процесс Behavior Driven Development




7                     www.ExigenServices.com
Концепция Behavior Driven Development

                         1) Рассматриваем
                            один сценарии
                                                        Given user has an
                          2) Описываем                  available balance of $10
                              N-ый шаг

                              3) Код шага
                              не успешен                   user.
                                                           setBalance(value);
                      5)
                  Рефакторинг
                                          4) Код шага
                                             успешен

        7) Рефакторинг
                                                   6) Переходим
                          jbehave,
                                                     к след. шагу
                          easyb



8                         www.ExigenServices.com
Использование BDD c

• JBehave – это популярный Behavior Driven Development
  фреймворк для платформы Java, основанная на принципах xUnit
• Автоматизирует тестирование User Stories:
   – Пошаговый разбор сценариев в разных форматах
   – Синхронное и асинхронное выполнение сценариев
• Расширяет Continuous Integration
• Предоставляет подробные отчеты в HTML




9                         www.ExigenServices.com
Написание сценариев для

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
Реализация сценариев с

@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
Конфигурация

public class P2PSendMoney extends JUnitStory {

     @Given("...") { ... }

     @Override
     public Configuration configuration() {
         return new MostUsefulConfiguration()
             .useStoryReporterBuilder(
                 new StoryReporterBuilder()
                 .withFormats(CONSOLE, HTML, XML));
         }
     }
}


12                    www.ExigenServices.com
Инструментальное окружение




                Test Runner                            Шаги         Сценарии
          jUnit / Spring / TestNG                 (Given, When…)    (User Stories)



     Конфигурация       Интеграция                  Selenium        Application
       (Embedder)        (Maven, Ant)               (Web testing)     code




13                                  www.ExigenServices.com
Интеграция




14           www.ExigenServices.com
Integration тесты c

<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<executions>
    <execution>
        <goals>
            <goal>integration-test</goal>
       </goals>
    </execution>
</executions>
<configuration>
    <includes>
        <include>**/integration/*.java</include>
    </includes>
</configuration>

15                       www.ExigenServices.com
Integration тесты c

<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<configuration>
    <fork>true</fork>
</configuration>
<executions>
    <execution>
        <id>start-tomcat</id>
        <phase>pre-integration-test</phase>
        <goals>
            <goal>run</goal>
        </goals>
     </execution>
</executions>

16                       www.ExigenServices.com
Генерация отчетов в


     Stories           Scenarios                  Steps       …     Duration       View

     Name      Total   Successful   Failed     Total      …       (hh:mm:ss.SSS)
                                                                                   stats
       …        6          2          4          25               (00:00:05.132)   html
                                                                                    xml
  P2P                                                                              stats
 Send           5          5          0          35               (00:00:15.262)   html
 Money                                                                              xml
                                                                                   stats
      Total     11         7          4          60               (00:00:20.394)   html
                                                                                    xml



17                                   www.ExigenServices.com
Генерация отчетов в


                                   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                   name   balance   amount   mail
And has an available balance of <balance>                  Alex   $90       $90.01   ad@...
When he enters in the amount field <amount>                Bob    $0        $10      hp@...
<…>                                                        Jack   $0.01     $0.02    go@...



18                                     www.ExigenServices.com
Ресурсы

• В поисках качества кода: Знакомство с 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
Спасибо за внимание!

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

Mais conteúdo relacionado

Mais procurados

Dependency Injection на примере Unity и NInject
Dependency Injection на примере Unity и NInjectDependency Injection на примере Unity и NInject
Dependency Injection на примере Unity и NInjectakrakovetsky
 
C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.Igor Shkulipa
 
Введение в язык программирования «Java»
Введение в язык программирования «Java»Введение в язык программирования «Java»
Введение в язык программирования «Java»Unguryan Vitaliy
 
C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.Igor Shkulipa
 
введение в Javascript
введение в Javascriptвведение в Javascript
введение в Javascriptinqubick
 
Dependency injection
Dependency injectionDependency injection
Dependency injectionGetDev.NET
 
C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.Igor Shkulipa
 
ук 03.003.01 2011
ук 03.003.01 2011ук 03.003.01 2011
ук 03.003.01 2011etyumentcev
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.Igor Shkulipa
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansmetaform
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.Igor Shkulipa
 
Legacy: как победить в гонке (Joker)
Legacy: как победить в гонке (Joker)Legacy: как победить в гонке (Joker)
Legacy: как победить в гонке (Joker)Victor_Cr
 
Graal, Truffle, SubstrateVM and other perks: what are those and why do you ne...
Graal, Truffle, SubstrateVM and other perks: what are those and why do you ne...Graal, Truffle, SubstrateVM and other perks: what are those and why do you ne...
Graal, Truffle, SubstrateVM and other perks: what are those and why do you ne...Oleg Chirukhin
 
Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.Anton Moiseenko
 
Java Core. Lecture# 1. Intro
Java Core. Lecture# 1. IntroJava Core. Lecture# 1. Intro
Java Core. Lecture# 1. IntroAnton Moiseenko
 
Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.Anton Moiseenko
 

Mais procurados (19)

Dependency Injection на примере Unity и NInject
Dependency Injection на примере Unity и NInjectDependency Injection на примере Unity и NInject
Dependency Injection на примере Unity и NInject
 
Java: вчера, сегодня, завтра
Java: вчера, сегодня, завтраJava: вчера, сегодня, завтра
Java: вчера, сегодня, завтра
 
C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.
 
Введение в язык программирования «Java»
Введение в язык программирования «Java»Введение в язык программирования «Java»
Введение в язык программирования «Java»
 
C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.C++ STL & Qt. Занятие 02.
C++ STL & Qt. Занятие 02.
 
введение в Javascript
введение в Javascriptвведение в Javascript
введение в Javascript
 
Dependency injection
Dependency injectionDependency injection
Dependency injection
 
C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.
 
ук 03.003.01 2011
ук 03.003.01 2011ук 03.003.01 2011
ук 03.003.01 2011
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.
 
Spring AOP
Spring AOPSpring AOP
Spring AOP
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeans
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.
 
Legacy: как победить в гонке (Joker)
Legacy: как победить в гонке (Joker)Legacy: как победить в гонке (Joker)
Legacy: как победить в гонке (Joker)
 
Step 1
Step 1Step 1
Step 1
 
Graal, Truffle, SubstrateVM and other perks: what are those and why do you ne...
Graal, Truffle, SubstrateVM and other perks: what are those and why do you ne...Graal, Truffle, SubstrateVM and other perks: what are those and why do you ne...
Graal, Truffle, SubstrateVM and other perks: what are those and why do you ne...
 
Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.Java Core. Lecture# 3. Part# 3. Multithreading.
Java Core. Lecture# 3. Part# 3. Multithreading.
 
Java Core. Lecture# 1. Intro
Java Core. Lecture# 1. IntroJava Core. Lecture# 1. Intro
Java Core. Lecture# 1. Intro
 
Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.
 

Destaque

Разработка через тестирование (TDD и BDD)
Разработка через тестирование (TDD и BDD)Разработка через тестирование (TDD и BDD)
Разработка через тестирование (TDD и BDD)Vyacheslav Lyalkin
 
Автоматическое тестирование и с чем его едят
Автоматическое тестирование и с чем его едятАвтоматическое тестирование и с чем его едят
Автоматическое тестирование и с чем его едятMarina Peregud
 
VIQA - Тестирование UI с помощью Виртуального интеллекта
VIQA - Тестирование UI с помощью Виртуального интеллектаVIQA - Тестирование UI с помощью Виртуального интеллекта
VIQA - Тестирование UI с помощью Виртуального интеллектаSQALab
 
Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)
Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)
Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)Dmytro Zharii
 
Behavior Driven Development and Automation Testing Using Cucumber
Behavior Driven Development and Automation Testing Using CucumberBehavior Driven Development and Automation Testing Using Cucumber
Behavior Driven Development and Automation Testing Using CucumberKMS Technology
 

Destaque (7)

Разработка через тестирование (TDD и BDD)
Разработка через тестирование (TDD и BDD)Разработка через тестирование (TDD и BDD)
Разработка через тестирование (TDD и BDD)
 
Автоматическое тестирование и с чем его едят
Автоматическое тестирование и с чем его едятАвтоматическое тестирование и с чем его едят
Автоматическое тестирование и с чем его едят
 
BDD and Behave
BDD and BehaveBDD and Behave
BDD and Behave
 
VIQA - Тестирование UI с помощью Виртуального интеллекта
VIQA - Тестирование UI с помощью Виртуального интеллектаVIQA - Тестирование UI с помощью Виртуального интеллекта
VIQA - Тестирование UI с помощью Виртуального интеллекта
 
Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)
Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)
Тесты в стиле BDD на C# (Подходы и инструменты; SpecFlow, BDDfy)
 
Cucumber & gherkin language
Cucumber & gherkin languageCucumber & gherkin language
Cucumber & gherkin language
 
Behavior Driven Development and Automation Testing Using Cucumber
Behavior Driven Development and Automation Testing Using CucumberBehavior Driven Development and Automation Testing Using Cucumber
Behavior Driven Development and Automation Testing Using Cucumber
 

Semelhante a Эволюция к Behavior Driven Development на примере популярного фреймворка JBehave

Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Ontico
 
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tips
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tipsКостянтин Чаус — Monitoring of huge Drupal site. Tools and tips
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tipsLEDC 2016
 
Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
 Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере" Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"MskDotNet Community
 
Presentation
PresentationPresentation
PresentationVasayXTX
 
What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012InTRUEdeR
 
Moscow.JS Windows 10 и Project Westminster
Moscow.JS Windows 10 и Project WestminsterMoscow.JS Windows 10 и Project Westminster
Moscow.JS Windows 10 и Project WestminsterConstantin Kichinsky
 
Микросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesМикросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesDenis Izmaylov
 
М. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionМ. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionAlbina Tiupa
 
Евгений Ртищев "Мобильная платформа на ReactNative"
Евгений Ртищев "Мобильная платформа на ReactNative"Евгений Ртищев "Мобильная платформа на ReactNative"
Евгений Ртищев "Мобильная платформа на ReactNative"IT Event
 
Михаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с CodeceptionМихаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с CodeceptionAlbina Tiupa
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCDevDay
 
Высокопроизводительные приложения на базе Windows Azure
Высокопроизводительные приложения на базе Windows AzureВысокопроизводительные приложения на базе Windows Azure
Высокопроизводительные приложения на базе Windows AzureAlexander Feschenko
 
Высокопроизводительные приложения на базе Windows Azure. Пример реального про...
Высокопроизводительные приложения на базе Windows Azure. Пример реального про...Высокопроизводительные приложения на базе Windows Azure. Пример реального про...
Высокопроизводительные приложения на базе Windows Azure. Пример реального про...UNETA
 
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...CodeFest
 
State of the Standardized Web
State of the Standardized WebState of the Standardized Web
State of the Standardized WebYandex
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NETVitaly Baum
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5Provectus
 

Semelhante a Эволюция к Behavior Driven Development на примере популярного фреймворка JBehave (20)

Behavior Driven Development
Behavior Driven DevelopmentBehavior Driven Development
Behavior Driven Development
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
 
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tips
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tipsКостянтин Чаус — Monitoring of huge Drupal site. Tools and tips
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tips
 
Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
 Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере" Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
 
Presentation
PresentationPresentation
Presentation
 
What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012
 
Moscow.JS Windows 10 и Project Westminster
Moscow.JS Windows 10 и Project WestminsterMoscow.JS Windows 10 и Project Westminster
Moscow.JS Windows 10 и Project Westminster
 
Микросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesМикросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и Kubernetes
 
М. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с CodeceptionМ. Боднарчук Современное функциональное тестирование с Codeception
М. Боднарчук Современное функциональное тестирование с Codeception
 
Aspect Oriented Approach
Aspect Oriented ApproachAspect Oriented Approach
Aspect Oriented Approach
 
Евгений Ртищев "Мобильная платформа на ReactNative"
Евгений Ртищев "Мобильная платформа на ReactNative"Евгений Ртищев "Мобильная платформа на ReactNative"
Евгений Ртищев "Мобильная платформа на ReactNative"
 
Михаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с CodeceptionМихаил Боднарчук Современное функциональное тестирование с Codeception
Михаил Боднарчук Современное функциональное тестирование с Codeception
 
Telerik Web aii
Telerik Web aiiTelerik Web aii
Telerik Web aii
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
 
Высокопроизводительные приложения на базе Windows Azure
Высокопроизводительные приложения на базе Windows AzureВысокопроизводительные приложения на базе Windows Azure
Высокопроизводительные приложения на базе Windows Azure
 
Высокопроизводительные приложения на базе Windows Azure. Пример реального про...
Высокопроизводительные приложения на базе Windows Azure. Пример реального про...Высокопроизводительные приложения на базе Windows Azure. Пример реального про...
Высокопроизводительные приложения на базе Windows Azure. Пример реального про...
 
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
CodeFest 2012. Сошников Д. — Разработка мобильных приложений на платформе Mic...
 
State of the Standardized Web
State of the Standardized WebState of the Standardized Web
State of the Standardized Web
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NET
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
 

Mais de Return on Intelligence

Profsoux2014 presentation by Pavelchuk
Profsoux2014 presentation by PavelchukProfsoux2014 presentation by Pavelchuk
Profsoux2014 presentation by PavelchukReturn on Intelligence
 
Types of testing and their classification
Types of testing and their classificationTypes of testing and their classification
Types of testing and their classificationReturn on Intelligence
 
Service design principles and patterns
Service design principles and patternsService design principles and patterns
Service design principles and patternsReturn on Intelligence
 
Differences between Testing in Waterfall and Agile
Differences between Testing in Waterfall and AgileDifferences between Testing in Waterfall and Agile
Differences between Testing in Waterfall and AgileReturn on Intelligence
 
Организация внутренней системы обучения
Организация внутренней системы обученияОрганизация внутренней системы обучения
Организация внутренней системы обученияReturn on Intelligence
 
Shared position in a project: testing and analysis
Shared position in a project: testing and analysisShared position in a project: testing and analysis
Shared position in a project: testing and analysisReturn on Intelligence
 
Оценка задач выполняемых по итеративной разработке
Оценка задач выполняемых по итеративной разработкеОценка задач выполняемых по итеративной разработке
Оценка задач выполняемых по итеративной разработкеReturn on Intelligence
 
Successful interview for a young IT specialist
Successful interview for a young IT specialistSuccessful interview for a young IT specialist
Successful interview for a young IT specialistReturn on Intelligence
 

Mais de Return on Intelligence (20)

Profsoux2014 presentation by Pavelchuk
Profsoux2014 presentation by PavelchukProfsoux2014 presentation by Pavelchuk
Profsoux2014 presentation by Pavelchuk
 
Agile Project Grows
Agile Project GrowsAgile Project Grows
Agile Project Grows
 
Types of testing and their classification
Types of testing and their classificationTypes of testing and their classification
Types of testing and their classification
 
Time Management
Time ManagementTime Management
Time Management
 
Service design principles and patterns
Service design principles and patternsService design principles and patterns
Service design principles and patterns
 
Differences between Testing in Waterfall and Agile
Differences between Testing in Waterfall and AgileDifferences between Testing in Waterfall and Agile
Differences between Testing in Waterfall and Agile
 
Windows Azure: Quick start
Windows Azure: Quick startWindows Azure: Quick start
Windows Azure: Quick start
 
Windows azurequickstart
Windows azurequickstartWindows azurequickstart
Windows azurequickstart
 
Организация внутренней системы обучения
Организация внутренней системы обученияОрганизация внутренней системы обучения
Организация внутренней системы обучения
 
Shared position in a project: testing and analysis
Shared position in a project: testing and analysisShared position in a project: testing and analysis
Shared position in a project: testing and analysis
 
Introduction to Business Etiquette
Introduction to Business EtiquetteIntroduction to Business Etiquette
Introduction to Business Etiquette
 
Agile Testing Process
Agile Testing ProcessAgile Testing Process
Agile Testing Process
 
Оценка задач выполняемых по итеративной разработке
Оценка задач выполняемых по итеративной разработкеОценка задач выполняемых по итеративной разработке
Оценка задач выполняемых по итеративной разработке
 
Meetings arranging
Meetings arrangingMeetings arranging
Meetings arranging
 
How to develop your creativity
How to develop your creativityHow to develop your creativity
How to develop your creativity
 
Introduction to python
Introduction to pythonIntroduction to python
Introduction to python
 
The art of project estimation
The art of project estimationThe art of project estimation
The art of project estimation
 
Successful interview for a young IT specialist
Successful interview for a young IT specialistSuccessful interview for a young IT specialist
Successful interview for a young IT specialist
 
Risk Management
Risk ManagementRisk Management
Risk Management
 
Resolving conflicts
Resolving conflictsResolving conflicts
Resolving conflicts
 

Эволюция к Behavior Driven Development на примере популярного фреймворка JBehave

  • 1. Эволюция к Behavior Driven Development на примере популярного фреймворка JBehave Александр Дергачев 10 February 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начала пишется тест 3) Рефакторинг 2) Код, чтобы прошел тест 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
  • 7. Процесс Behavior Driven Development 7 www.ExigenServices.com
  • 8. Концепция Behavior Driven Development 1) Рассматриваем один сценарии Given user has an 2) Описываем available balance of $10 N-ый шаг 3) Код шага не успешен user. setBalance(value); 5) Рефакторинг 4) Код шага успешен 7) Рефакторинг 6) Переходим jbehave, к след. шагу easyb 8 www.ExigenServices.com
  • 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
  • 13. Инструментальное окружение Test Runner Шаги Сценарии jUnit / Spring / TestNG (Given, When…) (User Stories) Конфигурация Интеграция Selenium Application (Embedder) (Maven, Ant) (Web testing) code 13 www.ExigenServices.com
  • 14. Интеграция 14 www.ExigenServices.com
  • 15. Integration тесты c <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <executions> <execution> <goals> <goal>integration-test</goal> </goals> </execution> </executions> <configuration> <includes> <include>**/integration/*.java</include> </includes> </configuration> 15 www.ExigenServices.com
  • 16. Integration тесты c <groupId>org.codehaus.mojo</groupId> <artifactId>tomcat-maven-plugin</artifactId> <configuration> <fork>true</fork> </configuration> <executions> <execution> <id>start-tomcat</id> <phase>pre-integration-test</phase> <goals> <goal>run</goal> </goals> </execution> </executions> 16 www.ExigenServices.com
  • 17. Генерация отчетов в Stories Scenarios Steps … Duration View Name Total Successful Failed Total … (hh:mm:ss.SSS) stats … 6 2 4 25 (00:00:05.132) html xml P2P stats Send 5 5 0 35 (00:00:15.262) html Money xml stats Total 11 7 4 60 (00:00:20.394) html xml 17 www.ExigenServices.com
  • 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 name balance amount mail And has an available balance of <balance> Alex $90 $90.01 ad@... When he enters in the amount field <amount> 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