STM32产品程序测试完整指南
一、测试层次分类
1. 单元测试 (Unit Test)
测试最小的代码单元(函数、模块)
测试内容:
- 各个函数的输入输出正确性
- 边界值测试
- 异常参数处理
方法:
// 示例:测试数据处理函数
void test_data_filter(void) {assert(filter(100) == expected_value);assert(filter(0) == 0);assert(filter(-1) == ERROR);
}
工具:
- Unity (C语言单元测试框架)
- CppUTest
- 桌面PC上模拟测试
2. 集成测试 (Integration Test)
测试模块之间的接口和交互
测试内容:
- 模块间数据传递正确性
- 中断和任务间通信
- 驱动与应用层交互
- 外设驱动集成
示例场景:
传感器模块 → 数据处理模块 → 通信模块
检查数据在各模块间传递是否正确
3. 系统测试 (System Test)
测试整个系统的完整功能
测试内容:
- 完整业务流程
- 用户场景模拟
- 系统级性能指标
二、测试类型分类
1. 功能测试 (Functional Test) ⭐ 核心
正常功能测试
- ✅ 各功能按预期工作
- ✅ 输入输出正确
- ✅ 状态机转换正确
异常处理测试
- ❌ 错误输入处理
- ❌ 通信故障处理
- ❌ 传感器故障处理
- ❌ 超时处理
边界测试
// 测试边界条件
- 最小值/最大值
- 零值
- 溢出情况
- 数组越界保护
2. 性能测试 (Performance Test)
时间性能:
- 中断响应时间 (通常要求 <10μs)
- 任务执行时间
- 关键函数耗时
- 实时性要求验证
资源使用:
- Flash使用率 (建议 <80%)
- RAM使用率 (建议 <70%)
- 栈使用情况
- CPU占用率
测试方法:
// 测量函数执行时间
uint32_t start = GetTickCount();
your_function();
uint32_t elapsed = GetTickCount() - start;
3. 稳定性/可靠性测试 ⭐ 重要
长时间运行测试
- 24小时不间断运行
- 72小时压力测试
- 监控内存泄漏
- 监控系统重启次数
循环测试
- 开关机循环 (1000次+)
- 功能重复执行 (10000次+)
- 通信收发循环
压力测试
- 最大负载运行
- 最快速度操作
- 多任务满负荷
4. 电源测试 ⭐ 嵌入式特有
✓ 额定电压测试 (3.3V)
✓ 电压波动测试 (3.0V ~ 3.6V)
✓ 欠压测试 (2.7V ~ 3.0V)
✓ 过压保护测试 (>3.6V)
✓ 上电时序测试
✓ 掉电保护测试
✓ 电源纹波测试
✓ 功耗测试 (各模式下电流)
5. 环境测试
温度测试
- 常温测试 (25℃)
- 低温测试 (-20℃ ~ 0℃)
- 高温测试 (60℃ ~ 85℃)
- 温度循环测试
- 上电温度测试
湿度测试 (如需要)
- 高湿环境运行
振动/冲击测试 (如有机械运动)
6. 兼容性测试
- 不同批次的硬件
- 不同厂商的外设
- 不同版本的协议
- 向后兼容性
7. 安全性测试
✓ 看门狗功能测试- 程序跑飞后能否复位✓ 数据完整性测试- EEPROM/Flash数据校验- CRC校验✓ 访问权限测试- 关键区域保护✓ 故障注入测试- 模拟硬件故障- 模拟通信错误
8. 通信测试 (如有通信功能)
UART/SPI/I2C/CAN/USB/网络:
✓ 正常通信
✓ 波特率/速率测试
✓ 丢包测试
✓ 错误帧处理
✓ 超时重传
✓ 大数据量传输
✓ 长时间连续通信
✓ 断线重连
三、嵌入式特有测试
1. 中断测试
- 中断嵌套测试
- 中断优先级测试
- 中断响应时间
- 高频中断处理
- 中断丢失检测
2. 实时性测试
- 任务调度准确性
- 定时器精度
- 实时响应能力
3. 存储器测试
✓ Flash写入可靠性
✓ Flash擦除次数测试
✓ 掉电保护机制
✓ 数据保持时间
4. 时钟测试
- 主时钟稳定性
- RTC精度
- 时钟切换测试
四、测试方法
1. 白盒测试
- 代码走查
- 逻辑覆盖率分析
- 路径测试
2. 黑盒测试
- 功能验证
- 用户场景测试
- 不关心内部实现
3. 回归测试
- 修改bug后重新测试
- 确保修改未引入新问题
五、实际测试流程建议
📋 第一阶段:开发阶段测试 (边开发边测试)
├─ 单元测试
├─ 模块测试
└─ 基本功能验证📋 第二阶段:集成测试 (1-2周)
├─ 模块集成测试
├─ 完整功能测试
├─ 基本性能测试
└─ 初步稳定性测试 (24小时)📋 第三阶段:系统测试 (2-3周)
├─ 完整功能测试
├─ 性能测试
├─ 稳定性测试 (72小时+)
├─ 电源测试
├─ 环境测试
└─ 压力测试📋 第四阶段:验收测试
├─ 用户场景测试
├─ 长期稳定性测试
└─ 最终验收📋 第五阶段:认证测试 (如需要)
├─ EMC测试
├─ 安规测试
└─ 行业标准测试
六、测试工具
硬件工具:
- 示波器:信号质量分析
- 逻辑分析仪:时序分析
- 万用表/电流表:电气参数
- 可调电源:电压测试
- 温度箱:温度测试
- 烧录器/调试器:J-Link/ST-Link
软件工具:
- 串口助手:通信测试
- 调试器:Keil/IAR Debugger
- 性能分析:SystemView
- 代码覆盖率:GCov
- 静态分析:PC-Lint
七、测试文档
建议准备:
- 测试计划 - 测试范围和时间安排
- 测试用例 - 详细测试步骤
- 测试记录 - 测试结果记录
- 缺陷报告 - Bug追踪
- 测试报告 - 总结报告
八、常见问题检查清单 ✅
□ 看门狗是否正常工作
□ 是否有内存泄漏
□ 栈是否会溢出
□ 中断优先级设置是否合理
□ 死锁风险是否排除
□ 所有错误代码是否有处理
□ 指针是否有空指针检查
□ 数组访问是否有越界保护
□ 通信超时是否有处理
□ 上电初始化是否完整
□ 关键数据是否有校验
□ 掉电数据是否能保存
重点建议 🎯
对于商业产品:
- 功能测试和稳定性测试是最重要的
- 至少要做72小时长跑测试
- 电源测试不可忽视
- 做好测试记录,方便追溯
- 测试覆盖率建议达到80%以上
你的产品具体是什么类型的?我可以帮你制定更针对性的测试方案!