从单点验证到整机考验

分享一段文字,避免自己成为高知识低文化的工程师:

人生有很多的选择题,选择适合自己的,选择自己想做的,选择不会让自己后悔的。人生的舞台剧里,做自己人生的主角,演绎自己的人生,别为他人的眼光而活,更不要因畏惧现实而逃避。如果你有梦想的话,就要去捍卫它。那些一事无成的人想告诉你你也成不了大器。如果你有理想的话,就要去努力实现。没有信手拈来的幸福,也没有不劳而获的成功。把每一件简单的事做好就是不简单,把每一件平凡的事做好就是不平凡。专注当下的每一刻,用心做好每一件事,你就会离理想的生活越来越近。

功能测试和系统测试,说白了就是两件事:功能对不对 和系统稳不稳。

功能测试是验证每个功能点是否按规格书跑。系统测试呢,是把所有功能串起来,看整机能不能扛得住真实场景。我见过不少团队,功能测试跑得飞起,一到系统测试就崩------嗯,这里面的坑,我踩过不少。

功能测试用例设计:别漏了边界

功能测试用例设计,核心就四个字:等价类 + 边界值。

举个例子,一个电源模块的输出电压范围是3.0V~5.5V,步进0.1V。你不可能每个电压都测一遍,对吧?

  • 有效等价类:3.0V~5.5V之间任意取几个点,比如3.3V、4.2V、5.0V
  • 无效等价类:低于3.0V(比如2.9V)和高于5.5V(比如5.6V)
  • 边界值:3.0V、3.1V、5.4V、5.5V------这些最容易出问题

我个人习惯:每个功能点至少写3个用例------正常值、边界值、异常值。别嫌多,我吃过亏。有一次一个I2C接口,正常通信没问题,但地址刚好在0x7F边界上,死活读不到数据。查了两天才发现是地址译码逻辑的边界处理有bug。

功能测试用例的模板,我一般这样写:

复制代码
用例编号:FT-001
测试模块:电源管理单元
测试项:输出电压精度
前置条件:输入电压12V,负载电阻10Ω
测试步骤:
  1. 设置目标电压为3.3V
  2. 用万用表测量输出端
  3. 记录实际电压值
预期结果:3.3V ± 1%(即3.267V~3.333V)
实际结果:3.298V
结论:通过

你想想看,如果每个功能点都这么写,后期回归测试会轻松很多。我建议用Excel或TestLink管理用例,方便追溯。

系统集成测试:把零件拼起来看

功能测试是测单个模块,系统集成测试是把所有模块拼在一起,看它们能不能好好相处。

我在项目中遇到过最典型的问题:接口时序不匹配。比如主控芯片的SPI时钟频率是10MHz,但外设只能跑到8MHz。单测时都没问题,一集成就丢数据。

系统集成测试的重点:

  • 接口协议验证:I2C、SPI、UART、CAN等,用示波器抓波形,看时序是否满足双方规格
  • 电源完整性:整机供电时,各模块的电压纹波、上电时序是否正常
  • 信号完整性:高速信号(如DDR、USB)的眼图、抖动是否达标
  • 中断与DMA:多个中断源同时触发时,系统会不会死锁

避坑指南 :我曾经在一个项目中,两个模块共用同一个中断引脚,但中断触发方式一个是上升沿,一个是下降沿。单测都没问题,集成后一运行就随机死机。查了三天才发现是中断共享逻辑没处理好。所以,集成测试一定要覆盖并发场景。

压力测试:把系统往死里逼

压力测试,说白了就是让系统在极限条件下运行,看它会不会崩。

常见的压力测试场景:

测试类型 典型场景 监控指标
CPU满载 同时运行多个计算密集型任务 CPU温度、频率降频、任务响应时间
内存压力 反复申请和释放大块内存 内存泄漏、碎片化、OOM触发频率
IO压力 持续读写Flash/SD卡 读写速度、错误率、文件系统损坏
网络压力 大量数据包收发 丢包率、延迟、吞吐量
外设并发 所有外设同时工作 总线冲突、中断丢失、数据错乱

我建议压力测试要持续至少72小时。为什么?因为很多问题需要长时间才能暴露出来。比如内存泄漏,可能跑24小时才漏了几KB,但跑72小时就漏了几MB,系统就崩了。

注意 :压力测试时一定要监控温度。我见过一个项目,压力测试跑了48小时没问题,但第49小时突然关机。查了半天,是散热设计余量不够,温度累积到临界点触发了过温保护。所以,压力测试时别忘了在关键芯片上贴热电偶。

