29 октября 2018 года рейс 610 Lion Air, выполнявший рейс 737 MAX 8 из Джакарты, Индонезия, в Пангкал-Пинанг, Индонезия, упал в море через 13 минут после взлета, в результате чего погибли все 189 человек на борту. Расследование точной причины крушения все еще продолжается, но следователи полагают, что авария могла быть вызвана ошибочной активацией команд от Системы увеличения маневренных характеристик (MCAS), из-за которой самолет наклонился, чтобы избежать опасности. по показаниям датчиков скорости, высоты и угла атаки.

10 марта 2019 года рейс 302 Ethiopian Airlines, также как и самолет 737 MAX 8, упал при аналогичных обстоятельствах, в результате чего погибли все 157 человек на борту. Рейс 302 также сообщает о возможных ошибочных командах AND (Aircraft Nose Down). Согласно Википедии:

«В следующие 10 секунд дифферент снова увеличился до 2,3 единиц в результате действий пилота, и пилоты согласовали и выполнили процедуру отключения триммера стабилизатора, отключая мощность двигателя дифферента, управляемого MCAS».

После второй аварии Boeing 737 Max был остановлен во всем мире, и более 6 миллиардов долларов испарились из рыночной капитализации компании практически в одночасье.

Однако краткосрочное воздействие - это только начало. Если Boeing не устранит кризис эффективно и не восстановит доверие общества, это может существенно повлиять на долгосрочную стабильность компании. По данным Goldman Sachs, продажи Boeing 737 составят 33 процента прогнозируемых продаж Boeing в следующие пять лет.

Хорошая новость заключается в том, что по словам представителя Boeing в интервью CNN Business:

«Мы считаем, что это можно обновить с помощью исправления программного обеспечения».

Похоже, что система MCAS может выйти из строя и отправить самолет в крутое пикирование, из которого пилоты не могут оправиться.

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

Вот некоторые общие линии защиты при разработке программного обеспечения:

В первую очередь я пишу потребительские приложения, управляющие не критически важными системами для миллионов пользователей. Все команды, которыми я руководил или в которых был недавно, использовали системы для сбора требований, обзора спецификаций (с использованием технических Readme Driven Development с коллегиальной проверкой), TDD, производственного моделирования с использованием непрерывной интеграции / непрерывной доставки (CI / CD ), чтобы гарантировать, что программное обеспечение будет работать в производственной среде, при линтинге, статическом анализе, проверке кода (урезанная версия проверки программного обеспечения) и приемочных испытаниях.

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

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

Если бы я отвечал за критически важную для жизни систему, я бы удвоил качество и подумал бы о добавлении более тщательного обучения, наставничества, сбора требований, оценки рисков, проверки программного обеспечения (например, использую соответствующий язык и основанный на данных вариант НАСА. Сила 10 правил как контрольный список проверки кода), статический анализ и даже формальные методы для критических систем, чтобы математически доказать, что наши алгоритмы правильно указаны.

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

Мы не вкладываем много средств в качество программного обеспечения, потому что у наших команд большие бюджеты (это капля в море по сравнению с инженерным бюджетом Boeing). Мы много инвестируем в качество программного обеспечения, потому что оно помогает нам работать быстрее и экономить деньги в долгосрочной перспективе.

В программном обеспечении медленное - это быстро.

Быстро - это медленно, а дешево - дорого, так почему же так много менеджеров дешево?

Чтобы сократить расходы, инженерные менеджеры часто торопятся с разработчиками, навязывают произвольно нереалистичные сроки или, в случае Boeing, передают проектирование дешевым подрядчикам, чтобы попытаться увеличить пропускную способность производства.

Культурный акцент Boeing на экономии затрат, похоже, дошел до инженеров, работающих над 737. Один инженер-программист 737 по контракту из HCL, индийской компании, которой Boeing передал на аутсорсинг, иллюстрирует культуру сокращения затрат в своем резюме:

«Предоставлено быстрое решение проблемы с производством, из-за которой летные испытания 737-Max не откладывались (задержка каждого летного испытания обойдется Boeing в очень большие деньги)».

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

Когда руководство уделяет слишком много внимания экономии средств, разработчики чувствуют себя поспешными. Когда разработчики чувствуют себя поспешными:

  • Прекращение наставничества и отзывов
  • Накапливаются ошибки
  • Тесты пропускаются
  • Общение страдает
  • Разработчики выгорают
  • Производительность страдает

