Технополис завтра
Самое важное. Самое полезное. Самое интересное...
Новости Интересное

Ставка на языки программирования С и C++ - роковая ошибка, допущенная при создании самолёта F-35

Слишком "громкий" заголовок? Не думаю. Что ж, приступим.


Рис. 1. Число строк программного кода бортового ПО F-35 на иллюстрации преувеличено. Сегодняшняя оценка ~10 млн. строк

Я сейчас не буду писать об аэродинамике всех трёх версий ударного истребителя F-35. О ней я упоминал ранее. Если кратенько, аэродинамика не блещет. Но ведь согласитесь, было бы странным ожидать от "бюджетного" истребителя-бомбардировщика (в русском языке не прижился термин "истребитель-штурмовик" в наибольшей степени соответствующее англоязычному strike fighter) лётно-тактических характеристик, сравнимых с характеристиками лучших самолётов-истребителей, при проектировании которых конструкторы думали прежде всего над тем, как обеспечить победу в воздушном бою.

Оптимизация боевого самолёта для решения ударных задач практически всегда ухудшает его скоростные и маневренные характеристики (в качестве примера могу предложить отечественный многофункциональный истребитель-бомбардировщик Су-34, максимальная скорость которого снизилась до 1900 км/ч, в сравнении с 2500 км/ч истребителя Су-27, на основе которого Су-34 был создан). Не будем также забывать про "бюджетность" всей программы F-35. Как мог бы выглядеть НЕ бюджетный американский истребитель-бомбардировщик, понятно по проектным характеристикам так и не созданного на основе истребителя F-22A истребителя-бомбардировщика FB-22, у которого планировалась крейсерская сверхзвуковая скорость М=1.5 и боевой радиус без дозаправки до 2500 км.

Посредственные ЛТХ F-35 вполне предсказуемы, ведь создавался он отнюдь не для достижения победы в ближнем маневренном воздушном бою. Согласно избранной разработчиками концепции боевого применения, новый американский истребитель-бомбардировщик в такие бои с истребителями противника вступать не должен. "F-35 не был оптимизирован для боевых маневров, но это не означает автоматически, что он не сможет добиться превосходства в воздухе за счет своих сильных сторон". К сильным сторонам F-35, призванным обеспечить превосходство этого самолёта над истребителями поколения 4+/4++, традиционно относят радиолокационную малозаметность и авионику, должные обеспечить для F-35 преимущество "первого выстрела" в воздушном бою.

Тему авионики F-35 я недавно затрагивал, написав о его комплексе РЭБ. Да, и тут заметен бюджетный подход - стоимость комплекса AN/ASQ-239 Barracuda, как утверждается в одной из рекламных брошюр корпорации Lockheed Martin, составляет лишь четверть от стоимости прототипа, комплекса AN/ALR-94 самолёта F-22A. Но речь сейчас о другом.

Как известно, любой компьютер без предназначенных для него программ превращается в бесполезный набор металлических и полупроводниковых деталей. Без программного обеспечения авионика современного самолёта бесполезна. О разработке бортового программного обеспечения для самолёта F-35 сейчас и пойдёт речь. Начну, пожалуй, издали.

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

Первым языком высокого уровня, оптимизированным для написания программ авиационных БЦВМ, стал созданный в 1959-м году на основе языка ALGOL 58, впервые применённый в 1960-м, язык JOVIAL. JOVIAL использовался ВВС США с начала 60-х (смотреть АСУ САК ВВС США 465L) и был стандартизирован в 1973-м (MIL-STD-1589). В БРЭО практически всех американских военных самолётов, поступивших на вооружение с 70-х по 90-е годы, широко использовались программы, написанные на JOVIAL. К примеру, именно на JOVIAL были написаны программы для БРЛС AN/APG-70, AN/APG-71 и AN/APG-73 самолетов F-15E, F-14D и F/A-18С/D (а так же F/A-18E/F Block 1).

