参考消息标题

关键工程软件故障日益增多

字号+作者:参考消息 来源:参考消息 1996-07-17 08:00 评论(创建话题) 收藏成功收藏本文

关键工程软件故障日益增多 【美国《发现》月刊5月号文章】题:相信我,我是你的软件 复杂软件在公共安全中的作用令人忧虑 三年前英国核管理局在泄露给新闻'...

关键工程软件故障日益增多


【美国《发现》月刊5月号文章】题:相信我,我是你的软件
复杂软件在公共安全中的作用令人忧虑
三年前英国核管理局在泄露给新闻界的一份内部报告中指出,离伦敦90英里、设在英国萨福克海岸即将营运的塞兹韦尔E核电站可能并不安全。危险出在设计用来在出现紧急情况时管理反应堆的软件上。
成问题的是这个反应堆的“主要保护系统”软件
——在塞兹韦尔B的温度突然上升或者出现其他危险状态时担负关闭反应堆这一关键工作的10万行计算机代码。如果“主要保护系统”在这种紧急情况下失灵,欧洲人口最稠密的地区将面临巨大的反应堆内熔化的危险。承建电站的核电力公司已对“主要保护系统”软件进行过一连串的测试。得到的结果令人不安:几乎一半测试软件没有通过。
这件令人忧虑的事件并不是第一次使人对软件在公共安全中发挥的巨大作用产生怀疑。复杂软件不管是在大工程系统还是小工程系统中越来越证明是一个薄弱环节。由软件控制的微芯片现在可把飞行员手腕的轻轻抖动转换成副翼运动,在打滑的路面上使刹车速度放慢,把短程往返列车从一条繁忙的轨道转换到另一条轨道。软件正在成为使用最新医疗器械、通信网络和武器时必不可少的一部分。尽管工程师们十分清楚地知道,即使最彻底地通过全部测试的计算机软件也容易出现错误、故障和病毒,但软件仍然在担负着这些工作。
因此,随着人们不可避免地要使用软件,我们面临着一个难题:技术现在已得到前所未有的广泛应用,但是由于技术已发展得非常复杂,我们简直没有办法详尽地模拟它或者测试它在现实世界中将如何工作。
考虑到这类复杂性,这一点是不足为奇的:即在关键性的安全保障系统中出现的软件错误最近几年来一直在迅速增多。80年代中期,加拿大原子能公司制造的一种由微处理器控制的癌症治疗仪“治癌—25”在美国和加拿大的好几家医院使用时突然失灵,至少使6名病人的身体受到超剂量的辐射,造成他们死亡或者严重受伤。美国食品和药物管理局在调查中发现,其中的几起事件是由于敲击了极少采用的组合键而造成机器软件出了差错。
据美国军方调查人员说,在海湾战争中,一个软件故障部分地扰乱了“爱国者”导弹的雷达和跟踪系统。出了毛病的软件在发射导弹时发生了1/3秒的时间误差,但这点时间使其没有击中发射来的一枚伊拉克的“飞毛腿”导弹,以致于这枚“爱国者”导弹落在沙特阿拉伯的一座军营中,造成28名士兵死亡,另外98人受伤。
在1991年夏季发生的一次重大电话中断事件中,一种可自行修复的软件是出问题的原因。
还有相对较小的持续不断的故障使我们对我们所居住的这个日益被软件控制的世界感到担心。软件故障难以避免是由于复杂性和缺乏独立性
当然,所有的技术发明最终都会出现错误。但是特别让人担心的是,软件十足的复杂性能掩盖设计中固有的错误。基本的设计错误在较简单的硬件中可以很容易测试出来,比如飞机的发动机。以后发生的任何问题极有可能是发动机的这部分或者那部分偶尔出现的毛病造成的。但是,通过安装一个一模一样的在出现问题时能够自动接管工作的备用系统,工程师能够减少这些随机错误造成的危险。经验表明,备用系统与工作系统同时发生故障的可能性微乎其微。工程师们把这种特性称为“故障独立性”。这意味着,首先,通过在实验室模拟环境下测试发动机或者观察它们在实际飞行中的表现,工程师们能够发现错误的发生率;如果发动机的平均故障率为飞行一万次发生故障一次,那么他们几乎就可肯定,主机和备用机同时发生故障的概率为一亿分之一,这让人感到非常宽慰。
但是,要在软件上获得同样类型的独立性是很困难的。软件发生故障往往是由于代码内部的逻辑错误或者是原来的规范要求有问题,规范要求是拟定软件如何运行的技术描述。即使是按同一规范要求设计但由不同编程小组开发的两种程序,后备程序也很可能会与主程序产生同样错误。解决问题的最佳答案是形式法编程系统
弗吉尼亚国家航空和航天局朗利研究中心的软件设计工程师里基·巴特勒和越来越多的软件安全专家认为,解决软件可靠性问题的最佳答案在于采用被称为形式法的编程系统。巴特勒说,由于软件太复杂,不能在现实世界中测试,唯一的解决方法是采取步骤,首先保证软件的设计正确,并且证明它能精确地工作。
在确定一个程序应当做什么的时候,形式法开始是用数学方程而不是用英语句子。比如,要使飞机机翼精确地沿90度角运动,采用形式规范要求方法也许要列出50个完成任务必需的数学方程,而不是由总工程师仅仅让程序员写一个程序。通过证明这些方程的基本逻辑是合理的,数学家甚至在代码写出来之前就能指出软件将按人们的期望运行。当编程人员完成实际计算机代码的编写后,一个验证程序将确定代码是否按方程的规定工作。巴特勒说,甚至在第一次实际测试之前,形式法通过这种方式就能够保证软件的安全“是建立在合理性的基础上,而不是建立在经验的基础上”。
然而,即使是最正规的形式法在软件极其复杂时也许都不够用,比如,涉及通信或者医疗技术的软件,这类系统需要设计小组提出永恒的法则。要做的事情是把注意力更多地放在大多数软件错误的根本原因上:人为错误。

本网除标明“PLTYW原创”的文章外,其它文章均为转载或者爬虫(PBot)抓取; 本文只代表作者个人观点,不代表本站观点,仅供大家学习参考。本网站属非谋利性质,旨在传播马克思主义和共产主义历史文献和参考资料。凡刊登的著作文献侵犯了作者、译者或版权持有人权益的,可来信联系本站删除。 本站邮箱[email protected]

相关文章