SlideShare una empresa de Scribd logo
1 de 47
Descargar para leer sin conexión
Agile with cucumber or
     BDD with fun
     Leonid Dinershtein,
         december, 2011
Chapter I
Behaviour Driven Development with elegance and joy
http://projectcartoon.com/
CHAOS Report




               http://www.projectsmart.co.uk/docs/chaos-report.pdf
Проблемы?
Сорвем сроки
... выйдем из бюджета
Реализуем не то
... не так
Нестабильно
Невозможно поддерживать
Решения
Методология разработки
Развитие программистов
Развитие менеджера
Развитие заказчика
Agile манифест
Люди и взаимодействие важнее процессов и инструментов
Работающий продукт важнее исчерпывающей документации
Сотрудничество с заказчиком важнее согласования условий контракта
Готовность к изменениям важнее следования первоначальному плану
BDD
Behavior-driven development (or BDD) is an
agile software development technique devised
by Dan North as a response to the issues he
encountered whilst teaching Test-Driven
Development:
●  Where to start
●  What to test and what not to test
●  How much to test in one go
●  What to call the tests
●  How to understand why a test fails
BDD
“Behaviour-driven development is about
implementing an application by describing its
behaviour from the perspective of its
stakeholders”
Хороший менеджер
Хороший менеджер
● Должен обладать способностью понимать
  людей разного склада ума (от
  разработчиков, до бизнес-заказчиков) и
  умение помогать переводить мысли с
  языка одних на язык других
● Умеет не ссать и не ныть! Даже когда ссыкотно и ныть хочется.
● Знает чем отличается Quality Assurance
  от тестирования
● Понимает, что разработанный софт это
  не конец проекта, а всего лишь начало. И
  знает чего
                                           http://cartmendum.livejournal.com/93084.html
Сколько это стоит?
и как все это
продать?
Скорость разработки    Стоимость поддержки




  Стоимость продукта   Квалификация команды
Chapter II
Cucumber
Cucumber
● Средство для автоматизированного
  тестирования
● Позволяет описывать поведение системы
  на естественном языке
● Является основным инструментом в
  Behaviour Driven Development (BDD)
План огурец
1. Опишите поведение системы на естественном
   языке(Напишите сценарий поведения)
2. Опишите шаги сценария на языке
   программирования
3. Запустите тесты и убедитесь, что они не
   проходит
4. Напишите код, который реализует поведение,
   описанное в тестах
5. Запустите тесты снова и убедитесь, что
   некоторые тесты начали проходить
6. Повторите 2-5 шаги, пока все тесты не начнут
   проходить
7. Повторите 1-6 шаги, пока не закончатся деньги
   у заказчика
Feature: Title
 In order to [Business Value]
 As a [Role]
 I want to [Some action]

Scenario: Title
 Given [Context]
 When [Action]
 Then [Outcome]
# language: ru
Функционал: Сложение чисел
Чтобы не складывать в уме
Все, у кого с этим туго
Хотят автоматическое сложение целых чисел

 Сценарий: Сложение двух целых чисел
  Допустим я ввожу число 50
  И затем ввожу число 70
  Если я нажимаю "+"
  То результатом должно быть число 120
Допустим /ввожу число (d+)/ do |число|
 calc.push число.to_i
end
Если /нажимаю "(.*)"/ do |операция|
 calc.send операция
End

То /результатом должно быть число (d+)/ do |результат|
 calc.result.should == результат.to_f
End
Gherkin
"en":
 name: English
 native: English
 feature: Feature
 background: Background
 scenario: Scenario
 scenario_outline: Scenario Outline|Scenario Template
 examples: Examples|Scenarios
 given: "*|Given"
 when: "*|When"
 then: "*|Then"
 and: "*|And"
 but: "*|But"
Gherkin
"ru":
  name: Russian
  native: русский
  feature: Функция|Функционал|Свойство
  background: Предыстория|Контекст
  scenario: Сценарий
  scenario_outline: Структура сценария
  examples: Примеры
  given: "*|Допустим|Дано|Пусть"
  when: "*|Если|Когда"
  then: "*|То|Тогда"
  and: "*|И|К тому же"
  but: "*|Но|А"
Сценарий 1
Scenario: Create Post
  Given I am a registered User
  And I have signed in
  When I go to Create Post Page
  And I create a Post and Publish it
  Then I should see the Post in the Index
  Page
