第2章:稳定性测试基础
各位同学,今天我们聊聊稳定性测试的基础。说实话,这个章节看起来简单,但恰恰是很多工程师容易忽视的地方。我见过太多项目,功能跑得飞起,一到用户家里就各种翻车。为什么?说白了,就是稳定性没做到位。
什么是稳定性测试
稳定性测试,用大白话说就是——让系统长时间运行,看看它会不会出幺蛾子。不是跑几分钟、几小时,而是连续跑几天、几周,甚至几个月。
我个人习惯把稳定性测试分成两类:
- 压力稳定性:让系统满负荷运行,看它扛不扛得住
- 长稳测试:模拟用户日常使用,看它会不会慢慢变慢、出问题
你想想看,机顶盒这东西,用户可能一开就是好几天不关机。如果连72小时都撑不过去,那还叫什么产品?
核心观点:稳定性测试不是「测不测」的问题,而是「测多久、怎么测」的问题。
为什么稳定性测试这么重要
我记得刚入行那会儿,带我的老工程师说过一句话:「功能测试决定产品能不能用,稳定性测试决定产品好不好用。」这句话我一直记到现在。
具体来说,稳定性测试的重要性体现在三个方面:
- 用户体验的底线——用户不会关心你的代码多优雅,他只关心会不会死机
- 售后成本的控制——一个稳定性问题,可能引发大批量返修,成本高得吓人
- 品牌口碑的基石——我见过某品牌因为频繁重启,直接被运营商下架,再也没翻身
我的经验:在项目早期就引入稳定性测试,比后期修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次 |
好了,这一章的内容就到这里。稳定性测试听起来简单,但真正做好不容易。下一章我会讲具体的测试方法和工具,到时候咱们再细聊。