这篇文档属于类型a,是一篇关于利用大型语言模型(Large Language Models, LLMs)进行深度学习库模糊测试(fuzzing)的原创性研究。以下是详细的学术报告:
主要作者及机构
本研究由Yinlin Deng(伊利诺伊大学厄巴纳-香槟分校)、Chunqiu Steven Xia(伊利诺伊大学厄巴纳-香槟分校)、Haoran Peng(中国科学技术大学)、Chenyuan Yang(伊利诺伊大学厄巴纳-香槟分校)和Lingming Zhang(伊利诺伊大学厄巴纳-香槟分校)合作完成,发表于2023年ACM SIGSOFT国际软件测试与分析研讨会(ISSTA 2023)。
学术背景
研究领域:本研究属于软件工程与深度学习交叉领域,聚焦于深度学习库的自动化测试。
研究动机:深度学习库(如TensorFlow和PyTorch)是构建深度学习系统的核心组件,但其复杂性导致传统模糊测试技术难以生成满足语法、语义及张量计算约束的有效输入程序。现有方法(如API级和模型级模糊测试)存在多样性不足、无法生成复杂API序列等问题。
研究目标:提出TitanFuzz,首次利用LLMs(如Codex和InCoder)直接生成和变异深度学习库的输入程序,以覆盖更多API并检测潜在错误。
研究流程
初始种子生成:
- 方法:使用生成式LLM(Codex)通过分步提示(step-by-step prompt)生成初始种子程序。提示包括目标API签名、库导入和输入生成步骤。
- 样本量:每个API生成25个种子程序,通过温度参数(temperature=0.4)平衡多样性与有效性。
- 创新点:首次将提示工程(prompt engineering)应用于模糊测试,显著提升生成程序的质量。
进化式模糊测试:
- 种子选择:基于适应度函数(fitness function)选择高评分种子,优先考虑数据流深度(depth of dataflow graph)和唯一API调用数量。
- 变异操作:设计四类变异算子(argument-replacement、prefix、suffix、method),通过多臂老虎机算法(Multi-Armed Bandit, MAB)动态选择最优算子。
- 代码填充:使用填充式LLM(InCoder)替换掩码标记(),生成新程序。InCoder基于双向上下文填充代码,确保语义有效性。
- 验证与筛选:执行程序并过滤运行时错误,保留唯一有效程序加入种子库。
错误检测:
- 测试预言(oracle):采用差分测试(differential testing),比较CPU与GPU的执行结果,检测计算错误(wrong-computation)和崩溃(crash)。
- 错误类型:包括数值不一致(如NaN处理差异)、安全漏洞(如越界读取)和同步错误(如API序列触发的GPU行为异常)。
主要结果
API覆盖率:
- TitanFuzz在TensorFlow和PyTorch上分别覆盖2215和1329个API,较最优基线(DeepRel)提升91.11%和24.09%。
- 数据支持:表1显示,传统模型级模糊测试(如Muffin)仅覆盖79个TensorFlow API,而TitanFuzz覆盖率达66.8%。
代码覆盖率:
- TitanFuzz在PyTorch和TensorFlow上的代码行覆盖率分别为20.98%和39.97%,较DeepRel提升50.84%和30.38%。
- 趋势分析:图7表明,TitanFuzz的覆盖率随测试时间持续增长,而传统方法在20秒后即饱和。
错误检测:
- 共检测到65个错误,其中41个被确认为未知错误(19个崩溃、22个计算错误)。
- 典型案例:
- PyTorch:
torch.histc在CPU与GPU上对NaN值的计数不一致(图9b)。
- TensorFlow:
tf.raw_ops.ParallelDynamicStitch存在未处理的越界读取漏洞(图9c)。
- 独特性:10个错误仅通过Codex生成的种子程序即可触发,无需变异。
结论与价值
科学价值:
- 首次证明LLMs可直接用于生成式和变异式模糊测试,无需领域特定规则或人工标注。
- 提出基于MAB的变异算子选择策略和适应度函数,为复杂API序列测试提供通用框架。
应用价值:
- TitanFuzz可扩展至其他领域(如编译器、数据库系统),推动LLMs在软件测试中的普适应用。
- 检测到的安全漏洞(如越界读取)为深度学习库的可靠性改进提供了关键依据。
研究亮点
方法创新:
- 结合生成式与填充式LLMs,突破传统模糊测试的输入生成限制。
- 引入进化算法与静态分析,优化种子多样性。
结果突破:
- 在未微调LLMs的情况下,实现显著高于传统方法的覆盖率和错误检测能力。
- 发现多个高优先级错误,部分已被开发者修复(如PyTorch的NaN处理问题)。
其他价值
- 资源效率:Codex生成种子的时间成本较高(0.82秒/程序),但InCoder的变异阶段效率极佳(0.1秒/程序),平衡了生成质量与速度。
- 可复现性:开源实现和详细实验设置(如温度参数、MAB初始化)为后续研究提供基准。
(注:文档中部分图表和算法细节因篇幅未完全展开,但核心方法与结果已涵盖。)