Сколько не читал в сети материалов по BDD/ATDD так и не нашел сведенья о каких-либо различиях в этих двух подходах. У меня лично сложилось впечатление, что ATDD == BDD. Конечно у этих терминов чуть разные авторы и разные сообщества, но вцелом, на сегодняшний день, термины отличаются только популярностью бренда.
Ключевая разница в том, что задается до непосредственно реализации кода, сценарии или сами тесты. А это уже определяет область применимости. Так TDD имеет смысл при написании white-box тестов, покрывающих непосредственно код, так как известен интерфейс. BDD применим там, где появляются более комплексные сценарии, но при этом не факт, что еще определен интерфейс классов и методов. При этом BDD хуже применим для тех же юнит тестов, так как представляет только лишний уровень абстракций.
В общем, идея та же: тесты до реализации. Различие заключается только в типах этих тестов.
Все действительно очень похоже, за исключением нескольких различий.
В BDD, как сейчас говорят, главное – это комуникация. Т.е. сценарии не обязательно записывать и не обязательно их автоматизировать. Главное – это обсудить тему, достичь общего понимания, возможно, выделить парочку бизнес-кейсов.
В TDD – автоматизация – обязательна. Потому что сложно себе представить TDD с ручным тестированием
Так вот, если объеденить BDD с его выделением бизнес кейсов (грубо говоря, Acceptance-тестов) + TDD с его обязательной автоматизацией тестов перед тем как начать писать код, то и получится ATDD.
А вообще то, Specification by Example, BDD и ATDD – это практически синонимы.
А тут Ден Норт описывает, как BDD может превратится в TDD: