1. 课程导论:为什么需要集成测试策略?

各位同学好,我是这门课的主讲。在嵌入式领域摸爬滚打了十几年,我见过太多项目在集成阶段翻车。今天咱们就来聊聊,为什么集成测试策略这么重要。

1.1 一个真实的教训

先讲个我自己的故事。几年前,我参与一个车载娱乐系统的项目。单模块测试都过了——CAN驱动没问题,音频解码没问题,UI渲染也没问题。结果一集成,车机启动时黑屏三秒。查了整整两周,才发现是CAN中断优先级和音频DMA抢总线,导致初始化时序错乱。

教训:单模块通过 ≠ 系统能跑。集成测试不是可选项,是必选项。

1.2 嵌入式系统的特殊性

为什么嵌入式集成测试比纯软件更难?我总结了几点:

特性 对集成测试的影响
资源受限 RAM/Flash小,跑不了完整测试框架
实时性要求 时序问题只能在真实硬件上复现
硬件耦合 传感器、执行器、外设的交互不可模拟
并发中断 中断嵌套、优先级反转,软件层面很难覆盖
多厂商SDK 不同芯片厂商的驱动质量参差不齐

说白了,嵌入式系统是软硬一体的。你没法像纯软件那样,在IDE里点个运行就完事。我曾经在一个IoT项目中,因为Flash驱动和RTOS的调度器冲突,导致OTA升级成功率只有60%。这种问题,单元测试根本测不出来。

1.3 集成测试策略要解决什么?

我个人习惯把集成测试策略拆成三个核心问题:

  • 测什么?——接口边界、数据流、时序、异常恢复
  • 怎么测?——桩模块、硬件在环、自动化脚本
  • 什么时候测?——每日构建、特性冻结后、回归验证

你想想看,如果没有策略,团队很容易陷入「测了但没覆盖关键路径」的窘境。我见过一个团队,集成测试用例写了300条,结果最核心的CAN-FD总线竞争场景一条都没有。嗯,这就是典型的「有测试,无策略」。

1.4 课程目标与学习路径

这门课的目标很明确:让你能独立设计一套可落地的嵌入式集成测试方案。不是讲理论,是讲实战。

整个课程分四个阶段:

  1. 基础篇(第1-8章):接口调试方法、桩模块设计、测试框架选型
  2. 实战篇(第9-18章):CAN/I2C/SPI/UART等总线测试、中断测试、时序测试
  3. 进阶篇(第19-25章):自动化测试、持续集成、硬件在环
  4. 案例篇(第26-30章):车载、IoT、工业控制三个完整案例
建议学习路径:如果你刚接触集成测试,按顺序来。如果你有经验,可以直接跳到实战篇,但基础篇的「接口调试方法论」我建议还是过一遍——那里有我踩过的坑。

1.5 集成测试的核心流程

下面这张图,是我自己总结的集成测试五步法。每次做新项目,我都会按这个流程走一遍。

集成测试核心流程 1. 接口分析 2. 桩模块设计 3. 用例设计 4. 执行与调试 5. 回归验证 反馈迭代 每个步骤都包含「接口契约检查」和「异常注入」两个子活动

这个流程看起来简单,但每一步都有坑。比如「桩模块设计」,我见过有人把桩模块写得比真实模块还复杂,结果测试环境比生产环境还难维护。记住:桩模块的目标是「够用就好」,不是「完美模拟」。

1.6 你需要准备什么?

学这门课之前,我建议你具备以下基础:

  • 熟悉C语言,能看懂指针、结构体、回调函数
  • 用过至少一种MCU(STM32、NXP、TI等)
  • 了解基本的RTOS概念(任务、信号量、队列)
  • 有一块开发板(课程案例基于STM32F4,但原理通用)
小提示:如果你没有开发板,也可以用QEMU模拟STM32。我在第3章会讲怎么搭模拟环境。不过说实话,有些时序问题还是得在真板上才能复现。

1.7 写在开始之前

做集成测试,心态很重要。我见过太多人把测试当成「找茬」,其实测试是「验证理解」。你写测试用例的过程,就是在逼自己把接口契约想清楚。

我记得刚入行时,带我的老工程师说过一句话:「集成测试不是证明代码没问题,而是证明你对系统的理解没问题。」这句话我一直记着。