Яким був історичний вплив польоту 501 Ariane 5?


9

Дезінтеграція ракети "Аріана 5" через 37 секунд після запуску в дівоче плавання ( Flight 501 ) прийнято називати однією з найдорожчих програмних помилок в історії 1 :

Європейському космічному агентству знадобилося 10 років і 7 мільярдів доларів, щоб створити гігантську ракету Ariane 5, здатну виводити на орбіту пару тритонних супутників і покликана надати Європі переважне перевагу в комерційному космічному бізнесі.

Все, що знадобилося, щоб вибухнути цю ракету менше ніж за хвилину у дівоче плавання минулого червня, розкидаючи вогненний сміття по мангрових болотах Французької Гвіани, була невеликою комп'ютерною програмою, що намагалася ввести 64-бітну кількість у 16-бітну область.

Одна помилка, одна аварія. З усіх необережних рядків коду, записаних у літописі інформатики, цей може бути найбільш руйнівним. З інтерв'ю з експертами з ракетної зброї та аналізом, підготовленим для космічного агентства, з'являється чіткий шлях від арифметичної помилки до повного знищення.

Які основні зміни призвели до відмови Flight 501 та подальших розслідувань для дослідження критично важливих систем безпеки та тестування програмного забезпечення?

Я не шукаю пояснення самої помилки, а для пояснення історичного впливу помилки, з точки зору досліджень, які були натхнені або були безпосередньо пов’язані з дослідженнями провалу. Наприклад, у цьому документі робиться висновок:

Ми використовували статичний аналіз для:

  • перевірити ініціалізацію змінних,
  • надати вичерпний список потенційних конфліктів доступу до даних для загальних змінних,
  • вичерпно перерахуйте потенційні помилки часу виконання з семантики Ада.

Наскільки нам відомо, це вперше методи статичного аналізу на основі булевих та не булевих методів, які використовуються для перевірки промислових програм.

Аналогічно цей документ (pdf) зазначає:

Статичний аналіз програм на основі абстрактних інтерпретацій був використаний для статичного аналізу вбудованого програмного забезпечення ADA пускової установки Ariane 5 та ARD. Статичний програмний аналізатор спрямований на автоматичне виявлення визначеності, потенційності, неможливості або недоступності помилок під час виконання, таких як скалярні та «точки відхилення» над fl ows, помилки індексу масиву, розділення на нуль та пов'язані з ними арифметичні винятки, неініціалізовані змінні, перегони даних на спільні структури даних тощо. Аналізатор зміг автоматично виявити помилку Ariane 501 fl. Статичний аналіз вбудованого критичного для безпеки програмного забезпечення (наприклад, авіонічного програмного забезпечення) є дуже перспективним .

Мені б хотілося детально пояснити вплив цієї події на підходи та інструменти тестування програмного забезпечення.

1 Ця цифра в 7 мільярдів доларів, можливо, стосується загальної вартості проекту Ariane 5, Вікіпедія повідомляє, що цей збій призвів до втрати понад 370 мільйонів доларів. Все ще досить дорогий збій, але ніде близько 7 мільярдів доларів.


5
Визначте "найгірше" ... Найгірше, бо це було дорого? Я не знаю ... Я думаю, що Therac-25 був би набагато гіршим помилкою, якби ви були одним із людей, які зазнали масових передозувань радіації під час лікування раку. users.csc.calpoly.edu/~jdalbey/SWE/Papers/THERAC25.html ; курси.cs.vt.edu/~cs3604/lib/Therac_25/Therac_1.html ; en.wikipedia.org/wiki/Therac-25
FrustratedWithFormsDesigner

2
@FrustratedWithFormsDesigner Відповідь на власне запитання цілком прийнятна , останнім часом ми навіть отримали функцію, яка заохочує самостійні відповіді. Я збирався тестувати його на це питання, однак враховуючи, що це питання конкурсу (не те, що він має шанс), я вирішив дозволити йому відповісти хтось інший.
янніс

3
Чи ми дійсно хочемо встановити, що дидактичні питання є в обсязі? Якщо так, я можу побачити хвилю м'яко дратівливих запитань, спрямованих на те, щоб вести нас кудись і навчити чогось, без того, як ОП дійсно не потребує відповіді. До вас, але це здається ризикованим.
Корбін

