SlideShare a Scribd company logo
Разработка ПО через тестирование поведения средствами CucumberДинерштейн Леонид, Флэтсофт
56% всех ошибок — результат неверного понимания или объяснения требований. (CHAOS Report)
1973 г.
1980 г.
Наше время
1970 г. — сегодняшний день
 ... который создал новые языки для разных людей, из-за чего они перестали понимать друг друга, не могли продолжать строительство ...
Средство для автоматизированного тестированияПозволяет описывать поведение системы на естественном языкеЯвляется основным инструментом в BehaviourDrivenDevelopment (BDD)
Опишите поведение системы на естественном языке(Напишите сценарий поведения)
Опишите поведение системы на естественном языке(Напишите сценарий поведения)Опишите шаги сценария на языке программирования
Опишите поведение системы на естественном языке(Напишите сценарий поведения)Опишите шаги сценария на языке программированияЗапустите тесты и убедитесь, что они не проходит
Опишите поведение системы на естественном языке(Напишите сценарий поведения)Опишите шаги сценария на языке программированияЗапустите тесты и убедитесь, что они не проходитНапишите код, который реализует поведение, описанное в тестах
Опишите поведение системы на естественном языке(Напишите сценарий поведения)Опишите шаги сценария на языке программированияЗапустите тесты и убедитесь, что они не проходитНапишите код, который реализует поведение, описанное в тестахЗапустите тесты снова и убедитесь, что некоторые тесты начали проходить
Опишите поведение системы на естественном языке(Напишите сценарий поведения)Опишите шаги сценария на языке программированияЗапустите тесты и убедитесь, что они не проходитНапишите код, который реализует поведение, описанное в тестахЗапустите тесты снова и убедитесь, что некоторые тесты начали проходитьПовторите 2-5 шаги, пока все тесты не начнут проходить
Опишите поведение системы на естественном языке(Напишите сценарий поведения)Опишите шаги сценария на языке программированияЗапустите тесты и убедитесь, что они не проходитНапишите код, который реализует поведение, описанное в тестахЗапустите тесты снова и убедитесь, что некоторые тесты начали проходитьПовторите 2-5 шаги, пока все тесты не начнут проходитьПовторите 1-6  шаги, пока не закончатся деньги у заказчика
40 естественных языков, включая русский
ФункционалОпишите поведение системы на естественном языке# language: ruФункционал: Сложение чиселЧтобы не складывать в умеВсе, у кого с этим тугоХотят автоматическое сложение целых чисел  Сценарий: Сложение двух целых чисел   Допустим я ввожу число 50    И затем ввожу число 70    Если я нажимаю "+"    То результатом должно быть число 120
ФункционалОпишите шаги сценария на языке программированияДопустим /ввожу число (\d+)/ do|число|  calc.pushчисло.to_iendЕсли /нажимаю "(.*)"/ do|операция|  calc.sendоперацияEndТо /результатом должно быть число (\d+)/ do|результат|  calc.result.should==результат.to_fEnd
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: "*|Но|А"
ФорматFeature: TitleIn order to [Business Value]As a [Role]  I want to [Some action]Scenario: TitleGiven [Context]When [Action]Then [Outcome]
ФорматScenario: TitleGiven[Context]And[Context]When [Action]And [Action]Then[Outcome]But[Outcome]
features/user/manage_account/update_account.featureFeature:Updateaccountinformation  Background:GivenI amanauthenticateduser    AndI amontheeditaccountpage  Scenario:UpdateuserinformationsuccessfullyWhenI fillin"Fullname"with"SuperMan"    Andfillin"Email"with"super@example.com"    Andfillin"Password"with"654321"    Andfillin"Passwordconfirmation"with"654321"    Andfillin"Currentpassword"with"123456"    Andpress"Update"    ThenI shouldsee"Youupdatedyouraccountsuccessfully."    AndI shouldbeonthehomepage
features/step_definitions/authentication_steps.rb«GivenI amanauthenticateduser»Given /^I amanauthenticateduser$/do  Given%Q{aconfirmeduser: "me" existswithid: "1", email: "me@example.com", password: 123456, full_name: "CurrentUser"}  When%Q{I gotothesigninpage}  When%Q{fillin "Email" with "me@example.com"}  When%Q{fillin "Password" with "123456"}  When%Q{press "Signin"}end
Feature:Cropavatar  Background:Givenauser"u1"existswithusername: "JohnDoe", password: "secret", password_confirmation: "secret", email: "user@test.test"    Anduserwithusername: "JohnDoe"hasanavatar: "spec/fixtures/files/avatar.png"    AndI amsignedinasauserusingemail: "user@test.test", password: "secret"  Scenario:Croppinguseravatarvia APIWhenI havequeryvaluesstart_x: "0", start_y: "10", end_x: "100", end_y: "60"namespacedwith"coordinates"    AndI send"POST"requestto"/users/u1/crop_avatar.json"    Thenresponseshouldbe"success"    Anduserwithusername: "JohnDoe"shouldhaveavatarwithwidth: "100"andheight: "50"    Andresponseshouldhavemessage: "image.notices.resized"
Зачем нужен заказчику?Зачем нужен менеджеру?Зачем нужен разработчику?
ЗаказчикРазговор на одном языкеЧеткие требованияМетрикаВовлеченность в работу
МенеджерРазговор на одном языкеУверенностьМетрика
РазработчикРазговор на одном языкеЧеткие требованияУверенный рефакторинг
Ошибки и заблуждения Хлопотно (я могу тестировать Unit test, Rspec … )Требования быстро меняютсяОформление часто меняетсяОписывать поведение должен заказчикCucumber == BDDВы действительно используете Cucumber.(Chicken test)
ПлагиныPickleCapybaraWebmockVCRSporkParallelTestjour….
Одними из самых неприятных ошибок, являются ошибки неверной реализации требований или даже отсутствие должной функциональности. Сложность этих ошибок заключается в том, что только заказчик может найти их.Разработка программ через тестирование поведения (BDD) является продолжением идеи TDDГлавное отличие BDD и TDD заключается в том, что тестируется поведение системы, а не внутренне устройство классов и код.Главной особенностью Cucumber является возможность описания поведения системы на естественном языке. Вопросы?

