2. 量子系统测试对象与接口建模

量子系统自动化测试平台要做的第一件事,不是写测试用例,而是把“被测对象”说清楚。量子计算机不像经典数字电路那样只有确定的高低电平,它的测试对象横跨物理层、控制层和软件层:一个量子比特既是可寻址的物理器件,又是带频率、退相干时间、门保真度等参数的抽象资源;一次门操作既是一段脉冲包络,又是一条逻辑指令;一次读取既是一个模拟信号采集过程,又是一个概率统计结果。如果这些对象没有统一的抽象和接口描述,测试脚本就会与具体硬件强耦合,换一台机器就要重写。

一、被测对象的四层抽象

工程上通常把量子系统测试对象划分为四层,自下而上依次是:脉冲层、时序层、门层和比特层。脉冲层描述作用在物理通道上的模拟波形,例如一个 25 ns 的高斯型微波脉冲,参数包括幅度、频率、相位、包络形状和采样率;时序层描述多个脉冲在时间轴上的排布关系,包括起始时刻、持续时间、通道占用和同步触发;门层把脉冲组合封装为逻辑操作,如 X、H、CNOT,并携带目标比特、控制比特和校准引用;比特层则把物理比特抽象为带属性的资源,如编号、频率、T1、T2、读出保真度、耦合邻居。

这四层不是简单的包含关系,而是“同一操作在不同抽象级别上的投影”。测试平台需要为每一层定义独立的接口,同时保证层与层之间可以互相追溯:给定一条门指令,能查到它对应的脉冲序列;给定一段脉冲,能知道它作用在哪个比特、属于哪次门操作。这种可追溯性是自动化测试定位问题的关键。

量子系统被测对象四层抽象与接口映射 比特层 Qubit 属性:id、频率 f01、T1、T2、读出保真度、耦合邻居 接口:get_qubit(id) → QubitProfile Q0: 5.12 GHz, T1=48 μs T2=32 μs, F_read=96.2% 门层 Gate 属性:门类型、目标比特、控制比特、校准引用、保真度 接口:apply_gate(name, qubits) → GateRecord CNOT(Q0,Q1) cal_ref = cal_2024_11_07 时序层 Timing 属性:起始时刻、持续时间、通道占用、同步触发、延迟 接口:schedule(pulse_list) → Timeline t0=0 ns, dur=40 ns ch: XY0, XY1, RO 脉冲层 Pulse 属性:幅度、频率、相位、包络、采样率、通道 接口:emit_waveform(ch, shape, params) → Waveform Gaussian, σ=5 ns amp=0.32, 1 GS/s 可追溯性:GateRecord → Timeline → Waveform → QubitProfile,任一环节可反向定位

二、硬件接口的标准化描述

硬件接口标准化的核心是“通道模型”。无论底层是任意波形发生器、微波源还是数字化仪,测试平台都把它们抽象为带方向的通道:输出通道(如 XY 驱动、Z 偏置、读出激励)和输入通道(如 ADC 采集)。每个通道用一组固定字段描述:通道名、物理地址、采样率、带宽、量程、延迟校准值。这样,上层时序调度只关心“在 XY0 通道上从 t=0 开始播放 40 ns 波形”,而不关心它实际连到哪台仪器。

以超导量子比特测试为例,一个典型的通道映射表可以这样定义:

channel_map:
  XY0:  {instrument: AWG_1, port: ch1, role: drive,  sample_rate: 1.0 GS/s, delay: 12 ns}
  XY1:  {instrument: AWG_1, port: ch2, role: drive,  sample_rate: 1.0 GS/s, delay: 14 ns}
  Z0:   {instrument: AWG_2, port: ch1, role: flux,   sample_rate: 0.5 GS/s, delay: 8 ns}
  RO0:  {instrument: AWG_2, port: ch2, role: readout, sample_rate: 1.0 GS/s, delay: 20 ns}
  ADC0: {instrument: DIG_1, port: ch1, role: acquire, sample_rate: 2.0 GS/s, delay: 0 ns}

这张表就是硬件与软件之间的契约。测试脚本引用逻辑通道名,平台根据映射表解析到具体仪器和端口。当硬件更换或接线调整时,只需更新映射表,测试用例本身不变。延迟校准值尤其重要:不同通道的电缆长度和仪器响应不同,若不在接口层统一补偿,多通道同步就会产生纳秒级偏差,直接影响 CNOT 等双比特门的测试结果。

三、软件接口的标准化描述

软件接口面向测试逻辑,通常采用“资源—操作—结果”三段式。资源接口负责枚举和查询被测对象,如 list_qubits()、get_coupling_map();操作接口负责提交实验,如 run_circuit(circuit, shots)、sweep(param, values);结果接口负责返回结构化数据,如 Result(counts, metadata, timestamp)。关键在于结果对象必须携带足够的元数据:本次实验用了哪组校准参数、哪个通道映射版本、采样时的温度或漂移信息。否则,两次测试结果不一致时无法判断是物理漂移还是配置差异。

一个常见的做法是给每次实验分配唯一的 run_id,并把 run_id 与校准版本、通道映射哈希、比特属性快照绑定。这样,测试报告中的每一条数据都可以回溯到当时的系统状态。对于自动化回归测试,这一点比单次实验的绝对数值更重要。

四、建模的落地检查

完成对象与接口建模后,可以用三个问题检验是否合格:第一,换一台同型号但接线不同的设备,测试脚本是否需要修改?如果不需要,说明通道抽象到位。第二,给定一个失败的 CNOT 测试结果,能否在五分钟内定位到是脉冲参数、时序对齐还是比特属性漂移?如果能,说明可追溯性到位。第三,新增一种门操作时,是否需要改动平台核心代码?如果只需要新增门定义和校准引用,说明门层抽象到位。

建模不是一次性工作。随着比特数增加、门类型扩展和硬件升级,接口需要版本化管理。建议把通道映射、比特属性、门定义都纳入配置文件并做版本标记,测试结果中记录所用版本号,使自动化测试平台具备可复现、可对比、可审计的工程能力。