4
@gnat Ніколи не сказав, що це єдина відповідь, лише натяк на те, що питання має відповідь, щоб заспокоїти близьких виборців. Але тут ви йдете: articles.adsabs.harvard.edu//full/1998ESASP.422..201L / ... & dl.acm.org/citation.cfm?id=263750 (ACM платний доступ)
Янніс

3
@FrustratedWithFormsDesigner: Іноді у мене виникають питання, на які я думаю, що знаю відповідь, але не впевнений. Тому я хотів би попросити їх не підтверджувати мою тезу, а бути відкритим для будь-яких відповідей, які я збираюся отримати. Тож, загалом, я думаю, що є сенс задати питання, навіть якщо у мене вже є якісь ідеї щодо можливих відповідей.
Джорджо

Відповіді:


5

Технічно кажучи, це було скоріше випадком " гниття програмного забезпечення ". Програмне забезпечення управління польотом було перероблено з попередньої ракети "Ariane 4", що є розумним кроком, враховуючи, наскільки дорого розробляти програмне забезпечення, особливо коли це найважливіше програмне забезпечення, яке повинно бути протестовано і перевірено на більш жорсткі стандарти, ніж це має бути більшість комерційних програм.

На жаль, ніхто не переймався тестуванням того, який вплив матиме зміна в операційному середовищі, або якщо вони не зробили тестування на достатньо ретельний стандарт.

Програмне забезпечення було розроблене для очікування, що певні параметри ніколи не перевищуватимуть певних значень (тяга, прискорення, швидкість споживання палива, рівень вібрації тощо). У звичайному польоті на Ariane 4 це не було проблемою, тому що ці параметри ніколи не досягатимуть недійсних значень, якщо щось вже не вражає. Однак Ariane 5 є набагато потужнішим, і діапазони, які, здається, нерозумні на 4, можуть досить легко статися на 5.

Я не впевнений, який саме параметр вийшов за межі діапазону (можливо, це було прискоренням, мені доведеться перевірити), але коли це було, програмне забезпечення не впоралося і зазнало переповнення арифметики, яке було недостатньо перевірено помилок та код відновлення. Керівний комп’ютер почав відправляти сміття до карданних насадок двигуна, які, в свою чергу, почали вказувати насадку двигуна майже випадковим чином. Ракета почала руйнуватися і розбиватися, і автоматична система саморуйнування виявила, що ракета зараз перебуває в небезпечному непоправному відношенні і закінчила роботу.

Якщо чесно, цей інцидент, ймовірно, не навчив нових уроків, оскільки подібні проблеми були знайдені раніше у всіх системах, і вже є стратегії, які дозволять знайти та виправити помилки. Те, що відбулося в інциденті, полягало в тому, що слабкість у дотриманні цих стратегій може мати величезні наслідки, в цьому випадку мільйони доларів знищеного обладнання, деякі надзвичайно розлючені клієнти та потворна вм'ятина в репутації Arianespace.

Цей конкретний випадок був особливо кричущим, тому що ярлик, який було використано для заощадження грошей, у кінцевому рахунку коштував величезну суму, як з точки зору грошей, так і з втратою репутації. Якби програмне забезпечення було протестовано настільки ж надійно в середовищі, що імітується Ariane 5, як і коли воно було спочатку розроблено для Ariane 4, помилка, безумовно, з’явилася б задовго до того, як програмне забезпечення було встановлено в апаратному забезпеченні для запуску та введено команду фактичний політ. Крім того, якби розробник програмного забезпечення навмисно кинув у програмне забезпечення якийсь дурницький вклад, помилка, можливо, навіть потрапила б у епоху Ariane 4, оскільки це підкреслило б факт недостатнього відновлення помилок.

Отже, коротше, це не дуже навчило нових уроків, але все-таки небезпека не згадувати старі. Він також продемонстрував, що середовище, в якому працює програмна система, є важливим, як і саме програмне забезпечення. Тільки тому, що програмне забезпечення вірно правильне для середовища X, це не означає, що воно підходить за призначенням у подібному, але чіткому середовищі Y. Нарешті, він підкреслив, наскільки важливим є те, щоб критичне програмне забезпечення було достатньо надійним для вирішення обставин, які не повинні мати сталося.

