韩师傅就是我

测试开发工程师

如何测试电梯

前言

有一道著名的面试题是,如何测试电梯。

我曾经一度觉得此题不靠谱,毕竟不了解内部实现原理,不太好设计测试用例。

后来我慢慢发现,如果从计算模型的角度来考察,这是一道很好的面试题。

虽然我们并不了解电梯的工程实现,但是电梯的工作逻辑我们是清楚的(即电梯什么时候开门什么时候关门,你按一个楼层它应该上升还是下降,这些任谁都是清楚的)我们可以把电梯抽象成一个计算模型——“有限状态机”。设计有限状态机来模拟电梯的工作,并针对该计算模型设计一些测试用例,是很好的思维训练。

清晰了目的,下边就是大模型帮我实现的有限状态机和测试用例并不严谨,是这么个意思,主要是便于大家理解我的思路。真想要在面试中用起来,还是需要你自己开动脑筋。

设计有限状态机模拟电梯工作

有限状态机简单的说,就是给系统一个输入,系统根据当前状态和输入,输出下一个状态。

拿电梯做个例子,比如输入是按下按键3,当前状态是在1楼,那么电梯就上升到3楼;同样是按下按键3,如果当前状态是在4楼,那么电梯的下一个状态就是下降到3楼。

了解了有限状态机,我们就看下大模型给电梯设计了哪些状态和输入事件。(再次强调,以下非常的不严谨,仅是为了方便你理解,如果直接用于面试后果可能要自负,捂脸表情)

状态(大模型假设电梯有5种状态

  1. 停止状态(Stopped)
    • 电梯静止不动,门关闭。
    • 可以接受用户的楼层选择。
  2. 上升状态(Ascending)
    • 电梯正在向上移动。
    • 门关闭。
  3. 下降状态(Descending)
    • 电梯正在向下移动。
    • 门关闭。
  4. 开门状态(Opening)
    • 电梯到达指定楼层,门正在打开。
  5. 关门状态(Closing)
    • 门正在关闭,准备移动到下一个目的地。

事件(大模型假设电梯有6种输入

  1. 启动上升(Start Ascending)
  2. 启动下降(Start Descending)
  3. 停止(Stop)
  4. 到达楼层(Arrive at Floor)
  5. 开门请求(Open Door Request)
  6. 关门请求(Close Door Request)

状态流转(大模型设计电梯在各种状态间流转的逻辑

根据上图,大模型设计的测试用例如下

测试用例 1: 基本上升和下降

  1. 1.初始状态: 停止状态
  2. 2.事件: 用户选择上升到5楼
  3. 3.预期结果: 电梯进入上升状态,到达5楼后进入开门状态,门打开,然后用户选择回到1楼,电梯进入下降状态,到达1楼后进入开门状态,门打开。

测试用例 2: 多楼层请求

  1. 1.初始状态: 停止状态
  2. 2.事件: 用户选择上升到3楼,然后选择上升到5楼
  3. 3.预期结果: 电梯进入上升状态,到达3楼后进入开门状态,门打开,然后继续上升,到达5楼后进入开门状态,门打开。

测试用例 3: 紧急停止

  1. 1.初始状态: 上升状态(正在向4楼移动)
  2. 2.事件: 用户按下紧急停止按钮
  3. 3.预期结果: 电梯进入停止状态,门保持关闭。

测试用例 4: 门操作

  1. 1.初始状态: 停止状态
  2. 2.事件: 用户选择上升到2楼,电梯到达2楼后进入开门状态,用户按下关门按钮
  3. 3.预期结果: 电梯进入关门状态,门关闭,然后电梯保持停止状态。

测试用例 5: 连续请求

  1. 1.初始状态: 停止状态
  2. 2.事件: 用户选择上升到3楼,然后立即选择下降到1楼
  3. 3.预期结果: 电梯进入上升状态,到达3楼后进入开门状态,门打开,然后进入下降状态,到达1楼后进入开门状态,门打开。

测试用例 6: 同一层楼的多次请求

  1. 1.初始状态: 停止状态
  2. 2.事件: 用户选择上升到2楼,然后再次选择上升到2楼
  3. 3.预期结果: 电梯进入上升状态,到达2楼后进入开门状态,门打开,然后保持停止状态。

测试用例 7: 无效请求

  1. 1.初始状态: 上升状态(正在向3楼移动)
  2. 2.事件: 用户选择下降到1楼
  3. 3.预期结果: 电梯忽略该请求,继续上升到达3楼后进入开门状态,门打开。

测试用例 8: 多个用户请求

  1. 1.初始状态: 停止状态
  2. 2.事件: 用户A选择上升到4楼,用户B选择下降到2楼
  3. 3.预期结果: 电梯根据内部算法决定先处理哪个请求,假设先处理上升请求,电梯进入上升状态,到达4楼后进入开门状态,门打开,然后进入下降状态,到达2楼后进入开门状态,门打开。

 

好了,如果你对于测试一个电梯这种面试题,实在不知道咋回答,不妨试试我给你提供的这条思路吧。

如何测试电梯

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Scroll to top