Помилка Аріан 5
Помилка у програмному забезпеченні ракети-носія Аріан 5 — помилка у програмному забезпеченні бортового комп'ютера, яка призвела до аварії ракети-носія Аріан-5 під час першого запуску 4 червня 1996 року. Ця помилка відома як одна з найдорожчих помилок в історії програмування[1].
Ракету розробляли десять років, витративши 7 мільярдів доларів.
Ракета виводила на орбіту чотири супутники для дослідження магнітосфери Землі, загальною вартістю 370 мільйонів доларів. Місію цих супутників завершили лише в двохтисячному за допомогою ракетоносія «Союз».
Це спричинило сплеск у дослідженнях формальних методів проектування комп'ютерних систем, оскільки зацікавленість у них і, відповідно, фінансування збільшились.
У програмі керування польотом ракети Аріан 5 використовувались фрагменти програмного забезпечення Аріан 4. Тестування роботи цього модуля було вирішено не проводити, оскільки він був запозичений з перевіреної, робочої програми. Проте під час переносу програмного забезпечення на нову ракету розробники врахували не всі особливості. Ракета мала дещо іншу траєкторію виходу на орбіту (більше прискорення), тому горизонтальна швидкість ракети вийшла за межі, які могла обробляти програма.
А саме, у програмі сталася помилка під час перетворення 64-розрядного числа з рухомою комою у 16-розрядне ціле. Надто велике значення дійсного числа не вмістилося в 16 розрядах, що спричинило переповнення.
Основний і резервний комп'ютери інерційної навігації мали однакову програму, таке резервування розраховане на захист від випадкових збоїв програм та несправностей апаратного забезпечення. Позаяк обидві програми працювали однаково, переповнення було отримане в обох комп'ютерах, після чого сопла повернулися під неправильним кутом. Сильні аеродинамічні тиски зруйнували корпус ракети, після чого спрацювала автоматична система самознищення.
...
declare
vertical_veloc_sensor: float;
horizontal_veloc_sensor: float;
vertical_veloc_bias: integer;
horizontal_veloc_bias: integer;
...
begin
declare
pragma suppress(numeric_error, horizontal_veloc_bias); -- UBW aus
begin
sensor_get(vertical_veloc_sensor);
sensor_get(horizontal_veloc_sensor);
vertical_veloc_bias := integer(vertical_veloc_sensor);
horizontal_veloc_bias := integer(horizontal_veloc_sensor); -- Оператор, що спричинив помилку
...
exception
when numeric_error => calculate_vertical_veloc(); -- код обробки помилки
when others => use_irs1(); -- у цьому випадку виконується...
end;
end irs2;
Космічний апарат Cluster складався з чотирьох циліндричних, стабілізованих обертанням[en] супутників вагою 1200 кг, що мали живитись від сонячних батарей потужністю 224 Вт. Космічний апарат мав літати у формі тетраедра і мав на меті проводити дослідження магнітосфери Землі. Супутники були б розміщені на високоеліптичних орбітах на висоті від 17200 до 120600 км, нахилених під кутом 90 градусів до екватора.[3]
- ↑ Архівована копія. Архів оригіналу за 5 червня 2010. Процитовано 11 червня 2010.
{{cite web}}
: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання) - ↑ Архівована копія. Архів оригіналу за 17 серпня 2008. Процитовано 16 травня 2010.
{{cite web}}
: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання) - ↑ Krebs, Gunter. Cluster 1, 2, 3, 4, 5, 6, 7, 8. Gunter's Space Page. Процитовано 29 листопада 2011.
- Design by Contract: The Lessons of Ariane [Архівовано 21 грудня 2011 у Wayback Machine.]