$30 off During Our Annual Pro Sale. View Details »

SpecBDD на пальцах

SpecBDD на пальцах

Talk from http://2012.symfonycamp.org.ua about SpecBDD & phpspec2

Konstantin Kudryashov

December 01, 2012
Tweet

More Decks by Konstantin Kudryashov

Other Decks in Programming

Transcript

  1. что-то там, что-то там
    php, BDD, spec ...

    View Slide

  2. ever,,,
    ...zet
    no more BC-breaks, I promise

    View Slide

  3. http://everzet.com

    View Slide

  4. @KnpLabs:France
    Прямиком из

    View Slide

  5. BDD?

    View Slide

  6. Requirements
    Analysis
    Design
    Development
    Testing
    [Royce 1970]
    9 месяцев 3 мес. 2 мес. 12 мес. ...

    View Slide

  7. Большая часть
    стоимости
    разработки ПО
    складывается из
    задержек
    обратной связи

    View Slide

  8. Давайте их
    уменьшим!

    View Slide

  9. Requirements
    Acceptance
    Testing
    Coding
    Refactoring
    Недели 15-20 минут
    [Beck & Cunningham 1996-99]

    View Slide

  10. Requirements
    Acceptance
    Testing?
    Coding
    Refactoring
    Недели 15-20 минут
    [North 2003]

    View Slide

  11. Requirements
    Acceptance
    Specification
    Implementation
    Refactoring
    Недели 15-20 минут
    [North 2003]

    View Slide

  12. Narrative
    What do you
    mean?
    Specification
    Implementation
    Refactoring
    Недели 15-20 минут
    [North 2003]

    View Slide

  13. Narrative
    What do you
    mean?
    Specification
    Implementation
    Refactoring
    [North 2003]

    View Slide

  14. Narrative
    What do you
    mean?
    Specification
    Implementation
    Refactoring
    [North 2003]

    View Slide

  15. Narrative
    What do you
    mean?
    Specification
    Implementation
    Refactoring
    StoryBDD
    SpecBDD
    [North 2003]

    View Slide

  16. Narrative
    What do you
    mean?
    Specification
    Implementation
    Refactoring
    Behat
    phpspec
    [North 2003]

    View Slide

  17. View Slide

  18. Вам, наверное, тысячу раз
    говорили, что вы не
    практикуете TDD потому что вы
    ленивы, медленны или просто
    недостаточно умны.

    View Slide

  19. Моки Стабы
    ? ?

    View Slide

  20. Моки Стабы
    $mock
    ->expects($this->once())
    ...
    $mock
    ->expects($this->any())
    ...

    View Slide

  21. Моки
    $mock
    ->expects($this->once())
    ...
    Стабы
    $mock
    ->expects($this->any())
    ...

    View Slide

  22. Если даблы сломаны, то
    почему бы их просто не
    игнорировать?

    View Slide

  23. Classical school London school

    View Slide

  24. Classical school London school
    В TDD самое важное -
    это состояние
    системы после
    воздействия на нее

    View Slide

  25. Classical school London school
    В TDD самое важное -
    это состояние
    системы после
    воздействия на нее
    В TDD самое важное -
    это взаимодействие
    объектов внутри ее

    View Slide

  26. Classical school London school
    В TDD самое важное -
    это взаимодействие
    объектов внутри ее
    $object->doAction($dep);
    assertEquals(
    $expectedState,
    $object->getState()
    );

    View Slide

  27. Classical school London school
    $object->doAction($dep);
    assertEquals(
    $expectedState,
    $object->getState()
    );
    $dep->setTitle(‘everzet’)
    ->shouldBeCalled()
    ;
    $object->doAction($dep);

    View Slide

  28. Classical school London school
    $object->doAction($dep);
    assertEquals(
    $expectedState,
    $object->getState()
    );
    $dep->setTitle(‘everzet’)
    ->shouldBeCalled()
    ;
    $object->doAction($dep);
    Beck

    View Slide

  29. Classical school London school
    $object->doAction($dep);
    assertEquals(
    $expectedState,
    $object->getState()
    );
    $dep->setTitle(‘everzet’)
    ->shouldBeCalled()
    ;
    $object->doAction($dep);
    Beck North

    View Slide

  30. Classical school London school
    $object->doAction($dep);
    assertEquals(
    $expectedState,
    $object->getState()
    );
    $dep->setTitle(‘everzet’)
    ->shouldBeCalled()
    ;
    $object->doAction($dep);
    Beck North, everzet

    View Slide

  31. Classical school London school
    $object->doAction($dep);
    assertEquals(
    $expectedState,
    $object->getState()
    );
    $dep->setTitle(‘everzet’)
    ->shouldBeCalled()
    ;
    $object->doAction($dep);
    Beck North, everzet
    Mockery?

    View Slide

  32. Продолжим...

    View Slide

  33. $this->assertEquals(‘smoke’,
    $unexisting->getSmoke()
    );

    View Slide

  34. $this->assertEquals(‘smoke’,
    $unexisting->getSmoke()
    );

    View Slide

  35. $this->expectToBe(‘smoke’,
    $unexisting->getSmoke()
    );
    private function expectToBe($expected, $actual)
    {
    ...
    }

    View Slide

  36. Продолжим...

    View Slide

  37. View Slide

  38. View Slide

  39. View Slide

  40. View Slide

  41. Костян, ты опять все поломал.

    View Slide

  42. Костян, ты опять все поломал.
    шоб ты сдох!

    View Slide

  43. Что мы имеем

    View Slide

  44. Что мы имеем
    1.Тул, который нас
    заставляет отвечать
    на вопросы
    реализации

    View Slide

  45. Что мы имеем
    1.Тул, который нас
    заставляет отвечать
    на вопросы
    реализации
    2.Тул, который
    заставляет нас
    говорить с ним в
    терминах
    тестирования

    View Slide

  46. Что мы имеем
    1.Тул, который нас
    заставляет отвечать
    на вопросы
    реализации
    2.Тул, который
    заставляет нас
    говорить с ним в
    терминах
    тестирования
    3.Тул, который кричит
    на нас, когда что-то
    не работает

    View Slide

  47. Что нам надо
    Что мы имеем
    1.Тул, который нас
    заставляет отвечать
    на вопросы
    реализации
    2.Тул, который
    заставляет нас
    говорить с ним в
    терминах
    тестирования
    3.Тул, который кричит
    на нас, когда что-то
    не работает

    View Slide

  48. Что нам надо
    Что мы имеем
    1.Тул, который нас
    заставляет отвечать
    на вопросы
    реализации
    2.Тул, который
    заставляет нас
    говорить с ним в
    терминах
    тестирования
    3.Тул, который кричит
    на нас, когда что-то
    не работает
    1.Тул, который будет
    заставлять нас
    думать о дизайне

    View Slide

  49. Что нам надо
    Что мы имеем
    1.Тул, который нас
    заставляет отвечать
    на вопросы
    реализации
    2.Тул, который
    заставляет нас
    говорить с ним в
    терминах
    тестирования
    3.Тул, который кричит
    на нас, когда что-то
    не работает
    1.Тул, который будет
    заставлять нас
    думать о дизайне
    2.Тул, который будет
    заставлять нас
    говорить в терминах
    поведения

    View Slide

  50. Что нам надо
    Что мы имеем
    1.Тул, который нас
    заставляет отвечать
    на вопросы
    реализации
    2.Тул, который
    заставляет нас
    говорить с ним в
    терминах
    тестирования
    3.Тул, который кричит
    на нас, когда что-то
    не работает
    1.Тул, который будет
    заставлять нас
    думать о дизайне
    2.Тул, который будет
    заставлять нас
    говорить в терминах
    поведения
    3.Тул, который будет
    строить с нами
    диалог, если что-то
    пока еще не
    работает

    View Slide

  51. View Slide

  52. phpspec не пытается уговорить
    вас использовать SpecBDD. Он
    делает разработку вне SpecBDD
    суицидальной.

    View Slide

  53. Вопросы?

    View Slide