Вторым широко использовавшимся для создания бортового ПО языком высокого уровня, стандартизированным МО США в 1983-м году, стал язык Ада (Ada). О нём стоит поговорить подробнее, потому что сегодня этот язык (и его подмножество SPARK) выступает в качестве языка программирования "первой линии" при создании высоконадёжного ПО для систем управления, функционирующих в реальном времени, как военных так и гражданских, в том числе ПО для авиационных систем управления. По ссылке можно посмотреть на далеко не полный список программных систем, при создании которых использован язык Ada - ПО для космических аппаратов и ракет-носителей, самолётов, систем управления воздушным движением и железнодорожным движением, КП ПВО... От малого, до огромного - от программного обеспечения для ИК ГСН ракеты "воздух-воздух" AIM-9X, до программного обеспечения для крупнейшего в мире пассажирского авиалайнера Airbus A380 и европейской системы управления движением поездов ETCS.

В чем причина столь широкого применения языка Ada при разработке ПО для систем военного назначения, управления транспортом и аэрокосмических применений? Кроме той причины, что язык был избран в качестве стандартного МО США (ANSI/MIL-STD-1815A-1983)? Дело в том, что надёжность функционирования создаваемого с помощью Ada ПО была главной парадигмой разработчиков этого языка:

"Основное назначение языка программирования Ада - разработка больших программных систем реального времени для встроенных компьютерных систем. Это, конечно, не исключает его использования при решении задач вычислительного характера, параллельной обработки, системного программирования и т.д. Более того, язык Ада часто рассматривают как язык общего назначения. Основное требование к программному обеспечению для встроенных компьютеров - это надежность. Именно поэтому в язык Ада введен целый ряд средств, направленных на разработку больших, сверхбольших и одновременно надежных программных комплексов." "Ада - язык разработки больших программных комплексов реального времени" "Открытые системы " № 06 1996 г.

"Перечислим некоторые причины, благодаря которым язык Ада был выбран для реализации программных проектов различными компаниями, либо сделан обязательным для использования в рамках тендеров.

- Желание повысить надежность разрабатываемой системы, так как программные дефекты могут иметь серьезные последствия для здоровья людей, экономики, экологии и т.п. (Ада обладает встроенными средствами обеспечения надежности).
- Желание снизить стоимость разработки и сопровождения системы.
- Наличие международных стандартов и наличие компиляторов языка практически для любой платформы.
- Преимущества дисциплинированного подхода к разработке программного обеспечения, которые становятся особенно существенными по мере увеличения объема и сложности программного обеспечения."

[...]

При проведении сравнительных анализов популярных языков переломано столько копий, что сегодня эту тему часто относят к разряду «религиозных войн». Поэтому ограничимся лишь ссылкой на известную статью [2], в которой делается ряд красноречивых выводов.

- Разработка программ на языке Ада обходится на 60% дешевле аналогичных программных проектов, реализуемых на Си.
- Программа на языке Ада имеет в 9 раз меньше дефектов, чем программа на Си; программа на Си++ имеет еще более низкие, чем программа Си, характеристики.
- предпочтительнее Си как для опытных, так и для неопытных программистов, а также для программистов, имеющих как максимальный, так и минимальный рейтинг в своей группе.
- Трудоемкость изучения языка Ада не выше трудоемкости изучения Си.
- Программы на Аде более надежны, чем программы на Си.

В качестве иллюстрации этих выводов, приведем пример разработки бортового программного обеспечения самолета C-130J в соответствии с требованиями Уровня А стандарта DO-178B [3]. При этом констатировалось качество кода, в 10 раз превышающее среднее для программного обеспечения Уровня А. Производительность труда выросла вчетверо относительно сопоставимых программных проектов." "Язык Ада - двадцать лет спустя" "Открытые системы" № 10 2003 г.

[2] - Stephen Zeigler, Comparing Development Costs of C and Ada. http://www.adaic.com/whyada/ada-vs-c/cada_art.html
[3] - P. Amey, Correctness by Construction: Better Can Also be Cheaper. CROSSTALK: Journal of Defense Software Engineering, March, 2002.

"В качестве "родителя" для Ады куратор проекта по разработке этого языка Жан Ишбиа выбрал Паскаль. В итоге язык получился очень строгим - более строгой типизации нет ни в одном другом языке программирования. А ещё благодаря этому тексты программ легко читаемы.

