Такие наработки есть, причём очень много.
Сначала отвлечение.
Первый тезис не совсем верен, Software Engineering движется во все стороны.
Сам вопрос тоже сформулирован слишком строго. Средств разработки, не допускающих ошибок, быть не может. А вот средства разработки, предотвращающие или снижающие число ошибок отдельных классов, разрабатываются непрерывно.
Всё развитие инструментальных средств - это борьба в том числе и с большим объёмом неконцептуальных ошибок. Один язык Ада со соответствующей инфраструктурой чего стоит. Но всё в мире взаимосвязано, а понятие "ошибки" настолько сложно, что борясь с некоторыми классами ошибок, мы теряем что-то другое. Поэтому важен компромисс. Навскидку рекомендую посмотреть некоторые эссе Джоэла Сполски, особенно про дырявые абстракции, "Мифический человекомесяц" Брукса, "Совершенный код" Макконнелла, историю создания Ады и Оберона.
Непосредственно сабжем занимаются огромные разделы теории алгоритмов, семантики и прагматики языков программирования, теории трансляции. Сюда же - методологии проектирования, модели ЖЦ, построение СПЖЦ.
Причём сколько всего конкретного придумано!
Принудительное проектирования, объектно-ориентированная парадигма в своём первоначальном виде, логическое и функциональное программирование и вообще декларативный подход к решению стандартных задач, шаблоны проектирования (от банды четырёх и далее). Программирование по контракту (предусловия и постусловия, автоматическая проверка инвариантов и т.д.), модульное программирование. Строгая типизация, сборщики мусора, умные указатели, виртуализация ресурсов. Автоматическая геннерация кода по модели. Автоматическая оптимизация. Автоматическая верификация и т.п.