1、测试前置思维:为什么测试要左移?

做硬件设计这么多年,我见过太多这样的场景:

项目 deadline 快到了,板子打回来,一上电,冒烟了。然后整个团队开始疯狂查问题,加班加点,改版,再打样,再测试……

为什么会这样?

说白了,我们把测试想得太简单了。总觉得「先设计,后测试」是天经地义的。但实际干过几个项目你就会发现——越晚发现问题,代价越大。

我个人习惯,在设计阶段就开始想测试的事。这不是什么高深理论,就是吃过亏之后的经验。

传统V模型的痛点

先看看我们最熟悉的V模型。左边是需求、设计、编码,右边是单元测试、集成测试、系统测试。看起来挺对称,对吧?

但实际跑起来,问题就来了:

  • 测试永远在最后——设计做完了,板子打回来了,才轮到测试上场
  • 发现问题太晚——一个原理图上的低级错误,等到系统测试才发现,改版周期至少两周
  • 测试人员像「背锅侠」——时间紧、任务重,测不完就是测试的锅

核心矛盾:V模型把测试当作「终点检查」,而不是「过程控制」。你想想看,盖房子的时候,是等封顶了再检查地基,还是一层一层地验?

我记得有一次做电源管理芯片的测试。原理图评审时,我总觉得某个LDO的反馈电阻分压比不对,但设计同事说「没问题,参考手册算的」。结果板子回来,输出电压偏差了15%。改版、重新打样、重新焊接,两周时间就这么没了。

如果当时在原理图阶段就搭个仿真,或者做个快速验证,这个坑完全可以避开。

测试前置模型:把测试向左移

测试前置,也叫「左移测试」。核心思想就一句话:测试活动越早介入越好。

不是等板子回来了再测,而是在需求阶段、设计阶段、仿真阶段,就把测试做进去。

我画了一张对比图,你可以直观感受一下:

传统V模型 vs 测试前置模型 传统V模型 需求分析 系统设计 详细设计 编码/实现 验收测试 系统测试 集成测试 单元测试 ← 问题发现晚,修复成本高 → 测试前置模型 需求+测试设计 设计+测试用例 仿真+快速验证 实现+持续测试 测试计划 测试设计 测试开发 测试执行 ← 问题发现早,修复成本低 → 💡 核心差异: 传统V模型:测试是「终点活动」,问题发现晚,改版成本高 测试前置模型:测试是「伴随活动」,问题发现早,修复成本低

测试前置到底「前」在哪?

我总结了一下,测试前置主要体现在三个层面:

阶段 传统做法 测试前置做法
需求阶段 产品经理写需求,开发看需求,测试等需求定稿 测试参与需求评审,提前识别不可测需求,输出测试要点
设计阶段 原理图/PCB设计完,打样回来再测 设计过程中同步搭建测试环境,做仿真验证,写测试用例
实现阶段 编码/焊接完成,开始功能测试 边实现边测试,持续集成,快速反馈

我的经验:在需求阶段就让测试介入,看起来是「多了一步」,实际上能省掉后面至少30%的返工时间。我曾经在一个FPGA项目中,测试在需求评审时发现了一个时序约束的歧义,当场澄清,避免了后面整整一周的调试。

为什么很多人不愿意左移?

你可能会问:既然左移这么好,为什么很多团队还是老样子?

嗯,这里有几个现实原因:

  • 思维惯性——「一直都是这么干的,改什么改?」
  • 短期压力——「项目这么紧,哪有时间做测试设计?」
  • 角色固化——「测试就是测板子的,设计就是画原理图的,各管各的」

但我想说的是:你越没时间做测试前置,后面花的时间就越多。这是个典型的「磨刀不误砍柴工」的道理。

避坑提醒:我曾经在一个高速数字电路项目中,因为赶进度跳过了信号完整性仿真,直接投板。结果板子回来,DDR跑不到目标频率,眼图一团糟。最后花了三周时间查问题、改版、重新验证。如果当时花两天做仿真,这些全都能避免。

测试前置的收益,用数据说话

我整理了一个对比数据,你可以看看:

缺陷发现阶段 相对修复成本 测试前置可避免比例
需求阶段 1x —
设计阶段 3-5x 60%
实现阶段 10x 40%
系统测试 30-50x 20%
现场/客户 100x+ 几乎无法避免

数据来源是我自己多个项目的统计,不一定精确,但趋势很明显:越早发现问题,成本越低。

小结

测试前置不是什么新概念,说白了就是把测试思维融入到设计的每一个环节。不是等板子回来了再想怎么测,而是在画原理图的时候,就已经想好了测试点、测试方法和测试环境。

我个人习惯,每次开始一个新项目,第一件事不是打开EDA工具,而是先写一份测试策略文档。哪怕只有一页纸,也能帮我把思路理清楚。