第2章:稳定性测试基础

各位同学,今天我们聊聊稳定性测试的基础。说实话,这个章节看起来简单,但恰恰是很多工程师容易忽视的地方。我见过太多项目,功能跑得飞起,一到用户家里就各种翻车。为什么?说白了,就是稳定性没做到位。

什么是稳定性测试

稳定性测试,用大白话说就是——让系统长时间运行,看看它会不会出幺蛾子。不是跑几分钟、几小时,而是连续跑几天、几周,甚至几个月。

我个人习惯把稳定性测试分成两类:

  • 压力稳定性:让系统满负荷运行,看它扛不扛得住
  • 长稳测试:模拟用户日常使用,看它会不会慢慢变慢、出问题

你想想看,机顶盒这东西,用户可能一开就是好几天不关机。如果连72小时都撑不过去,那还叫什么产品?

核心观点:稳定性测试不是「测不测」的问题,而是「测多久、怎么测」的问题。

为什么稳定性测试这么重要

我记得刚入行那会儿,带我的老工程师说过一句话:「功能测试决定产品能不能用,稳定性测试决定产品好不好用。」这句话我一直记到现在。

具体来说,稳定性测试的重要性体现在三个方面:

  1. 用户体验的底线——用户不会关心你的代码多优雅,他只关心会不会死机
  2. 售后成本的控制——一个稳定性问题,可能引发大批量返修,成本高得吓人
  3. 品牌口碑的基石——我见过某品牌因为频繁重启,直接被运营商下架,再也没翻身

我的经验:在项目早期就引入稳定性测试,比后期修bug要省10倍以上的时间。真的,不骗你。

常见的稳定性问题

做了这么多年嵌入式,我总结出机顶盒最常见的五大稳定性问题。嗯,这里我一个个说。

1. 死机

死机是最直观的稳定性问题。系统突然不动了,遥控器按什么都没反应。

为什么会这样?我遇到过的情况主要有:

  • 内存泄漏——跑着跑着内存被吃光了
  • 死锁——两个线程互相等对方释放资源
  • 驱动异常——某个外设突然挂掉,系统卡住

避坑指南:我曾经遇到一个项目,死机问题查了整整两周。最后发现是一个定时器回调里调用了sleep(),直接把系统线程给卡死了。所以,中断和回调里千万别做耗时操作!

2. 重启

重启比死机好一点,至少系统还能自己恢复。但用户受不了啊,正看着电视剧呢,突然黑屏重启了。

常见的重启原因:

  • 看门狗超时——系统忙到没时间喂狗
  • 内核panic——遇到了无法处理的异常
  • 电源不稳——电压波动导致复位

我个人习惯在代码里加一个重启原因记录模块。每次重启前,把原因写到flash里。这样下次开机就能查出来,到底是软件问题还是硬件问题。

3. 花屏

花屏这个问题,说白了就是显示出了问题。屏幕上出现色块、条纹、或者画面撕裂。

我印象最深的一次,是某个项目在播放4K视频时偶尔花屏。查了很久才发现,是DDR带宽不够,显存数据被冲掉了。

花屏的常见原因:

  • 显存带宽不足
  • 显示驱动时序不对
  • 解码器与显示器的同步问题

小技巧:遇到花屏,先看log。如果log里出现「underrun」或者「fifo empty」之类的关键词,基本就是带宽问题。

4. 音画不同步

这个最让用户抓狂。画面和声音对不上,看个对口型的节目简直要疯。

音画不同步的本质,是音频和视频的播放进度不一致。我遇到过的情况:

  • 音频缓冲太大,导致声音滞后
  • 视频解码丢帧,画面跳得太快
  • 系统时钟漂移,两个线程的时间基准不一样

嗯,这里要注意。音画同步的容忍范围一般是±40ms。超过这个范围,人眼就能察觉了。

5. WiFi断连

WiFi问题在机顶盒上特别常见。用户抱怨最多的一句话就是:「网又断了!」

WiFi断连的原因五花八门:

  • 信号干扰——2.4G频段太拥挤了
  • 省电策略——系统为了省电把WiFi模块休眠了
  • 驱动bug——某些特殊场景下驱动崩溃

避坑指南:我曾经遇到一个项目,WiFi每隔一小时断一次。查了三天,发现是WiFi芯片的固件有个定时器溢出bug。所以,别光看自己的代码,芯片原厂的固件也可能有问题。

稳定性测试的常见指标

最后,我给大家列一下常用的稳定性指标。这些是我在实际项目中常用的:

指标 说明 常见要求
MTBF 平均无故障时间 ≥ 1000小时
重启率 每百台设备每天重启次数 ≤ 0.1次
内存泄漏率 每小时内存增长量 ≤ 1MB/h
WiFi断连率 每24小时断连次数 ≤ 3次

好了,这一章的内容就到这里。稳定性测试听起来简单,但真正做好不容易。下一章我会讲具体的测试方法和工具,到时候咱们再细聊。