Разработка ПО через тестирование поведения средствами Cucumber

Содержание

Слайд 2

56% всех ошибок — результат неверного понимания или объяснения требований.
(CHAOS Report)

56% всех ошибок — результат неверного понимания или объяснения требований. (CHAOS Report)

Слайд 3

1973 г.

1973 г.

Слайд 4

1980 г.

1980 г.

Слайд 5

Наше время

Наше время

Слайд 6

1970 г. — сегодняшний день

1970 г. — сегодняшний день

Слайд 7

 ... который создал новые языки для разных людей, из-за чего они перестали

... который создал новые языки для разных людей, из-за чего они перестали
понимать друг друга, не могли продолжать строительство ...

Слайд 8

Средство для автоматизированного тестирования
Позволяет описывать поведение системы на естественном языке
Является основным инструментом

Средство для автоматизированного тестирования Позволяет описывать поведение системы на естественном языке Является
в Behaviour Driven Development (BDD)

Слайд 9

Опишите поведение системы на естественном языке(Напишите сценарий поведения)

Опишите поведение системы на естественном языке(Напишите сценарий поведения)

Слайд 10

Опишите поведение системы на естественном языке(Напишите сценарий поведения)
Опишите шаги сценария на языке

Опишите поведение системы на естественном языке(Напишите сценарий поведения) Опишите шаги сценария на языке программирования
программирования

Слайд 11

Опишите поведение системы на естественном языке(Напишите сценарий поведения)
Опишите шаги сценария на языке

Опишите поведение системы на естественном языке(Напишите сценарий поведения) Опишите шаги сценария на
программирования
Запустите тесты и убедитесь, что они не проходит

Слайд 12

Опишите поведение системы на естественном языке(Напишите сценарий поведения)
Опишите шаги сценария на языке

Опишите поведение системы на естественном языке(Напишите сценарий поведения) Опишите шаги сценария на
программирования
Запустите тесты и убедитесь, что они не проходит
Напишите код, который реализует поведение, описанное в тестах

Слайд 13

Опишите поведение системы на естественном языке(Напишите сценарий поведения)
Опишите шаги сценария на языке

Опишите поведение системы на естественном языке(Напишите сценарий поведения) Опишите шаги сценария на
программирования
Запустите тесты и убедитесь, что они не проходит
Напишите код, который реализует поведение, описанное в тестах
Запустите тесты снова и убедитесь, что некоторые тесты начали проходить

Слайд 14

Опишите поведение системы на естественном языке(Напишите сценарий поведения)
Опишите шаги сценария на языке

Опишите поведение системы на естественном языке(Напишите сценарий поведения) Опишите шаги сценария на
программирования
Запустите тесты и убедитесь, что они не проходит
Напишите код, который реализует поведение, описанное в тестах
Запустите тесты снова и убедитесь, что некоторые тесты начали проходить
Повторите 2-5 шаги, пока все тесты не начнут проходить

Слайд 15

Опишите поведение системы на естественном языке(Напишите сценарий поведения)
Опишите шаги сценария на языке

Опишите поведение системы на естественном языке(Напишите сценарий поведения) Опишите шаги сценария на
программирования
Запустите тесты и убедитесь, что они не проходит
Напишите код, который реализует поведение, описанное в тестах
Запустите тесты снова и убедитесь, что некоторые тесты начали проходить
Повторите 2-5 шаги, пока все тесты не начнут проходить
Повторите 1-6  шаги, пока не закончатся деньги у заказчика

Слайд 16

40 естественных языков, включая русский

40 естественных языков, включая русский

Слайд 17

# language: ru
Функционал: Сложение чисел
Чтобы не складывать в уме
Все, у кого с

# language: ru Функционал: Сложение чисел Чтобы не складывать в уме Все,
этим туго
Хотят автоматическое сложение целых чисел
Сценарий: Сложение двух целых чисел
Допустим я ввожу число 50
    И затем ввожу число 70
    Если я нажимаю "+"
    То результатом должно быть число 120

Функционал

Опишите поведение системы на естественном языке

Слайд 18

Допустим /ввожу число (\d+)/ do |число|
  calc.push число.to_i
end
Если /нажимаю "(.*)"/ do |операция|
  calc.send операция
End
То

Допустим /ввожу число (\d+)/ do |число| calc.push число.to_i end Если /нажимаю "(.*)"/
/результатом должно быть число (\d+)/ do |результат|
  calc.result.should == результат.to_f
End

Функционал

Опишите шаги сценария на языке программирования

Слайд 19

"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:

