软件 Bug 引发的致命事故,程序员责任何在?| 技术头条

640?wx_fmt=gif

【CSDN 编者按】2018 年 10 月 29 日,印度尼西亚狮航一架波音 737 MAX 8 从首都雅加达起飞 13 分钟后,在附近海域坠毁,机上 189 人无一幸免。

2019 年 3 月 10 日,埃塞俄比亚航空一架波音 737 MAX 8 从首都亚的斯亚贝巴起飞后约 6 分钟,飞机坠落,8 名机组人员和 149 名乘客无人生还。

短短 130 多天,两起事故,346 人罹难,我们沉痛哀悼的同时,也不禁发问,究竟是什么原因导致了空难的发生?

随后根据埃航空难的最新调查报告显示,事故的疑点被指向该机型的控制系统。而最新消息显示,波音总裁丹尼斯·米伦伯格于 4 月 4 日发布声明正式承认两起空难与飞机自动防失速系统“机动特性增强系统”(MCAS)有关。为此,在许许多多的人因软件的 Bug、错误和漏洞而丧失生命的同时,肩负该软件开发的工程师是否有责任?其他软件工程师又能从中吸取什么教训?

640?wx_fmt=jpeg

作者 | Keri Savoca

译者 | 谭开朗

责编 | 屠敏

出品 | CSDN(ID:CSDNnews)

以下为译文:

波音737飞机的两次重大坠机事故共造成了346人死亡,经过初步调查,该公司的专用软件难辞其咎。

这不是近几年唯一一次因软件的 Bug,错误或漏洞而导致的灾难事件。某些情况下造成了大量的金钱损失,而有些情况甚至造成了重大的人员伤亡。

我们如何确保安全苛求系统的软件的可靠性?软件的失误又总该归咎于人为的失误吗?软件工程师能从中吸取什么教训呢?


640?wx_fmt=png

历史上的灾难性软件失误

 

1985到1987年,由软件控制的放射治疗设备Therac-25,因人员疏忽大意而使用了超过规定剂量100倍的大剂量辐射,造成至少5名患者死亡(其他患者重伤)。

2000年也发生过一起类似的事故,由美国公司Multidata开发的软件导致数十名巴拿马患者接受了过量的辐射,其中5人因此而亡。在后续的几年时间里,又共有9名患者离开了人世,很可能同样死于过度辐射。辐射的剂量决定于系统输入数据的顺序,一旦存在差异,错误就发生了——当医生在寻找漏洞以调整软件的可用性时,错误就会加剧。没有反复核查软件计算结果的医生会被控告为谋杀罪。

1991年,一枚弹道导弹击中了沙特阿拉伯的一处美国军营,造成28人死亡,96人受伤。因一个软件的失误而停止了对导弹的拦截。

1997年,一架韩国飞机坠毁而导致228人死亡,其部分责任归咎于近地警告系统编程不良。FFA确认并纠正了该系统错误。虽然人为的失误也是此次坠机的原因之一,但近地警告系统也未能提醒空中交通管制员飞机处于近地面的危险高度。

2018年,优步一款自动驾驶汽车上的软件计算失误导致一位行人死亡。实际上,这辆车的传感器检测到行人了,但认定她是“假阳性”——就像马路上的空汽水瓶一样无关紧要——于是继续行驶。

一些人成功识别出了有缺陷的软件,但并不总能如此。1983年,苏联早期警报系统警报美国向苏联发射了5枚导弹,但负责人认为该警报是误报。但是,我们真的能指望所有的用户识别出软件错误并作出适当的调整吗?尤其是在安全受到威胁的时候。

 

640?wx_fmt=png

谁是真正的责任人?

 

软件引发灾难的原因是多样的,但最紧要的是相关负责人没能检出潜在严重的bug,而且很可能没有尽职尽责的分析bug报告。

