每行代码5亿美元或空间软件错误的成本

几个月前,在edx.org上,“空间技术入门:宇航和载人飞行(航空工程学完结:宇航与人类航天)”课程结束了。该课程由一名美国宇航员(现任麻省理工学院教授)杰弗里·艾伦·霍夫曼(Jeffrey Alan Hoffman)教授。顾名思义,该课程非常简单且通俗易懂,但是在我看来,这很有趣且内容丰富。

在课程的一部分中,将解决安全性问题,除其他外,我们将讨论软件安全性。教授 霍夫曼(Hoffman)提供了有关航空和航天软件问题的有趣示例。在本文中,我将仔细研究霍夫曼演讲中的太空示例。

火星极地着陆器


火星极地着陆器(MPL)由NASA于1999年1月3日发射的290千克航天器,用于研究火星南极周围的土壤和气候。在着陆期间,1999年12月3日,控制中心无法恢复与设备的通信。


NASA实验室的MPL

带有开放式起落杆和太阳能电池板,MPL高1.06 m,横向尺寸为3.6 m,车体基于蜂窝铝结构并固定有石墨-环氧板。着陆时,从运输位置打开三个铝制支撑架,并使用以蜂窝形式制成的可破坏铝制插入物来消除着陆能量。

计划的降落路线


MPL以约7 km / s的速度进入100多公里高空的火星大气层。在3分钟内,设备下降到8.8 km的高度,然后减速至0.5 km / s的速度,此后,它发出打开降落伞的信号,紧接着隔热罩被分离后降落。当使用降落伞将设备速度降低到85 m / s时,雷达开始工作,该雷达监视表面特征以确定可能的着陆点。

MPL飞行阶段图

在降落伞以1.3 km的高度打开后1分钟,当下降速度为80 m / s时,下降的车辆通过降落伞(后壳)与外壳分离,并开始在制动发动机上着陆。在发动机运转的情况下,预期的下降时间约为1分钟,在此期间,设备下降到12 m的高度,然后发动机关闭,设备按计划下降到地面。接触表面5分钟后,设备开始展开太阳能电池板和天线方向,这将与地球建立连接。然后开始数据传输会话,表示登陆成功。

活动历程


12月3日,着陆器脱离巡航阶段,并在着陆完成之前切换到计划的无线电静音模式。在UTC的20:04:00,即进入大气层前6分钟,发动机的程序化操作纠正了设备的位置,并对准了热屏。 MPL在世界标准时间20:10:00以6.9 km / s的速度进入火星大气层。降落后,预计将在世界标准时间20:39:00恢复通讯。但是从未建立连接,并且宣布设备丢失。

通讯中断的确切原因尚不清楚,但事故调查报告得出结论,事故的最可能原因是软件错误,该错误错误地将支撑架打开期间的振动计算为着陆振动。结果,尽管已知支撑件的公开可能导致误报,但该装置在40 m的高度处关闭了制动发动机。该软件的职权范围不适用于这种情况。

从报告中引用:
“安装在三个着陆支架中的每一个上的磁传感器用于确定与地面的接触时刻并关闭着陆引擎。在几次测试中获得的数据表明,在着陆传感器(霍尔传感器)中,在暴露支撑物时会发生误报(此时设备因降落伞而下降)。如果在两个连续的读数中发生跳闸,则程序逻辑将从传感器接收数据作为拾取信号。测试表明,打开支撑架时出现的短期信号实际上足够长,足以引起误报。几乎总是三个支柱之一产生一个错误信号,程序将该错误信号作为着陆信号。

该软件本应忽略传感器的响应,直到打开地面触摸检测算法为止,但该软件的组织不正确,并且错误的响应存储在系统中。一旦在40 m的高度上打开了确定地面接触的算法,该程序便立即发出命令,以关闭着陆引擎。