Scenario: Create a Post
Given I am a registered User with name "Chuck", email
"chuck@Norris.com" and password "123456"
   And I sign in as "chuck@Norris.com/123456"
   When I visit Create Post Page
   And I fill up Title as "Best Post"
   And I fill up Content as "Chuck Norris counted to infinity
   - twice."
   And I publish the Post
   Then I should see message "Post was successfully
   created."
   And I should see post in the index page
Scenario: Artist creates an art work
   Given I am a registered artist
   And I am on my dashboard
   And I follow "Add an artwork" within "#dashboard"
   When I fill in "Title" with "The Arnolfini Portrait"
   And I fill in "Description" with "A nice portrait."
   And I select "Painting" from "Category"
   And I attach "arnolfini.jpg" to "Select picture"
   And I press "Create"
   Then I should see "The Arnolfini Portrait was
successfully added to your art collection."
Scenario: Artist creates an art work
   Given I am a registered artist
   And I follow the add new artwork link from the
dashboard
   When I fill the form with the artwork data
   And I upload a picture
   Then I should see a confirmation message telling me
that the artwork was added to my collection
Cucumber styles
●   Imperative style
●   Declarative style
●   Boring style
●   Wrong style
web_steps.rb
web_steps_warning.txt

# This file was generated by Cucumber-Rails and is only here to get
you a head start
# These step definitions are thin wrappers around the
Capybara/Webrat API that lets you
# visit pages, interact with widgets and make assertions about page
content.
#
# If you use these step definitions as basis for your features you will
quickly end up
# with features that are:
#
# * Hard to maintain
# * Verbose to read
#
# A much better approach is to write your own higher level step
definitions, following
# the advice in the following blog posts:
#
# * http://benmabey.com/2008/05/19/imperative-vs-declarative-
Good practices
● Don’t use “Background” to set up complicated state
    unless that state is actually something the client needs
    to know.
●   Keep your scenarios short.
●   Make your scenarios vivid.
●   Declare, not implement
.NET
http://specflow.org/
PHP
http://behat.org/
Profit
Profit
●   Разговор на одном языке
●   Четкие и понятные требования
●   Уверенность
●   Метрика
●   Вовлеченность в работу
●   Живая документация
●   Уверенный рефакторинг
Ошибки
●   Нет времени
●   Хлопотно
●   Требования быстро меняются
●   Оформление часто меняется
●   Идеальный сценарий
●   Cucumber == BDD
Chapter III
● SQA Days
http://www.slideshare.net/VLDCORP/cucumber
● KazanRb
http://www.slideshare.net/leodg/cucumber-on-kazanrb

leonid.dinershtein@gmail.com

Más contenido relacionado

Similar a Agile with cucumber or BDD with fun

Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и MinkBehat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Minktyomo4ka
 
Behat-trick: как мы внедряли BDD на наших проектах
Behat-trick: как мы внедряли BDD на наших проектахBehat-trick: как мы внедряли BDD на наших проектах
Behat-trick: как мы внедряли BDD на наших проектахSQALab
 
Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016Кирилл Толкачёв
 
CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению
CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлениюCodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению
CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлениюCodeFest
 
Проектирование большого интернет-магазина
Проектирование большого интернет-магазинаПроектирование большого интернет-магазина
Проектирование большого интернет-магазинаArtem Markov
 
Разработка интернет-магазина: от идеи до реализации
Разработка интернет-магазина: от идеи до реализацииРазработка интернет-магазина: от идеи до реализации
Разработка интернет-магазина: от идеи до реализацииsportgid
 
Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Fwdays
 
Обзор Feature-Driven Development и Domain-Driven Design
Обзор Feature-Driven Development и Domain-Driven DesignОбзор Feature-Driven Development и Domain-Driven Design
Обзор Feature-Driven Development и Domain-Driven DesignAndrey Bibichev
 
Как мы документируем программные интерфейсы. Алексей Миронов
Как мы документируем программные интерфейсы. Алексей МироновКак мы документируем программные интерфейсы. Алексей Миронов
Как мы документируем программные интерфейсы. Алексей МироновYandex
 
Plugin for plugin, or extending android new build system
Plugin for plugin, or extending android new build systemPlugin for plugin, or extending android new build system
Plugin for plugin, or extending android new build systemAnton Rutkevich
 
Путь к чистому и компактному коду исполняемых спецификаций
Путь к чистому и компактному коду исполняемых спецификацийПуть к чистому и компактному коду исполняемых спецификаций
Путь к чистому и компактному коду исполняемых спецификацийVagif Abilov
 
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfyЧитабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfyDmytro Zharii
 
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...Ontico
 
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...Tech Talks @NSU
 

