?

Log in

No account? Create an account

Previous Entry Share Next Entry
Ставка на языки программирования С и C++ - роковая ошибка допущенная при создании самолёта F-35
ak_12
Слишком "громкий" заголовок? Не думаю. Что ж, приступим.


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


плохому танцору ... те нюансы на которые надо обращать внимание в вопросах написания ПО на данный момент в отношении Ф-35 в прессе отсутсвуют либо не попадаются на глаза ... а вся эта возня с заголовками (язык Х на 150% лучше языка Y потомучо .... ) обычная возня журноламеров в поисках сенсаций

Вы посмотрели род занятий авторов процитированных статей? А список оборонных проектов при написании ПО для которых применён язык Ада?

Вот ссылочке:

https://www.seas.gwu.edu/~mfeldman/ada-project-summary.html

С рядом особенностей языков Ада и SPARK можно ознакомится в этой брошюре (русский язык):

https://www.terraelectronica.ru/files/es2010/2.1%20-%20Sergey%20Rybin/Ada.ppt

Можно спросить - а вы программист?

21 год назад получил диплом инженера-системотехника. Уже много лет работаю в другой области.

Редкий бред.
Материал явно переводной, но вот кто проплатил такое?
Ада это фактически мертворожденный язык. Проблема не в C/C++, проблема в инженерах и программистах.

вы ошибаетесь и сильно. язык Ада - очень даже известный и жосткий язык

надо наградить того, кто им язык си подсунул в новую разработку )))

Вот и я тоже грешным делом подумал, может в высших эшелонах Lockheed Martin действовал какой то талантливый агент влияния?

Ведь не может же банальная человеческая некомпетентность быть объяснением того что с самым масштабным американским военным проектом последних десятилетий случился такой конфуз - много миллионов строк кода было решено написать не на языке прочно захватившем нишу больших встроенных систем с повышенными требованиями к надёжности, а на языке рождённом в среде хакеров и стимулирующем соответствующий стиль программирования, небезопасный, поощряющий написание запутанного кода.)

Впрочем в С и С++ в рамках проекта F-35 конечно же попытались "усмирить" введя определенные стандарты кодирования:

www.stroustrup.com/JSF-AV-rules.pdf

Но исходя из сегодняшней ситуации с надёжностью бортового ПО F-35 - это явно не получилось.)

Тут, конечно, надо разбираться. Собственно, про АДУ даже большинство программеров знает только то, что название, вроде как, дано в честь дочки лорда Байрона. Но вот, что точно можно сказать, так это то, что 35-й и 22-й это, фактически, первые истребители с достаточно сложным ПО. И Фантом, и изначальные 15-й, 16-й по современным меркам имели ПО, которое в сравнении с современным это как электонная игра "Яйца и волк" в сравнении с fallout 4.

Все современные истребители летают с весьма сложным ПО. К примеру Eurofighter Typhoon:

http://www.adacore.com/uploads/customers/CaseStudy_Eurofighter.pdf

The Ada programming language was therefore the natural choice for Typhoon’s onboard computers. It provides a high-integrity, high-quality development environment with a well defined structure that is designed to produce highly reliable and maintainable real-time software. Typhoon is currently the largest European Ada project with over 500 developers working in the language. Tranche 1 of the project saw 1.5 million lines of code being created.

Т.е. даже у Тайфуна 1-го транша сложность бортового ПО была сопоставима со сложностью бортового ПО F-22A, для которого (смотреть Рис.1) насчитали 1.7 млн. строк кода.

Ну а то что большинство программистов не знают... так большинство программистов и не работают в авиакосмической индустрии.)



Edited at 2016-05-17 08:15 am (UTC)

А еще и язык программирования плох.

Бедный несчастный F-35!Как только его пилот от ВПП отрывает.Состоит этот самолет,если принимать доверительно написанное о нем,из многих ошибок,просчетов,недостатков.

Надёжность программ – одна из целей создания Ada. Однако за 30 с лишним лет понимание того, как следует делать надёжные программы, продвинулось значительно вперёд. Например, в языке Rust механизмов, обеспечивающих надёжность, больше, чем в Ada, и они лучше.

