今天下午同事在PRD数据库服务器上更新了一个脚本,没有想到的是,本来很平常的一个操作,却导致了灾难性的后果,由于我们系统前不久改变了同SAP交互的方式,以前通过另外的中间接口访问SAP,最近进行了迁移,换了个接口程序。可是我同事的脚本更新后不久,用户就发现订单中有些产品被莫名的更改了,订单上开始选择的是芝麻油500箱,结果后来生成订单后发现变成了橄榄油500箱,虽然后来我们发现后马上进行了进一步的验证,而且没有发现大量的错误数据,只有一家用户,下了一个订单出现了问题。风险范围比较小,大家总算松了口气,马上进行了修复,并进一步进行了再三的Check,但是也暴露出了一个问题。事关这种全局性的修改,我们没有严格的进行测试,并且审查,所以出现了这种紧急情况。所幸的是最终造成的损失并不大。
但是通过这次的事件,也暴露了我们开发中的一些薄弱环节,比如测试不过,对于这种事关系统全局的更改,没有进行严格的代码审查,在PRD环境执行时,也没有仿真环境测试,开发人员完成后,进行了一次确认后,特别是这种数据库脚本的执行,就简单的做了些测试就直接执行了。有时候简单的看看是看不出问题的,而且测试时如果没有考虑全面的话也测试部出来,因为这次并没有导致所有的数据出错,仅仅只是特殊的情况下有问题。所以流程的管理在某些 方面还是有漏洞。关于系统全局,关键性的修改,在开发人员完成开发后,自己先做完单元测试,相关同事一定要仔细的做验证,并Review代码,然后由同事再次测试,测试通过OK后交给测试组进行全面的测试。对于这种事关全局的更改,即使是一个小小的脚本,也要有测试用例,而且要全面的测试,同事在PRD环境执行前,一定要在一个和PRD环境最接近的仿真环境再次进行测试,并确认OK后方可在PRD环境执行。古人云:失之毫厘,差之千里。绝对的真理啊。下次一定要谨记了。