Bug集锦 -理论与现实这么近

写Bug集锦的目的在于分享从业这些年来遇到的这些有趣的问题,希望在读这些小故事的同时,能带给大家一些思考。

理论与现实这么近

作为计算机系毕业生的小蔡,一直觉得学校里学的理论知识,和现在的测试工作差距太大,在实际的工作中也没有什么作用。直到有一天她碰到这么一个有趣的问题。

小蔡负责测试的是一个Web产品,基于不同的搜索条件,会显示大量的结果。由于搜索结果太多被分成了很多页,为了方便用户快捷跳转到特定的页面,开发人员特意设计了一个页面快速跳转的功能。

搜索结果页面快速跳转

图 1.1 - 搜索结果页面快速跳转

在设计测试用例的时候小蔡就留心了,因为很多测试理论的书籍都描述过,对于输入框可以进行的验证点很多,比如说特殊字符、超长字符、负值、0值和null值,以及很大的数值等。对于大部分的测试用例,开发人员都处理得很好,没有发现缺陷,小蔡也松了口气。

当测试到输入很大数值的用例时,由于不确定多大的数值会出错,也不能拿到代码,小蔡就自己选了一个数值:9999999999(10个9)。输入10个9、点击确定,突然,页面崩溃了!100以内的小数值,以及输入小于等于搜索结果页面数的数值等情况,小蔡在测试中都选取过,测试结果都很正常,那到底数值大到什么程度的时候页面会崩溃呢?一时想不到更好的办法,小菜只好硬着头皮使用尝试法开始确定出错的数值范围。

10个9,出错;9个9,正常跳转到最后一页。突然小蔡想到,数据结构课程不是学过很多查找法吗!二分法就这么出现在了眼前,对,二分查找法!,5000000000(9个0),出错;2500000000(8个0),正常。没有线索,就这么一点一点查找。花了3个小时,小蔡终于定位到出错的数值:4294967295。小蔡很纳闷,怎么是这么一个奇怪的数值呢?有零有整的。计算机专业的背景给了小蔡一个提示,不会是2的多少次幂吧?果真,4294967295是2的32次方-1。和开发人员一沟通,才发现由于开发人员设想页面最大不会超过2的32次方,所以对于这个字段可以输入的最大数值的类型,选择的是int32;但是同时又没有对超过这个范围的数值进行任何的处理,就造成了程序判断中对于请求更大数值的页面时的溢出,从而导致了产品页面的崩溃。

发现了这个隐藏的缺陷,小蔡还是很有成就感的,但又觉得如果能早点知道代码的逻辑,可能自己就不会花这么长的时间了。同时,一直觉得计算机的理论知识不会应用到测试实践中,可没想到这次多亏了学校中学到的这些基础知识,不只是int32,2的32次方,甚至还有二分查找的算法也给了自己解决问题的灵感。没有这些知识,定位问题就更困难了。

#####【扩展知识】
边界值分析
二分查找法