Противопоставляя C/C++ и Ada, следует учитывать, что для C/C++, вследствие их распространенности, разработаны статические анализаторы кода, которые выявляют не только ошибки, связанные со слабыми местами C/C++, но и ошибки, присущие программированию вообще. Например, программист сравнивает одинаковые величины. Он, вероятно, имел в виду другое, но ошибся. Такую ошибку можно совершить, используя любой язык программирования. Для C/C++ такие анализаторы есть, но разработаны ли они для Ada? Есть сомнения в этом, ибо этот язык не столь распространён и делать для него статический анализатор кода, скорее всего, коммерчески невыгодно. А для C/C++ их разработано немало. Например, отечественный PVS-Studio, которым пользуется даже Microsoft.

Вспоминая о том, что Ada был разработан после проведения конкурса МО США, хотелось бы знать, а когда подобный конкурс проведёт МО РФ? Взят курс на импортозамещение, есть какие-то движения в области независимости процессоров, ОС, СУБД, офисных пакетов. А как насчёт языков программирования? Есть ряд разработок энтузиастов, разрабатывается язык, ставящий во главу угла как надёжность Ada или Rust, так и лаконичность C/C++, есть отечественные компании, разрабатывающие компиляторы. Компетенций хватает, не хватает только государственной воли.

>Для C/C++ такие анализаторы есть, но разработаны ли они для Ada?

Разработаны:

http://dfnc.ru/c110-novosti-3/ada-tekhnologii-v-xxi-veke-ne-mif-a-realnost/

> Есть сомнения в этом, ибо этот язык не столь распространён и делать для него статический анализатор кода, скорее всего, коммерчески невыгодно.

Половина ПО для МО США в 2008-м писалась на Ада. Десятки миллионов строк кода в год.

>Вспоминая о том, что Ada был разработан после проведения конкурса МО США, хотелось бы знать, а когда подобный конкурс проведёт МО РФ?

Вопрос конечно интересный, особенно в свете того что на конкурсе проведённом в своё время МО США победили не американцы, а европейцы.

Собственно, количество строк кода на С++ говорит о значительно возросшей сложности программного обеспечения. На Аде этих строк кода было бы еще больше

Ada не "выбран МО США", а разработан для МО США. И с тех пор относительно слабо развивается.

C++ не выбран основным языком в проекте F-35, а допущен в проект.

Разборки даже 15-летней давности никого не волнуют. Программирование меняется скорее. Анализаторы и испытательные среды для C++ намного лучше развиты, чем встроенный контроль Ada. А вот ОС реального времени почти все написаны на ANSI C (подмножество C++). На деле, ни один названный европейский проект без C не обошелся.

Я не люблю С. Я ценю Ada как исторический проект, но время Ada прошло без возврата, а ANSI C - очевидно нет. Есть языки и среды намного дальше продвинутые, но, к сожалению, не разработанные особо для приложений реального времени.

В целом: только ламер будет сравнивать борт A380 и F-35 по сложности ПО. Только ламер будет учить МО США дисциплине и технологии разработки проргамных систем.

-В целом: только ламер будет сравнивать борт A380 и F-35 по сложности ПО. Только ламер будет учить МО США дисциплине и технологии разработки проргамных систем.-

Точная формулировка.



тот момент когда идет программеро-f35 срач, а ты не участвуешь и наблюдаешь

Надо провести опрос: кто из участников занимался разработкой трансляторов языков, а то, как поглядеть, - все специалисты :-)

так и представляю киселева на фоне какой-нть инфернальной картинки трагическим голосом объявляющего: программное обеспечение новых американских истребителей написано на языке ада!!!!

В программистский фольклор вошло заключение статьи советского пропагандиста Мэлора Стуруа:

"Язык Пентагона — враг мира. Язык "Ада" — голос термоядерного ада... В языке "Ада" слышится проклятие роду людскому" 1984 г.

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

Чрезмерно упрощенная шапкозакидательская трансляция реальных событий :)
Грубо говоря, ПО ф-35 содержит столько информации, сколько не наберется в голове отдельных ура-патриотов ;)

