A good habit is to write new tests each time new behavior is implemented. Don't wait until after development to write tests, since it's likely that a test suite written afterwards will be less complete than one written during development. Integration Tests Test a group of modules together. This can be done recursively upwards, as larger modules make use of more and more smaller ones. At the top-level, this is called a system test and should be run automatically and regularly in any software engineering environment.
Regression Tests Test everything after each build or bug-fix.
This is especially useful since whatever changes were made are fresh on the engineer's mind, so bugs can be tracked down more quickly. Automatic testing systems are vital to make regression testing easy and fast. When a bug is found, tests should be written immediately that fail with the bug and pass once the bug is fixed. Alpha Tests Tests run by the customer in a developer-controlled environment. Beta Tests Tests run by the customer in their own use environment.