苹果FaceTime的漏洞,Facetime允许用户在等待接听FaceTime电话时偷听和监视他人。撰写《与苹果安全团队取得联系如此之难》的作者几乎放弃了。直到一名开发者在一篇广为流传的帖子中提到了这个bug,苹果公司才采取行动。

我在几家大公司中寻找报告软件缺陷的方法——其中的两家公司是Chase(处理敏感数据)和Dodge(已卖出数百万辆汽车)——但我找不到报告软件缺陷的方法。

Chase软件中的漏洞可能不会给用户带来直接的安全隐患,但Dodge软件中的漏洞可能会将用户置于危险之中。

实际情况是——总不能打电话给客服并要求和软件工程师谈一谈吧。

我们可以通过用户报告来了解到更多的小问题和安全问题,但当大型系统上运行的复杂代码事关人命时,又会发生什么呢?

640?wx_fmt=jpeg

我们应该期望飞行员注意到并曝出波音在飞行中自动化系统的问题或缺陷吗?或者,我们应该期望软件工程师进行频繁、彻底的测试与拓展用户服务吗?我们能期望工程师猜中哪些特性需要额外注意吗?飞行员是否有提前反馈在控制波音737飞机时遇到困难?

如果在代码中错入了正常剂量的辐射值,这些医生是否应该被控告为谋杀罪?对于用户正要用或可能会用到的软件,软件测试人员是否要负责?

有没有办法帮医生在他们的放射管理软件中增加一个新功能,而不是人为的试图避免错误?如果用户能够篡改软件,工程师要承担责任吗?

我们是否应该期望工程师(专攻软件开发)识别并质疑客户(针对软件的任何用途)所提出的漏洞或缺陷/效果欠佳的特性?开发人员如何能知道医生可能在软件中输入的X值呢 ?

软件的开发人员和用户之间是否有充分的沟通?

可以认为用户需对他们使用软件的行为负责,但是当安全受到威胁时又该如何呢?

谁最后来为生命保驾护航?

原文:https://medium.com/swlh/when-software-kills-ab6f48a15825

本文为 CSDN 翻译,如需转载,请注明来源出处。作者独立观点,不代表 CSDN 立场。

Python 成功上位,为什么逐渐与 Java 拉开差距?

https://edu.csdn.net/topic/python115?utm_source=csdn_bw

【End】

640?wx_fmt=jpeg

 热 文 推 荐 

☞下过富士康工厂、做过华为外包,这位程序员是如何花 6 年逆袭成为技术大佬的?

苹果高通 5G 开战!

我是技术男,也曾创业过,也拿过风投......

身为程序员的父母,你年薪多少才能让“码二代” 不输在起跑线上

搜狗员工吐槽“统计加班时长裁人”,CEO 王小川破口大骂:“赶快滚”

漫话:如何给女朋友解释什么是系统可用性? | 技术头条

EOS现状: 72%应用涉赌被列为高危, 说好的诗和远方, 你竟沦落成了这样?

ICPC 2019国际大学生程序设计竞赛,中国高校未能夺冠

☞刺激!我31岁敲代码10年,明天退休!

 

System.out.println("点个在看吧!");
console.log("点个在看吧!");
print("点个在看吧!");
printf("点个在看吧!\n");
cout << "点个在看吧!" << endl;
Console.WriteLine("点个在看吧!");
Response.Write("点个在看吧!");
alert("点个在看吧!")
echo "点个在看吧!"

640?wx_fmt=gif点击阅读原文,输入关键词,即可搜索您想要的 CSDN 文章。

640?wx_fmt=png你点的每个“在看”,我都认真当成了喜欢

