关键词:
软件测试
深度学习模型
模糊测试
摘要:
基于深度学习模型的智能软件具有强大的推理与分析能力,被广泛应用在自然语言处理、图像识别、交通等多个领域。由于数据集的限制以及人工标签数据的依赖,深度学习模型易于出现非预期的行为。近年来,深度学习模型的质量问题受到广泛关注,特别是在安全攸关的领域。模糊测试能够基于有限的数据自动产生大量的测试用例且具有较强的故障揭示能力,深度学习模型备受关注。模糊测试应用在深度学习模型时,从测试用例集中随机地选择部分测试数据来构建种子队列,构建的种子队列的多样性难以保障,限制了深度学习模型的充分测试。此外,人们侧重提出各种变异策略和覆盖标准,忽略了种子选择与变异策略选择对模糊测试产生对抗输入和探索模型内部状态效率的影响。最后,深度学习模型的决策逻辑难以理解、输出概率化的特性,使得模糊测试结果难以判定。本文旨在研究面向深度学习模型的高效模糊测试技术,从种子队列构建、种子与变异策略选择、测试结果判定三个方面探索模糊测试技术的优化策略。主要研究工作包括:1)基于均匀分布的多样性种子队列构建方法。针对面向深度学习模型模糊测试的种子队列缺乏多样性的问题,提出了多样性驱动的种子队列构建框架DFuzzer,从测试用例集中迭代地选择与种子队列中种子差异最大的测试用例。为量化深度学习模型复杂测试用例间的差异,设计基于信息论的差异度量标准(IBDM)和基于特征的差异度量标准(FBDM)。利用三个数据集和七个模型评估并比较DFuzzer对五个模糊测试技术的改进程度。实验结果表明:DFuzzer能够在时间开销小的情况下,产生的对抗输入数量平均是基准技术的1.26倍,实现的神经元覆盖率/TFC覆盖率比基准技术平均提高了 1.60%/4.21。2)基于反馈的自适应种子与变异策略选择方法。针对已有种子与变异策略选择策略没有充分利用测试过程信息从而导致故障检测效率低的问题,提出了一种基于反馈的自适应种子与变异策略选择框架DeepController。DeepController将软件控制论引入模糊测试中,利用测试过程信息(包括覆盖信息、测试结果、种子使用次数和种子加入种子队列的时间),选择具有较高概率揭示故障或者触发新覆盖的种子与变异策略。基于DeepController框架,设计了自适应的种子选择算法AS2和自适应的变异策略选择算法ASM2。利用三个常用数据集和八个不同规模的模型评估DeepController在产生对抗输入和探索模型内部状态方面的有效性、效率和性能,并与深度学习模型测试技术进行了比较。实验结果表明:DeepController产生的对抗输入数目平均是基准技术的2.16倍,实现的神经元覆盖率比基准技术平均提升了 2.45%;在时间开销方面,DeeController优于大多数基准技术,略高于耗时最短的基准技术。3)提出基于蜕变关系的高效的模糊测试结果判定方法。针对面向深度学习模型的模糊测试缺乏高效的测试结果判定机制问题,提出基于蜕变关系的模糊测试结果判定框架DiffFuzzer。DiffFuzzer利用蜕变关系生成测试用例与判定测试结果,并且利用测试过程信息来选择高效种子与蜕变关系。在此框架下,进一步设计基于差异驱动的蜕变关系选择算法DDMR,并集成了 AS2种子选择算法。利用三个常用的数据集和八个模型评估DiffFuzzer在产生对抗输入和探索模型内部状态方面的有效性、效率和性能,并与代表性的深度学习模型模糊测试技术进行了比较。实验结果表明:DiffFuzzer产生的对抗输入数目平均是基准技术的2.11倍,实现的神经元覆盖率比基准技术平均提升了 2.93%;在时间开销方面,DiffFuzzer优于所有的基准技术。4)开发面向深度学习模型的模糊测试支持工具EFuzzer。EFuzzer具有种子队列构建、种子选择、变异策略选择/蜕变关系选择、测试用例生成、测试结果判定和覆盖分析等功能。此外,还集成了常用的面向深度学习模型的模糊测试技术、覆盖标准和变异策略/蜕变关系。