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

May 17, 2016 03: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.

ВВС США, f-35, Авиация

Previous post Next post
Up