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


The Presentation inside:

Slide 0

Разработка ПО через тестирование поведения средствами Cucumber Динерштейн Леонид, Флэтсофт


Slide 1

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


Slide 2

1973 г.


Slide 3

1980 г.


Slide 4

Наше время


Slide 5

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


Slide 6

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


Slide 7

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


Slide 8

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


Slide 9

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


Slide 10

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


Slide 11

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


Slide 12

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


Slide 13

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


Slide 14

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


Slide 15

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


Slide 16

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


Slide 17

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


Slide 18

"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


Slide 19

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


Slide 20

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


Slide 21

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


Slide 22

Feature: Update account information   Background: Given I am an authenticated user     And I am 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


Slide 23

features/step_definitions/authentication_steps.rb Given /^I am an authenticated user$/ do   Given %Q{a confirmed user: "me" exists 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»


Slide 24

Feature: Crop avatar   Background: Given a user "u1" exists with username: "John Doe", 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: "us[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"


Slide 25

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


Slide 26

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


Slide 27

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


Slide 28

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


Slide 29

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


Slide 30

Плагины Pickle Capybara Webmock VCR Spork Parallel Testjour ….


Slide 31

Вопросы? Одними из самых неприятных ошибок, являются ошибки неверной реализации требований или даже отсутствие должной функциональности. Сложность этих ошибок заключается в том, что только заказчик может найти их. Разработка программ через тестирование поведения (BDD) является продолжением идеи TDD Главное отличие BDD и TDD заключается в том, что тестируется поведение системы, а не внутренне устройство классов и код. Главной особенностью Cucumber является возможность описания поведения системы на естественном языке.


×

HTML:





Ссылка: