前面的课程,我们了解了霸哥产生的几大原因:需求错误、设计缺陷、时序变化、编码不规范、测试不充分,这节课纳米老师重点讲一下测试。
软件测试是实际输出与预期输出间的比较过程,通过测试验证你的设计和实现对不对。
测试要不要做?
问题我们稍微一放,纳米老师先给同学们讲个案例。
2016年2月17日,日本成功发射了一颗卫星,这颗卫星有个好听的名字:“瞳”。“它的造价为2.86亿美元,约合人民币18.6亿元。
然而,时隔一个多月后,“瞳”却因自旋而解体。它的设计寿命是10年,却没能正式工作10天。
发生了什么?
我们按时间线梳理一下过程:
3月26日,北京时间凌晨02:01分,“瞳”卫星根据预先设计的指令执行转向,其指向从对准金牛座蟹状星云转向马卡良205星系。
过程中间的某个时刻,“星体定位跟踪器”失效了。
这倒没啥关系,一是卫星是绕着地球旋转的,有个一两圈不控也问题不大,掉不下来;二是卫星上一般也会有备用措施。
接下来,替代方案陀螺仪登场,接替故障的“星体定位跟踪器”向卫星提供姿态信息。
悲催的是,陀螺仪软件也出错了。
它错误地向卫星上的计算机发送报告,认为本来停止运转的卫星正以大约每小时20度的速度发生旋转。
于是乎,星载计算机对此自动做出反应,微型“反力轮”开始运转,产生反作用力去抵消“不存在的旋转”。
这样,卫星真的开始旋转了。
抽风的陀螺仪报告计算机,检测到了更高的旋转速度,“反力轮”就更卖力的旋转,形成了恶性循环。“反力轮”越转越快,卫星的旋转速度也越来越快。
随后,控制系统检测到异常,星载计算机在连续控制中估计已经知道数字仪器出现故障了,于是进入安全模式。
此时还有第三重防护:反推发动机。
北京时间凌晨03:10,卫星控制系统开启反推发动机。反推发动机产生的扭矩足以让卫星停止旋转,但这一行动彻底葬送了”瞳”。
因为底层软件犯了一个大错:控制反推发动机喷射的方向反了!卫星加速旋转,最终解体!
最后经过调查,在数周之前才上传到卫星的程序是错误的,并没有经过严格的流程测试!
只因没有测试,最终却损失了近20亿。
到这里,前面的问题不言自明。编程和生活一样,编写的软件需要一遍遍的测试;生活中,做过的事情也要测试确认。就像考试,不要想当然,做完多检查一下,把计算的结果带进去再验证一下,确保它是好的。
扫码查看1条评论