Integrated - written by the same coders, in the same language, on the same platform, as the bugs, with support from the objects to be tested, and tuned to run automatically and with dependencies correctly built.
Unit - test one "component" (clump of classes) at a time. This permits (per LargeScaleCppSoftwareDesign) units to test in dependency order, so bugs in client objects are known to not arise in un-tested server objects.
Test - call Assertions all over the place, and JUST CROAK if they fail. Don't log anything, or e-mail anyone, or "count" or "rate" the failures. If ONE FAILURE is enough to fail all tests, and if the test watchers are empowered to fix whatever broke, then don't bother testing anything else after the failure.
