2、需求阶段介入:如何从测试视角评审需求规格,识别模糊与不可测需求

很多团队把测试当成开发完成后的「质检员」。说实话,这是最亏的做法。我见过太多项目,需求文档写得漂漂亮亮,一到测试环节就发现根本没法测——要么条件模糊,要么指标缺失,要么逻辑矛盾。这时候再回头改需求,成本至少翻三倍。

我个人习惯是:需求评审会,测试必须坐第一排。不是去旁听,是去「找茬」的。你想想看,如果一段需求连测试都无法设计用例,那开发怎么可能写对代码?

2.1 模糊需求的三大典型特征

我在项目中总结了一套快速识别模糊需求的方法。说白了,就是看需求描述里有没有这三个「坑」:

特征 典型表述 问题本质
定性无定量 「响应速度要快」「功耗要低」 缺少可测量的数值边界
条件不完整 「异常时自动复位」 未定义「异常」的具体触发条件
逻辑有歧义 「优先处理高优先级中断」 未说明同优先级时的仲裁策略

核心原则:一条合格的需求,必须能回答三个问题——「输入是什么?」「输出是什么?」「边界在哪里?」。但凡有一个答不上来,就是模糊需求。

2.2 不可测需求的识别方法

什么叫不可测?不是测不了,是测了也没法判断对错。举个例子,需求写「系统运行稳定」。什么叫稳定?跑一小时不崩算稳定,还是跑一年不崩算稳定?这种需求,你写测试用例的时候根本没法写 pass/fail 标准。

我曾经在一个车载项目中遇到过这样的需求:「CAN 总线通信应具有高可靠性」。产品经理觉得写得很清楚,但测试团队直接懵了——「高可靠性」是多少?99.9% 还是 99.999%?误码率要求是多少?后来我们硬是拉着架构师重新定义,改成了「连续 72 小时通信,误码率低于 10⁻⁷」。这才算可测。

识别不可测需求,我建议用这个清单逐条过:

  1. 有没有明确的通过/失败判据? 没有 → 不可测
  2. 测试条件是否可复现? 依赖「偶然事件」→ 不可测
  3. 测量手段是否具备? 需要实验室没有的仪器 → 不可测
  4. 指标是否覆盖全场景? 只写了常温,没写高低温 → 不完整
  5. 时序要求是否明确? 「尽快」「立即」→ 不可测

注意:不可测需求不等于错误需求。它只是「当前描述形式下无法验证」。测试工程师的职责是把它转化成可测的形式,而不是直接打回。我曾经见过测试和产品吵了一个月,最后发现双方说的其实是同一件事,只是表达方式不同。

2.3 测试视角的需求评审 checklist

我每次参加需求评审,手里都会拿一份 checklist。不是死板地逐条打勾,而是用它来提醒自己别漏掉关键点。下面这份清单,是我这些年迭代下来的版本:

评审维度 检查项 常见问题
功能完整性 所有输入组合是否都有定义? 遗漏边界值、非法输入处理
性能可测性 性能指标是否有数值上限? 「尽可能快」「尽量低」
时序明确性 时序约束是否量化? 「立即响应」「稍后处理」
异常处理 异常场景是否枚举完整? 只写了正常流程,缺异常分支
接口一致性 模块间接口定义是否对齐? 信号命名、时序、电平不匹配
环境依赖性 是否依赖特定硬件或软件版本? 未注明依赖版本号

一个小技巧:评审时别只看需求文档本身。把需求里的关键参数提取出来,列一张「参数-范围-精度-测试方法」对照表。如果某个参数填不上测试方法,那这个需求大概率有问题。我习惯在评审会前花 30 分钟做这件事,会上直接抛出这张表,效率极高。

2.4 需求评审中的测试前置策略流程

光有清单还不够,得有流程。我建议测试团队在需求阶段按下面这个流程走一遍:

测试前置策略:需求评审流程 接收需求文档 提取可测性要素 对照Checklist审查 通过 → 进入设计阶段 不通过 → 标记问题 与需求方协商修改 修改后重新评审 关键:不通过的需求必须闭环,不能「先做再说」—— 否则测试阶段会加倍偿还

2.5 实战案例:一个模糊需求的「解剖」

拿我最近参与的一个项目举例。需求原文是这么写的:

「当系统检测到电源电压异常时,应自动进入保护模式,并记录故障信息。」

乍一看没问题对吧?但用测试视角一拆,全是坑:

  • 「电源电压异常」—— 多少伏算异常?是低于 3.0V 还是高于 3.6V?有没有迟滞?
  • 「自动进入保护模式」—— 保护模式具体做什么?切断输出?降频?还是只报警?
  • 「记录故障信息」—— 记录在哪里?EEPROM 还是 RAM?掉电后还在不在?

我们测试团队在评审会上直接列了一张「需求澄清表」,一条一条跟产品经理和开发对齐。最终改成了这样:

「当 VCC 低于 2.8V 或高于 3.6V 持续超过 2ms 时,系统应在 100μs 内将 GPIO_OUT 拉低,
同时将故障码 0xE1 写入 EEPROM 地址 0x0010。EEPROM 数据在掉电后需保持至少 10 年。」

你看,同样是描述一件事,后者每条都能写测试用例。这就是测试前置的价值。

总结一句话:需求阶段的测试介入,不是给开发添乱,是帮整个项目省钱。一个在需求阶段发现的问题,修复成本是编码阶段的 1/10,是测试阶段的 1/50,是量产后的 1/500。这笔账,算清楚你就知道该不该在需求评审上花时间了。