【IT168 技术】在本系列的文章中,作者举例分析了国内各公司网络软件中的Bug情况和基于这些Bug可以分析得到的这些公司的开发管理状况。其中的数据取自2007-2012年网络上运行的各种游戏和软件系统,还有一些数据并没有到发布的状态,所以,后期会补充从2005到2012年一些游戏数据情况分析的文字出来。本文主要介绍12306网站在购票过程中的两处Bug,以及对问题的分析。
改签票款计算错误
先从最简单的看起,这个也是大家可能都会疏忽,甚至可能在这里丢过钱的,12306出现的改签票款的计算错误。
两张6.5/张的火车票改签成2张13/张的火车票,居然出现了如下的计算结果图。
上图略小,可能看不清楚,下面用局部图来表示。
可以看到退还的票款是6.5,不是正常的退票13块,也就是说,2张6.5的票,要么计算成一张退票,要么故意黑掉了一张的退票费,反正12306到目前的退票都是不清不楚的,查证的时候人家就是一句话退过了,自己去找银行。
于是我退出,重新进行改签,这次的结果如下图所示。
详细局部图如下。
这次的计算就正确了。
前后十几秒左右的时间,却出现了两种不同的结果。
我不知道有多少人因为没有注意这一点而损失了自己的钱,12306为什么会这样呢?
从代码层面考虑,同一个过程的代码执行应该只可能得到一个结果,上面我的操作过程中应该不会涉及到系统更新的问题,那就是说,在这里实际上应该是执行了两个方法过程。或者说,有两个计算退票款的方法在执行中,第一次执行的是错误的方法,第二次执行了正确的方法,那就进一步说明,这里应该有一个判断在执行,确定到底执行哪一个退票方法。
到这里,我们已经无法继续分析,因为下一步的分析应该是去检查代码中对应的部分,进行bug的修正和分析了。
看完本节是不是有一种想要去查一下过去退票和改签的退款信息的冲动呢?
买票的判断逻辑缺陷
因为订票订不到从北京到宁德的,于是抢到了一张北京到温州南。
然后就想是否可以直接买一下温州南到宁德的车票,查询的结果是这趟车从温州南到宁德还有很多座位,于是下单,最后提示如下图所示。
也就是说,在12306的分析中是用身份证号码和车次作为关键词进行重复订票查询的,并没有增加车上的行程作为判断条件,因此算是一个判断条件缺失,造成了上面这种本来应该可以购买,因为并不违背铁道部的买票规定的票,却实际上无法购买。