|
俗话说得好, "人在江湖飘, 哪能不挨刀", 不是没有bug, 而是时辰未到.

Bob 大叔
最近看到Youtube上 Robert C. Martin 大叔的一个演讲: "The Future of Programming(编程之未来)", 于是想搜罗一下这些年因为程序bug导致的灾难性事故. 在瀑布模式/迭代模式/敏捷开发模式等软件开发模式的规范下, 在交付给用户之前要经过的单元测试/集成测试/系统测试/验收测试等把关, 程序bug还是犹如幽灵般存在, 并且在实际使用中轻则使交互失灵, 重则引发灾难性事故. (注: Bob大叔的视频下载地址)
I. 一颗螺丝引发的扑街
2003年9月6日, NOAA(美国国家海洋大气局)的第三代实用气象观测卫星在旋转中扑街, 造成"严重损坏".

旋转跳跃 我闭着眼 脸着地
那年, NOAA的一名技术人员在把卫星底部的一枚螺丝松掉后没有记录在案, 而之后其他技术人员要移动旋转卫星时也没有例行检查所有螺丝是否固定, 于是导致了卫星99度旋转并且头着地, 直接经济损失约1.35亿美元. 可谓是"一扑千金", 是故做事要严谨, 有规范就要严格遵守, 例行检查也必须到位.
II. Ariane 5 运载火箭
1996年6月4日, 欧洲空间局第一次发射Ariane 5, 但火箭在发射后 37 秒便从既定路径偏移而后启动了火箭自毁程序.

我跑偏了, 要自爆了
Ariane 5(阿丽亚娜5型)运载火箭, 是20世纪90年代由欧洲率先研制成功的世界上第一个“少级数、大直径”的大型运载火箭, 基于4型火箭开发, 其中央控制台的开发语言是Ada. 在4型火箭系统中,对一个水平速率的测量值使用了16位的变量及内存,因为在4型火箭系统中反复验证过,这一值不会超过16位的变量,而5型火箭的开发人员复制粘贴了这部分程序,而没有对新火箭进行数值的验证,结果发生了致命的数值溢出. 拷贝粘贴无罪, 未经测试其罪.
III. 骑士资本的4.6亿美元
2012年8月1日, 在纽交所开市之后半个小时的交易时间里, 骑士资本因为技术人员的"粗心", 损失了4.6亿美元.

THE KNIGHT is dead, long live the bugs!
Knight Capital(骑士资本), 曾是美国最大的做市商之一. 2012年7月27日, 星期五(Thank god, it's friday !: ), 骑士资本的一位系统管理人员在升级服务器上的高频交易系统时遗漏的一台. 到了星期一, 纽交所发现骑士资本的交易系统发出了超乎寻常数量的交易订单, 随后纽交所和骑士资本双方赶紧终止继续发送交易订单. 之后骑士资本立刻向美国证监会提出申述,要求取消错误交易. 然并卵, 骑士资本最终损失了4.6亿美元, 之后就陷入经营危机,五个月之后便被GETCO公司兼并. 唉~, 论自动化运维的重要性. 另外, 周五上线一时爽, 周末出问题一直爽 T^T.
IV. Year 2000 Problem
千禧年之际, 许多软件系统为了节省存储空间, 用两位数来表示年份, 这将导致2000年的数据和操作错误. 另外, 在一些计算机系统中,对于闰年的计算和识别出现问题,不能把2000年识别为闰年,导致该计算机系统的日历中没有2000年2月29日这一天.

史上称之为 千年虫危机(Y2K)
系统设计之初, 可能是打算用几年后就开发新的系统或者重构系统, 结果一用就是十几年甚至几十年. 流水的程序员和项目经理, 铁打的bug. 新来的项目经理不想花时间重构, 新来的程序员只能打打补丁. 是故论重构的重要性, 论面试题中判断闰年题的重要性.
V. 日本"令和"年号
2019年5月1日开始, 小日子过得还不错的日本改用新年号"令和", 告别了平成时代.

我是没有感情的举牌机器
在日本, 年号和黄历共存, 比如昭和20年是1945年, 而银行/证券/保险等金融机构和行政机关仍在使用年号纪元, 所以日本所有的电脑和软件系统都必须在5月1日同步改用"令和"新年号. 如果在代码里面硬编码了年号, 那么要更新那些和平成年代一样古老的系统对于现役日本程序员而言会是一个恶心且毁长假的挑战. 是故不要硬编码, 要维护配置文件. 另外, 据说上一个灾难(千年虫问题)被机智的日本人延迟到2025年, 变成了"昭和100年问题", 想想都能感觉到芒刺在背. 根据Bug守恒定律, 该解决的终究要解决, 不会凭空消失或者转移, bug拖得越迟, bug fix的成本就越高. 故曰, "不是没有bug, 而是时辰未到".
VI. 波音737 MAX飞机
2018年10月29日, 印度尼西亚狮航一架波音 737 MAX 8 从首都雅加达起飞 13 分钟后坠毁,机上 189 人遇难. 无独有偶, 2019年3月10日,埃塞俄比亚航空一架波音 737 MAX 8 从首都亚的斯亚贝巴起飞后约 6 分钟后坠落, 8名机组人员和149 名乘客遇难.

波音737 MAX
波音737 MAX飞机的平均造价高达1.21亿美元, 但是其自动驾驶却有一个隐藏地很深的bug. Bug本身不难解决, 但是由于波音公司和美国联邦政府的意见分歧加上效率低下, 这个bug fix拖了近四个月, 直到埃航事故发生. 前天看完中国机长, 真切感受到在千米高空上的生死考验, 不禁对一顿操作猛如虎力挽狂澜的刘长健机长肃然起敬. 相比于让人起死回生, 任何bug都是容易修正的.
结语
欢迎订阅我的个人公众号(搜: 10分24寸)
参考: |
|