1. 测试方案概述:量产测试的目的、范围、策略与覆盖率

大家好,我是你们的老朋友。今天咱们聊聊量产测试方案的开篇——测试方案概述。说实话,我见过太多工程师一上来就闷头写测试用例,结果测到一半发现方向偏了。所以,开篇定调很重要。

量产测试,说白了就是给产品做“体检”。不是实验室里那种精雕细琢的验证,而是流水线上快速、高效、不漏检的筛查。我个人的习惯是,先想清楚三个问题:为什么测?测什么?怎么测?

1.1 量产测试的目的

目的其实很单纯——把坏的挑出来,把好的放过去。但这里有个坑:你不可能把每个芯片都测到100%完美,成本和时间都不允许。

我记得有一次,一个同事非要给每个控制器做48小时老化测试,结果产能直接腰斩。老板脸都绿了。后来我们重新梳理了测试目的:

  • 筛选早期失效:生产过程中的焊接不良、元器件批次问题、装配缺陷
  • 验证功能完整性:确保每个IO口、每个通信接口、每个传感器通道都能正常工作
  • 保证一致性:同一批次的产品,性能参数不能差太多
  • 降低售后成本:出厂前多花1块钱测试,可能省下售后100块的维修费

核心原则:测试不是为了让产品更好,而是为了证明产品已经够好。

1.2 测试范围

测试范围怎么定?我一般会画一个圈,圈里是必须测的,圈外是可选的。这个圈取决于产品等级和客户要求。

举个例子,汽车级的控制器和消费级的玩具控制器,测试范围天差地别。汽车级你可能要测-40℃到125℃全温区,玩具级室温下跑一遍功能就差不多了。

通常来说,量产测试的范围包括:

  • 电气参数:电压、电流、功耗、阻抗
  • 数字功能:GPIO、SPI、I2C、UART、CAN等通信接口
  • 模拟功能:ADC精度、DAC输出、比较器阈值
  • 时序参数:时钟频率、信号上升/下降时间、建立保持时间
  • 存储单元:Flash读写、EEPROM保持、RAM自检
  • 边界条件:最低供电电压、最高工作频率、最大负载

我的经验:测试范围宁宽勿窄,但要有优先级。先把“不测就会死”的项列出来,再考虑“测了更放心”的项。

1.3 测试策略:ICT / FCT / 老化

测试策略是量产测试的骨架。我习惯把测试分成三个层次,就像盖房子:

ICT(在线测试)—— 地基

ICT主要测焊接质量和元器件安装。说白了就是检查有没有虚焊、短路、漏焊、错件。我在项目中遇到过一批控制器,ICT死活过不去,后来发现是PCB焊盘氧化了。如果没有ICT这道关卡,这批板子流到后面FCT,排查起来就麻烦了。

ICT能测什么?

  • 电阻、电容、电感的值
  • 二极管、三极管的极性
  • IC的电源对地短路
  • 开短路测试(Open/Short)

FCT(功能测试)—— 主体结构

FCT是重头戏。它模拟产品实际工作场景,验证所有功能是否正常。我一般会写一个测试序列,让控制器自动跑一遍:

// 伪代码示例:FCT测试序列
void FCT_TestSequence(void)
{
    // 1. 上电自检
    if (PowerOnSelfTest() != PASS)  FAIL("POWER_FAIL");
    
    // 2. 通信接口测试
    if (SPI_LoopbackTest() != PASS) FAIL("SPI_FAIL");
    if (I2C_ScanDevices() != PASS)  FAIL("I2C_FAIL");
    
    // 3. 模拟通道测试
    for (ch = 0; ch < ADC_CHANNELS; ch++) {
        if (ADC_ReadChannel(ch) < MIN_THRESHOLD) FAIL("ADC_CH%d_LOW", ch);
    }
    
    // 4. 输出驱动测试
    GPIO_SetAllOutputs(HIGH);
    delay_ms(100);
    if (GPIO_ReadAllInputs() != ALL_HIGH) FAIL("OUTPUT_FAIL");
    
    // 5. 存储测试
    if (Flash_WriteReadTest(0x1000, 0xAA55) != PASS) FAIL("FLASH_FAIL");
    
    PASS("ALL_TESTS_PASSED");
}

老化测试(Burn-in)—— 装修验收

老化测试不是每个产品都做。我建议抽检,而不是全检。全检老化成本太高,而且很多消费类产品根本不需要。

什么时候必须做老化?

  • 军工、航天、医疗等高可靠性要求的产品
  • 新物料、新工艺导入后的首批验证
  • 客户明确要求(比如车厂Tier1的PPAP要求)

避坑指南:我曾经见过一个团队,为了省事把所有产品都做24小时老化,结果老化房不够用,产能卡死。后来改成抽检+加严FCT,问题反而更早暴露了。记住:老化是手段,不是目的。

1.4 测试覆盖率定义

测试覆盖率,这是个容易扯皮的概念。有人说“我测了所有IO口”,但没测IO口的驱动能力;有人说“我测了所有功能”,但没测边界条件。

我一般把测试覆盖率分成几个维度:

覆盖率类型 定义 我的建议值
引脚覆盖率 每个引脚是否都被激励和测量过 ≥95%
功能覆盖率 每个功能模块是否都被执行过 100%
参数覆盖率 关键电气参数是否在规格范围内 ≥90%
故障覆盖率 测试能检测到的潜在故障比例 ≥85%
边界覆盖率 是否测试了极限条件(高低温、高低压) 视产品等级而定

你想想看,如果引脚覆盖率只有80%,那意味着每5个引脚就有1个没测到。万一那个引脚正好是关键的复位引脚呢?后果不堪设想。

我的习惯:写测试方案时,先列一个“测试覆盖矩阵”,横轴是测试项,纵轴是故障模式。每个交叉点打勾或打叉,这样一眼就能看出哪里没覆盖到。

1.5 知识体系总览

下面这张图是我自己总结的测试方案知识体系,你可以把它当作本章的“地图”:

量产测试方案 测试目的 筛选早期失效 验证功能完整性 保证一致性 降低售后成本 测试范围 电气参数 数字/模拟功能 时序参数 存储/边界条件 测试策略 ICT(在线测试) FCT(功能测试) 老化测试(抽检) 测试覆盖率 引脚覆盖率 ≥95% 功能覆盖率 100% 参数覆盖率 ≥90% 故障覆盖率 ≥85% 核心:把坏的挑出来,把好的放过去

这张图把测试方案拆成了四个维度:目的、范围、策略、覆盖率。每个维度之间是相互关联的。比如,测试范围决定了你要用哪种策略,而策略又直接影响覆盖率。

一个小建议:刚开始写测试方案时,别急着写代码。先把这张图画出来,跟团队过一遍。方向对了,后面的事就顺了。

好了,这一章就聊到这儿。测试方案概述是整门课的基石,后面的章节会逐一展开每个细节。记住:量产测试不是炫技,是实实在在的工程实践。


公众号:蓝海资料掘金营,微信deep3321