软件测试有多重要?史上十大软件缺陷灾难级事故

众所周知,软件开发在一个软件项目中起主导作用,但如果软件没有测试或者测试不全面则会导致一系列的后果,有些错误甚至会造成重大的人员伤亡及财产损失, 由于软件是由人来完成的,所以它不可能十全十美,虽然不可能完全杜绝软件中的错误,但是可以通过软件测试等手段使程序中的错误数量尽可能少,密度尽可能小。所以软件测试软件测试人员至关重要。

Bug一词的原意是“臭虫”或“虫子”。但是现在,在电脑系统或程序中,如果隐藏着的一些未被发现的缺陷或问题,人们也叫它“bug”,这是怎么回事呢?
       1947年9月9日,正值计算机刚刚被发明的时候,哈佛大学的某个计算机实验室正在做实验,由于当时的原始计算机由很多庞大且昂贵的真空管组成,运行时会产生光和热,在下午15点45分的时候,一只飞蛾(英文是Moth)钻入了真空管内,导致整个计算机无法工作,当把这只小虫子从真空管中取出后,计算机又恢复正常。一位名叫格蕾丝·赫柏的人把飞蛾拍死在工作日志上(网上有图为证),写道:就是这个 bug(虫子),害我们今天的工作无法完成——于是,bug一词成了电脑系统程序的专业术语,形容那些系统中的缺陷或问题,并一直沿用下来,而那个被拍死的飞蛾也成为了历史上发现的第一个BUG。在这个领域不犯任何错误可能会很难,但幸运的是,并不是所有的错误都如此昂贵。在这份总结中,我收集了一些史上灾难级的软件错误。接下来看看不完整的软件测试带来的深刻教训。

TOP10.英特尔奔腾芯片缺陷

  如果在计算机的“计算器”中输入以下算式:

  (419583/3145727)X3145727-4195835

  结果显示为零。而在1994年,结果可能为其他答案,这就是英特尔(Intel)奔腾(Pentumn)CPU芯片所带来的一个浮点触发缺陷。英特尔为此付出了4亿多美元的代价。

软件测试有多重要?史上十大软件缺陷灾难级事故_第1张图片

       TOP9.千年虫(1999 年)

 

千年虫或 2000 年问题是指与 2000 年开始的日历数据的存储和格式化有关的事件。由于许多程序在表示四位数年份时只用最后两位数字表示,结果,2000 年和 1900 年无法区分,因此预计会出现问题。

例如,它影响到了每天计算利率的银行、核电站、医院、交通运输等中心以及很多其他方面。为纠正这一错误,全世界耗费了数十亿美元来升级计算机系统。

软件测试有多重要?史上十大软件缺陷灾难级事故_第2张图片

TOP8.消失在太空(1999年)

  在制造其火星气候轨道探测器时,一个NASA的工程小组使用的是英制单位,而不是预定的公制单位。这会造成探测器的推进器无法正常运作。正是因为这个 Bug,1999年探测器从距离火星表面130英尺的高度垂直坠毁。此项工程成本耗费3.27亿美元,这还不包括损失的时间(该探测器从发射到抵达火星将近一年时间。)

软件测试有多重要?史上十大软件缺陷灾难级事故_第3张图片

TOP7. 阿丽亚娜5型火箭的杯具处女秀(1996年)

  1996年6月4日,阿丽亚娜5型运载火箭的首航,原计划将运送4颗太阳风观察卫星到预定轨道,但因软件引发的问题导致火箭在发射39秒后偏轨,从而激活了火箭的自我摧毁装置。阿丽亚娜5型火箭和其他卫星在瞬间灰飞烟灭。

  后来查明的事故原因是:代码重用。阿5型的发射系统代码直接重用了阿4型的相应代码,而阿4型的飞行条件和阿5型的飞行条件截然不同。此次事故损失3.7亿美元。

       TOP6.PayPal 意外向某人支付 92 千万亿美元

 

当 Chris Reynolds 打开他的 PayPal 电子邮件对账单时,这位宾夕法尼亚州公关主管的账户余额显示为 92,233,720,368,547,800 美元。在 64 位数字的世界里,这个数字太过庞大,意味着存在编程错误。所幸这一错误很快就被发现,当他再次登录时,他的账户已经归零。

