Cucumber is awesome from what I've seen of it (webinar and demos at work) and I believe it's behavior driven development - not TDD. These are easily confused though. Another nice dose of confusion is when people talk about acceptance
driven development (Agile enthusiasts experiencing Jira for the first time are quite fond of this). TDD is a really great thing and after years of writing unit tests for everything I can't imagine living without it, or rather, without good automated unit tests. TDD is not really necessary after a while when you develop testable code, though it's more satisfying imo. These days it's Agile, continuous integration and refactoring with success being measured in functionality and quality not milestones and Gantt charts. Velocity and story points not WAG dates and mythical man hours.
Yet when absolutely everything must begin with a failing test, then get coded, then pass the test, I can't help but ponder the obvious:
Doesn't anyone friggin prototype anymore??
But seriously, I'm a coolaid drinking unit test believer, especially working with larger silicon clouds. Cross-team impact potential of releasing APIs/modules without tests?
Great book on the subject: Working Effectively with Legacy Code by Michael Feathers. He defines legacy code as code without tests, since without them you really don't know if the code is getting better or worse with enhancements and refactoring - especially after some time has passed and you don't remember it as well, or of course if the code isn't yours to begin with.