4. 测试程序开发流程:从需求到交付的完整路径
做过几年ATE的人都知道,写测试程序最怕的不是代码难写,而是流程没走对。我见过不少新人上来就撸代码,结果测试方案一改,整个程序推倒重来。说白了,测试程序开发是个系统工程,得有章法。
这套流程我概括成四个阶段:需求分析 → 测试方案 → 代码实现 → 调试验证。听起来简单?每个阶段里都是坑。今天我就把这四个阶段掰开揉碎讲一遍。
核心观点:流程是质量的保障。跳过任何一步,后面都要花十倍的精力补回来。
4.1 需求分析:别急着动手,先搞清楚要测什么
需求分析是地基。地基歪了,后面全是歪的。我个人习惯拿到一份新项目的资料后,先花半天时间把下面这几样东西理清楚:
- 芯片数据手册——重点关注电气特性、时序参数、测试条件。
- ATE机型约束——通道数够不够?电源电流上限够吗?时钟频率匹配吗?
- 良率目标与测试时间——量产测试通常要求单颗芯片测试时间控制在几十毫秒以内,这直接影响测试方案的选择。
- 客户或项目组提供的测试需求清单——有时候他们只写“测一下功能”,你得把隐含的要求挖出来。
需求分析完成后,你应当输出一份测试需求文档,至少包含:测试项清单、每项测试的判据(limits)、测试条件(电压、温度、时钟频率等)。这份文档需要与设计团队、产品工程师一起评审签字。嗯,签字这一步很多人嫌麻烦就跳过了,但出了问题连个依据都没有。
4.2 测试方案:把需求翻译成ATE能懂的语言
测试方案是连接“测什么”和“怎么测”的桥梁。说白了,就是根据ATE的能力给每个测试项设计实现方法。
我举个例子:DC测试中的VOH(输出高电平电压)测试。需求文档上说:VOH最小值4.5V,测试条件IOH=-4mA。怎么测?
- 先把输出引脚连接到PMU(参数测量单元)。
- 设置PMU为电流源模式,强制电流-4mA(拉电流)。
- 测量该引脚对地的电压。
- 如果电压≥4.5V,PASS;否则FAIL。
方案设计要权衡精度和速度。你想想看,同样的测试项可以用PMU测,也可以用数字化通道配合比较器测。PMU精度高但慢,数字化通道快但精度低。量产测试通常选后者——牺牲一点点精度,换取成倍的速度提升。
💡 个人经验:在测试方案阶段,我习惯画一张测试时序图。把每个测试项的PAT(Pattern)时序、电源上电顺序、IO切换状态画出来。虽然费时间,但调试时能省不少力气。
方案输出物是一份测试方案规范,包括:每个测试项对应的ATE资源分配、流程图、时序图、关键参数预估值(比如测试时间、电流需求)。这份文档也要评审。我记得有一次评审会上,一位老工程师指着我的方案问:“你这个PMU切换时间设成了10ms,但ATE规格书里写的是5ms,你写错了。” 如果不是评审,程序写好后到调试才发现,那多尴尬。
4.3 代码实现:把方案写成ATE能执行的指令
代码实现阶段,不同的ATE平台有不同语言。比如Teradyne用IG-XL(C#),Advantest用TDL或SmarTest(C++),Chroma用Python。但核心逻辑是相通的:
- 初始化:加载pattern、设置电源电压、配置定时和电平。
- 执行测试项:按方案写的顺序,调用API完成每个测试。
- 数据采集与判断:读取结果,与limits对比,输出PASS/FAIL。
- 结果记录:把bin信息、测量值写入datalog。
我习惯把测试代码组织成三段式结构:
// 1. 配置段
SetSupplyVoltage("VDD", 3.3);
SetSupplyCurrentLimit("VDD", 500e-3);
LoadPattern("func_test.pat");
// 2. 测试循环段
for (int site = 0; site < numSites; site++)
{
double voh = MeasureVOH(site, "IO_PIN", -4e-3);
bool pass = (voh >= 4.5) ? true : false;
logResult(site, "VOH", voh, pass);
}
// 3. 清理段
TurnOffAllSupplies();
ClosePattern();
注意:代码里不要写死硬编码的 limits。limits 应该从外部配置文件读取,这样修改判据时不需要重新编译。我在项目中吃过这个亏——一个客户要求批量改limit,我改了一百多个文件,眼睛都花了。
写代码时还要注意并行测试站点索引管理。现代ATE都支持多site并行测试,但每个site的通道映射不一样,代码里要预留site偏移。
4.4 调试验证:程序写完了?这只是开始
调试验证阶段,我会分三步走:
| 步骤 | 做什么 | 典型问题 |
|---|---|---|
| 第一步:硬件联调 | 先不接芯片,用短路板或校准板验证ATE通道、电源、继电器是否正常。 | PMU测量值与万用表读数不一致(通常是负载效应或线缆压降)。 |
| 第二步:单颗芯片调试 | 用一颗已知良品芯片跑完所有测试项,看是否能PASS。 | 功能pattern时序不匹配、limits设置过严导致良品FAIL。 |
| 第三步:多site并行调试 | 装上所有DUT,检查并行测试是否有串扰或电压跌落。 | 某site电源电压被相邻site的大电流拉低,导致测试结果不一致。 |
调试验证最忌讳“只跑一轮就收工”。我建议至少做以下几项验证:
- 重复性验证:对同一颗芯片连续测10次,看测量值波动范围是否在规格内。
- 极限验证:把电压、温度调到规格边界,看程序是否还能稳定工作。
- guardband验证:判断时是否留了足够的余量?我习惯留3σ的guardband。
调试验证结束后,你还需要输出一份测试程序Release note,写明:测试项列表、版本号、验证结果汇总、已知限制(比如某些条件下测量精度会下降)。这份文档是交接给产线工程师的最终凭证。
💡 总结性建议:这四阶段走完,你的测试程序才算是真正“可交付”的状态。别图快,别省步骤。我见过的最惨案例,就是有人跳过需求分析直接写代码,结果写了大半个月的程序跟客户要测的东西完全对不上,从头返工。你想想看,省那半天需求分析,值吗?