[Paper] QEMI:一种基于等价模输入的量子软件栈测试框架

发布: (2026年2月11日 GMT+8 00:26)
7 分钟阅读
原文: arXiv

Source: arXiv - 2602.09942v1

Overview

本文介绍了 QEMI,一种用于量子软件栈(QSS)的新型测试框架,它将经典的 Equivalence Modulo Inputs(EMI)技术移植到量子领域。通过自动生成包含“死代码”的量子程序,然后剥除这些死代码以创建等价变体,QEMI 能够发现流行量子 SDK(如 Qiskit、Q# 和 Cirq)中的崩溃和细微行为错误。

关键贡献

  • 随机量子程序生成器,使用量子控制流构造(如 if‑else、类似 while 的循环)插入死代码。
  • 量子适配的 EMI:一种系统化方法,通过移除死代码生成语义保持的程序变体,从而在没有真实答案的情况下进行差分测试。
  • 跨平台评估 在三个主流量子 SDK 上进行,发现了 11 个崩溃错误1 个功能不一致,这些此前未被发现。
  • 证明 语义保持的转换(超越结构重写)在量子软件测试中是可行的,扩展了 QSS 验证的有限工具箱。

方法论

  1. 程序生成

    • 模糊测试引擎创建随机量子电路,并用类似经典的控制流包装(例如 if (measure == 0) { … })。
    • 有些分支被刻意设为 死代码——对于给定的输入状态,这些分支永远不可达,因为控制条件始终为假。
  2. 等价输入模(EMI)适配

    • 对于每个生成的程序,QEMI 识别死代码段。
    • 然后通过删除这些死代码段生成一个 变体,保证该变体在任何输入下的可观测行为(测量统计)应与原程序相同。
  3. 差分执行

    • 将原始程序和去除死代码后的变体分别编译并在目标 QSS(例如 Qiskit 的 transpiler + simulator)上运行。
    • 框架比较结果:结果不匹配或崩溃表明堆栈在处理死代码或其删除时存在 bug。
  4. Bug 分类

    • 崩溃(例如段错误、未处理的异常)记录为 崩溃 bug
    • 测量分布出现差异的标记为 行为不一致

结果与发现

SDK崩溃错误行为不一致
Qiskit50
Q# (Microsoft Quantum Development Kit)31
Cirq30
  • 崩溃错误 通常源于对控制流元数据处理不当或假设不存在死代码的优化器传递。
  • 唯一的 行为不一致 被追溯到一次不正确的门融合优化,当存在死分支时会改变电路的概率振幅。
  • 在所有平台上,大多数错误都是 在没有任何手工编写的测试用例的情况下 发现的,证明了自动化、保持语义的转换的强大力量。

实际意义

  • 对于 SDK 开发者:QEMI 提供了一个自动化的回归测试流水线,可集成到 CI/CD 工作流中,在发布前提前捕获崩溃。
  • 对于量子算法工程师:该框架突出显示隐藏的边缘情况(例如死代码处理),这些情况在算法编译到不同后端时可能影响性能或正确性。
  • 对于硬件供应商:由于 QEMI 覆盖了从源代码到低层门调度的完整堆栈,它能够发现仅在硬件特定优化后出现的错误,有助于实现更稳健的编译器‑硬件协同设计。
  • 开源潜力:作者已发布生成器和 EMI 引擎,使社区能够将该方法扩展到其他语言(如 Braket、PyQuil)或直接面向噪声中等规模量子(NISQ)设备。

限制与未来工作

  • 死代码检测 目前依赖于对经典风格控制流的静态分析;更复杂的量子特定死代码模式(例如基于纠缠的死路径)尚未覆盖。
  • 该方法假设被移除的死代码不会影响 全局量子态——这一属性在生成的程序中成立,但在更复杂、依赖数据的电路中可能被破坏。
  • 可扩展性:生成非常大的电路会给模拟器带来压力并增加执行时间;未来的工作可以引入抽样策略或混合模拟‑硬件运行。
  • 作者计划探索 超越死代码移除的语义等价,例如应用已知的电路恒等式(如门的对易性)来创建更丰富的变体族,以进行更深入的测试。

QEMI 为系统化、无 oracle 的量子软件栈测试开辟了实用路径,为开发者提供了一个新杠杆,以提升支撑未来量子应用的工具的可靠性。

作者

  • Junjie Luo
  • Shangzhou Xia
  • Fuyuan Zhang
  • Jianjun Zhao

论文信息

  • arXiv ID: 2602.09942v1
  • 分类: cs.SE
  • 出版日期: 2026年2月10日
  • PDF: 下载 PDF
0 浏览
Back to Blog

相关文章

阅读更多 »