Both are a form of test driven development, since you write the tests upfront. The main difference is that TDD tests are technical tests often [unit-tests][1] created during developing of a feature and are written just before you implement a part of the feature in the code-base. Where BDD tests are often written before the coding starts and are human readable and anyone should be able to understand what they test. BDD tests are used as [Specification by Example][2]. But its a bit more complex than that as BDD frameworks like [JBehave][3] can also be used to write unit-tests, but also for end-2-end integration tests. And nothing is really forcing you to make the tests readable by non developers. There is also a third term [ATDD][4] (Acceptance test-driven development) which is how BDD was called before the BDD area. This makes the difference between the both a little bit more clear. Suggested reads are * [Online TDD chapters][5] of the Art of Agile * The [specification by example][2] book * The [Test Driven][6] book. Personally I think we should find another name for TDD which makes it clear that its a cycle for writing unit-tests, because now its so broad that any tests defined before the coding could be called a form of TDD. Hope I not confuse you more, but the main difference is technical tests testing the working of methods (TDD) vs human readable tests describing the behavior (BDD). [1]: https://en.wikipedia.org/wiki/Unit_testing [2]: http://specificationbyexample.com/ [3]: http://jbehave.org/ [4]: https://en.wikipedia.org/wiki/Acceptance_test-driven_development [5]: http://www.jamesshore.com/Agile-Book/test_driven_development.html [6]: https://www.manning.com/books/test-driven