PayPal 表示愿意为 Reynolds 选择的事业捐赠一笔数额不详的资金。

软件测试有多重要?史上十大软件缺陷灾难级事故_第4张图片

TOP5. 致命的辐射治疗(2000年)

  辐射剂量超标的事故发生在2000年的巴拿马城(巴拿马首都)。从美国Multidata公司引入的治疗规划软件,其(辐射剂量的)预设值有误。有些患者接受了超标剂量的治疗,至少有5人死亡。后续几年中,又有21人死亡,但很难确定这21人中到底有多少人是死于本身的癌症,还是辐射治疗剂量超标引发的不良后果。

       TOP4.爱国者导弹失灵(1991 年)

 

1991 年 2 月 25 日,海湾战争期间,沙特阿拉伯的爱国者导弹发射台未能追踪和拦截一枚来袭的伊拉克飞毛腿导弹。飞毛腿导弹击中了美国陆军的一个军营,造成 28 名士兵死亡,约 100 人受伤。

这一问题是由于计算机算数错误,导致启动后时间计算不准确。准确地说,用系统内部时钟测量的十分之一秒的时间乘以 1/10,以秒为单位返回时间,结果,它算出的时间是错误的,导弹因此也就无法拦截伊拉克飞毛腿导弹的攻击。同样又是系统的四舍五入错误。

软件测试有多重要?史上十大软件缺陷灾难级事故_第5张图片

TOP3. 2011 年温州7.23 动车事故

2011年7月23日20时30分05秒,甬温线浙江省温州市境内,由北京南站开往福州站的D301次列车与杭州站开往福州南站的D3115次列车发生动车组列车追尾事故,造成40人死亡、172人受伤,中断行车32小时35分,直接经济损失19371.65万元。

上海铁路局局长安路生28日说,根据初步掌握的情况分析,“7·23”动车事故是由于温州南站信号设备在设计上存在严重缺陷,遭雷击发生故障后,导致本应显示为红灯的区间信号机错误显示为绿灯。

 

软件测试有多重要?史上十大软件缺陷灾难级事故_第6张图片

TOP2.1987年华盛顿崩盘

损失:1天就损失5000亿美元

经过:在“黑色星期一”(1987年10月19日)当天,道琼斯指数一天之内重挫508.32点,跌幅达22.6%,创下历史上单日最大的百分比跌幅,引发金融市场恐慌。

原因:很多人认为这场股灾是因程式交易引起的,程式交易生成大量的销售订单,造成系统崩溃,导致大多数的投资者盲目的跟从。股灾后很多人说电脑程式看到股价下挫,便按早就在程式中设定的机制加入抛售股票,形成恶性循环,令股价加速下挫。

软件测试有多重要?史上十大软件缺陷灾难级事故_第7张图片

TOP1. 一触即发的第三次世界大战

  1980年,北美防空联合司令部曾报告称美国遭受导弹袭击。后来证实,这是反馈系统的电路故障问题,但反馈系统软件没有考虑故障问题引发的误报。

  1983年,苏联卫星报告有美国导弹入侵,但主管官员的直觉告诉他这是误报。后来事实证明的确是误报。

  幸亏这些误报没有激活“核按钮”。在上述两个案例中,如果对方真的发起反击,核战争将全面爆发,后果不堪设想,希望这一天永远不要来临。

软件测试有多重要?史上十大软件缺陷灾难级事故_第8张图片

通过以上的例子,可以看出软件发生错误时对人类生活所造成的各种影响,有的甚至会带来灾难性的后果。软件测试可以使这种风险降低,它在一定程度上解放了程序员,使他们能够更专心于解决程序的算法效率。同时它也减轻了售后服务人员的压力,交到他们手里的程序再也不是那些“一触即死机”的定时炸弹,而是经过严格检验的完整产品。同时,软件测试的发展对程序的外形、结构、输入和输出的规约和标准化提供了参考,并推动了软件工程的发展。

你可能感兴趣的:(测试故事,程序人生,软件测试,bug,人工智能,软件开发,stm32)