在40 m的高度,车辆的下降速度约为13 m / s(47 km / h),在没有火力推动的情况下,在火星重力的作用下,其下降速度增加到地面附近的22 m / s(80 km / h),估计下降速度为2.4 m / s(9 km / h)。以这种与表面的碰撞速度,该设备无法幸存。”

如果看一下程序的算法,可以看到将IndicatorState变量的状态重置为初始FALSE的一行可以节省设备,这使NASA损失了3.28亿美元。

软件流程图

阿丽亚娜5


1996年6月4日,由欧洲航天局(ESA)开发的新型阿丽亚娜5号运载火箭首次发射。发射以失败而告终-由于机载软件操作不正确,火箭在飞行的第39秒坠毁。


首批阿丽亚娜5

号发射器阿丽亚娜5号是阿丽亚娜家族的欧洲运载工具。发射发生在法属圭亚那的库鲁国际机场。阿丽亚娜5号的研制历时10年,耗资70亿美元,意在取代阿丽亚娜4号运载火箭。

1996年发射的质量为720吨的运载​​火箭将发射四颗质量为1.2吨的卫星。这些卫星在各自的轨道上旋转,形成四面体,并成组工作,这是欧洲集群研究地球磁场的项目(后来在2000年,两架联盟号运载火箭成功将四颗用于第二集群计划的新卫星送入了轨道) 。

活动历程


在描述事件之前,应注意,针对Ariane 5的导航系统(惯性参考系统-SRI)的设计与针对Ariane 4的设计几乎相同,尤其是在软件方面。

起始力矩由H0表示。在开始之前的操作一直在正常模式下发生,直到H0-7分钟,直到记录到“可见性标准”的违反为止。因此,开始时间推迟了一个小时。
在H0 = 12:33:59 UTC时,执行了发射,通常在H0 + 37秒之前发生。在接下来的几秒钟内,火箭从给定的路径急剧偏离,然后发生爆炸。


阿丽亚娜5首次发射时的爆炸时刻

所以:此刻H0 + 39秒。发射后,由于超出临界值的“迎角”而产生了很高的空气动力学负荷,因此火箭的发射加速器从其主要阶段分离开来,成为包括火箭自动点火系统的基础。

迎角的变化是由于固体燃料助推器喷嘴的异常旋转而引起的,加速器喷嘴的这种偏离引起了车载计算机根据导航系统SRI 2的信息发出的命令。当时的某些信息是错误的:实际上被解释为飞行数据的信息实际上,这是SRI 2系统内置计算机的诊断信息,内置计算机SRI 2发送错误数据是因为它通过“捕获”软件模块之一抛出的异常来诊断异常情况。同时,机载计算机无法切换到备用系统SRI 1,因为它在上一个周期(72毫秒)内已经停止运行,原因与SRI 2相同。

一个SRI软件模块“抛出”异常是由于将数据从64位浮点格式转换为16位带符号整数而导致的结果,即操作数错误。仅用于执行车载惯性平台“调整”的软件组件中发生错误。而且-这听起来很矛盾,但是该程序模块仅在火箭弹脱离发射台之前才给出明显的结果。火箭起飞后,该模块对飞行没有影响。但是,调整功能必须按照其规定的要求再工作50秒。在启动“飞行模式”之后。该顺序基于对Ariane 4的要求,但对于Ariane 5则不是必需的。

“操作错误”错误是由于BH(水平偏差)的水平倾斜意外大而引起的。由于Ariane 5的飞行路线与Ariane 4的飞行路线显着不同,BH的值竟然比预期的要高得多。具有致命后果的最后措施是关闭了内置SPI计算机,因此,整个导航系统停止运行。从技术上讲,恢复她的行动是不可能的。使用计算机模拟可以完全重现整个事件链。仿真结果以及其他研究和实验的材料,使专家得出的结论是,灾难的原因和情况已得到充分识别。


Ariane 5在发射台上成功发射之前,即法属圭亚那2002。

您可以找到几种方法来消除Ariane 5软件中令人讨厌的错误(这些选项反映在调查结果中),但是这种方式使ESA花费了5亿美元(带有货物的火箭的成本)。

