【科普】趣味编程之百炼成钢-越测越健康

#编程&生活#微米老师2023-04-18

前面的课程,我们了解了霸哥产生的几大原因:需求错误、设计缺陷、时序变化、编码不规范、测试不充分,这节课纳米老师重点讲一下...

前面的课程,我们了解了霸哥产生的几大原因:需求错误、设计缺陷、时序变化、编码不规范、测试不充分,这节课纳米老师重点讲一下测试。

什么是软件测试?

软件测试是实际输出与预期输出间的比较过程,通过测试验证你的设计和实现对不对。

测试要不要做?

问题我们稍微一放,纳米老师先给同学们讲个案例。

2016年2月17日,日本成功发射了一颗卫星,这颗卫星有个好听的名字:“瞳”。“它的造价为2.86亿美元,约合人民币18.6亿元。

卫星上携带有X射线检测仪器,有希望揭开黑洞等宇宙未解之谜,被寄予厚望,代表了“新一代X射线天文学”的未来。

然而,时隔一个多月后,“瞳”却因自旋而解体。它的设计寿命是10年,却没能正式工作10天。

发生了什么?

我们按时间线梳理一下过程:

3月26日,北京时间凌晨02:01分,“瞳”卫星根据预先设计的指令执行转向,其指向从对准金牛座蟹状星云转向马卡良205星系。

过程中间的某个时刻,“星体定位跟踪器”失效了。

这倒没啥关系,一是卫星是绕着地球旋转的,有个一两圈不控也问题不大,掉不下来;二是卫星上一般也会有备用措施。

接下来,替代方案陀螺仪登场,接替故障的“星体定位跟踪器”向卫星提供姿态信息。

悲催的是,陀螺仪软件也出错了。

它错误地向卫星上的计算机发送报告,认为本来停止运转的卫星正以大约每小时20度的速度发生旋转。

于是乎,星载计算机对此自动做出反应,微型“反力轮”开始运转,产生反作用力去抵消“不存在的旋转”。

这样,卫星真的开始旋转了。

抽风的陀螺仪报告计算机,检测到了更高的旋转速度,“反力轮”就更卖力的旋转,形成了恶性循环。“反力轮”越转越快,卫星的旋转速度也越来越快。

随后,控制系统检测到异常,星载计算机在连续控制中估计已经知道数字仪器出现故障了,于是进入安全模式。

此时还有第三重防护:反推发动机。

北京时间凌晨03:10,卫星控制系统开启反推发动机。反推发动机产生的扭矩足以让卫星停止旋转,但这一行动彻底葬送了”瞳”。

因为底层软件犯了一个大错:控制反推发动机喷射的方向反了!卫星加速旋转,最终解体!

最后经过调查,在数周之前才上传到卫星的程序是错误的,并没有经过严格的流程测试!

只因没有测试,最终却损失了近20亿。

到这里,前面的问题不言自明。编程和生活一样,编写的软件需要一遍遍的测试;生活中,做过的事情也要测试确认。就像考试,不要想当然,做完多检查一下,把计算的结果带进去再验证一下,确保它是好的。

用手机扫码体验更多功能

扫码查看1条评论