Behavior Driven Development

10,594 views

Published on

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

Published in: Technology
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
10,594
On SlideShare
0
From Embeds
0
Number of Embeds
4,198
Actions
Shares
0
Downloads
96
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide
  • 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. Спасибо!

    ×