我还想指出的是,尽管在教授的演讲中,报告中没有任何地方强调阿丽亚娜5在此事件中备份系统的无助。霍夫曼(Hoffman)这次事故就是在这种情况下提及的。具有两个相同的重复系统SRI 1和SRI 2,也许我们可以保护自己免受其中一个系统中物理设备的问题的影响,但是当涉及到软件错误时,这种重复就毫无用处。然后,霍夫曼谈论下一步:复制软件,使其与众不同(不同的公司,不同的程序员)。看起来,采用这样的结构,我们可以保护自己免受错误的侵害,但是这样的措施会使整个系统复杂化,并在可能发生错误的地方创建更多的位置,下面以第三个案例为例。

航天飞机


1981年4月12日,在航天飞机计划下可重复使用的哥伦比亚航天器从卡纳维拉尔角的天文馆进行了首次试飞。


为STS-1任务做准备-首次航天飞机飞行

活动历程


1981年4月10日,即计划发射的大约20分钟前,宇航员和航天飞机服务人员试图启动备用飞行控制系统,该系统复制了主要的四计算机系统,但失败了。预计时间之前16分钟取消了开始,并推迟了两天。

如何不记得臭名昭著的漫画

碰巧第五架机载计算机上的备用飞行控制系统BFS(备用飞行控制系统)无法与已经在其他四架机载计算机上运行的主要飞行控制系统PASS(主要航空电子软件系统)同步。该软件中存在一个错误-初始化PASS时出现的很小,几乎令人难以置信,非常复杂且非常古老的错误。

为了使航天飞机更可靠,其中的所有内容都是重复的:传感器,电子设备,控制系统,计算机,软件,数据总线,电源。实际上,为了满足“故障-运行,故障-安全”的概念,“ FO / FS”(故障-运行,故障-安全)的许多组件重复了4次:从字面上看(4套设备),或等效地(交替电路)替换所需的四个块中的一个或多个)。

选择第四个数字是出于逻辑和直观的原因:FO / FS原理要求,在第一次出现故障后,设备必须保持完全运行,而第二次出现故障后,则必须确保安全返回。最低投票需要3票,因此在初始阶段,您需要有4票,以便您可以在拒绝一票后进行投票。航天飞机有5台机载计算机,其中4台具有相同的软件,并且在飞行的所有关键阶段都能正常工作。如果计算机或其他设备出现问题(根据计算,三台计算机的系统中的错误导致设备损失三百万分之一,而四台计算机的系统将这种机会减少到十亿分之四),则此方法是理想的选择,但是这种方法不起作用,考虑到严重的可能性软件中的致命错误。因此,替代软件的想法出现在第五台计算机上,它将在前四台计算机上执行最小的软件功能。

BFS的软件开发包括相同的规格,相同的编程语言,相同的编译器以及与安装此软件相同的硬件。但是它是由完全不同的组织(用于BFS的Rockwell International和用于PASS的IBM,Federal Systems Division)开发的,并且安装在不同的操作系统上。用于PASS的OS是异步的且具有优先级驱动的(因此,最重要的任务始终是立即获得对计算机的控制)。相反,BFS看起来更像是一个完全同步的“时间间隔”系统,其中为每个进程分配了完成其周期的时间。

不幸的是,同步和异步系统组合不佳。为了使BFS与PASS同步,PASS必须变为同步或为同步过程仿真。确保了仿真过程,而开发损失最小。一旦第一台计算机打开并且PASS启动,她就试图将所有过程的开始与船上的遥测数据同步。通过从遥测数据中读取时间值并根据中心时间计算遥测相位来执行此同步。

在4月10日(星期五)早上,很明显,PASS中的某些流程并未按阶段进行处理:比其他PASS和BFS流程早一个周期。假设接收到“污染”数据,BFS将根据需要完全停止“收听”来自PASS的信息,因此无法与PASS同步。对于BFS,进入循环的数据曾经只是不平衡的“干扰”。