Контрастний рейс 501 з Apollo 11 та його комп'ютерні проблеми. Незважаючи на те, що програмне забезпечення LGC зазнало серйозних збоїв під час посадки, воно було розроблене надзвичайно надійно і було здатне залишатися в робочому стані, незважаючи на тривогу програмного забезпечення, не створюючи небезпеки космонавтам і не маючи можливості завершити свою місію.


6
Список літератури ....
FrustratedWithFormsDesigner

2
Мої власні спогади про лекції з інженерної етики під час вивчення інформатики в університеті :)
GordonM

Якщо я добре пам’ятаю, проблема була викликана пропуском деяких тверджень у місці, яке для Аріани 4 вважалося нормальним, оскільки його комп'ютер (інерційна навігація) був би перевантажений, якби заяви були подаровані. У Ariane 5 був набагато більш потужний комп'ютер, який міг би легко виконувати завдання, але вони не були відновлені.
Павло

1

Це здебільшого була проблема повторного використання та управління, а не кодування. З моїх спогадів (я, мабуть, неправильно розумію деякі речі) звіту.

  • одна підсистема була розроблена для Аріана IV. Траєкторії Ariane IV не могли призвести до переповнення, і тоді було навмисно вирішено, що якщо це відбудеться, це проблема апаратури, і вимкнення підсистеми та перехід на запасні - це правильна річ.

  • для Ariane V було вирішено повторно використовувати цю підсистему і не переглядати припущення та код, а покластися на тестування.

  • далі було вирішено кинути повне тестування.

Різні параметри польоту Ariane V спричинили перелив. Вимкніть первинне. Вимкніть запасні. Автореструктура.

Додаткові речі, які я пам’ятаю:

  • підсистема в момент переповнення не була більш корисною. Можна стверджувати, що його збій не повинен був спровокувати автоструктурування. (З іншого боку, додаткова складність сама по собі може бути джерелом проблем).

  • дані про налагодження надсилалися в шину, коли вона не повинна. Я не пам’ятаю конкретного.


Ах, я знаю, що це за помилка, це насправді не моє питання. Я часто чув, що помилка змінила наш підхід до тестування програмного забезпечення, і саме про це я питаю.
янніс


ISTR механізм відмови полягав у тому, що код викинув виняток переповнення, який абонент не вловив. Виняток розповсюджувався до тих пір, поки його не спіймав обробник винятків за замовчуванням, який перервав модуль, який порушує порушення. Однак, оскільки виняток пронизав стільки рівнів, "модулем-порушником" в цей момент була вся RSI (інерціальна система відліку).
TMN

0

Як зазначали інші, це призвело до того, що галузь взагалі переглянула концепцію повторного використання та розмістила її в більш широкій системі відліку, за якою компоненти оцінюються не ізольовано, а в контексті всієї системи. Це значно знижує привабливість повторного використання, оскільки навіть якщо компонент можна повторно використовувати без змін, його все одно потрібно проаналізувати з новим набором припущень. Іншим наслідком є ​​те, що резервне обладнання з таким же програмним забезпеченням не є настільки привабливим, оскільки більшість сучасних апаратних засобів на порядок більш надійні, ніж сучасні програми. Я чув, що для деяких оборонних контрактів потрібні дві окремі програмні системи, розроблені різними командами, які використовують різні технології, що працюють з однієї специфікації, щоб перевірити належну імплементацію.


2
Довідники, будь ласка ...
yannis

1
Здебільшого наполовину запам'ятовується зі старої статті ACM, але трохи більше інформації можна знайти тут .
TMN

Ідеї ​​окремих комп'ютерів, з кодом, розробленими різними командами, використовувались програмою Space shuttle, а може бути, і раніше.
mhoran_psprep

@mhoran_psprep: Прочитайте про помилку AT&T Exchange і її результати. Вибачте - немає посилання, знайте про це з пам'яті.
mattnz
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.