今天参加了一场线下面试,面试官出了一道电梯的题目,10 分钟思考时间之后,我说了一下我的思路,不过面试官好像不是很满意的样子。。
而且搜索了一下,好像也没有人遇到同样的问题,于是就发到社区里,感兴趣的大佬们可以共同探讨一下有没有更好的回答方式
我尽量完整地描述一下这道题:
已知:
附加条件:
问题:
现在测试者分别站在 1F、B1F,按动按钮来控制电梯,根据以上条件,分析测试场景。
下面是我的回答:
分三种情况:
对于 “满员不停” 这种情况,我举了一个极端例子,就是电梯 A 每次经过 1F 的时候都是满员的(包括从高楼层下降到 B1F,和从 B1F 升到高楼层),这样电梯 A 的门可能始终不会被开启,但这是极端情况,现实中不太可能出现
关于 “距离优先”,我事先跟面试官确认过,人站在外面,完全没有办法得知电梯的具体运行情况(除非电梯已经在 1F 并且门已经打开了)
面试官的回应:
面试官表示对于 “距离优先” 这个条件,有办法通过计算来覆盖到。
应该也需要考虑电梯内部,乘客给出的操作指令;比如你的第一种情况,在 B1 按下向上按钮,若电梯到达 1F 时始终满员(本来电梯到 1F 放下乘客后前往 B1,但是此时从 1F 进来大量的人导致满员),且电梯内无人按前往 B1 的按钮,那么电梯则不会去 B1(这种跟我见过的电梯不太一样,我碰到的现实种的电梯,即便没人按 B1 且满客,电梯依旧会到达 B1,只不过开了门,人也进不来,超重了);倘若到达 1F 依旧满员,但是电梯内有人按下 B1,则必定前往 B1(电梯应该是这种逻辑)
至于距离更近的优先接收指令,虽然我们实际中并不得知,但是测试的时候你是能控制两部电梯到达哪一层后再按下按钮的;此时也要分情况:如果在 B1 按向上或者在 1F 按向下,则只有 A 电梯能接受指令;如果在 1F 按向上,则距离更近的接受指令(前置条件:A 在 3F,B 在 5F,则 A 接受到指令;若 A、B 都停留不动,即 AB 当前无运输任务,则 A 前往 1F 接乘客。。。。);但是我还有疑问:比如 A 接受到了信号,B 在 A 接受到信号后,是否也会接受这个信号,但是它并不会优先去处理,而是看 A/B 哪个先完成当前的运输任务,哪个再去处理
就是说,我觉得这个电梯的需求还不够明确,可能这也是面试官想要考察的一个点??
头好疼。。。为啥没有需求文档。我对电梯的运作原理不是很清楚,脑图列的不对。我突然想到的是,对于电梯向下的时候,是不是不响应向上的按钮?对于电梯向上的时候,是不是不响应向下的按钮?
现在的电梯基本都是那种可以看到电梯停留层数的吧。。。不然初始状态都不好了解。。。
转化一下问题,应该就是
输入:B1 按上 1 按上 1 按下 1 按上并且按下
输出:
A 停 B1 A 停 1 A 停大于 1
B 停 1 B 停大于 1
需求:测试下电梯调度算法
不知道是不是这个意图
面试官表示对于 “距离优先” 这个条件,有办法通过计算来覆盖到。
距离优先的入参是电梯离目标楼层的距离。如果按照题目说的除了电梯在 1F 和 B1F 开门外,都不知道电梯在哪,那只能基于电梯在这两个楼层来测试这个特性了。
我在想,他说的是不是这样的测试方法?
1、先想办法让电梯 B 停在 1F(找人协助啥的)
2、把电梯 A 停在 B1F
3、在 1F 按按钮,确认是电梯 B 开门,而不是 A 开门
但实际场景,可不仅仅是考虑距离优先的,还要考虑方向是否对等(比如 A 在 3 楼,但正在下;B 在 B1 楼。此时 1 楼按个下,应该让 A 过来,而不是 B 过来)。同时也没告知除了从 1F、B1F 的电梯外部按按钮外,还有什么控制手段,感觉好多东西没有交代,需要去确认。
这种 ,列出大概思路,根据已知条件,列出几点你觉得需求不清晰的点,也是加分项(说明,你思考了)
哥 一般面试容易考到的用例设计场景有哪些呢?我现在听过的有登录窗口,一个杯子,一支笔,电梯。我想提前思考下,到时候面试的时候回答起来会稍微流利一点
我提的这个方案算可以么?几乎完全不知道
是指其他楼层吧,如果电梯是在 1F 或者 B1F,按照题目里的条件,只要一开门就知道了。
这个方案其实有漏洞的,楼层之间的间隔不一定是一样的。比如 1 楼和 2 楼间隔为 3, 2 楼和 3 楼间隔为 2.5。 A 电梯在 1 楼,B 电梯在 3 楼。
在二楼按了电梯下,那么这种的情况下,应该是 B 电梯下来 2 楼,而不是 A 上去 2 楼。
我知道电梯只有在电梯门和楼层门对准下才会开门,那能不能用这个来进行 距离优先 测试。
(因为不太了解电梯,没能想到具体方案)
可能你说的距离和我理解的不大一样。你说的看起来像是楼层高度,我说的是楼层间隔,即中间隔了几层。1 楼和 2 楼间隔是 1(2-1=1),2 楼和 3 楼间隔也是 1(3-2=1)。
有楼层高度是会更精确,但实际上楼层高度差异很大(某楼层高度是其它楼层的 2 倍甚至更多)的楼毕竟是少数,而且差异 0.5 米按照电梯的速度,时间差异也基本在 1-2 秒内,从等电梯的人角度看,这个差异几乎可以忽略不计?对于电梯公司来说,少数几套通用算法走天下,成本比每个大楼还得根据楼层高度来调整算法要低不少吧。
楼层高度和电梯的安全运载重量有关,而题目中,这两个关键信息都缺失。
而且要求在电梯外计算,也就是没有办法检测,电梯内门打开时间(电梯从运行到静止,再到开门时间),只要把这时间剔除掉,那么,就可以测算出干净的每层楼运载时间了。
在缺失测算手段的情况下,还是你的方案更优些。
感觉电梯还是很有意思,但是这个需求还是不那么明确,
距离优先,
是操作人离当前电梯楼层近的优先,
还是同一状态下 (2 个人同时按下,或同时按上),离楼层近的优先?
举个例子:
1、电梯在 2 楼往下,1 楼按上,B1 楼按上,按照距离优先,那电梯到了 1 楼后 会打开吗,如果打开,应该往上还是继续往下?(虽然生活中是 没超员的情况下 是继续往下)
所以 感觉还是得需求明确,不然测试侧 没标准,就很难达到预期目标