下午开始时,已经召集了所有专家,美国宇航局已经能够阐明问题的性质。可以使用旧的祖父方法来纠正定相错误:如果某些方法不起作用,请将其关闭然后再打开。



但是,这种方法不适用于满载并准备发射的航天器-机载计算机在处理“来自”和“到达”空间发射准备系统的信息中起着至关重要的作用。

专家收集的信息以及周五晚上重启机载计算机的事实解决了该问题,这使NASA管理层获得了足够的信息来安排周日上午的发射。但是,错误的真正原因已在发射8小时后的周日晚上揭晓。

板载计算机使用操作系统的计时器队列作为时钟,第一条记录是下一个进程的期望开始时间,当每秒执行数百个进程时,第一条记录始终显示相当准确的当前时间(始终赶时间,但总是足够准确)。对于所有备份机载计算机,结果时间始终完全相同。当第一台计算机启动时-没有活动的计算,这是队列为空的唯一时刻。由于没有其他可运行的计算机,因此第一台计算机可以使用他的手表来确定时间。

但是该行不是预期的空。发射前两年,数据总线初始化程序发生了变化,该变化是在计算开始时间之前执行的。该例程将延迟值插入到计时器队列中。这种变化没有引起注意:最后,总线的初始化如何与遥测相位的确定相关联。此外,此时间延迟足够小,以使队列中的第一个条目接近当前条目。但是一年后(发布前一年)又进行了更改以修复可能的处理器过载,延迟时间略有增加。这足以达到1/67的概率,当您打开第一台车载计算机时,在计算开始时间时,使用稍微向前运行的计时器队列,他可以在开始时间过去时获得结果。然后,操作系统将过程的开始推迟了一个周期(如发生警报时,将其设置为“过去”时,它将跳过12个小时的周期,以便可以触发“未来”),最终导致几乎所有的事情流程在周期后期运行。

测试可以检测到该错误,但是只有在测试的后期才出现了错误的可能性,即整个系统都经过测试,但是即使那样,大多数测试也不需要从头开始进行初始化。即使在需要测试的情况下,也需要一个具有相当准确的PASS,BFS和遥测模型的实验室。即使满足了上述所有条件,当发生错误时,也会有诱惑力重新启动所有操作,并且...永远不要重复该错误,也永远不要确定这是否是实验室设置中的问题。大概这是在飞行前大约4个月在一个NASA实验室发生的事情。

然而,在第一台机载计算机开启的那天,即预定的发射前30小时,问题就解决了。

有关航天飞机上的错误的所有信息均摘自John Garman(美国宇航局太空软件部门副主管)的一篇文章。在其中,他还写道:“没有提供理想的可靠性,因为项目总是必须讨价还价。当今,我们面临的挑战是在现场维护软件系统,在开发阶段积累大量变更和增加,以及重新配置软件以适应从未完全相同的机器或任务。很容易地说:“不要违反规则。”不反转嵌入式系统中软件的相对位置,这是不可能的-这是错误的!软件可能是最复杂的系统的“灵魂”,但它仍然只是支撑壳的一部分,……是非常灵活的一部分。”


航天飞机降落在干燥的罗杰斯湖

Rogers Lake)表面上。软件中的此错误的成本为0美元(当然,转移发射的成本可能是相当可观的,但是鉴于先前的事故,当航天器在完成其计划的任务之前完全丢失时,重新训练发射的成本I被忽略,尤其是因为我找不到合适的数据)。

但是我想指出,这个错误将发射时间推迟了两天:从4月10日到4月12日,而且我认为不可能为航天飞机的首次发射选择一个更好的日期,因为正好在20年前的同一天尤里·加加林(Yuri Gagarin)飞往太空。人们怎能不记得一只乌龟的话:“随机不是偶然的”。

Source: https://habr.com/ru/post/zh-CN381073/


All Articles