Similar a Agile with cucumber or BDD with fun (20)

Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и MinkBehat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Mink
 
Little Service in 2h
Little Service in 2hLittle Service in 2h
Little Service in 2h
 
Behat-trick: как мы внедряли BDD на наших проектах
Behat-trick: как мы внедряли BDD на наших проектахBehat-trick: как мы внедряли BDD на наших проектах
Behat-trick: как мы внедряли BDD на наших проектах
 
Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016
 
DevOPS meetup
DevOPS meetupDevOPS meetup
DevOPS meetup
 
CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению
CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлениюCodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению
CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению
 
Проектирование большого интернет-магазина
Проектирование большого интернет-магазинаПроектирование большого интернет-магазина
Проектирование большого интернет-магазина
 
Разработка интернет-магазина: от идеи до реализации
Разработка интернет-магазина: от идеи до реализацииРазработка интернет-магазина: от идеи до реализации
Разработка интернет-магазина: от идеи до реализации
 
Site dev 1
Site dev 1Site dev 1
Site dev 1
 
Site dev 1
Site dev 1Site dev 1
Site dev 1
 
Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"
 
Обзор Feature-Driven Development и Domain-Driven Design
Обзор Feature-Driven Development и Domain-Driven DesignОбзор Feature-Driven Development и Domain-Driven Design
Обзор Feature-Driven Development и Domain-Driven Design
 
BDD для PHP проектов
BDD для PHP проектовBDD для PHP проектов
BDD для PHP проектов
 
Как мы документируем программные интерфейсы. Алексей Миронов
Как мы документируем программные интерфейсы. Алексей МироновКак мы документируем программные интерфейсы. Алексей Миронов
Как мы документируем программные интерфейсы. Алексей Миронов
 
Plugin for plugin, or extending android new build system
Plugin for plugin, or extending android new build systemPlugin for plugin, or extending android new build system
Plugin for plugin, or extending android new build system
 
Путь к чистому и компактному коду исполняемых спецификаций
Путь к чистому и компактному коду исполняемых спецификацийПуть к чистому и компактному коду исполняемых спецификаций
Путь к чистому и компактному коду исполняемых спецификаций
 
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfyЧитабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
 