More Related Content

PDF
Визуализация покрытия автоматизированными UI тестами
PPTX
Грязная автоматизация
PDF
Agile with cucumber or BDD with fun
PDF
2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инстру...
PPTX
Behat-trick: как мы внедряли BDD на наших проектах
PDF
BDD для PHP проектов
PPT
Опыт тестирования API САПР платформы
PDF
«Пуленепробиваемый фронтенд: разработка под React на TypeScript», Станислав П...
Визуализация покрытия автоматизированными UI тестами
Грязная автоматизация
Agile with cucumber or BDD with fun
2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инстру...
Behat-trick: как мы внедряли BDD на наших проектах
BDD для PHP проектов
Опыт тестирования API САПР платформы
«Пуленепробиваемый фронтенд: разработка под React на TypeScript», Станислав П...

What's hot (13)

PPT
CodeFest 2010. Высоцкий С. — Автоматизация тестирования Flex/Flash GUI
PPTX
XP Days Ukraine 2014 - Refactoring legacy code
PDF
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
PDF
BDD girls Battle: Cucumber VS. JBehave
ODP
Системное тестирование приложений на Ruby on Rails с применением Rspec и Cap...
PPTX
Codeception Introduction
PPTX
Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий
PPT
Cтатический анализ кода (на примере DDD-фреймворка)
PPTX
CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, п...
PDF
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
PDF
Автоматизация UI тестирования под Windows и Windows Phone
PDF
C&C for coffee'n'code
ODP
Intelligent или сделай мне красиво
CodeFest 2010. Высоцкий С. — Автоматизация тестирования Flex/Flash GUI
XP Days Ukraine 2014 - Refactoring legacy code
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
BDD girls Battle: Cucumber VS. JBehave
Системное тестирование приложений на Ruby on Rails с применением Rspec и Cap...
Codeception Introduction
Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий
Cтатический анализ кода (на примере DDD-фреймворка)
CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, п...
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
Автоматизация UI тестирования под Windows и Windows Phone
C&C for coffee'n'code
Intelligent или сделай мне красиво
Ad

Similar to Леонид Динерштейн - Разработка программ через тестирование поведения средствами Cucumber (11)