### 回答1: 程序员可以通过以下工具和技术来辅助他们的工作: 1. 代码编辑器:提供语法高亮,自动补全和错误检查等功能。 2. 集成开发环境(IDE):包括代码编辑器,调试器,版本控制等功能。 3. 自动化构建工具:如Maven,Gradle和Ant,用于管理项目依赖关系和构建过程。 4. 版本控制系统:如Git,SVN和Mercurial,用于管理源代码版本。 5. 单元测试框架:如JUnit,TestNG等,用于编写和执行代码测试。 6. 项目管理工具:如JIRA,Trello等,用于管理项目任务和进度。 7. 数据库管理工具:如MySQL Workbench,SQL Server Management Studio等,用于管理数据库。 这些工具和技术可以帮助程序员提高工作效率,提高代码质量和管理项目。 ### 回答2: 程序员的工作涉及到开发、测试、部署和维护软件系统,这些工作本身就是需要耗费大量时间和精力的。为了提高工作效率,辅助程序员的工具和技术可以帮助他们完成一些重复性、繁琐或需要高度专注和准确性的任务。 首先,自动化工具可以辅助程序员进行代码编写和生成。例如,代码自动完成工具可以根据已有的代码或函数名称提供可用的选项和建议,减少输入时间和错误。代码生成器可以根据指定的要求自动生成特定的代码片段或者整个函数,加快开发速度和减少错误。 其次,调试和测试工具可以辅助程序员进行代码调试和错误修复。例如,集成开发环境(IDE)通常集成了调试器,可以在代码的不同执行阶段中插入断点,观察和分析程序的运行状态,帮助程序员定位和解决问题。除此之外,单元测试和自动化测试工具可以帮助程序员编写和执行测试用例,发现代码中的错误和缺陷。 第三,版本控制工具可以辅助程序员进行代码管理和团队协作。版本控制系统可以追踪代码的变更历史,并提供合并冲突、分支管理等功能,确保团队成员之间的代码同步和协同开发。 此外,文档生成工具可以辅助程序员生成项目文档、API文档等。这些工具可以根据代码的注释和标记生成对应的文档,减少文档编写的工作量和错误。 最后,性能分析工具可以辅助程序员进行代码性能和资源利用的优化。这些工具可以监测和分析程序的运行时性能,提供性能瓶颈的定位和优化建议,帮助程序员改进代码的质量和效率。 总的来说,辅助程序员的工具和技术广泛应用于代码编写、测试、调试、版本管理、文档编写和性能优化等方面,帮助程序员提高工作效率和代码质量。 ### 回答3: 辅助程序员的工作有很多,主要包括以下几个方面: 1. 编辑和开发环境:辅助程序员的一个重要工具是编辑器和开发环境。编辑器可以提供代码自动补全、语法高亮、代码格式化等功能,使得程序员编写代码更加高效准确。开发环境则提供了编译、调试、测试等工具,帮助程序员更好地完成项目开发。 2. 版本控制:版本控制系统(如Git)可以帮助程序员管理项目的代码版本,追踪代码变更历史,并能协作多人同时开发。通过版本控制系统,程序员可以轻松地合并代码、解决冲突,并能够回滚到之前的任意版本,提高版本管理和代码协作的效率。 3. 自动化构建和部署:自动化构建工具(如Maven、Gradle)可以帮助程序员自动编译、打包、测试和部署项目。通过配置构建脚本,程序员可以定义各种构建任务和依赖关系,简化繁琐的手动操作,提高构建和部署的效率。 4. 代码质量工具:代码质量工具(如FindBugs、Checkstyle、SonarQube)可以帮助程序员检测代码中的潜在问题和违反规范的地方。这些工具可以查找代码中的bug代码冗余、性能问题等,并给相应的修复建议,帮助程序员改善代码质量。 5. 文档和帮助系统:辅助程序员的工具还包括文档和帮助系统。良好的文档可以帮助程序员理解框架、库和API的用法,并提供示例代码和注意事项。帮助系统则提供了对工具和技术的详细说明和使用教程,帮助程序员解决问题和学习新的知识。 总之,辅助程序员的工具旨在提高开发效率、简化开发流程、改善代码质量和提供支持等,使得程序员能够更专注地进行编码和问题解决,从而提高开发工作的效率和质量。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值