我向您介绍Greg Travis撰写的文章“波音737 Max Disaster对软件开发人员的外观”。 这将与波音公司为节省金钱和“偷工减料”以谋取商业利益的愿望以及发展社区中“无能和不道德”的文化如何导致346人死亡有关。 我在所有方面都不认同作者的立场(尤其是,我认为人为因素比软件要邪恶得多),但是很难不同意主要论点。
以下是很多信件。 如果您读过懒惰,但想了解这个话题,那么在哈布雷(Habé)上,该文章的第一个简短版本是
Vyacheslav Golovanov的译文,可以在
此处找到。
本文中表达的观点仅是作者的观点,而不是IEEE Spectrum或IEEE的立场( 大约Transl。-以及翻译器:) )。
我是具有30年经验的飞行员,以及具有40年经验的软件开发人员。 我写了很多有关航空和软件开发的文章。 现在是时候同时撰写这两件事了。
现在,所有新闻都充斥着有关
新型波音737 Max飞机模型 (英文)的
事故的头条新闻,该
事故实际上是与新发布的飞机相继发生的。 对于一个完全依赖于客户的完全控制和安全感的行业,这两次撞车构成了巨大的存在危险。 尽管在过去的几十年中飞机失事导致的死亡人数有所减少,但这一成就完全不是过度自信的原因。
西捷波音 737 MAX 8, Acefitt ,通用知识共享署名2.0我3岁那年,第一架波音737飞机首次出现在1967年。 这是一架小型飞机,配备小型发动机和相对简单的控制系统。
航空公司(尤其是美国西南航空公司)以其简单,可靠和灵活而深受他们的喜爱。 此外,为了在那时将他们驾驶到驾驶舱而不是通常的三四个人,只需要两名机组人员,这使航空公司开始大量节省开支。 随着航空运输市场的发展和新技术的出现,波音737的尺寸迅速增加,电子和机械的复杂性也在增加。 当然,不仅有737飞机在增长,而且飞机制造商和购买飞机的航空公司都需要巨额投资,因此,两者都在不断扩大。
但是,大多数这些市场和技术力量是基于公司的经济利益,而不是为了乘客安全。 工程师们孜孜不倦地努力减少行业中所谓的“每乘客公里成本”,即从A点到B点运送乘客的成本。
这个优化故事中有很多与引擎有关。
卡诺的热机效率
定理说,您制造的发动机越热,效率就越高。 对于电锯发动机和喷气发动机,该原理同样适用。
小学的。 就每单位功率的燃料消耗而言,使引擎更高效的最简单,最快的方法就是使其更大。 这就是为什么我的小型塞斯纳(Cessna)上的Lycoming O-360发动机具有大板大小的活塞。 因此,将船用柴油机做成三层楼的房子。 出于完全相同的原因,波音公司希望在新型737中安装大型CFM International LEAP引擎。
仅存在一个小问题:按照今天的标准,原始737配备了非常小的发动机,这使得将它们轻松地置于机翼下变得很容易。 但是,随着737尺寸的增加,其引擎也随之增加,并且它们与地面之间的距离越来越小。
为了解决这个问题,发明了许多技巧(或称为“ hacks”,如软件开发人员所称)。 例如,对于公众来说,最引人注目的和最明显的是将进气口的形状从圆形改变为椭圆形,以便在发动机下方提供更多的空间。
就737 Max而言,情况变得至关重要。 安装在原始737上的发动机叶片直径为100厘米(40英寸),在用于737 Max的新发动机中,直径增加到176厘米。如果中心线相差超过30厘米,您将无法再使进气口变得椭圆形,以至于发动机没有开始刮地面。
然后决定从上方组装发动机,并将其相对于机翼向前和向上移动。 这继而导致发动机推力轴线的位移。 现在,随着发动机功率的增加,飞机趋向于布线,即走向机头。
供参考:飞机的迎角是进气流速度矢量的方向与机翼平面之间的夹角。 想象一下,您将手伸出沿着高速公路行驶的汽车的打开的窗户。 如果您的手掌几乎与地面平行,这将是一个小的迎角; 将您的手掌绕着地球平面转动,会增加迎角。 当迎角过大(超临界)时,由于气流中断而导致空气动力学失速。 您可以通过将手放在行驶中的汽车的窗户之外来验证这一点:缓慢地转动手,您会感觉到上升的推力将您的手向上推,直到您的手突然掉下-这是水流的停顿,随后停滞。
因此,事实证明,在实践中,随着发动机功率的增加,转换的趋势意味着如果飞行员挤压汽油,飞机失速有进一步发展的风险(就像我儿子喜欢说的那样)。 在低飞行速度下,事件的发展尤其可能。
更糟糕的是,由于发动机机舱已经发展到如此之大,如此之大,它们本身会产生升力,尤其是在大迎角的情况下。 就是说,贡多拉船使本来已经很糟糕的情况更加恶化。
我强调:在737 Max中,发动机机舱在高攻角下像机翼一样工作,并产生升力。 此外,此力的施加中心相对于机翼升力的施加中心向前移动得很远,这又导致737 Max随着攻角的增加而趋于更大地增加攻角的事实。 这是空气动力学无能的最糟糕的例子。
就其本身而言,俯仰角随发动机功率的变化是飞机控制中相当普遍的现象。 连我的小塞斯纳(Cessna)都在加气时抬起了鼻子。 在培训过程中,飞行员会被告知此类困难,并被教导克服这些困难。 但是,监管机构设置了一定的安全限制,飞行员可以随时承受。
当俯仰角随着迎角的增加而变化时,这是另一回事。 一架已经接近空气失速点的飞机在任何情况下都不应有进一步发挥这种作用的趋势。 此属性称为“动态不稳定性”,并且唯一允许使用的飞机类别-战斗机-为飞行员配备弹射器。
航空界的每个人都梦想着一架飞机,它会自然而轻松地飞行。 例如,当改变发动机功率,放低襟翼或伸出起落架时,飞行条件不应明显改变,不应发生侧倾或俯仰应改变-这种行为应保持可预测的。
飞机的机壳(铁本身)起初应尽可能可预测地工作,而不需要额外的“铃铛和口哨声”。 这个航空教规是在莱特兄弟飞往基蒂·霍克(Kitty Hawk)的第一次飞行中制定的。
显然,新的波音737 Max机型在增加牵引力的情况下会过度抬头,特别是在已经很大的迎角下。 他们违反了最古老的航空法律,甚至违反了美国的FAA(联邦航空管理局)认证标准。 但是,波音公司没有返回到制图板上并固定飞机的机身,而是决定依靠某种
“机动特性增强系统” ( MCAS)。
波音公司使用软件解决了铁的问题。
我将讨论公司语言的出现(
大约是Transl 。:显然,作者的意思是“改善可操作性的系统”这个名称并不意味着它在航空方面绝对没有做任何不寻常的事情 )另一篇文章的词典,但请注意,该系统的名称可能有所不同,例如,“一种廉价的方法来防止飞行员在空转时失速”,CWTPASWTPPI。 但是,值得在MCAS停下来。
当然,鉴于需要容纳新的大型发动机,MCAS是机身深加工的便宜得多的替代品。 这样的处理可能需要,例如,加长前起落架(当拉入机身时,它可能无法装入机身),向上折叠机翼或进行其他类似更改。 那将是非常昂贵的。
Max 737的所有开发和制造都是在神话“这是一架好旧737”的主持下进行的。 认识到这不是旧模型,因此重新认证将花费数年时间,并需要数百万美元。
“实际上,获得1967年波音737执照的飞行员可以控制所有后续版本的737。”
来自对最大航空公司之一的737飞行员之一的文章的较早版本的评论。
更糟糕的是,这种重大变化不仅需要获得美国联邦航空局(FAA)的重新认证,还需要开发全新的波音滑翔机。 现在,我们正在谈论对于飞机制造商和航空公司而言的巨额资金。
所有这些都是因为波音公司在出售737 Max时的主要论点是它是同一架737,并且任何使用旧型号飞机的飞行员也将能够控制Max-无需进行昂贵的再培训,获得新的证书和新的评级。 航空公司-和西南航空就是一个很好的例子-倾向于偏爱一种“标准”类型飞机的机队。 他们更喜欢拥有一个可由任何飞行员控制的飞机模型,因为这样飞行员和飞机都可以互换,从而最大程度地提高了灵活性并降低了成本。
无论如何,这一切都取决于钱,而MCAS已成为波音及其客户使钱往正确方向流动的又一次机会。 坚持认为737 Max的飞行特性与以前的737机型没有区别是737 Max机群互换性的关键。 可能是有关MCAS存在的文档被隐藏的原因。
例如,如果这种变化突然变得太明显,则反映在飞机的手册中,或者在飞行员接受培训时会特别注意,那么有人(可能是飞行员中的某人)会站起来说:嘿,看起来好像不是737。” 而且钱会流向错误的方向。
正如我已经解释的那样,您只需将手伸出行驶中的汽车的窗户并旋转手掌,就可以自己进行攻角实验。 因此,像飞机这样的复杂机器也具有机械手,相当于一只手从窗户露出的角度-迎角传感器。
登机时您可能会注意到。 通常,它们有两个,通常在驾驶舱窗户下方,在飞机的每一侧。 不要将它们与皮托管混淆(请在下面阅读有关它们的信息)。 攻角传感器看起来像风向标,皮托管看起来像...嗯,管。 攻角传感器看起来就像是风向标,因为它是风向标。 它的机械翼根据迎角的变化而运动。
皮托管测量气流“推”到飞机上的力,迎角传感器确定气流的方向。 由于皮托管实际上是测量压力的,因此它们被用来确定飞机相对于空气的速度。 迎角传感器确定飞机相对于气流的方向。
有两套角度传感器和两套皮托管,在机身的每一侧。 通常,安装在主驾驶员侧面的仪器从船体同一侧的传感器获取读数。 同样,第二名飞行员的仪器显示了来自其船侧传感器的值。 这种方法在设备中创建了自然的冗余,从而允许任何飞行员快速轻松地进行交叉验证。 如果副驾驶员认为他的空速指示器不正常,他可以对照主驾驶员侧面的类似设备检查它。 如果证词不同,则飞行员会找出哪个装置显示了真相,哪个在说谎。
曾几何时,有一个笑话说,将来飞机可以自己飞行时,飞行员和狗仍然必须坐在驾驶舱内。 需要一名飞行员,以便使乘客在意识到前方有人的情况下保持镇定。 如果狗试图触摸东西,就必须咬住飞行员。
在737飞机上,波音公司不仅制造了备用飞机设备和传感器,而且还制造了备用机载计算机,从主要飞行员和第二名飞行员分别安装了一台计算机。 飞行计算机执行许多不同的有用操作,但是其主要任务是在被告知要执行该操作时自动驾驶飞机,并验证飞行员在手动飞行员模式中没有犯错。 最后一段称为“保护飞行模式范围”。
但是,我们称锹为锹-这是笑话中非常“咬人的狗”。
MCAS做什么? 如果该系统认为船舶超出了可接受的迎角范围,则应降低飞机的机头,以避免空气失速。 波音公司在737 Max中安装了MCAS,原因是大型发动机及其新位置比以前的模型更容易失速。
那时,当MCAS注意到迎角太大时,他命令飞机的修剪器(使飞机上下运动的系统)将船首指向下方。 她还做其他事情:通过波音公司所谓的“电梯感应计算机”(Elevator Feel Computer,简称EFC),她推飞行员控制轮(飞行员推动或拉动头盔以升高或降低鼻子)飞机)。
与大多数其他现代客机甚至汽车一样,在737 Max中,计算机可以监控所有过程,甚至可以直接控制它们。 在许多情况下,飞行员的控制仪器与飞机的实际空气动力装置,龙骨和其他使飞机飞行的装置之间不再存在直接的机械连接(即电缆,液压管路和管道)。 如果存在这样的机械连接,则计算机将决定飞行员对它们(以及同样的咬狗)进行何种操作。
但是,重要的是,飞行员必须对所发生的一切进行实际反应。 在过去的好日子里,当电缆将飞行员的控制元件与羽毛连接时,如果飞机坠落,他们必须费劲地拉动头盔。 如果飞机正在升空,他们必须用力推动他。 在计算机的监督下,控制的自然感觉消失了。 737 Max不再具有“自然的感觉”。
是的,在737中,有冗余液压系统将飞行员与之交互的控件链接起来,并直接使副翼和飞机的其他部分工作。 但是,这些液压系统功能强大,以至于它们不会传递作用在副翼上的空气动力的直接反馈。 飞行员只会感觉到计算机会让他们感觉到的。 有时感觉并不那么愉快。
当由于MCAS系统确定飞机即将进入失速状态而使飞行计算机指示飞机下降时,一连串的电动机和补偿器使驾驶舱中的舵继续前进。 事实证明,计算机可以对头盔进行大量的工作,以至于飞行员试图将它们拉到自己身上,并向计算机表明他在做的事情完全,完全错误,很快就筋疲力尽了。
实际上,该系统不允许飞行员靠自己掌舵来控制飞机的事实是737 Max设计人员的故意决定。 因为如果飞行员可以拉起控制柱并将飞行器的机头重新指向上方,那么当MCAS系统说它应该指向下方时,那么该系统的意义何在?
, MCAS , , , . , , ().
, MCAS, : «, 737», .
— . , , , , . . .
, , . , , , , , . «» , , . — .
737 Max — , . , .
, , , , . , , « ». . -. . — .
, — , , — .
. , , , , . , .
, , . , . , MCAS . , .
, MCAS . .
— HAL, .
— , , , .
MCAS , , , , , “” .
FAA . , , .
, , , FAA , . . FAA , , .
FAA : « , ?” : „ .” FAA: “ , .»
« » (“Designated Engineering Representative,” DER). , , FAA , .
, , , . , . DER , . , - , “ ".
, MCAS 737 Max , , . , , , .
: , MCAS, , 0.8 , , , .
, . , MCAS, , , , , . , ?
, — 737 Max. . 737 . . , , ( ), , . №3.
. , «» DER, .
. , , .
, 737 Max, . Cessna 172 1979 , . 737 (1955 1967).
, ( Garmin G5s) (CAN,
Controller Area Network ), . CAN Drive-by-Wire ( ),
ARINC , 737 Max.
. , 172, MCAS 737 Max. , 737 Max, , , , , , , Lion Air.
, « ” ( ), „“ . , Cessna, , , , . , „ “.
, $20,000 737 , . ?
, (“Supplemental Type Certificate,” STC). , FAA , Cessna 172 1979 Garmin , - , Cessna 172. .
, () ( ), , , . , .
, , , , .
, , . , , . , 172, , 172.
, , Cessna, , 737 Max.
: , , 737 Max , . , MCAS , , , . MCAS …
我的自动驾驶仪和737 Max中具有MCAS的系统之间的另一个区别是,连接到CAN总线的设备不断进行通信并执行交叉检查,而MCAS显然没有。 例如,自动驾驶仪会不断轮询两台G5车载计算机以确定位置。 如果数据不一致,系统会通知飞行员并关闭,切换到手动控制模式。 如果她突然开始相信飞机将要坠落,她不会将飞机引导到地面。
可能最大的不同是,飞行员必须压碎我的飞机和737 Max上的自动驾驶命令。 在我的172中,仍然有直接将控件连接到空气动力学表面的电缆。 电脑被迫按下与我相同的控制杆,它比我弱得多。 如果计算机错误地认为飞机开始掉落,我可以轻松克服它的阻力。
在我的塞斯纳(Cessna)中,人仍然总是从与自动驾驶仪的战斗中获得胜利。 波音公司在飞机的研发中一直宣称完全相同的理念,此外,它还曾被用来与敌对的空中客车公司空中客车公司直接对立。 但是,随着737 Max的发布,波音公司似乎没有通知任何人就决定改变人机关系的策略,并且悄无声息地改变了操作说明。
737 Max的所有这些传奇故事不仅应该告诉我们复杂性会带来额外的风险,而且技术有其自身的局限性,而且应该告诉我们真正的重点。 今天,最主要的是金钱,而不是安全。 他们只是在有必要继续朝着正确的方向移动货币时考虑它。 由于设备越来越依赖于太容易更改的东西-软件,因此问题每天都变得越来越严重。
设备和硬件的缺陷,无论是定位不良的发动机还是在寒冷中散布的O形圈,显然都很难修复。 当我说“困难”时,我的意思是“昂贵”。 另一方面,可以快速,廉价地修复软件缺陷。 所需要做的只是发布更新并发布补丁。 此外,我们确保买家现在将所有这些都视为规范-既是计算机操作系统的更新,又是我睡觉时自动安装在我的Tesla上的补丁。
在1990年代,我曾经写过一篇文章,比较了Intel Pentium处理器的相对复杂性(以每个芯片的晶体管数量表示)与新Microsoft Windows操作系统的复杂性(以源代码行表示)。 事实证明,它们相对同样复杂。
大约在同一时间,事实证明奔腾处理器的早期版本存在一个称为
FDIV错误的错误 。 仅有少数Pentium用户(大约Transl .:科学家和数学家)可能会遇到任何问题。 在Windows中发现了类似的缺陷,这也仅影响了一小部分OS用户。
但是,这对英特尔和微软的意义是根本不同的。 小型软件补丁程序已针对Windows系统发布,而英特尔在1994年不得不撤回所有有缺陷的处理器。 这使公司损失了4.75亿美元-以今天的价格计算超过8亿美元。
我认为,更新软件时相对简单和缺乏大量材料成本,导致开发人员社区形成了一种懒惰文化。 此外,由于软件越来越多地控制“硬件”,这种懒惰的文化开始渗透到技术的发展中,例如在飞机制造中。 我们越来越少地注意对设备进行正确而简单的设计开发,因为借助软件修复缺陷是如此简单。
每当我的特斯拉,塞斯纳(Cessna)上的Garmin飞行计算机,Nest温控器或家里的电视上有新的更新发布时,我再一次意识到这些东西都没有真正准备好出厂。 因为他们的创造者已经意识到这是没有必要的。 稍后可以通过发布下一个更新来完成工作。
»我是一名网络工程师,曾是一名程序员,曾为飞机航空电子设备编写软件。 总是好奇的是,我们不得不努力将新的主板放入经过认证的计算机中,并且该软件不需要任何认证(除了“不能在Windows下运行”或“必须用C ++编写”之类的一般限制)。 没错,大约是十年前,我希望现在情况有所不同。”
-匿名,来自个人信件
波音公司目前正在为车载计算机和MCAS 737 Max安装新的更新。 我不确定,但我相信此更新将主要集中在两件事上:
首先是像飞行员一样,教该软件对仪器进行交叉检查。 也就是说,如果一个迎角传感器开始报告飞机即将开始坠落,而另一个传感器没有报告,那就是希望该系统不再将飞机的机头引导到地面,而是仍然首先将冲突通知飞行员。在传感器的读数中。
第二个是放弃“先拍摄,以后再问”的策略,即开始寻找不同的来源而不是一个。
对于我一生来说,我不明白在MCAS的开发过程中,人们怎么会忘记航空业的这两个基本原则,即迄今为止忠实地为航空业服务的思想基础。 我不知道,也不知道DER工作中的哪个过程中断得如此严重,以至于在项目中造成了如此根本的缺陷。
我怀疑原因与波音公司希望提供更大的发动机并避免与之相关的巨额成本的原因大致相同-
吃免费奶酪的
愿望 ,众所周知,这种情况只发生在捕鼠器中。
耶鲁大学的社会学家查尔斯·帕罗(Charles Parrow)很好地证明了强调开发尽可能简单的系统的必要性,他是1984年的《
正常事故:与高风险技术一起生活》的作者。 书的全部实质都包含在标题中。 帕罗认为,当一个组件的行为直接影响另一个组件的行为时,系统故障是任何具有紧密相关组件的复杂系统运行的正常结果。 尽管事实上这些错误似乎是由技术故障或流程中断引起的,但实际上应将其视为系统本身的整体功能。 这些是“预期”事故。
在旨在增强安全性的系统中,没有比这个问题更严重的了。 每进行一次新的更改,每项并发症都会变得越来越无效,并最终导致完全负面的结果。 为了提高安全性而将一个修复程序强加于另一个修复程序最终会导致其降低。
这正是旧的设计原则告诉我们的:“越简单越好”(
“保持简单,愚蠢” ,KISS),以及其航空版本:“简化,然后增加亮度”(“简化,然后增加亮度”) )
在艾森豪威尔时代,FAA认证飞机的主要原则之一是简单的特殊约定:飞机不应随着发动机功率的变化而出现明显的俯仰变化。 在驾驶员在座舱内的控制装置与飞机的机身之间存在直接关系时,就出现了这一要求。 撰写此要求时,正确地对机身本身的设计提出了简化要求。 现在,在人与机器之间,出现了一层软件,但没人能确定那里到底发生了什么。 事情变得太复杂了,难以理解。
我无法摆脱737 Max的灾难和
挑战者号航天飞机之间的相似之处。 挑战者事故之所以发生,是因为人们遵循了指示,反之亦然,这不是“正常”灾难的另一个例证。 规则说,在发射航天飞机之前,必须召开一次会议以确保完全准备就绪。 没有人说,在作出决定时,不应过多地考虑推迟发射可能引起的政治后果。 所有输入数据均根据已建立的流程进行了仔细称重,大多数同意启动。 有七个人丧生。
在737 Max的情况下,还按照所有规则进行了所有操作。 规则说,当发动机功率改变时,飞机的俯仰角不应有太大变化,并且指定的工程师(DER)有权签署旨在解决该问题的任何改变。 规则中没有任何内容可以在做出决策时不以业务考虑为指导。 现在有346人死亡。
为提高飞行安全性而设计的MCAS极有可能造成更多的人丧生。 无需尝试通过进一步增加复杂性和其他软件来修复它。 只需将其删除。
关于作者
Greg Travis-作家,软件开发经理,飞行员,飞机所有者。 1977年,年仅13岁的他创建了Note,这是最早的社交媒体平台之一; 它的飞行时间超过2000小时,它控制了从滑翔机到波音757的所有操作(在一个完全模拟运动的模拟器中)。