<p>I recently heard of BDD and found it very similar to TDD.</p>

<p>Which of these two do you use (if any)?</p>

<p>and which are the pros and cons of each?</p>

BDD is similar to TDD but with a different mindset. In BDD you're trying to create executable specifications instead of tests. This is mostly accomplished by using a different vocabulary but similar mechanics as TDD.
BDD seems to be a reaction to a lot of cases where people claimed to be doing TDD but were writing integration tests instead of unit tests. BDD people thought talking about tests was misleading and so tests became specifications. This seems a bit metaphysical but there are some good ideas behind it.