BDD in Codeception
BDD in CodeceptionBDD in Codeception
BDD in Codeception
 
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
TDD: когда нужно и, самое главное, когда не нужно / Павел Калашников (SimbirS...
 
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
 

Agile with cucumber or BDD with fun

  • 1. Agile with cucumber or BDD with fun Leonid Dinershtein, december, 2011
  • 3. Behaviour Driven Development with elegance and joy
  • 4.
  • 5.
  • 6.
  • 8.
  • 9. CHAOS Report http://www.projectsmart.co.uk/docs/chaos-report.pdf
  • 11. Сорвем сроки ... выйдем из бюджета Реализуем не то ... не так Нестабильно Невозможно поддерживать
  • 14. Agile манифест Люди и взаимодействие важнее процессов и инструментов Работающий продукт важнее исчерпывающей документации Сотрудничество с заказчиком важнее согласования условий контракта Готовность к изменениям важнее следования первоначальному плану
  • 15. BDD Behavior-driven development (or BDD) is an agile software development technique devised by Dan North as a response to the issues he encountered whilst teaching Test-Driven Development: ● Where to start ● What to test and what not to test ● How much to test in one go ● What to call the tests ● How to understand why a test fails
  • 16. BDD “Behaviour-driven development is about implementing an application by describing its behaviour from the perspective of its stakeholders”
  • 18. Хороший менеджер ● Должен обладать способностью понимать людей разного склада ума (от разработчиков, до бизнес-заказчиков) и умение помогать переводить мысли с языка одних на язык других ● Умеет не ссать и не ныть! Даже когда ссыкотно и ныть хочется. ● Знает чем отличается Quality Assurance от тестирования ● Понимает, что разработанный софт это не конец проекта, а всего лишь начало. И знает чего http://cartmendum.livejournal.com/93084.html
  • 19. Сколько это стоит? и как все это продать?
  • 20. Скорость разработки Стоимость поддержки Стоимость продукта Квалификация команды
  • 23.
  • 24. Cucumber ● Средство для автоматизированного тестирования ● Позволяет описывать поведение системы на естественном языке ● Является основным инструментом в Behaviour Driven Development (BDD)
  • 25.
  • 26. План огурец 1. Опишите поведение системы на естественном языке(Напишите сценарий поведения) 2. Опишите шаги сценария на языке программирования 3. Запустите тесты и убедитесь, что они не проходит 4. Напишите код, который реализует поведение, описанное в тестах 5. Запустите тесты снова и убедитесь, что некоторые тесты начали проходить 6. Повторите 2-5 шаги, пока все тесты не начнут проходить 7. Повторите 1-6 шаги, пока не закончатся деньги у заказчика
  • 27. Feature: Title In order to [Business Value] As a [Role] I want to [Some action] Scenario: Title Given [Context] When [Action] Then [Outcome]
  • 28. # language: ru Функционал: Сложение чисел Чтобы не складывать в уме Все, у кого с этим туго Хотят автоматическое сложение целых чисел Сценарий: Сложение двух целых чисел Допустим я ввожу число 50 И затем ввожу число 70 Если я нажимаю "+" То результатом должно быть число 120
  • 29. Допустим /ввожу число (d+)/ do |число| calc.push число.to_i end Если /нажимаю "(.*)"/ do |операция| calc.send операция End То /результатом должно быть число (d+)/ do |результат| calc.result.should == результат.to_f End
  • 30. Gherkin "en": name: English native: English feature: Feature background: Background scenario: Scenario scenario_outline: Scenario Outline|Scenario Template examples: Examples|Scenarios given: "*|Given" when: "*|When" then: "*|Then" and: "*|And" but: "*|But"
  • 31. Gherkin "ru": name: Russian native: русский feature: Функция|Функционал|Свойство background: Предыстория|Контекст scenario: Сценарий scenario_outline: Структура сценария examples: Примеры given: "*|Допустим|Дано|Пусть" when: "*|Если|Когда" then: "*|То|Тогда" and: "*|И|К тому же" but: "*|Но|А"
  • 33. Scenario: Create Post Given I am a registered User And I have signed in When I go to Create Post Page And I create a Post and Publish it Then I should see the Post in the Index Page
  • 34. Scenario: Create a Post Given I am a registered User with name "Chuck", email "chuck@Norris.com" and password "123456" And I sign in as "chuck@Norris.com/123456" When I visit Create Post Page And I fill up Title as "Best Post" And I fill up Content as "Chuck Norris counted to infinity - twice." And I publish the Post Then I should see message "Post was successfully created." And I should see post in the index page
  • 35. Scenario: Artist creates an art work Given I am a registered artist And I am on my dashboard And I follow "Add an artwork" within "#dashboard" When I fill in "Title" with "The Arnolfini Portrait" And I fill in "Description" with "A nice portrait." And I select "Painting" from "Category" And I attach "arnolfini.jpg" to "Select picture" And I press "Create" Then I should see "The Arnolfini Portrait was successfully added to your art collection."
  • 36. Scenario: Artist creates an art work Given I am a registered artist And I follow the add new artwork link from the dashboard When I fill the form with the artwork data And I upload a picture Then I should see a confirmation message telling me that the artwork was added to my collection
  • 37. Cucumber styles ● Imperative style ● Declarative style ● Boring style ● Wrong style
  • 39. web_steps_warning.txt # This file was generated by Cucumber-Rails and is only here to get you a head start # These step definitions are thin wrappers around the Capybara/Webrat API that lets you # visit pages, interact with widgets and make assertions about page content. # # If you use these step definitions as basis for your features you will quickly end up # with features that are: # # * Hard to maintain # * Verbose to read # # A much better approach is to write your own higher level step definitions, following # the advice in the following blog posts: # # * http://benmabey.com/2008/05/19/imperative-vs-declarative-
  • 40. Good practices ● Don’t use “Background” to set up complicated state unless that state is actually something the client needs to know. ● Keep your scenarios short. ● Make your scenarios vivid. ● Declare, not implement
  • 44. Profit ● Разговор на одном языке ● Четкие и понятные требования ● Уверенность ● Метрика ● Вовлеченность в работу ● Живая документация ● Уверенный рефакторинг
  • 45. Ошибки ● Нет времени ● Хлопотно ● Требования быстро меняются ● Оформление часто меняется ● Идеальный сценарий ● Cucumber == BDD
  • 47. ● SQA Days http://www.slideshare.net/VLDCORP/cucumber ● KazanRb http://www.slideshare.net/leodg/cucumber-on-kazanrb leonid.dinershtein@gmail.com