У кого из вас есть TDD или BDD в разработке, что конкретно вы делаете, когда, как к этому пришли?
Книгу не читал, по этому аналогий привести не смогу
Пишу на  php  для веб c  bdd
1. Пишу  bdd story.
( в моем случае это  сценарии behat)
Для меня  bdd  story  это как функциональные и интеграционные тесты, в которых я проверяю работу всего моего продукта в целом.
Тут вынес несколько правил для себя:
1.1.  Обязательно  формулировать цель (название) сценария
      - Я  вхожу в личный кабинет
      - Я создаю новую статью блога
Это поможет отстраниться от лишнего и не превратить сценарий в кашу
1.2. Писать на нативном языке без технических подробностей
   Я поначалу долго сопротивлялся писать, что либо кроме файлов трансляции на  русском. Но потом вкурил фишку. По сути сценарии у меня превратились не просто в тесты, а мини todo list. Всегда четкий и понятный.
А избегание технических подробностей помогает забыть о проектирование архитектуры системы на  этапе написания сценария.
И мне гораздо понятнее:
   - Я должен видеть "Отказано в доступе"
чем 
   - Статус код страницы должен быть  403
1.3. Я(Исполнитель) сценария дурак )
   Сценарий не должен быть замудреным.  От должен быть простой и не  держать какие-либо  данные  "в голове".
-
2. Далее я начинаю реализовывать шаги сценария
(писать тесты)
- Если я имею на руках  желтый (не реализованный) сценарий, то  начинаю уже задумываться о технических подробностях которые лежат на поверхности:
 Например (приведенный код это псевдокод для понятности Я должен быть на странице "Новости"assert( $uri, '/news'); Я  вижу заголовок статьи "Эта прекрасная статья"assertTextInElement('#newsTitle", $title);
- Если я имею на руках красный тест, то пришло время для кода..
3.  Написание практически всего кода  предшествует  у меня  BDDSpec
(в моем случае  phpspec)
  И так,  я получил ошибку от  bahat. Я специально настроил утилиту так что бы она ругалась ошибками разрабатываемой системы.
В итоге я получаю  такую ошибку:
 - uri '/new' not  exist
Это для меня прямое указание к действию.  т.е я должен создать новую страницу.
В рамках моей системы  уже существуют правила:
  - новая страница - это  новое   action у  контролера.
  - action  должен вернуть массив значений для  шаблона
Опираясь на это я создаю спецификацию для контроллераclass ControllerSpec  {
  public function it_should_show_news ()
  {
    $this->newsAction()->shouldBeArray();
  }
}
И далее код, который пройдет этот тест:class Controller {
  public function newsAction() 
  {
     return [];
  }
}
4. После этого запустив  phpspec  я получил  зеленый  bddspec
5. После этого  cнова  возвращаюсь к bddstory
    Получаю зеленый шаг 
6. Возвращаюсь на шаг 2.
Так начинает расти система и обрастать новым протестированным функционалом.
До  bdd использовал  tdd  c  PHPUnit и был очень   доволен, пока не подсел на  behat + phpspec
Сегодня узнала, что в одной команде функциональные тесты на фронтенд пишут до реализации фич на Selenium, немного в шоке..