致命Bug-软件缺陷的灾难与启示记录

发表于:2016-4-13 10:51

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:清浅2015    来源:51Testing软件测试网采编

  本书写的Bug来自各个领域,如军方导弹、科研火星探测器、医疗仪器、网络、汽车行业等,错误来源各有不同,小到数据类型不匹配、数据转换错误,大到复杂度超过50的代码,Bug造成巨大的经济影响、危害生命,每个类子都值得铭记,避免类似功能时出现同样的错误。
  1、“爱国者”导弹拦截系统因0.000000095的误差拦截导弹失败,造成28人因此丧命。
  “爱国者”雷达系统工作流程:探索阶段、验证阶段、跟踪阶段,在跟踪阶段会等对方的导弹进行拦截,“爱国者”导弹系统如果连续工作超过8小时,射程就会偏离正常位置20%,这是个已知的软件缺陷,但美国军方不认为“爱国者”导弹会持续工作超过8小时,而实际情况是持续运行了100小时。
  系统每1/10秒就进行一次乘以1/10的运算,运算通过24位的固定小数点寄存器进行的,计算机是二进制而非十进制,1/10转换成二进制就是0.00011001100110011001100...,无穷尽,但系统会舍去25位以下的数字,只保存24位,那么每计算一次,就会舍去0.0000000000000000000000011001100(按照十进制的话约为0.000000095)的误差
  运行100小时的误差=0.000000095 x 100(小时)x 60(分) x 60(秒)x 10(每秒进行的除法运算)=0.34秒的误差
  导弹飞行时速是非常快的,0.34秒的误差拦截的扫描则偏离目标687米,拦截功能形同虚设。
  程序明确有错时,应该找到错误,并修复,而不是假设使用者能遵循某个规定。
  2、火星探测化为尘埃,数亿美元在太空中打了水漂。
  起因为计量单位不一致,MCO和SM_FORCE程序之间,一个使用的是牛顿,一个使用的是磅力(1bf,约等于4.45牛顿)
  统一单位是多么重要呀,是在需求时就需要明确规定的。
  3、AT&T长途电话系统瘫痪,数千万美元损失和公司形象荡然无存。
  起因是一行代码导致,交换机内部掌握着相邻交换机的状态信息,当交换机遇到错误时是有自动重启功能的,相邻的交换机会知道它正在修复,但问问恰恰是相邻交换机1/100秒就会收到2个消息,第一次消息还没有处理完,第二次就消息就来了,导致软件故障产生,故障慢慢蔓延的整个网络。
  事件需要个全过程,一个未处理完时,新来的需要等待。
  一件事情,如果不能测试,那就不要开始。
  4、大停电事件
  起因是多个进程访问同个共享资源,数据结构遭到破坏,预警处理陷入无限循环,无警告则人们无法得知实际情况,导致情况越来越严重,而预警队列越来越长,内存耗尽而机器宕机,备用机器同样因这个原因出现故障
  数据需要保持一致性,读写时需要加锁和回滚功能
  5、战舰“约克城”
  起因是Divided by Zero错误,没有哪个数字可以被0整除,操作员输入0后部分程序就无法工作啦。
  在执行功能前,需先做数据合法性进行校验
  6、好奇心的“莫里斯蠕虫”
  莫里斯想知道互联网有多大,有多少机器在连接着,于是设计了一个程序,程序中有个致命的漏洞,入侵其他计算机前,程序会先询问是否已运行了莫里斯的程序,得到响应为yes 则不执行。莫里斯为了防止系统管理员使计算机假装响应“yes” 拦截自己程序的扩散,莫里斯将程序改成即使得到“yes”响应,仍按1/7概率进行复制。
  1/7的概率使得1台机器上运行N个蠕虫程序,导致计算机超负荷而崩溃。
  运行一次可能不会碰到1/7的概率,但是运行多次后总会碰到的,写程序不要只考虑一次运行情况,而是考虑多次运行情况,不测试不能上线。
  7、战机坠毁
  同一个飞行员两次试飞失败,这是坑飞行员呀!
  8、70亿美元的烟花秀:阿丽亚娜5号
  起因:沿用旧软件(SRI),该软件在阿丽亚娜4号成功发射过113次火箭,而阿丽亚娜5号认为旧的软件已经是OK,实践已经证明,不用在测试啦。
  阿丽亚娜4号往SRI输入的是16位元整数数据,阿丽亚娜5号往SRI输入的是64位元浮点数数据,数据转换时溢出啦。
  接口是需要测试的,不能盲目重复软件模块
  9、软件可用性差,军用战舰击毁民用客机
  在软件界面上 如不能形象表示,也应该和平常习惯保持一致,而不是等使用者看到数据后再进行转换。客机明明在向上爬升,但战舰上的操作员却认为客机在下降位置,被战舰以为是降低高度以便作战。
  软件无法使用 和 软件错误 是没有区别的。
  10、时间的计算
  无法计算闰年,年份只算了四位中后两位,16位数据结构-从1900年1月1日到1989年9月19日是32768天-程序无法处理。
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号