TDD is a code-writing approach where the developers first write a test based on the specification and then write the code. This is just the opposite of what the developer community has been used to. The conventional approach that we followed was to write the code and then write tests for it. To be honest, the real practice was to write the code and test it with adhoc tests and no unit tests at all. Being a professional, you will never do that, by the way. You always write tests. (And now, write it down a hundred times—I will always write tests.)
One of the advantages of TDD is that the tests do not depend on the code. As the code does not exist at the creation of the test, developers cannot rely on the implementation of the unit and, thus, it cannot influence the test creation process. This is generally good. Unit tests should be black-box tests...