1、测试前置思维:为什么测试要左移?
做硬件设计这么多年,我见过太多这样的场景:
项目 deadline 快到了,板子打回来,一上电,冒烟了。然后整个团队开始疯狂查问题,加班加点,改版,再打样,再测试……
为什么会这样?
说白了,我们把测试想得太简单了。总觉得「先设计,后测试」是天经地义的。但实际干过几个项目你就会发现——越晚发现问题,代价越大。
我个人习惯,在设计阶段就开始想测试的事。这不是什么高深理论,就是吃过亏之后的经验。
传统V模型的痛点
先看看我们最熟悉的V模型。左边是需求、设计、编码,右边是单元测试、集成测试、系统测试。看起来挺对称,对吧?
但实际跑起来,问题就来了:
- 测试永远在最后——设计做完了,板子打回来了,才轮到测试上场
- 发现问题太晚——一个原理图上的低级错误,等到系统测试才发现,改版周期至少两周
- 测试人员像「背锅侠」——时间紧、任务重,测不完就是测试的锅
核心矛盾:V模型把测试当作「终点检查」,而不是「过程控制」。你想想看,盖房子的时候,是等封顶了再检查地基,还是一层一层地验?
我记得有一次做电源管理芯片的测试。原理图评审时,我总觉得某个LDO的反馈电阻分压比不对,但设计同事说「没问题,参考手册算的」。结果板子回来,输出电压偏差了15%。改版、重新打样、重新焊接,两周时间就这么没了。
如果当时在原理图阶段就搭个仿真,或者做个快速验证,这个坑完全可以避开。
测试前置模型:把测试向左移
测试前置,也叫「左移测试」。核心思想就一句话:测试活动越早介入越好。
不是等板子回来了再测,而是在需求阶段、设计阶段、仿真阶段,就把测试做进去。
我画了一张对比图,你可以直观感受一下:
测试前置到底「前」在哪?
我总结了一下,测试前置主要体现在三个层面:
| 阶段 | 传统做法 | 测试前置做法 |
|---|---|---|
| 需求阶段 | 产品经理写需求,开发看需求,测试等需求定稿 | 测试参与需求评审,提前识别不可测需求,输出测试要点 |
| 设计阶段 | 原理图/PCB设计完,打样回来再测 | 设计过程中同步搭建测试环境,做仿真验证,写测试用例 |
| 实现阶段 | 编码/焊接完成,开始功能测试 | 边实现边测试,持续集成,快速反馈 |
我的经验:在需求阶段就让测试介入,看起来是「多了一步」,实际上能省掉后面至少30%的返工时间。我曾经在一个FPGA项目中,测试在需求评审时发现了一个时序约束的歧义,当场澄清,避免了后面整整一周的调试。
为什么很多人不愿意左移?
你可能会问:既然左移这么好,为什么很多团队还是老样子?
嗯,这里有几个现实原因:
- 思维惯性——「一直都是这么干的,改什么改?」
- 短期压力——「项目这么紧,哪有时间做测试设计?」
- 角色固化——「测试就是测板子的,设计就是画原理图的,各管各的」
但我想说的是:你越没时间做测试前置,后面花的时间就越多。这是个典型的「磨刀不误砍柴工」的道理。
避坑提醒:我曾经在一个高速数字电路项目中,因为赶进度跳过了信号完整性仿真,直接投板。结果板子回来,DDR跑不到目标频率,眼图一团糟。最后花了三周时间查问题、改版、重新验证。如果当时花两天做仿真,这些全都能避免。
测试前置的收益,用数据说话
我整理了一个对比数据,你可以看看:
| 缺陷发现阶段 | 相对修复成本 | 测试前置可避免比例 |
|---|---|---|
| 需求阶段 | 1x | — |
| 设计阶段 | 3-5x | 60% |
| 实现阶段 | 10x | 40% |
| 系统测试 | 30-50x | 20% |
| 现场/客户 | 100x+ | 几乎无法避免 |
数据来源是我自己多个项目的统计,不一定精确,但趋势很明显:越早发现问题,成本越低。
小结
测试前置不是什么新概念,说白了就是把测试思维融入到设计的每一个环节。不是等板子回来了再想怎么测,而是在画原理图的时候,就已经想好了测试点、测试方法和测试环境。
我个人习惯,每次开始一个新项目,第一件事不是打开EDA工具,而是先写一份测试策略文档。哪怕只有一页纸,也能帮我把思路理清楚。