Не делайте ничего "за спиной" у пользователя.
Всегда делайте одинаковое одинаково.
Высвобождайте ресурсы на том же уровне, где выделяли их.
Обнаруживайте ошибки на низком уровне, обрабатывайте на
высоком.
Используйте исключения только для исключительных
ситуаций.
Отладка
Ищите знакомые ситуации.
Проверьте самое последнее изменение.
Не повторяйте дважды одну и ту же ошибку.
Не откладывайте отладку на потом.
Пользуйтесь стеком вызова.
Читайте код перед тем, как исправлять.
Объясните свой код кому-либо еще.
Сделайте ошибку воспроизводимой.
Разделяй и властвуй.
Изучайте нумерологию ошибок.
Выводите информацию, локализующую место ошибки.
Пишите код
с самоконтролем.
Ведите журнальный файл.
Постройте график.
Используйте инструменты.
Ведите записи.
Тестирование
Тестируйте граничные условия кода.
Тестируйте пред- и постусловия.
Используйте утверждения.
Используйте подход защитного программирования.
Проверяйте коды возврата функций.
Тестируйте по возрастающей.
Тестируйте сначала простые блоки.
Четко опредеоите, чего вы хотите на выходе текста.
Проверяйте свойства сохраности данных.
Сравните независимые версии.
Оценивайте охват тестов.
Автоматизируйте возвратное тестирование.
Создайте замкнутые тесты.
Производительность
Автоматизируйте замеры времени.
Используйте профилировщик.
Концентрируйтесь на критических местах.
Постройте график.
Улучшайте алгоритм и структуру данных.
Используйте оптимизацию компилятора.
Выполните тонкую настройку кода.
Не оптимизируйте то, что не имеет значения.
Объединяйте общие выражения.