Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Behavior Driven Development

10,983 views

Published on

Behavior Driven Development - подход к разработке ПО, основывающийся на ориентации на business value и исполняемых спецификациях, написанных на человеческом языке

Published in: Technology

Behavior Driven Development

  1. 1. Behavior Driven Development BDD
  2. 2. Что такое BDD ? Короткий ответ: BDD – это правильное TDD
  3. 3. Автор концепции <ul> <li>Dan North (2003 г.) </ul>
  4. 4. TDD <ul> <li>TDD фокусируется на тестировании и дизайне </ul>
  5. 5. TDD Дизайн Код Требования Unit-тесты User stories Пояснения Unit-тесты
  6. 6. BDD Дизайн Код Требования User stories Сценарии Unit-тесты Код для выполнения пунктов сценариев
  7. 7. Сценарий <ul> <li>Является критерием приёмки для User Story <li>Описывается человеческим языком <li>Сценарий исполняем </ul>
  8. 8. Формат сценария Given... When... Then...
  9. 9. Ничего не напоминает? <ul> <li>Unit tests: <ul> <li>Setup <li>Excersize <li>Verify <li>Teardown </ul> </ul>
  10. 10. Формат сценария <ul> <li>Given <условие> <li>[ And <ещё условие> ] <li>... <li>When <событие> <li>[ And <ещё событие>] <li>... <li>Then <результат> <li>[ And <ещё результат>] </ul>
  11. 11. Пример сценария <ul> <li>Если я положил 10000 грн на депозит <li>И процент составляет 5% <li>И выплата процентов производится в конце срока <li>И срок депозита 1 год <li>То когда я подожду 1 год <li>И сниму деньги <li>Тогда сумма составит 10500 грн </ul>
  12. 12. Пример Пример цикла разработки с Ruby/Cucumber
  13. 13. Шаг 1 <ul> <li>Написать сценарий человеческим языком: </ul>
  14. 14. Шаг 2 <ul> <li>Запустить сценарий, и увидеть, для каких шагов ещё нет описаний (pending) </ul>
  15. 15. Шаг 3 <ul> <li>Написать на используемом ЯП определение шага: </ul>
  16. 16. Шаг 4 <ul> <li>Запустить сценарий и увидеть, что один из шагов не прошёл: </ul>
  17. 17. Шаг 5 <ul> <li>Написать достаточно кода, чтобы очередной шаг сценария прошёл: </ul>
  18. 18. Шаг 6 <ul> <li>Запустить сценарий и увидеть, что определённый шаг прошёл: </ul>
  19. 19. Шаг 7 <ul> <li>Смыть, повторить! </ul>
  20. 20. Пример с Java/JBehave <ul> <li>Дан сценарий <ul> <li>Given I am not logged in <li>When I log in as Liz with a password JBehaver <li>Then I should see a message, &quot;Welcome, Liz!&quot; </ul> </ul>
  21. 21. Создаём класс сценария public class UserLogsInSuccessfully extends Scenario { public UserLogsInSuccessfully() { super(new LoginSteps()); } }
  22. 22. Набор шагов public class LoginSteps extends Steps { }
  23. 23. Запускаем <ul> <li>Ни один шаг не реализован <ul> <li>Given I am not logged in (PENDING) <li>When I log in as Liz with a password JBehaver (PENDING) <li>Then I should see a message, &quot;Welcome, Liz!&quot; (PENDING) </ul> </ul>
  24. 24. Связь шагов с кодом <ul> <li>Аннотации для методов: <ul> <li>@Given(&quot;...&quot;) <li>@When(&quot;...&quot;) <li>@Then(&quot;...&quot;) </ul> </ul>
  25. 25. Можно с параметрами <ul> <li>Параметры шага сценария передаются в метод </ul> <ul> <ul> <li>@Given(”Message $param”) <li>public void method(Param param) { <li>… <li>} </ul> </ul>
  26. 26. Реализуем шаги @Given(&quot;I am not logged in&quot;) public void logOut() { currentPage.click(&quot;logout&quot;); }
  27. 27. Реализуем шаги @When(&quot;I log in as $username with a password $password&quot;) public void logIn(String username, String password) { currentPage.click(&quot;login&quot;); }
  28. 28. Реализуем шаги @Then(&quot;I should see a message, &quot;$message&quot;&quot;) public void checkMessage(String message) { ensureThat(currentPage, containsMessage(message)); }
  29. 29. Ещё раз по шагам <ul> <li>Написать сценарий человеческим языком <li>Запустить сценарий, и увидеть, для каких шагов ещё нет описаний (pending) <li>Написать на используемом ЯП определение шага <li>Запустить сценарий и увидеть, что один из шагов не прошёл <li>Написать достаточно кода, чтобы очередной шаг сценария прошёл <li>Запустить сценарий и увидеть, что определённый шаг прошёл <li>Смыть, повторить! </ul>
  30. 30. Отличия от TDD <ul> <li>Фокус не на тестах, а на спецификации поведения <li>Связь кода с требованиями <li>Запись требований с помощью обычных фраз <li>Рождается специфичный для предметной области язык (DSL) <li>Улучшается общение с пользователем </ul>
  31. 31. Инструменты <ul> <li>Java <ul> <li>JBehave, JTestR, instinct </ul> <li>Ruby <ul> <li>RBehave <li>Rspec <li>Cucumber </ul> <li>PHP <ul> <li>PHPSpec </ul> </ul>
  32. 32. Ещё инструменты <ul> <li>Javascript <ul> <li>JSSpec </ul> <li>Python <ul> <li>PySpec </ul> <li>Groovy <ul> <li>GSpec </ul> </ul>
  33. 33. Ссылки <ul> <li>http://behavior-driven.org/ <li>http://jbehave.org/ <li>http://dannorth.net/ <li>... </ul>
  34. 34. ?????????????
  35. 35. Обо мне <ul> <li>Алексей Тигарев <li>Компания Comodo - team lead <li>Certified ScrumMaster </ul> <ul> <li>Консультант по гибким </ul> методологиям разработки ПО <ul> <li>[email_address] <li>http://agile.od.ua/ </ul>
  36. 36. Спасибо!

×