Software Development/Test-First Programming
- TestDrivenDevelopment - Martin Fowler
- Introduction to Test Driven Development (TDD) - Agile Data
- RIP TDD - Kent Beck - Facebook
To get myself into the habit of writing tests first, I'm including it as a subtask for each function I note in my task manager (I use Nirvana, an app designed with GTD in mind). I have a template for these subtasks, which I copy into the description of the tasks. At the moment the template looks like this:
- Document - Test - Code - Commit
Really I'll move back and forth between documenting, testing, and coding, but I'll check them off when I've completed the first instance of each of those subtasks for that function.
A practice I'm starting to explore that takes TDD a step further is behavior-driven development. It allows you to derive tests from documentation that's both human readable and executable.