摘要:Python作为一种广泛应用的解释型语言, 在执行效率方面存在性能瓶颈. 即时(JIT)编译器被引入Python生态, 它通过将字节码动态编译为机器码, 显著提升了程序的运行速度. 然而, JIT编译器复杂的优化策略可能导致程序缺陷, 影响程序的稳定性和可靠性. 现有的Python解释器模糊测试方法难以有效检测JIT编译器的深层优化缺陷和非崩溃缺陷. 为此, 提出了一种基于覆盖率引导的Python JIT编译器缺陷检测方法PjitFuzz. 首先, 为了能够生成触发Python JIT编译器优化策略的程序变体, PjitFuzz提出了5种基于JIT优化策略的程序变异规则. 其次, 为了聚合不同变异规则的优势并生成多样化的程序变体, PjitFuzz设计了一种基于覆盖率引导的变异规则动态选择方法. 然后, 为了有效记录程序执行过程中变量值的变化情况, 从而检测输出不一致的缺陷, PjitFuzz提出了一种基于计算校验和的代码块插入策略. 最后, 结合不同的JIT编译选项进行差分测试, 从而有效检测Python JIT编译器缺陷. 将PjitFuzz与目前最先进的两种Python解释器模糊测试方法FcFuzzer和IFuzzer进行比较, 实验结果表明, PjitFuzz在缺陷检测能力上, 分别高出150%和66.7%; 在代码覆盖率方面, 分别比现有方法高出28.23%和15.68%; 在生成测试程序有效率方面, 分别高出42.42%和62.74%. 在为期8个月的实验中, PjitFuzz发现并报告了16个缺陷, 其中12个已得到开发人员的确认.