PPT
Cucumber on Kazan.rb
PPT
CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению
ODP
Behavior Driven Development
PPT
5 лекция. презентация
PPTX
Путь к чистому и компактному коду исполняемых спецификаций
PPTX
Тесты (типы тестов, организация тестов, создание тестов).
PDF
Behat в PHP с использованием Behat и Mink
PDF
Инна Слизовская - Тест-менеджмент: статистика, документация и планы
PPTX
QA Evening Марк Курченко - Чек-лист против тест-кейса
PPTX
Лекция по тестированию ПО
PPTX
Яна Лиса, “Ефективні методи написання хороших мануальних тестових сценаріїв”
Cucumber on Kazan.rb
CodeFest 2012. Корсаков С. — Cucumber. Некоторые советы по приготовлению
Behavior Driven Development
5 лекция. презентация
Путь к чистому и компактному коду исполняемых спецификаций
Тесты (типы тестов, организация тестов, создание тестов).
Behat в PHP с использованием Behat и Mink
Инна Слизовская - Тест-менеджмент: статистика, документация и планы
QA Evening Марк Курченко - Чек-лист против тест-кейса
Лекция по тестированию ПО
Яна Лиса, “Ефективні методи написання хороших мануальних тестових сценаріїв”
Ad

More from SQALab (20)

PDF
Готовим стажировку
PPTX
Куда приводят мечты? или Искусство развития тестировщика
PPT
Оптимизация Selenium тестов и ускорение их поддержки
PPT
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
PPTX
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
PPTX
Continuous performance testing
PDF
Конфиги вместо костылей. Pytestconfig и зачем он нужен
PPT
Команда чемпионов в ИТ стихии
PPTX
API. Серебряная пуля в магазине советов
PPTX
Добиваемся эффективности каждого из 9000+ UI-тестов
PPT
Делаем автоматизацию проектных KPIs
PDF
Вредные привычки в тест-менеджменте
PPTX
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
PPT
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
PPTX
Стили лидерства и тестирование
PPT
"Давайте не будем про качество"
PDF
Apache.JMeter для .NET-проектов
PPTX
Тестирование геолокационных систем
PPTX
Лидер или босс? Вот в чем вопрос
PPTX
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
Готовим стажировку
Куда приводят мечты? или Искусство развития тестировщика
Оптимизация Selenium тестов и ускорение их поддержки
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Continuous performance testing
Конфиги вместо костылей. Pytestconfig и зачем он нужен
Команда чемпионов в ИТ стихии
API. Серебряная пуля в магазине советов
Добиваемся эффективности каждого из 9000+ UI-тестов
Делаем автоматизацию проектных KPIs
Вредные привычки в тест-менеджменте
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Стили лидерства и тестирование
"Давайте не будем про качество"
Apache.JMeter для .NET-проектов
Тестирование геолокационных систем
Лидер или босс? Вот в чем вопрос
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...

