Тести як тести - пишеш маленьку програмульку, яка щось робить і перевіряєш результат з тим, що має бути отримано, якщо програма вірна.
Наприклад тест на bash-і для програми, яка виводить "Hello, world!" може виглядати так:
#!/bin/bash
OUTPUT="`./program`"
if [ "x" != "xHello, world\!" ]
then
echo "Wrong output of program, excpected \"Hello, world\!" but output is \"$OUTPUT\""
fi
і далі ковбасиш програму доти, поки тест не замовкне.
Сотня таких програмульок перевіряють усю програму, але кожна лише якусь невелику частину. Так що коли якийсь тест валиться, то як правило не треба переглядати усю програму, а лише кілька десятків рядочків тексту - переглянути їх як правило швидше, ніж запусти долбагер та добратися в потрібне місце. Я за останні пів року користувався долбагером буквально чотири чи п'ять разів.
Потрібно писати такі тести, які валяться на помилковому коді, інакше від них немає користі. Для написання юніт-тестів зручно використовувати бібліотеку *unit (JUnit, CUnit, phpUnit, ect., в залежності від мови програмування).
Стратегія, коли спочатку пишеться тест, а потім код, називається Test Driven Programming і є частиною eXtreme Programming. Якщо в програмі знайшлася помилка, то зручно написати спочатку тест, який демонструє помилку в програмі, а потім ковбасити програму, поки помилка не зникне і всі інші тести теж працюватимуть нормально.
Коли здаватимеш програму, то тести дуже допомагають не на ламати дров у останній момент.
Я часто приходжу на роботу з ранку, беру останню версію програми з репозиторію, запускаю тести і йду матюкатися - бо знов щось поламали і не перевірили.

Часто також бувало раніше, що хотілося чим швидше, і я віддавав новий код не покритий тестами - ще жодного разу я не виграв на цьому ні хвилини часу (за винятком елементарних речей), бо знаходилася помикла і доводилося все таки писати тест і виправляти помилку.
На Ґуґлі можна знайти більше інформації, і російською теж.
На якій мові пишем? Можливо я зможу навести приклади.