摘要:TypeScript作为JavaScript的超集, 提供了静态类型支持和面向对象等多种特性, 被Angular、Vue、React等众多主流框架广泛采用, 成为构建大型应用的核心技术之一. 其编译器负责将TypeScript代码编译为标准的JavaScript代码. 然而, TypeScript编译器本身可能存在缺陷, 导致生成的JavaScript代码包含难以预料的错误. 尽管在JavaScript引擎测试方面已有诸多研究, 但尚未有针对TypeScript编译器的系统性测试研究. 现有的JavaScript引擎测试方法既难以生成大量包含TypeScript特定类型的程序, 也无法有效变异这些类型, 导致难以检测TypeScript编译器中与复杂类型系统相关的缺陷. 为此, 提出一种基于语法和类型变异的TypeScript编译器测试框架TscFuzz. 为了获取大量包含TypeScript特定类型的种子程序, TscFuzz针对TypeScript相较于JavaScript的特殊类型设计了一组提示词, 并引导大语言模型生成一系列包含特定类型的程序. 然后, 设计了一组类型特定的变异算子, 旨在通过类型变异对TypScript的类型系统进行针对性的测试. 最后, TscFuzz基于交叉版本策略的差分测试, 比较不同版本的TypeScript编译器的输出结果来检测其缺陷, 并通过Node.js验证编译器输出JavaScript程序的语义正确性. 实验结果显示, TscFuzz在72 h内发现了5个缺陷, 比基线方法DIE和FuzzJIT分别多检测了2个和3个bug. TscFuzz的故障检测效果显著优于基线方法. 同时, 经过3个月的测试, TscFuzz发现了12个真实的TypeScript缺陷, 其中8个已被开发者确认, 7个已被修复.