>Грубо говоря, ПО ф-35 содержит столько информации, сколько не наберется в голове отдельных ура-патриотов ;)

Грубо говоря ПО авиалайнера Boeing 787 содержит примерно 7 млн. строк кода написанного в основном на языке Ада, и с этим ПО известных общественности проблем нет.

Как заявлено по ссылке:

https://www.f35.com/about/life-cycle/software

ПО F-35B от 8.3 млн. до 10 млн. строк кода (если исходить из As of May 2015... 99.9% percent of the required software has been coded. This equates to about 10,000 lines of code that remain to be written) написанного в основном на языках С и С++, и широкая общественность в курсе серьезных проблем с надёжностью работы этого ПО.

По поводу "надёжности языка"... можно бесконечно повторять эту мантру, но если язык настолько многословен, что на заре ИТ умудрился уйти в забвение, то может туда ему и дорога? Нельзя же общаться с компьютером, объясняя ему как дебилу вновь и вновь прописные истины! Например, работа с памятью - миллионы программистов вздохнули с облегчением, когда появились всякие Жабы/C# - целый пласт нагрузки с плеч! (при вполне приемлемой эффективности) А в 21 веке должны быть ещё более мощные средства, позволяющие не отвлекаться на рутинную фигню и концентрироваться на задаче. Сейчас уже есть всякие readonly, контракты, атрибуты... Если язык позволяет УДОБНО выражать алгоритмы, то, как ни удивительно, и ошибки он тоже снижает даже чисто с "человеческой" точки зрения.
Касательно С/С++ - они давно должны сдохнуть, непонятна узколобость и костность мышления его выбирающих.

Вы пишете - С/С++ - они давно должны сдохнуть.

Согласен, наверное должны.
А что на замену для разработки 3D CAD, например? Или игр 3D.
Для Windows.

проблема не в языке а в архитектуре

Причина срыва выполнения задачи в таком сложном программно-аппаратном комплексе не может описываться функцией мажоритарными переменными которой являются перечисленные
- язык программирования
- профессионализм программиста
- методика создания ПО
Выбор языка программирования - простая задача, а все упомянутые в коментах особенности и риски легко учесть в методике разработки, не говоря уже об опциях транслятора и среды выполнения

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

Можно только предполагать, но скорее всего расчет числа линий кода в ПО ф22 и ф35 выполнен предвзято. В случае с ада и си++ при схожих задачах и архитектурах разница на порядок может быть обусловлена только учетом или исключением ряда модулей.

Испытанная архитектура и наличие проверенных программных модулей является важным фактором. Этим скорее всего обусловлен выбор языка Ада для разработки ПО ф22. Выбор языка создателями ф35 связан видимо с существенным обновлением архитектуры комплекса.


«Я задал вполне обычный вопрос, чтобы узнать мнение политика такого ранга, как Хиллари Клинтон, о стремительном возрастании военной мощи России, но никак не ожидал такой реакции на него. Она сначала побледнела, потом покраснела, зачем-то залаяла как уже когда-то делала, закатила глаза и потеряла сознание.
Интервью на этом оборвалось, был вызван медицинский персонал, который попросил меня покинуть ее кабинет. Я сожалею о случившемся, но не считаю себя виноватым в такой неожиданной реакции Клинтон. Наверное, это Россия виновата в том, что вероятный президент США теряет сознание только от одного вопроса о российской военной мощи.» — прокомментировал Мэтт Ли произошедшее корреспонденту Sky News…

чудище обло, огромно, озорно, стозевно и лаяй


Спасибо за интересную новость.

Первый министр обороны США Джеймс Форрестол тоже сначала очень беспокоился из за "роста русского влияния", потом начал твердить "Русские идут, русские идут. Они везде. Я видел русских солдат!" и в виду явной психической неадекватности был снят с должности и помещен национальный военно-морской медицинский центр. Потом, когда дело, как считается, уже шло на поправку, выпал из окна 16 этажа. Официальная версия - выпал сам. По другим версиям, ему помогли.

Похоже у старушки Клинтон из за русских тоже "нервное и психическое истощение" (официальный диагноз Форрестола).