Automate All The Things
Testing software and writing software share the following property in common: it's not doing them that's beneficial, it's having done them. Having access to finished, working software is a useful thing, so a project that's in progress is only as valuable as one that hasn't started (although the in-progress one has already cost more). Therefore, as much of the testing procedure itself should be automated as possible to let testers get on with the more creative tasks of defining tests and discovering/reporting issues.
This automation starts with setting up the test environment into a known, initial state. Virtual machines are increasingly being used for this task (at least in server and desktop environments) because they offer a quick way to create an environment of known configuration into which the test harness and the software it's testing can be deployed. At the end of a test run, the state of the virtual machine is reset and it&apos...