微软面试题过桥问题在IT业内几乎已变成一个众所周知的问题,问题如下:
4个人在晚上过一座小桥,过桥时必须要用到手电筒,只有一枚手电筒,每次最多只可以有两人通过(人多了桥支撑不住就塌了),
4个人的过桥速度分别为1分钟、2分钟、5分钟、10分钟,试问最少需要多长时间4人才可以全部通过小桥?
一般人碰到这道题目也许马上就在想该如何安排这4个人的过桥顺序使得过桥时间最少,稍微聪明一些的人也许马上就想到了答案:“先让1、2过去,1回来,5、10再过去,2回来,1、2再过去”,总共需要17分钟就可以让4个人都过去。
当然如果数学知识足够好的话,可能会用图论来分析这个问题,最后发现这是一个图论的最短路径算法问题,只要根据过桥的状态建立一张有向图,然后求出最短路径就可以得到最少时间的过桥方案。(如果读者对如何用图论问题解这个问题感兴趣的话,可以看我的博客中的另外一篇讲微软过桥问题图论解法的文章)。
现在如果让一个测试人员来回答这个问题的话,是不是也象上述一样回答就可以了呢?如果能在很短时间内象上面一样回答问题,当然说明你人比较聪明,但是如果作为测试人员的话,需要的不是简单的结果,而是要全面分析问题,仅仅回答出最短时间为17分钟的答案是达不到测试人员的要求的。
作为一个测试人员,首先得对问题中的许多未知因素提出疑问,下面一些问题也许是测试人员所想知道的:
n 这4个人为什么要在晚上过这座桥,他们是在正常回家的路上还是野外探险迷路还是被人追杀?如果是被人追杀会不会有2人过去后独自逃走不回来接剩下的2人?
n 这四个人过桥的时间为什么差距这么大,最大最小时间差了10倍?进而可以提出疑问,这4个人到底是什么样的人?他们的年龄分别多大?他们是否有人是残疾人或是小孩?如果有小孩或残疾人的话,那么是不是残疾人和小孩不能同时过桥?(也就是说5和10不能同时过桥)
n 既然最多只有2人可以同时过桥,那么桥的最大承重能力是多少?是不是两个最重的人也可以同时过桥?
n 手电筒是不是好的,手电筒里的电是不是用完了,或者手电筒的电还能用多久?或者过桥的过程中手电筒会不会掉到桥下去或摔坏?
n 当时的天气是什么样的?有没有刮风下雨、打雷或下暴雪,会不会有人在过桥过程中被风刮下桥去,或者被打雷声吓得掉下桥去。或者过桥时天气变坏使得他们过桥需要的时间增加了。
n 当时的气温是多少度?如果温度低于0度的话,桥上是不是结冰了,过桥时会不会滑下去。
n 过桥的过程中对面是不是有救援人员来了,比如1、2过去后就碰到救援人员等在对岸,那么1也许可以拿救援人员的电筒过去接剩下的两个人,这样最少只要14分钟就可以过桥了。
n 过桥的过程中是否有山洪爆发或水突然涨高将桥淹没?
n 会不会在过桥过程中有野兽嚎叫等因素影响他们的过桥速度?
n 桥下面是什么?是水溪还是无水的沟谷还是很深的悬崖?人掉下去后能不能爬上来?
n 桥旁边有没有其他的捷径可以过去。
n 1分钟的人是否可以背上10分钟的人过桥?如果可以的话需要多长时间?
n 桥有多长?手电筒能照多远?是否过去的人在桥的另外一头就可以用手电筒照亮桥让未过去的人过桥?
这些问题的确定对过桥需要的最短时间都会有影响,在不同的情况下过桥所需要的最短时间是不同的。以上只是写出了一些问题,还有更多的问题读者可以自己去发掘,如果能在上面的基础上再发掘出2个以上的新问题的话,那么相信你已经具备了测试人员全面分析问题的素养了。
不过即使你不能发现新的问题,并且上面的那些问题你很多都没有想到,也没有任何关系,当学完后面第3章的测试用例设计方法后再来重新分析这个问题,也许你会惊喜地发现你已经有能力发现很多新的问题了。
当然初学者也许会觉得有些问题好像是在钻牛角尖,但是作为测试人员来讲,要的就是这种钻牛角尖的精神。