7.4 可靠性测试与长期运行


7.4 可靠性测试与长期运行

本节摘要:可靠性测试的哲学是"让设备在厂里把坑先踩完":温度循环模拟岁月、断电轰炸模拟意外、长时烤机模拟日子。本节给出三类试验的设计方法与判停标准,解释浴盆曲线对固件团队的现实含义,并用一次烤机揪出慢性内存泄漏的案例收尾——最后附上交付文档的最后清单,把"可维护"也纳入可靠性的定义。

7.3 节把性能定型了;这一节做交付前的最后一件事:验证。它站在全书终点,因为它要检验的不是某个功能,而是前六章的总和——时序、总线、任务、数据、联网、升级,任何一环的隐患都会在烤机的漫长时间里现形。可靠性测试无法证明"不出问题",但能系统性地把问题提前暴露在你的桌面上,而不是用户的现场里

可靠性不是测出来的,但失败可以被测出来

先立一个清醒的认知:测试不能证明可靠——你无法穷举现场的一切。测试真正能做的,是用加速手段把时间尺度的故障提前压缩出来。微控制器产品最常见的三类慢性病,各有对应的加速试验:

试验 模拟什么 典型做法 判停标准
温度循环 焊点疲劳、参数漂移 低温到高温往复,各保温半小时 循环数十次无故障、参数漂移在规格内
断电轰炸 掉电瞬间的数据与状态损坏 随机时刻切断电源,重启验证 百次断电零变砖、配置零丢失
长时烤机 慢性泄漏、累积偏差、偶发竞态 真实负载连续运行数周 关键指标无趋势性劣化、零异常重启

三类试验的先后有讲究:先断电轰炸(发现快),再温度循环(周期一天),最后烤机(最贵最慢)——便宜的试验先筛掉低级问题,别让烤机三周后死在一个断电就能复现的 Bug 上。

图:浴盆曲线与固件团队的位置

图:浴盆曲线与固件团队的位置

浴盆曲线对固件团队的现实含义有两条。其一,早期故障期的多数成员是硬件(焊接、连接器、电源),但固件的自检与上报能把它们从"玄学故障"变成"可诊断事件"——7.1 节的观测体系在此兑现。其二,偶发故障期的故障几乎全是软件的:竞态、泄漏、边界条件——烤机就是为这一段设计的。

自检:设备自己的入职体检

烤机与现场都依赖一件事:设备能报告自己的健康。上电自检(POST)是最低配置:检查关键外设应答、传感器读数在物理合理区间、配置校验和完整。自检要在每次上电与每次恢复深眠时执行,结果进黑匣子——它把"设备不工作"细化为"传感器 B 在第 37 次唤醒后无应答",售后价值天差地别。

// 上电自检:结果进黑匣子,关键项失败触发安全模式 struct SelfTest { bool sensorOk; bool busOk; bool cfgOk; }; SelfTest selfCheck() { SelfTest r; r.sensorOk = probeSensor() && readSanityCheck(); // 应答且读数在物理区间 r.busOk = scanBusCriticalDevices(); // 关键设备全部应答 r.cfgOk = verifyConfigChecksum(); // 配置未被断电损坏 uint8_t code = 0; if (!r.sensorOk) code |= 0x01; if (!r.busOk) code |= 0x02; if (!r.cfgOk) code |= 0x04; if (code) bbLog(0x40 | code); // 失败细节进黑匣子 return r; }

输出是三项判定。使用纪律:自检失败不必然阻止运行——传感器坏了但总线与配置完好,设备可以带病上报"我传感器不行了"并继续履行其他职责;只有配置损坏这类影响启动正确性的项才强制进安全模式。可用性优先于完美,是现场设备与实验室仪器的分野。

案例:烤机揪出慢性内存泄漏

背景:网关设备烤机第七天出现第一次重启,此前六天一切正常。重启原因:堆内存耗尽,分配失败后未检查空指针。

操作:第一步确认趋势:给空闲堆内存加周期上报,曲线显示堆以每天约 900 字节的速度稳定下降——慢性泄漏实锤,且速率低到前六天根本暴露不出来。第二步定位泄漏点:按模块排查分配调用,最终锁定日志模块——某条错误路径上分配了缓冲区,早退分支漏了释放。每日九百字节对应每天约九十次该错误路径,与日志里一条"偶发超时重试"的频次吻合。第三步修复加防复发:补上释放;全局分配改为带内存池的静态方案(7.3 节的铁律在此回收——这次泄漏的根源正是动态分配);CI 里加入堆水位回归检查。

结果:复烤三十天,堆水位稳定波动无趋势,零重启。

解读:这个案例浓缩了烤机的全部价值:泄漏速率乘以现场规模,就是三个月后客服工单的数量——七天的烤机换来的是把一次"现场批量故障"改写为"出厂前的一次修复"。慢故障只有时间能暴露,单元测试与功能测试对它们无能为力;烤机的不可替代性正在于此。

变式:烤机的负载设计比时长更关键:全速跑业务反而不真实——现场设备大部分时间在轻负载与深眠之间切换,含睡眠周期的真实负载烤机才能暴露状态机与唤醒路径的偶发问题。烤机方案要从现场工况倒推,而不是从压力测试惯性出发。

⚠️ 常见坑:烤机通过就冻结固件,此后现场反馈的问题靠"打补丁"修——补丁没有回到烤机流程,新版本带着新隐患上线。任何变更(哪怕一行)都要过完整回归与短烤,这是版本纪律的底线。

💡 关键直觉:可靠性测试设计的本质是买保险:每类试验对应一类现场事故,试验成本对赌的是事故成本。砍测试预算前,先想想售后出差的机票钱。

交付文档的最后清单

可靠性之外,交付还有一个常被忽略的维度:可维护性。最低限度的交付文档包括:装配与烧录工装说明(产线视角)、自检项与错误码对照表(售后视角)、恢复出厂与安全模式操作步骤(现场视角)、已知问题与规避方法(工程视角)。这四份文档的共同标准是:目标读者在你不在线时能独立完成操作——文档写不写得出来,是检验设计是否真正闭环的最后一题。

本节要点回顾

  • 测试不能证明可靠,但能提前暴露失败:断电轰炸、温度循环、长时烤机各有分工;
  • 试验顺序按成本排:便宜的先筛,最贵的烤机留给最后的疑难;
  • 自检把玄学故障变成可诊断事件,可用性优先、安全模式只留给启动正确性受损;
  • 慢故障只有烤机能暴露:泄漏、竞态、累积偏差,都是时间的产物;
  • 烤机负载要按现场工况倒推,含睡眠周期的真实负载比全速压力更有诊断力;
  • 交付文档的目标读者是不在线时的产线与售后,可维护性是可靠性的最后一块拼图。

作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U