长时间稳定性测试:跑它个七天七夜

长时间稳定性测试,和压力测试有点像,但侧重点不同。压力测试是「往死里逼」,稳定性测试是模拟真实场景,长时间运行。

比如一个智能家居网关,正常使用时CPU负载也就20%~30%。你不需要让它满载跑,但需要让它连续运行7天、14天甚至30天,看会不会出现:

  • 看门狗误触发:系统明明正常,但看门狗超时复位了
  • 时钟漂移:RTC时间越跑越偏
  • Flash磨损:频繁写入导致坏块增多
  • 网络重连失败:WiFi断线后重连次数多了,连不上了

我个人习惯,长时间稳定性测试要记录关键日志:

复制代码
# 每10分钟记录一次系统状态
[2025-03-20 08:00:00] CPU: 32%, RAM: 45%, Temp: 42°C, WiFi: connected
[2025-03-20 08:10:00] CPU: 28%, RAM: 46%, Temp: 41°C, WiFi: connected
...
[2025-03-20 18:00:00] CPU: 35%, RAM: 48%, Temp: 43°C, WiFi: connected

如果某一天日志突然断了,或者某个指标出现异常,那就是问题点。

我的经验 :长时间稳定性测试最容易发现的是资源泄漏 问题。比如每次网络重连都申请一个缓冲区,但释放逻辑有bug。跑一天没问题,跑一周内存就耗尽了。所以,我建议在测试脚本里加一个资源监控,自动记录内存、句柄、线程数的变化趋势。

测试报告怎么写?

测试做完了,报告得写清楚。我一般按这个结构来:

  1. 测试概述:测试对象、测试环境、测试时间
  2. 测试结果汇总:通过/失败/阻塞的用例数量
  3. 详细结果:每个用例的测试数据、截图、波形
  4. 问题清单:每个bug的严重等级、复现步骤、根因分析
  5. 结论与建议:是否通过测试,有哪些风险需要关注

举个例子,问题清单可以这样写:

复制代码
问题编号:BUG-024
严重等级:严重
模块:WiFi驱动
现象:连续重连50次后,第51次无法连接
复现步骤:
  1. 启动设备,连接WiFi
  2. 断开WiFi,等待5秒
  3. 重复步骤1-2共50次
  4. 第51次尝试连接,返回失败
根因分析:WiFi驱动中连接请求队列未及时清理,队列满后拒绝新请求
修复方案:增加队列清理机制,每次连接完成后释放队列项
验证结果:修复后连续重连200次,未再出现该问题

嗯,到这里,功能测试和系统测试的核心内容就讲完了。记住一句话:功能测试保下限,系统测试保上限。两者缺一不可。

最后一个小建议:测试用例不是写一次就完事了。产品迭代时,一定要回归测试。我见过太多团队,新功能加得爽,旧功能崩得惨。自动化回归测试,能救你的命。

相关推荐
say_fall4 天前
【Linux系统编程】Linux进程信号:从“外卖到了“到内核里的一张位图
linux·运维·服务器·车载系统·智能硬件
AiNightVision5 天前
无人机夜视模块如何选择?——从参数指标到系统集成的完整选型指南
人工智能·算法·计算机视觉·车载系统·无人机·视频·智能硬件
mk0156 天前
单片机同步降压稳压器输出最低1V,关断时损耗3uA
单片机·嵌入式硬件·硬件工程·智能硬件·pcb工艺
领麦微红外8 天前
红外测温传感器 赋能充电桩热安全与运维智能化
运维·安全·产品经理·智能硬件
聆思科技AI芯片9 天前
【AI硬件开发上手教程】怎么使用AI编程实现小聆AI语音控制舵机
人工智能·嵌入式硬件·开源·ai编程·智能硬件
AiNightVision11 天前
星光级 是什么?——星光级摄像机是什么?0.001Lux 照度门槛与选型真相
人工智能·算法·车载系统·自动驾驶·无人机·视频·智能硬件
美摄科技13 天前
智能硬件如何增加一键成片剪辑功能?
数码相机·智能手机·智能硬件
光子物联单片机13 天前
ESP32传感器模块编程实践(一)DIY智能WIFI视频控制小车
嵌入式硬件·esp32·智能硬件·硬件
蒲公英内测分发13 天前
智能家居厂商有多个产品线,包装上的 App 下载入口该共用还是分开?
android·人工智能·数码相机·机器人·智能家居·智能硬件
老孟说禅15 天前
测试中的安全规范
智能硬件