6b. For some complex scenarios—such as testing behavior on a specific complex state to find an obscure bug—that may not be possible. Writing tests first really helps with this as it forces you to think about the behavior of your code and how you're going to test it before you write it.
Testing first encourages smaller, more modular units of code, which generally means better code. A good book for getting started with the "test first" approach is Test Driven Development by Example, by Kent Beck.