да, модульные тесты являются очевидным решением для большинства случаев.
предупреждения компилятора и статический анализ также полезны.
Сроки выполнения программы с учетом набора параметров - это еще один довольно автоматизированный вариант - зависит от того, что вы заинтересованы в оценке.
Создание базовых классов с хорошей диагностикой (которую вы можете заменить реализацией для вашей оценки, если хотите) - это еще один вариант. Вы также можете предоставить интерфейсы, которые они должны использовать, и содержать две реализации. затем выполняйте программы как обычно, используя диагностическую реализацию. это зависит от того, что вы ищете.