微软过桥问题与测试人员素养

发表于:2007-8-14 10:07

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:周伟明    来源:周伟明的专栏

        微软面试题过桥问题在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章的测试用例设计方法后再来重新分析这个问题,也许你会惊喜地发现你已经有能力发现很多新的问题了。
        当然初学者也许会觉得有些问题好像是在钻牛角尖,但是作为测试人员来讲,要的就是这种钻牛角尖的精神。
《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • sleepygirl
    2007-9-03 16:49:15

    真的很有启发性!谢谢啦!

  • happytest00
    2007-8-27 16:26:14

    学了点东西,思想。。找到了点方向

  • xiayu_220
    2007-8-27 10:26:05

    受益非浅,谢谢

  • overfly
    2007-8-20 14:12:34

    唐僧

  • vickywong
    2007-8-20 09:53:34

    :“先让1、2过去,1回来,5、10再过去,2回来,1、2再过去”,总共需要17分钟就可以让4个人都过去。

    难道不就1,返回来接的时间嘛????奇怪
    其实只要是1来接,其他三个人怎么排序,所花的时间是一样的啊

  • 星月之空
    2007-8-18 17:17:10

    周全考虑,谢谢

  • xk216
    2007-8-17 18:05:46

    不错~

  • ∮随风而去~
    2007-8-15 11:49:46

    说的的确有点道理~
    不过现在的软件开发做的很"先进"了,很多情况条件都是被屏蔽了~
    所以有时候当你提出这些问题的时候,基本会被认为有点BT~
    但还是必须要的~当然估计最多的解决办法就是程序员的条件控制写的更严密了~

  • sosn
    2007-8-15 09:36:40

    做测试的很需要这种思维方式,创造性,探索性思维。可惜我还差很远。

  • 兔兔快跑
    2007-8-14 20:49:54

    谢谢~~

  • bluelightmm
    2007-8-14 15:01:17

    太好了 看了你的分析  才知道我真的很适合做测试  因为每每有人说我“多事”

  • zhicl
    2007-8-14 14:33:27

    当学完后面第3章的测试用例设计方法后再来重新分析这个问题.......................

    第三章在哪?没找到.....

  • whoisangle
    2007-8-14 14:23:30

    嗯,我也是,以前觉得人家专牛角尖很讨厌.现在才知道,这是俺的工作.

  • hardcoin
    2007-8-14 12:50:50

    没看到还有评分的,给你加5分。*_*
    你的blog是多少啊?

  • hardcoin
    2007-8-14 12:49:41

    很有启发性,受教了。谢谢!!

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号