今天参加了一场线下面试,面试官出了一道电梯的题目,10 分钟思考时间之后,我说了一下我的思路,不过面试官好像不是很满意的样子。。
而且搜索了一下,好像也没有人遇到同样的问题,于是就发到社区里,感兴趣的大佬们可以共同探讨一下有没有更好的回答方式
我尽量完整地描述一下这道题:文章源自玩技e族-https://www.playezu.com/193563.html
已知:文章源自玩技e族-https://www.playezu.com/193563.html
- 有两部电梯(电梯 A、电梯 B),共用同一套控制按钮(上、下)
- 电梯 A 可用楼层:B1F ~ 9F, 电梯 B 可用楼层:1F ~ 9F
附加条件:文章源自玩技e族-https://www.playezu.com/193563.html
- 距离优先:距离操作楼层更近的电梯会更先收到指令
- 满员不停:电梯满员时,操作的楼层不会停靠
- 无故障:不考虑电梯发生故障的场景
问题:
现在测试者分别站在 1F、B1F,按动按钮来控制电梯,根据以上条件,分析测试场景。文章源自玩技e族-https://www.playezu.com/193563.html
下面是我的回答:
分三种情况:文章源自玩技e族-https://www.playezu.com/193563.html
- 操作者站在 B1F,B1F 只有 “上” 一个按钮,按动 “上”,期待结果就是 A 电梯会开门
- 操作者站在 1F,按 “下” 按钮,由于只有 A 电梯能到 B1F,所以期待结果也是 A 电梯会开门
- 操作者站在 1F,按 “上” 按钮,期待结果是 A 或者 B 其中一个门会打开
对于 “满员不停” 这种情况,我举了一个极端例子,就是电梯 A 每次经过 1F 的时候都是满员的(包括从高楼层下降到 B1F,和从 B1F 升到高楼层),这样电梯 A 的门可能始终不会被开启,但这是极端情况,现实中不太可能出现文章源自玩技e族-https://www.playezu.com/193563.html
关于 “距离优先”,我事先跟面试官确认过,人站在外面,完全没有办法得知电梯的具体运行情况(除非电梯已经在 1F 并且门已经打开了)文章源自玩技e族-https://www.playezu.com/193563.html
面试官的回应:
面试官表示对于 “距离优先” 这个条件,有办法通过计算来覆盖到。文章源自玩技e族-https://www.playezu.com/193563.html
软件功能测试用例文章源自玩技e族-https://www.playezu.com/193563.html 文章源自玩技e族-https://www.playezu.com/193563.html
未知地区 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 的电梯外部按按钮外,还有什么控制手段,感觉好多东西没有交代,需要去确认。大佬这是什么工具 我最大的疑问其实是,怎么在几乎完全不知道电梯内部运行状况的情况下,又能测到电梯调度算法。。xmind这种 ,列出大概思路,根据已知条件,列出几点你觉得需求不清晰的点,也是加分项(说明,你思考了)哥 一般面试容易考到的用例设计场景有哪些呢?我现在听过的有登录窗口,一个杯子,一支笔,电梯。我想提前思考下,到时候面试的时候回答起来会稍微流利一点 我提的这个方案算可以么?几乎完全不知道 是指其他楼层吧,如果电梯是在 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 楼后 会打开吗,如果打开,应该往上还是继续往下?(虽然生活中是 没超员的情况下 是继续往下)
所以 感觉还是得需求明确,不然测试侧 没标准,就很难达到预期目标