3. 需求分析与评审:从需求文档中提取测试点,需求可测性分析

说实话,很多测试新人拿到需求文档,第一反应就是「直接写用例」。我早年也犯过这个错——需求文档翻两页就开始列步骤,结果测到一半发现需求根本没说清楚边界条件,返工改用例改到崩溃。

后来我养成了一个习惯:先做需求可测性分析,再提取测试点,最后才动笔写用例。这个顺序,能帮你省掉至少 30% 的返工时间。

3.1 需求文档里到底藏着什么?

一份规范的嵌入式需求文档,通常包含这几块:

需求类型 常见内容 测试关注点
功能需求 按键响应、LED 显示、数据采集 输入输出关系、时序、异常处理
性能需求 采样率 100Hz、响应时间 < 50ms 边界值、压力、长时间稳定性
接口需求 UART 波特率 115200、SPI 模式 0 协议一致性、电气特性、容错
环境需求 工作温度 -20℃ ~ 85℃ 高低温、湿度、振动
安全需求 看门狗超时复位、非法指令捕获 故障注入、恢复时间、冗余切换

你想想看,如果需求里写「按键响应要快」,这能测吗?什么叫快?100ms 算快还是 10ms 算快?不可量化的需求,就是测试的坑。

⚠️ 我曾经踩过的坑: 需求文档写「系统在异常情况下应自动恢复」,没有写恢复时间、没有定义异常类型、没有说明恢复后的状态。我按「能恢复」测了,结果客户验收时拿「恢复时间超过 5 秒」说事,直接打回。从那以后,我见到「应」「宜」「可」这类模糊词,一定会在评审会上追问到底。

3.2 需求可测性分析——四个维度

我个人习惯用四个维度来评估一条需求能不能测:

  1. 明确性:输入、输出、条件、状态是否无歧义?
  2. 可观测性:测试结果能不能通过某种手段(日志、波形、指示灯)被观察到?
  3. 可控制性:测试环境能不能精确控制输入条件?
  4. 可判定性:有没有明确的 pass/fail 标准?

举个例子,需求是「设备在掉电后重新上电,应能恢复到掉电前的状态」。

  • 明确性:掉电前是什么状态?所有状态还是特定状态?——需要细化。
  • 可观测性:上电后通过串口打印状态信息,或者观察 LED 指示。——可以。
  • 可控制性:用程控电源模拟掉电/上电,精确控制掉电时长。——可以。
  • 可判定性:掉电前记录状态 A,上电后读取状态,比对是否一致。——明确。

如果四个维度都 OK,这条需求可以直接提取测试点。如果有一项不满足,必须在评审阶段提出来,不要自己闷头猜。

💡 我的经验: 可测性分析做得好,评审会上你就有底气。我一般会在需求文档旁边用红笔标出「不可测」的需求,评审时一条一条过。产品经理看到你拿数据说话,通常都会配合修改。

3.3 从需求到测试点——三步法

我总结了一个三步法,团队里新人都用这个套路,上手很快。

第一步:拆解需求,提取原子条件

把一条需求拆成「条件 + 动作 + 结果」的最小单元。比如:

需求:当温度超过 85℃ 时,系统应关闭加热器并发出报警。
拆解:
  - 条件:温度 > 85℃
  - 动作:关闭加热器
  - 结果:发出报警(蜂鸣器响 / LED 闪烁)

第二步:对每个原子条件做等价类划分

温度这个条件,可以划分成:

  • 有效等价类:85℃ ~ 125℃(正常工作范围上限)
  • 无效等价类:< 85℃(不触发)
  • 边界值:85℃ 本身、84.9℃、85.1℃

第三步:组合测试点,考虑异常场景

不要只测正常流程。我习惯问自己三个问题:

  • 如果条件刚好在边界上,系统怎么表现?
  • 如果条件快速跳变(比如从 30℃ 瞬间跳到 90℃),系统能正确处理吗?
  • 如果多个条件同时触发(比如温度超限 + 传感器故障),优先级怎么处理?
📌 一个小技巧: 提取测试点时,用「如果…那么…」的句式写出来。比如「如果温度 > 85℃ 且加热器正在工作,那么加热器应在 100ms 内关闭」。这样写出来的测试点,可执行性非常高。

3.4 需求评审——测试视角的「找茬清单」

我参加需求评审时,手里会拿一份清单,逐条核对。这份清单是我多年踩坑总结出来的:

检查项 常见问题 测试视角的提问
边界是否明确 「温度过高时报警」——多高? 阈值是多少?回差是多少?
时序是否清晰 「按键按下后执行动作」——多久算按下? 消抖时间?长按 vs 短按?
异常路径是否覆盖 「通信失败时重试」——重试几次?间隔? 重试耗尽后怎么办?
状态转换是否完整 「进入待机模式」——从哪些状态可以进入? 待机模式下收到唤醒信号,回到哪个状态?
资源约束是否考虑 「记录 1000 条日志」——存满了怎么办? 覆盖旧日志?停止记录?报警?

评审会上,我一般会挑 2-3 个「看起来没问题」的需求,现场做可测性分析演示。比如:

「这条需求写的是‘系统在 5 秒内无操作自动进入休眠’,那我问一下:5 秒是从最后一次操作结束开始算,还是从操作开始算?休眠前要不要保存当前状态?休眠后按哪个键唤醒?唤醒后是回到休眠前的界面还是回到主界面?」

这么一问,产品经理和开发通常会愣住,然后开始翻文档确认。这就是测试的价值——把模糊的需求逼到墙角,让它现出原形。

3.5 知识结构图:需求分析与测试点提取流程

下面这张图是我自己画的,团队培训时一直在用。它把从需求文档到测试点的整个流程串起来了。

需求分析与测试点提取流程 需求分析与测试点提取流程 需求文档 可测性分析(4 维度) 明确性 可观测性 可控制性 可判定性 可测? 是 否 返回修改需求 提取测试点 输出 测试点 = 可执行的最小 验证单元 流程核心:先分析可测性,再提取测试点,不可测的需求退回修改

3.6 实战案例:一个温控系统的需求分析

拿一个真实的温控系统需求来走一遍流程。需求原文:

系统应能根据当前温度自动调节加热器功率,使温度稳定在目标值附近。

这条需求,可测吗?

  • 明确性:❌ 「目标值」是多少?「附近」是多近?±1℃ 还是 ±5℃?
  • 可观测性:✅ 可以通过温度传感器读数观察。
  • 可控制性:✅ 可以用恒温箱设定环境温度。
  • 可判定性:❌ 没有 pass/fail 标准。

评审时我提了修改建议:

修改后:系统应通过 PID 算法调节加热器 PWM 占空比,使温度稳定在目标值 ±1℃ 范围内,
        稳态误差不超过 0.5℃,调节时间不超过 30 秒(从启动到首次进入稳态范围)。

改完之后,测试点就非常清晰了:

  • 目标温度 25℃、50℃、75℃ 下的稳态误差测试
  • 从 0℃ 升温到 50℃ 的调节时间测试
  • 外界扰动(开门、加负载)后的恢复时间测试
  • PWM 占空比输出是否在 0%~100% 范围内
💡 核心原则: 需求文档里每一个「模糊词」,都是测试用例里的一个「漏洞」。你在评审阶段堵住的漏洞越多,测试阶段踩的坑就越少。我见过太多项目因为需求不明确,测试用例写了 500 条,最后发现 200 条都是基于猜测写的,根本没法执行。

好了,这一章的内容就这些。记住:需求分析不是产品经理一个人的事,测试工程师必须从第一天就参与进来。你越早介入,越能掌控质量。