[...]

К сожалению, обратная сторона медали - это многословность Ады. На стойких адептов C/C++ она действует, словно красная тряпка на быка. Однако стиль программирования, в который Ада деспотично "вгоняет" программиста, способствует резкому снижению времени, нужного для отладки программы. Благодаря строгой типизации, явному объявлению всех используемых переменных и модулей, мощному механизму обработки исключений, Ада даёт возможность (можно даже сказать, навязывает) писать максимально надёжные программы. Нельзя сказать, что средства для работы с исключениями отсутствуют в С++, а Паскаль - язык с нестрогой типизацией. Однако почему-то Ада сокращает время отладки программ на 60%, увеличивая при этом среднее время написания проекта всего лишь на 10%. Думаю, посчитать чистую разницу несложно. А поскольку отладка C/C++-проектов нередко занимает до двух третей общего времени разработки, экономия получается существенная." "Леди Ада" "Компьютерные вести" ноябрь 2006 г.

Что ж, думаю, разговор о достоинствах (с упоминанием некоторых недостатков) языка Ada можно закончить, и вернуться к нашим баранам теме, обозначенной в заголовке. Дело в том, что основными языками программирования, выбранными для создания ПО самолёта F-35, оказались языки C (Си) и С++.


Рис 1. Доля языков программирования при написании ПО F-35. 53% C, 35% C++, 7% ассемблер, 5% Ada 83, менее 1% другие

ТАДАМ!!

В отличие от подавляющего большинства современных американских авиационных проектов, в том числе и от проекта разработки прототипа будущего F-35, самолёта X-35, для написания бортового ПО F-35 была выбрана не Ada, а языки C и С++. В качестве причины такого выбора англоязычная википедия указывает programmer availability, то бишь дефицит на рынке программистов, способных писать на Ada, к началу реализации проекта F-35. Очень небольшая часть ПО для F-35 всё же написана на Ada 83, та, что была портирована с F-22A.

С последствиями создатели F-35 борются уже несколько лет. Несмотря на выбранную тактику постепенного наращивания сложности бортового ПО (шесть этапов), начиная от версий Block 1A и 1B, через версии Block 2A, Block 2B, Block 3F, заканчивая финальной версией Block 3F (о версиях ПО F-35 можно почитать здесь) стабильной работы бортового ПО добиться не удаётся.

У коллеги afirsov хорошо описана сложившаяся к сегодняшнему дню ситуация с бортовым ПО F-35:

"Все системы работают нормально, ...ботают нормально, ...ботают нормально..."

и

"Все системы работают нормально, ...ботают нормально, ...ботают нормально..." Часть 2

Электронное устройство, попытка включения которого, как правило, заканчивается зависанием ПО с необходимостью последующей перезагрузки, сдаётся покупателем назад в магазин с последующим возвратом денег или заменой на аналог. Увы для Пентагона, такой "гаджет" как F-35 "вернуть в магазин" и получить деньги назад, невозможно.

С учётом всего написанного выше, я буду очень удивлён, если финальная версия бортового ПО F-35 Block 3F будет доведена до относительно работоспособного состояния ранее 2020-х годов.

Спасибо за внимание!

P.S. Бортовое ПО F-22A было написано на стандартизированном в 1983 г. языке Ada 83. В стандарте 1995 года (Ada 95) в язык были добавлены базовые средства объектно-ориентированного программирования. В стандарте 2005 года (Ada 2005) эти средства были дополнены, поэтому современная Ада — объектно-ориентированный язык программирования. В стандарт 2012 года, который на сегодня является новейшим, в язык были введены средства контрактного программирования. Новейшим стандартом языка SPARK является SPARK 2014.

Оригинал взят у ak_12


 

© 2009 Технополис завтра

Перепечатка  материалов приветствуется, при этом гиперссылка на статью или на главную страницу сайта "Технополис завтра" обязательна. Если же Ваши  правила  строже  этих,  пожалуйста,  пользуйтесь при перепечатке Вашими же правилами.