Самое важное. Самое полезное. Самое интересное...
Loading...

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

17 мая 2016
<
Увеличить фото...  

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


Рис. 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

 Комментарии: 0 шт.   Нравится: 3 | Не нравится: 0 

Комментарии

Социальные комментарии Cackle Все комментарии

Также в разделе «Интересное»

Расписание

Расписание транспорта. Краматорск, Харьков

Расписание

Музыка

Loading...

Справочник ВУЗов Украины