В историю программной инженерии вошли две катастрофы, которыми часто иллюстрируют ошибки в программном обеспечении во многих книгах и статьях: взрыв ракеты Ariane-5 после запуска и неправильное поведение аппарата для лучевой терапии Therac-25, которое привело к гибели пяти человек. Обе катастрофы были беспрецедентыми, причины произошедшего тщательно расследовались и материалы расследований доступны публично. В результате расследования катастрофы с Ariane-5 было установлено, что конвертация данных из 64-разрядного числа с плавающей запятой в 16-разрядное привела к зависанию компьютера. Процедура на языке Ада, обрабатывающая эту исключительную ситуацию, была исключена из соображений сохранения производительности системы. Одним из участников комиссии для расследования причин аварии был Бертран Мейер, который предложил для выявления такого рода ошибок использовать принцип контрактного программирования (Design by contract): контракт описывается с помощью пред- и пост-условий и устанавливает для любого программного компонента ограничения на входные и выходные параметры. Но похоже контрактное програмирование не выдержало проверку временем, если мы не видим повсеместного использования этого подхода. https://youtu.be/PK_yguLapgA?t=66
The first launch of the Ariane 5 rocket launch ended spectacularly with a malfunction seconds after lift off that resulted in the destruction of the vehicle.