Большинство из этих ошибок будут обнаружены путем передачи соответствующих предупреждающих флагов компилятору.
Однако из исходного списка пункты 1, 5, 6, 7, 8 очень стоит проверить как человек, однако некоторые комбинации компилятор / флаг, однако, обнаружат необработанные значения, указатели на автоматическую память и отключены. ошибки в индексации массива и т. д.
Возможно, вы захотите взглянуть на такие вещи, как mudflap , valgrind , efence и другие, чтобы отследить случаи выполнения, о которых вы не знаете. Вы также можете попробовать splint , чтобы расширить свой статический анализ.
Что касается неавтоматизированной стороны, попробуйте статически следить за ходом вашей программы для конкретных случаев, особенно для угловых случаев, и убедитесь, что она поступает правильно. Попробуйте написать модульные тесты / тестовые сценарии. Обязательно используйте автоматическую проверку, как описано выше.
Если вы делаете упор на тестирование без выполнения теста, splint вполне может быть лучшим местом для начала. Техника, которую вы хотите исследовать, называется статический анализ кода .