一个不可原谅的bug

最近出了一件大案子,是咱们程序员同行干的。超市收银员上演“无间道”。正好我的一个朋友,是在这家超市工作,才透露了一些内情给我知道。

按照公开的说法:“乐购超市几家门店货物缺损率大大超过了业内千分之五的物损比例,缺损的货物五花八门,油盐酱醋等日常用品的销售额与实际收到的货款差别很大。”;“经过深入调查,侦查人员发现超市原有的收银系统被装入了一个攻击性的补丁程序,只要收银员输入口令、密码,这个程序会自动运行,删除该营业员当日20%左右的销售记录后再将数据传送至会计部门,造成会计部门只按实际营业额的80%向收银员收取营业额。另20%营业额即可被侵吞。”

按照我朋友的说法,超市的货物损失,从来就不是什么大事,货物数量对不上,也从来都不是超市的损失,直接打个电话,让供应商补货就是了。问题出在哪里呢?他们这个程序,被设计为每天拉掉最后一笔交易记录,而这最后一笔交易记录,可能是任何商品。但是,有些商品,不是公开货架上的商品,而是超市专柜经销商的商品。这专柜是有专人看管的,售货员交接班时,都是要清点移交的。结果呢,根据销售记录,发现专柜货物遗失,而总共只有两个专柜营业员,一口咬定决不是自己偷的。

这才引起总公司的重视,开始查这个案子!

如果当初他们设计程序的时候,能够跳过专柜商品,只删除货架商品的销售记录的话,这个手段,永远都不会被发现……

现在那帮家伙自然是一网打尽了……由此我们可以得到这样一个教训:“高风险的程序,一个bug都不能出啊!”

原文写于:2005年10月24日