一.论文主旨:
这篇论文介绍了一种名为 TitanFuzz 的新方法,该方法是首个利用大型语言模型(LLM)生成输入程序,对深度学习(DL)库(如 TensorFlow/PyTorch)进行模糊测试。
解决了局限性:在深度学习(DL)库的模糊测试
领域,直接生成满足输入语言(例如Python)语法/语义
和张量计算的DL API输入/形状约束
的深度学习程序具有挑战性。
深度学习API还可能包含复杂的输入条件约束
,难以在没有人工干预的情况下生成符合条件的输入用例。
补充:背景知识
1.关于模糊测试的定义:
模糊测试是⼀种⾃动化的测试技术,它会根据⼀定的规则⾃动或半⾃动地⽣成随机数据,然后将这些产⽣的随机数据输⼊到动态运⾏的被测程序⼊⼝,同时监控被测程序是否有异常情况出现,如系统崩溃、断⾔失败等来发现软件的缺陷。简而言之,就是一种自动生成测试用例去测试软件有没有漏洞的测试方法。
2.我之前阅读过的模糊测试方法都没有用到人工智能大模型。
从模糊测试到智能模糊测试,其技术发展经历⼀段历程。早期的模糊测试 技术主要以⿊盒模糊测试技术为主,它具备简单、直接、粗暴的特点,但效率⼗分低下。随着⼈⼯智能技术的发展2014年后智能模糊测试进⼊⾼速 发展的阶段,结合机器学习的灰盒模糊测试技术成为了主流。灰盒模糊测试通过源代码插桩等技术捕捉程序控制流信息,并通过控制流信息的变化 来选取优异种⼦进⾏变异,因此测试效果要远⾼于⿊盒模糊测试。
3.模糊测试⽤例的变异,是建⽴在⼀定的规则上的随机(不是大猩猩乱点手机屏幕的那种纯随机⾃动化测试),⽤例⽣成有如下两种算法:
二. 论文结论
·TitanFuzz的代码覆盖率分别比传统的模糊测试高30.38%和50.84%。
·TitanFuzz能够检测到65个Bug,其中44个已经被确认为以前未知的Bug。
由此得出结论:
TitanFuzz是一种有潜力的工具,LLM可以直接执行基于生成和基于突变的模糊测试
三.相关知识介绍
1.关于LLM
LLM架构:大型预训练语言模型通常采用Transformer架构,分为编码器和解码器。编码器用于生成输入的编码表示,而解码器用于生成输出令牌。
预训练和下游任务:LLM在数十亿可用文本上进行预训练,然后可以应用于各种自然语言处理(NLP)任务。通过提示工程,LLM可以在不需要专门数据集微调的情况下直接用于特定数据集的下游任务,以提高性能。
LLM类型:根据模型架构和预训练任务,LLM可以分为三种类型:
(1)仅解码器模型(使用解码器预测下一个 token 的概率,可以以自回归方式执行自动补全)
·特点:解码器被用于生成输出令牌,通常根据所有先前的令牌来预测下一个令牌的概率。
·应用:这些模型适用于生成式任务,例如在给定左侧上下文(例如一些起始代码或自然语言描述)的情况下自动完成完整的代码片段。它们可以执行自动补全,生成连贯的文本或代码。
(2)仅编码器模型(通过 Masked Language