Леонид Динерштейн - Разработка программ через тестирование поведения средствами Cucumber

  • 1. Разработка ПО через тестирование поведения средствами CucumberДинерштейн Леонид, Флэтсофт
  • 2. 56% всех ошибок — результат неверного понимания или объяснения требований. (CHAOS Report)
  • 7.  ... который создал новые языки для разных людей, из-за чего они перестали понимать друг друга, не могли продолжать строительство ...
  • 8. Средство для автоматизированного тестированияПозволяет описывать поведение системы на естественном языкеЯвляется основным инструментом в BehaviourDrivenDevelopment (BDD)
  • 9. Опишите поведение системы на естественном языке(Напишите сценарий поведения)
  • 10. Опишите поведение системы на естественном языке(Напишите сценарий поведения)Опишите шаги сценария на языке программирования
  • 11. Опишите поведение системы на естественном языке(Напишите сценарий поведения)Опишите шаги сценария на языке программированияЗапустите тесты и убедитесь, что они не проходит
  • 12. Опишите поведение системы на естественном языке(Напишите сценарий поведения)Опишите шаги сценария на языке программированияЗапустите тесты и убедитесь, что они не проходитНапишите код, который реализует поведение, описанное в тестах
  • 13. Опишите поведение системы на естественном языке(Напишите сценарий поведения)Опишите шаги сценария на языке программированияЗапустите тесты и убедитесь, что они не проходитНапишите код, который реализует поведение, описанное в тестахЗапустите тесты снова и убедитесь, что некоторые тесты начали проходить
  • 14. Опишите поведение системы на естественном языке(Напишите сценарий поведения)Опишите шаги сценария на языке программированияЗапустите тесты и убедитесь, что они не проходитНапишите код, который реализует поведение, описанное в тестахЗапустите тесты снова и убедитесь, что некоторые тесты начали проходитьПовторите 2-5 шаги, пока все тесты не начнут проходить
  • 15. Опишите поведение системы на естественном языке(Напишите сценарий поведения)Опишите шаги сценария на языке программированияЗапустите тесты и убедитесь, что они не проходитНапишите код, который реализует поведение, описанное в тестахЗапустите тесты снова и убедитесь, что некоторые тесты начали проходитьПовторите 2-5 шаги, пока все тесты не начнут проходитьПовторите 1-6  шаги, пока не закончатся деньги у заказчика
  • 16. 40 естественных языков, включая русский
  • 17. ФункционалОпишите поведение системы на естественном языке# language: ruФункционал: Сложение чиселЧтобы не складывать в умеВсе, у кого с этим тугоХотят автоматическое сложение целых чисел  Сценарий: Сложение двух целых чисел Допустим я ввожу число 50    И затем ввожу число 70    Если я нажимаю "+"    То результатом должно быть число 120
  • 18. ФункционалОпишите шаги сценария на языке программированияДопустим /ввожу число (\d+)/ do|число|  calc.pushчисло.to_iendЕсли /нажимаю "(.*)"/ do|операция|  calc.sendоперацияEndТо /результатом должно быть число (\d+)/ do|результат|  calc.result.should==результат.to_fEnd
  • 19. 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"
  • 20. Gherkin"ru":  name: Russian  native: русский  feature: Функция|Функционал|Свойство  background: Предыстория|Контекст  scenario: Сценарий  scenario_outline: Структура сценария  examples: Примеры  given: "*|Допустим|Дано|Пусть"  when: "*|Если|Когда"  then: "*|То|Тогда"  and: "*|И|К тому же"  but: "*|Но|А"
  • 21. ФорматFeature: TitleIn order to [Business Value]As a [Role] I want to [Some action]Scenario: TitleGiven [Context]When [Action]Then [Outcome]
  • 23. features/user/manage_account/update_account.featureFeature:Updateaccountinformation  Background:GivenI amanauthenticateduser    AndI amontheeditaccountpage  Scenario:UpdateuserinformationsuccessfullyWhenI fillin"Fullname"with"SuperMan"    Andfillin"Email"with"super@example.com"    Andfillin"Password"with"654321"    Andfillin"Passwordconfirmation"with"654321"    Andfillin"Currentpassword"with"123456"    Andpress"Update"    ThenI shouldsee"Youupdatedyouraccountsuccessfully."    AndI shouldbeonthehomepage
  • 24. features/step_definitions/authentication_steps.rb«GivenI amanauthenticateduser»Given /^I amanauthenticateduser$/do  Given%Q{aconfirmeduser: "me" existswithid: "1", email: "me@example.com", password: 123456, full_name: "CurrentUser"}  When%Q{I gotothesigninpage}  When%Q{fillin "Email" with "me@example.com"}  When%Q{fillin "Password" with "123456"}  When%Q{press "Signin"}end
  • 25. Feature:Cropavatar  Background:Givenauser"u1"existswithusername: "JohnDoe", password: "secret", password_confirmation: "secret", email: "user@test.test"    Anduserwithusername: "JohnDoe"hasanavatar: "spec/fixtures/files/avatar.png"    AndI amsignedinasauserusingemail: "user@test.test", password: "secret"  Scenario:Croppinguseravatarvia APIWhenI havequeryvaluesstart_x: "0", start_y: "10", end_x: "100", end_y: "60"namespacedwith"coordinates"    AndI send"POST"requestto"/users/u1/crop_avatar.json"    Thenresponseshouldbe"success"    Anduserwithusername: "JohnDoe"shouldhaveavatarwithwidth: "100"andheight: "50"    Andresponseshouldhavemessage: "image.notices.resized"
  • 26. Зачем нужен заказчику?Зачем нужен менеджеру?Зачем нужен разработчику?
  • 27. ЗаказчикРазговор на одном языкеЧеткие требованияМетрикаВовлеченность в работу
  • 28. МенеджерРазговор на одном языкеУверенностьМетрика
  • 29. РазработчикРазговор на одном языкеЧеткие требованияУверенный рефакторинг
  • 30. Ошибки и заблуждения Хлопотно (я могу тестировать Unit test, Rspec … )Требования быстро меняютсяОформление часто меняетсяОписывать поведение должен заказчикCucumber == BDDВы действительно используете Cucumber.(Chicken test)
  • 32. Одними из самых неприятных ошибок, являются ошибки неверной реализации требований или даже отсутствие должной функциональности. Сложность этих ошибок заключается в том, что только заказчик может найти их.Разработка программ через тестирование поведения (BDD) является продолжением идеи TDDГлавное отличие BDD и TDD заключается в том, что тестируется поведение системы, а не внутренне устройство классов и код.Главной особенностью Cucumber является возможность описания поведения системы на естественном языке. Вопросы?