"en": name: English native: English feature: Feature background: Background scenario: Scenario scenario_outline:
"*|Then"
  and: "*|And"
  but: "*|But"

Gherkin

Слайд 20

"ru":
  name: Russian
  native: русский
  feature: Функция|Функционал|Свойство
  background: Предыстория|Контекст
  scenario: Сценарий
  scenario_outline: Структура сценария
  examples: Примеры
  given: "*|Допустим|Дано|Пусть"
  when: "*|Если|Когда"
  then: "*|То|Тогда"
  and:

"ru": name: Russian native: русский feature: Функция|Функционал|Свойство background: Предыстория|Контекст scenario: Сценарий scenario_outline:
"*|И|К тому же"
  but: "*|Но|А"

Gherkin

Слайд 21

Формат

Feature: Title
In order to [Business Value]
As a [Role]
I want

Формат Feature: Title In order to [Business Value] As a [Role] I
to [Some action]
Scenario: Title
Given [Context]
When [Action]
Then [Outcome]

Слайд 22

Формат

Scenario: Title
Given [Context]
And [Context]
When [Action]
And [Action]
Then [Outcome]

Формат Scenario: Title Given [Context] And [Context] When [Action] And [Action] Then [Outcome] But [Outcome]
But [Outcome]

Слайд 23

Feature: Update account information
  Background:
Given I am an authenticated user
    And I am

Feature: Update account information Background: Given I am an authenticated user And
on the edit account page
  Scenario: Update user information successfully
When I fill in "Full name" with "Super Man"
    And fill in "Email" with "[email protected]"
    And fill in "Password" with "654321"
    And fill in "Password confirmation" with "654321"
    And fill in "Current password" with "123456"
    And press "Update"
    Then I should see "You updated your account successfully."
    And I should be on the home page

features/user/manage_account/update_account.feature

Слайд 24

features/step_definitions/authentication_steps.rb

Given /^I am an authenticated user$/ do
  Given %Q{a confirmed user: "me" exists

features/step_definitions/authentication_steps.rb Given /^I am an authenticated user$/ do Given %Q{a confirmed user:
with id: "1", email: "[email protected]", password: 123456, full_name: "Current User"}
  When %Q{I go to the sign in page}
  When %Q{fill in "Email" with "[email protected]"}
  When %Q{fill in "Password" with "123456"}
  When %Q{press "Sign in"}
end

« Given I am an authenticated user»

Слайд 25

Feature: Crop avatar
  Background:
Given a user "u1" exists with username: "John Doe",

Feature: Crop avatar Background: Given a user "u1" exists with username: "John
password: "secret", password_confirmation: "secret", email: "[email protected]"
    And user with username: "John Doe" has an avatar: "spec/fixtures/files/avatar.png"
    And I am signed in as a user using email: "[email protected]", password: "secret"
  Scenario: Cropping user avatar via API
When I have query values start_x: "0", start_y: "10", end_x: "100", end_y: "60" namespaced with "coordinates"
    And I send "POST" request to "/users/u1/crop_avatar.json"
    Then response should be "success"
    And user with username: "John Doe" should have avatar with width: "100" and height: "50"
    And response should have message: "image.notices.resized"

Слайд 26

Зачем нужен заказчику?
Зачем нужен менеджеру?
Зачем нужен разработчику?

Зачем нужен заказчику? Зачем нужен менеджеру? Зачем нужен разработчику?

Слайд 27

Заказчик

Разговор на одном языке
Четкие требования
Метрика
Вовлеченность в работу

Заказчик Разговор на одном языке Четкие требования Метрика Вовлеченность в работу

Слайд 28

Менеджер

Разговор на одном языке
Уверенность
Метрика

Менеджер Разговор на одном языке Уверенность Метрика

Слайд 29

Разработчик

Разговор на одном языке
Четкие требования
Уверенный рефакторинг

Разработчик Разговор на одном языке Четкие требования Уверенный рефакторинг

Слайд 30

Ошибки и заблуждения

Хлопотно (я могу тестировать Unit test, Rspec … )
Требования

Ошибки и заблуждения Хлопотно (я могу тестировать Unit test, Rspec … )
быстро меняются
Оформление часто меняется
Описывать поведение должен заказчик
Cucumber == BDD
Вы действительно используете Cucumber. (Chicken test)

Слайд 31

Плагины

Pickle
Capybara
Webmock
VCR
Spork
Parallel Testjour
….

Плагины Pickle Capybara Webmock VCR Spork Parallel Testjour ….
Имя файла: Разработка-ПО-через-тестирование-поведения-средствами-Cucumber.pptx
Количество просмотров: 125
Количество скачиваний: 0