3. 自动化测试概述

在SDR(软件定义无线电)系统中,信号链长、参数组合多、硬件与软件耦合紧密,手工测试往往只能覆盖少量典型场景。自动化测试的核心价值,是把“可重复的验证动作”交给脚本与框架执行,让工程师把精力集中在异常分析、算法优化和边界探索上。它不仅是效率工具,更是质量工程的基础设施。

自动化测试的意义可以概括为四个维度:可重复(每次执行条件一致)、可度量(结果可统计、可追溯)、可回归(修改后快速验证旧功能)、可扩展(用例与设备规模可增长)。在SDR场景中,这意味着同一组IQ回放数据可以在不同增益、采样率、频点下自动跑完,并输出误码率、EVM、频谱模板等指标。

3.1 测试金字塔:分层投入与反馈速度

测试金字塔描述的是不同粒度测试的投入比例。底层是单元测试,数量最多、执行最快、定位最准;中层是集成/接口测试,验证模块间数据流与协议;顶层是系统级端到端测试,数量少但最接近真实业务。对SDR自动化测试而言,金字塔不是“越底层越好”,而是让每一层承担它最擅长的验证职责。

SDR自动化测试金字塔 系统级端到端测试 发射→信道→接收全链路 数量少 · 慢 · 最接近真实 集成 / 接口测试 模块间数据流、协议、时序 数量中 · 中等速度 · 定位较准 单元测试 调制解调、滤波、编解码、CRC 数量多 · 快 · 定位最准 反馈慢 反馈中 反馈快 成本高 成本中 成本低 投入比例建议:单元测试约70%,集成测试约20%,系统级测试约10% SDR场景中,IQ回放与参数扫描通常放在集成层,端到端验证放在系统层

在SDR项目中,单元测试可以验证QAM映射、根升余弦滤波、CRC校验等纯算法逻辑;集成测试验证“基带→上变频→信道→下变频→基带”的数据流与接口一致性;系统级测试则用真实或回放的IQ数据验证端到端误码率、频谱合规性和吞吐量。金字塔倒置——即大量依赖端到端测试——会导致反馈慢、定位难、维护成本高。

3.2 持续集成:让每次提交都经过验证

持续集成(CI)的核心是“频繁合并、自动构建、自动测试”。在SDR自动化测试系统中,CI流水线通常包含以下阶段:

  1. 代码拉取与静态检查:检查编码规范、潜在空指针、未使用变量。
  2. 编译与固件构建:生成FPGA比特流、DSP库、上位机可执行文件。
  3. 单元测试:运行算法层测试,快速失败。
  4. 集成测试:加载IQ回放数据,验证调制解调链路指标。
  5. 硬件在环测试:连接SDR设备,执行参数扫描与射频指标测量。
  6. 报告归档:生成测试报告,记录通过率、耗时、失败用例。
# 示例:CI流水线配置片段(伪代码)
stages:
  - build
  - unit_test
  - integration_test
  - hil_test
  - report

unit_test:
  script:
    - make test_unit
    - ./run_tests --suite=modem --report=junit.xml

integration_test:
  script:
    - ./sdr_auto --playback iq_data/qpsk_1ms.bin --gain 20 --freq 2.4e9
    - ./check_evm --threshold 3.5%
CI不是“跑一次就完事”。建议为每次提交触发快速流水线(单元+集成),为每日构建触发完整流水线(含硬件在环)。失败时自动通知提交者,并保留现场日志与IQ数据,便于复现。

3.3 测试用例管理:从散落到体系化

测试用例管理解决的是“测什么、怎么测、测过没有、结果如何”的问题。在SDR自动化测试中,用例通常包含:用例ID、测试目标、前置条件、输入数据(IQ文件/参数组合)、执行步骤、预期结果、实际结果、优先级、关联需求。建议使用表格或测试管理工具统一维护。

用例ID 测试目标 输入/参数 预期结果 优先级
TC-MOD-001 QPSK调制EVM验证 iq_qpsk.bin, 增益20dB, 2.4GHz EVM ≤ 3.5% 高
TC-MOD-002 16QAM解调误码率 iq_16qam.bin, SNR=20dB BER ≤ 1e-5 高
TC-RF-003 发射频谱模板合规 频点2.4GHz, 带宽20MHz 带外抑制 ≥ 40dB 中
TC-SYS-004 端到端吞吐量 连续回放10s, 64QAM 吞吐 ≥ 80Mbps 中

用例管理的关键是“可追溯”和“可复用”。每个用例应关联到具体需求或缺陷编号;输入数据应版本化,避免“上次能跑,这次跑不了”却找不到原因。对于参数扫描类测试,可以用数据驱动方式生成大量用例,而不是手工复制。

3.4 测试报告与质量度量

测试报告不是简单的“通过/失败”列表,而是质量决策的依据。一份有效的SDR自动化测试报告应包含:执行时间、环境配置(设备型号、固件版本、采样率)、用例通过率、失败用例详情、关键指标趋势(EVM、BER、吞吐量)、以及回归对比。质量度量则把这些数据转化为可跟踪的指标。

  • 用例通过率:反映当前版本的基本健康度。
  • 缺陷逃逸率:测试后仍流入现场的缺陷比例,衡量测试有效性。
  • 回归失败率:修改后旧用例失败的比例,反映变更影响面。
  • 平均修复时间(MTTR):从失败到修复的耗时,反映团队响应效率。
  • 指标趋势:EVM、BER等随版本变化的曲线,提前发现性能退化。
常见误区:只关注“通过率”而忽略“覆盖了什么”。如果用例只覆盖理想信道和单一增益,通过率再高也不能说明系统健壮。另一个误区是把自动化测试当成一次性项目,缺少用例维护和报告复盘,导致用例逐渐失效、无人信任。

3.5 案例场景:一次参数扫描的自动化闭环

假设需要验证接收机在不同增益下的解调性能。手工测试需要反复调整增益、记录EVM、整理表格;自动化测试则可以这样组织:

# 参数扫描自动化脚本示例
for gain in 10 20 30 40; do
  for freq in 2.40e9 2.45e9 2.50e9; do
    ./sdr_auto --playback iq_qpsk.bin --gain $gain --freq $freq \
      --output result_gain${gain}_freq${freq}.json
  done
done
./report_gen --input result_*.json --format html --output report.html

执行完成后,报告自动汇总每个增益/频点组合的EVM与BER,并标记超出阈值的组合。工程师只需查看报告中的异常点,再决定是否深入分析。这就是“自动化测试+数据回放”在SDR场景中的典型价值:把重复劳动交给系统,把判断留给工程师。

总结来看,自动化测试的意义在于建立可重复、可度量、可回归的质量防线;测试金字塔指导我们合理分配测试层级;持续集成让验证成为每次提交的默认动作;测试用例管理保证覆盖与追溯;测试报告与质量度量则把结果转化为改进依据。五者结合,才能让SDR自动化测试从“能跑”走向“可信”。