Марк Рабин, который работал в группе летных испытаний Boeing, которая поддерживала 737 Max, сказал Bloomberg, что решение передать инжиниринг HCL на аутсорсинг было спорным, потому что оно было гораздо менее эффективным, чем просто написание кода инженерами Boeing. […] Потребовалось много раундов, потому что код был написан неправильно .

По словам Рабина, один менеджер на общем собрании поделился, что компании Boeing не нужны старшие инженеры, потому что ее продукция является зрелой. Этот анекдот и побудил меня написать эту статью. Если есть какие-либо сомнения, позволить младшим инженерам писать код без того, чтобы старшие инженеры проверяли их работу и направляли их, равносильно тому, что прятать бомбы замедленного действия по всей кодовой базе.

Когда дело доходит до инженерии, быстро - значит быстро, а дешево - дорого.

Фраза «медленно - значит быстро» хорошо известна в инженерных кругах. Оно происходит от военной фразы «медленно - это плавно, а плавно - быстро», и это форма необычного смысла. Кажется, все знают, что это правда, но очень немногие компании умеют применять ее на практике. : особенно когда они находятся под давлением и в этом нуждаются больше всего.

Boeing столкнулся с серьезной конкурентной угрозой со стороны своего конкурента Airbus. В 2010 году Airbus анонсировал новый A320neo, который был на 7% более экономичным, и за неделю было продано больше, чем было продано Boeing 737 за весь 2010 год.

Боингу нужно было быстро ответить. Чтобы сделать предложение привлекательным для авиакомпаний, они решили основывать свой ответ на существующем Боинге 737, который сэкономил время на разработку новой платформы с нуля, а также привязал их к устаревшей платформе с аналогичными элементами управления и приборами для всех предыдущих моделей. , относящиеся к 1960-м годам. Этот выбор также стал важной темой для разговоров о продажах для авиакомпаний, которым необходимо будет повторно сертифицировать пилотов, если они внесут слишком много изменений. Это было бы серьезной инженерной проблемой.

Чтобы не потерять слишком много позиций для Airbus, они решили попробовать сделать новый 737 доступным всего через несколько месяцев после того, как Airbus отправила A320neo. На поставку новой модели они потратили 6 лет, что на год сократило время, необходимое для выпуска 787 и 777.

Другими словами, они начали проект, имея в виду оптимистичный крайний срок, но вместо того, чтобы сделать его амбициозным, они взяли на себя обязательства. Еще до того, как они начали, они заблокировали все ограничения треугольника управления проектом.

Объем был ограничен амбициозными инженерными целями, которые были поставлены конкурентами. Время было заблокировано, чтобы избежать дефолтной победы Airbus. Это означало, что единственный рычаг, который у них оставался для обеспечения качества, - это обеспечить проект адекватным бюджетом. Но культура Boeing уже была ограничена требованием сокращения расходов. Единственное, что оставалось отдать, - это качество.

Проблема с культурой сокращения затрат в том, что такие компании, как Boeing, настолько одержимы ею, что в конечном итоге обходятся им гораздо дороже, чем они экономят. Первоначальный бюджет Boeing на покупку 737 Max составлял 3 миллиарда долларов. Несмотря на попытки сэкономить время и деньги, они превысили бюджет на несколько миллиардов долларов и доставили с опозданием.

Последующие бедствия стоили им десятков миллиардов долларов рыночной капитализации, 30 миллиардов долларов из-за угроз отмены заказов авиакомпаний и неизмеримого ущерба бренду Boeing. Они могли бы вложить еще миллиарды долларов, чтобы следовать лучшим инженерным методам, и все же выйти далеко вперед.

Все это служит отличным уроком для всех менеджеров и инженеров программного обеспечения: в программном обеспечении быстрое - это медленное, а дешевое - дорогое.

Инвестиции в качество - это вложения в производительность, экономию средств и более высокие продажи.

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

Не повторяйте ошибок Boeing.

Связанные статьи для разработчиков JavaScript

Если вы разработчик JavaScript, эти ресурсы могут помочь вам улучшить процесс обеспечения качества программного обеспечения:

Эрик Эллиотт - консультант по техническим продуктам и платформе, автор Composing Software, соучредитель EricElliottJS.com и DevAnywhere.io и наставник команды разработчиков. Он участвовал в разработке программного обеспечения для Adobe Systems, Zumba Fitness, The Wall Street Journal, ESPN, BBC, и ведущие музыканты, в том числе Ашер, Фрэнк Оушен, Metallica и многие другие.

Он ведет уединенный образ жизни с самой красивой женщиной в мире.